From c71eacbc37bb1a125cc76f8affe90e086492d79e Mon Sep 17 00:00:00 2001 From: heoblitz Date: Mon, 2 Dec 2024 17:31:48 -0800 Subject: [PATCH] Update YGNodeStyleGetGap to return YGValue Summary: Gap can be styled using both `points` and `percentages`, but YGNodeStyleGetGap currently returns a float value. To maintain alignment with the `padding` and `margin` functionalities and allow it to be handled in bridging code, this function has been updated to return YGValue. X-link: https://github.com/facebook/yoga/pull/1753 Reviewed By: joevilches Differential Revision: D66513236 Pulled By: NickGerleman --- .../react-native/React/Views/RCTShadowView.h | 6 ++--- .../react-native/React/Views/RCTShadowView.m | 26 +++++++++---------- .../java/com/facebook/yoga/YogaNative.java | 2 +- .../main/java/com/facebook/yoga/YogaNode.java | 2 +- .../com/facebook/yoga/YogaNodeJNIBase.java | 4 +-- .../first-party/yogajni/jni/YGJNIVanilla.cpp | 8 +++--- .../ReactCommon/yoga/yoga/YGNodeStyle.cpp | 9 ++----- .../ReactCommon/yoga/yoga/YGNodeStyle.h | 2 +- 8 files changed, 27 insertions(+), 32 deletions(-) diff --git a/packages/react-native/React/Views/RCTShadowView.h b/packages/react-native/React/Views/RCTShadowView.h index 4cf8323be55701..d647796e09dd97 100644 --- a/packages/react-native/React/Views/RCTShadowView.h +++ b/packages/react-native/React/Views/RCTShadowView.h @@ -152,9 +152,9 @@ typedef void (^RCTApplierBlock)(NSDictionary *viewRegistry @property (nonatomic, assign) float flex; @property (nonatomic, assign) float flexGrow; -@property (nonatomic, assign) float rowGap; -@property (nonatomic, assign) float columnGap; -@property (nonatomic, assign) float gap; +@property (nonatomic, assign) YGValue rowGap; +@property (nonatomic, assign) YGValue columnGap; +@property (nonatomic, assign) YGValue gap; @property (nonatomic, assign) float flexShrink; @property (nonatomic, assign) YGValue flexBasis; diff --git a/packages/react-native/React/Views/RCTShadowView.m b/packages/react-native/React/Views/RCTShadowView.m index b893cfe5c26785..6cc94afb6b58fc 100644 --- a/packages/react-native/React/Views/RCTShadowView.m +++ b/packages/react-native/React/Views/RCTShadowView.m @@ -642,19 +642,19 @@ - (YGValue)flexBasis return YGNodeStyleGetFlexBasis(_yogaNode); } -#define RCT_GAP_PROPERTY(setProp, getProp, cssProp, type, gap) \ - -(void)set##setProp : (type)value \ - { \ - YGNodeStyleSet##cssProp(_yogaNode, gap, value); \ - } \ - -(type)getProp \ - { \ - return YGNodeStyleGet##cssProp(_yogaNode, gap); \ - } - -RCT_GAP_PROPERTY(RowGap, rowGap, Gap, float, YGGutterRow); -RCT_GAP_PROPERTY(ColumnGap, columnGap, Gap, float, YGGutterColumn); -RCT_GAP_PROPERTY(Gap, gap, Gap, float, YGGutterAll); +#define RCT_GAP_PROPERTY(setProp, getProp, cssProp, gutter) \ + -(void)set##setProp : (YGValue)value \ + { \ + RCT_SET_YGVALUE(value, YGNodeStyleSetGap, _yogaNode, gutter); \ + } \ + -(YGValue)getProp \ + { \ + return YGNodeStyleGet##cssProp(_yogaNode, gutter); \ + } + +RCT_GAP_PROPERTY(RowGap, rowGap, Gap, YGGutterRow); +RCT_GAP_PROPERTY(ColumnGap, columnGap, Gap, YGGutterColumn); +RCT_GAP_PROPERTY(Gap, gap, Gap, YGGutterAll); #define RCT_STYLE_PROPERTY(setProp, getProp, cssProp, type) \ -(void)set##setProp : (type)value \ diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/yoga/YogaNative.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/yoga/YogaNative.java index 89ef5ef16f536f..97b53faa250758 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/yoga/YogaNative.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/yoga/YogaNative.java @@ -109,7 +109,7 @@ public class YogaNative { static native void jni_YGNodeStyleSetMaxHeightPercentJNI(long nativePointer, float percent); static native float jni_YGNodeStyleGetAspectRatioJNI(long nativePointer); static native void jni_YGNodeStyleSetAspectRatioJNI(long nativePointer, float aspectRatio); - static native float jni_YGNodeStyleGetGapJNI(long nativePointer, int gutter); + static native long jni_YGNodeStyleGetGapJNI(long nativePointer, int gutter); static native void jni_YGNodeStyleSetGapJNI(long nativePointer, int gutter, float gapLength); static native void jni_YGNodeStyleSetGapPercentJNI(long nativePointer, int gutter, float gapLength); static native void jni_YGNodeSetHasMeasureFuncJNI(long nativePointer, boolean hasMeasureFunc); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.java index ba076846759607..09f619e62bb491 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.java @@ -194,7 +194,7 @@ public interface Inputs { public abstract void setAspectRatio(float aspectRatio); - public abstract float getGap(YogaGutter gutter); + public abstract YogaValue getGap(YogaGutter gutter); public abstract void setGap(YogaGutter gutter, float gapLength); diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java index a53fe74af00241..faffae14cabf3a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -727,8 +727,8 @@ public void markLayoutSeen() { } @Override - public float getGap(YogaGutter gutter) { - return YogaNative.jni_YGNodeStyleGetGapJNI(mNativePointer, gutter.intValue()); + public YogaValue getGap(YogaGutter gutter) { + return valueFromLong(YogaNative.jni_YGNodeStyleGetGapJNI(mNativePointer, gutter.intValue())); } @Override diff --git a/packages/react-native/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNIVanilla.cpp b/packages/react-native/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNIVanilla.cpp index 6b8ed14bd694f7..eb5b2daf19e482 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNIVanilla.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNIVanilla.cpp @@ -703,13 +703,13 @@ jni_YGNodeCloneJNI(JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer) { return reinterpret_cast(clonedYogaNode); } -static jfloat jni_YGNodeStyleGetGapJNI( +static jlong jni_YGNodeStyleGetGapJNI( JNIEnv* /*env*/, jobject /*obj*/, jlong nativePointer, jint gutter) { - return (jfloat)YGNodeStyleGetGap( - _jlong2YGNodeRef(nativePointer), static_cast(gutter)); + return YogaValue::asJavaLong(YGNodeStyleGetGap( + _jlong2YGNodeRef(nativePointer), static_cast(gutter))); } static void jni_YGNodeStyleSetGapJNI( @@ -972,7 +972,7 @@ static JNINativeMethod methods[] = { {"jni_YGNodeSetHasMeasureFuncJNI", "(JZ)V", (void*)jni_YGNodeSetHasMeasureFuncJNI}, - {"jni_YGNodeStyleGetGapJNI", "(JI)F", (void*)jni_YGNodeStyleGetGapJNI}, + {"jni_YGNodeStyleGetGapJNI", "(JI)J", (void*)jni_YGNodeStyleGetGapJNI}, {"jni_YGNodeStyleSetGapJNI", "(JIF)V", (void*)jni_YGNodeStyleSetGapJNI}, {"jni_YGNodeStyleSetGapPercentJNI", "(JIF)V", diff --git a/packages/react-native/ReactCommon/yoga/yoga/YGNodeStyle.cpp b/packages/react-native/ReactCommon/yoga/yoga/YGNodeStyle.cpp index 8664b53ec81518..546e571d897b81 100644 --- a/packages/react-native/ReactCommon/yoga/yoga/YGNodeStyle.cpp +++ b/packages/react-native/ReactCommon/yoga/yoga/YGNodeStyle.cpp @@ -278,13 +278,8 @@ void YGNodeStyleSetGapPercent(YGNodeRef node, YGGutter gutter, float percent) { node, scopedEnum(gutter), StyleLength::percent(percent)); } -float YGNodeStyleGetGap(const YGNodeConstRef node, const YGGutter gutter) { - auto gapLength = resolveRef(node)->style().gap(scopedEnum(gutter)); - if (gapLength.isUndefined() || gapLength.isAuto()) { - return YGUndefined; - } - - return static_cast(gapLength).value; +YGValue YGNodeStyleGetGap(const YGNodeConstRef node, const YGGutter gutter) { + return (YGValue)resolveRef(node)->style().gap(scopedEnum(gutter)); } void YGNodeStyleSetAspectRatio(const YGNodeRef node, const float aspectRatio) { diff --git a/packages/react-native/ReactCommon/yoga/yoga/YGNodeStyle.h b/packages/react-native/ReactCommon/yoga/yoga/YGNodeStyle.h index 2746a4a00abb98..242c5fb0885a6f 100644 --- a/packages/react-native/ReactCommon/yoga/yoga/YGNodeStyle.h +++ b/packages/react-native/ReactCommon/yoga/yoga/YGNodeStyle.h @@ -93,7 +93,7 @@ YG_EXPORT void YGNodeStyleSetGap(YGNodeRef node, YGGutter gutter, float gapLength); YG_EXPORT void YGNodeStyleSetGapPercent(YGNodeRef node, YGGutter gutter, float gapLength); -YG_EXPORT float YGNodeStyleGetGap(YGNodeConstRef node, YGGutter gutter); +YG_EXPORT YGValue YGNodeStyleGetGap(YGNodeConstRef node, YGGutter gutter); YG_EXPORT void YGNodeStyleSetBoxSizing(YGNodeRef node, YGBoxSizing boxSizing); YG_EXPORT YGBoxSizing YGNodeStyleGetBoxSizing(YGNodeConstRef node);