From bb78ff4514442ea2cb2ef81822071816fd5feaf6 Mon Sep 17 00:00:00 2001 From: Soe Lynn Date: Tue, 16 Apr 2024 23:24:07 -0700 Subject: [PATCH] Expose Gap Percentage to ReactNative Summary: Expose the Gap Percent from Yoga to RN Layer Changelog: [Android][Breaking] Enable flex gap percentage value for RN. Differential Revision: D56160597 --- lib/yoga/src/main/cpp/yoga/YGNodeStyle.cpp | 5 +++++ lib/yoga/src/main/cpp/yoga/YGNodeStyle.h | 1 + .../src/main/java/com/facebook/yoga/YogaNative.java | 1 + .../src/main/java/com/facebook/yoga/YogaNode.java | 2 ++ .../main/java/com/facebook/yoga/YogaNodeJNIBase.java | 5 +++++ lib/yogajni/src/main/cpp/jni/YGJNIVanilla.cpp | 12 ++++++++++++ 6 files changed, 26 insertions(+) diff --git a/lib/yoga/src/main/cpp/yoga/YGNodeStyle.cpp b/lib/yoga/src/main/cpp/yoga/YGNodeStyle.cpp index d14d70930f4..3225eff5e13 100644 --- a/lib/yoga/src/main/cpp/yoga/YGNodeStyle.cpp +++ b/lib/yoga/src/main/cpp/yoga/YGNodeStyle.cpp @@ -267,6 +267,11 @@ void YGNodeStyleSetGap( node, scopedEnum(gutter), value::points(gapLength)); } +void YGNodeStyleSetGapAuto(YGNodeRef node, YGGutter gutter) { + updateStyle<&Style::gap, &Style::setGap>( + node, scopedEnum(gutter), value::ofAuto()); +} + void YGNodeStyleSetGapPercent(YGNodeRef node, YGGutter gutter, float percent) { updateStyle<&Style::gap, &Style::setGap>( node, scopedEnum(gutter), value::percent(percent)); diff --git a/lib/yoga/src/main/cpp/yoga/YGNodeStyle.h b/lib/yoga/src/main/cpp/yoga/YGNodeStyle.h index 2934194f85c..119fe950442 100644 --- a/lib/yoga/src/main/cpp/yoga/YGNodeStyle.h +++ b/lib/yoga/src/main/cpp/yoga/YGNodeStyle.h @@ -89,6 +89,7 @@ YG_EXPORT float YGNodeStyleGetBorder(YGNodeConstRef node, YGEdge edge); YG_EXPORT void YGNodeStyleSetGap(YGNodeRef node, YGGutter gutter, float gapLength); +YG_EXPORT void YGNodeStyleSetGapAuto(YGNodeRef node, YGGutter gutter); YG_EXPORT void YGNodeStyleSetGapPercent(YGNodeRef node, YGGutter gutter, float gapLength); YG_EXPORT float YGNodeStyleGetGap(YGNodeConstRef node, YGGutter gutter); diff --git a/lib/yoga/src/main/java/com/facebook/yoga/YogaNative.java b/lib/yoga/src/main/java/com/facebook/yoga/YogaNative.java index 363e85f5842..f596842382a 100644 --- a/lib/yoga/src/main/java/com/facebook/yoga/YogaNative.java +++ b/lib/yoga/src/main/java/com/facebook/yoga/YogaNative.java @@ -109,6 +109,7 @@ public class YogaNative { static native float 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_YGNodeStyleSetGapAutoJNI(long nativePointer, int gutter); static native void jni_YGNodeSetHasMeasureFuncJNI(long nativePointer, boolean hasMeasureFunc); static native void jni_YGNodeSetHasBaselineFuncJNI(long nativePointer, boolean hasMeasureFunc); static native void jni_YGNodeSetStyleInputsJNI(long nativePointer, float[] styleInputsArray, int size); diff --git a/lib/yoga/src/main/java/com/facebook/yoga/YogaNode.java b/lib/yoga/src/main/java/com/facebook/yoga/YogaNode.java index 97ad8ac2c25..e1e094bf329 100644 --- a/lib/yoga/src/main/java/com/facebook/yoga/YogaNode.java +++ b/lib/yoga/src/main/java/com/facebook/yoga/YogaNode.java @@ -194,6 +194,8 @@ public interface Inputs { public abstract void setGapPercent(YogaGutter gutter, float gapLength); + public abstract void setGapAuto(YogaGutter gutter); + public abstract float getLayoutX(); public abstract float getLayoutY(); diff --git a/lib/yoga/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java b/lib/yoga/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java index 2f3c446c34c..d429510ea44 100644 --- a/lib/yoga/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/lib/yoga/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -726,4 +726,9 @@ public void setGap(YogaGutter gutter, float gapLength) { public void setGapPercent(YogaGutter gutter, float gapLength) { YogaNative.jni_YGNodeStyleSetGapPercentJNI(mNativePointer, gutter.intValue(), gapLength); } + + @Override + public void setGapAuto(YogaGutter gutter) { + YogaNative.jni_YGNodeStyleSetGapAutoJNI(mNativePointer, gutter.intValue()); + } } diff --git a/lib/yogajni/src/main/cpp/jni/YGJNIVanilla.cpp b/lib/yogajni/src/main/cpp/jni/YGJNIVanilla.cpp index 4d017037b46..b90b94601ce 100644 --- a/lib/yogajni/src/main/cpp/jni/YGJNIVanilla.cpp +++ b/lib/yogajni/src/main/cpp/jni/YGJNIVanilla.cpp @@ -727,6 +727,15 @@ static void jni_YGNodeStyleSetGapPercentJNI( static_cast(gapLength)); } +static void jni_YGNodeStyleSetGapAutoJNI( + JNIEnv* /*env*/, + jobject /*obj*/, + jlong nativePointer, + jint gutter) { + YGNodeStyleSetGapAuto( + _jlong2YGNodeRef(nativePointer), static_cast(gutter)); +} + // Yoga specific properties, not compatible with flexbox specification YG_NODE_JNI_STYLE_PROP(jfloat, float, AspectRatio); @@ -959,6 +968,9 @@ static JNINativeMethod methods[] = { {"jni_YGNodeStyleSetGapPercentJNI", "(JIF)V", (void*)jni_YGNodeStyleSetGapPercentJNI}, + {"jni_YGNodeStyleSetGapAutoJNI", + "(JI)V", + (void*)jni_YGNodeStyleSetGapAutoJNI}, {"jni_YGNodeSetHasBaselineFuncJNI", "(JZ)V", (void*)jni_YGNodeSetHasBaselineFuncJNI},