From 666ede086ca9ab2f0dc3cbbf0e625af941890946 Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Thu, 13 Oct 2022 08:18:49 -0700 Subject: [PATCH] Implement method bindings for gap/row-gap/column-gap Summary: This adds method bindings for `YGNodeStyleSetGap` and `YGNodeStyleGetGap`. Changelog: [Genral][Added] - Implement method bindings for yoga gap/row-gap/column-gap Reviewed By: yungsters Differential Revision: D39922411 fbshipit-source-id: 6cbb4d352203d2ec92df162c3f2f2efd02bd9568 --- .../java/com/facebook/yoga/YogaNative.java | 4 +++- .../main/java/com/facebook/yoga/YogaNode.java | 4 ++++ .../com/facebook/yoga/YogaNodeJNIBase.java | 10 ++++++++ .../first-party/yogajni/jni/YGJNIVanilla.cpp | 23 +++++++++++++++++++ 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNative.java b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNative.java index 1aca48216461a9..f6c53c3b64fc07 100644 --- a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNative.java +++ b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNative.java @@ -15,7 +15,7 @@ public class YogaNative { static { SoLoader.loadLibrary("yoga"); } - + // JNI methods that use Vanilla JNI // YGConfig related static native long jni_YGConfigNewJNI(); @@ -108,6 +108,8 @@ 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 void jni_YGNodeStyleSetGapJNI(long nativePointer, int gutter, float gapLength); static native void jni_YGNodeSetHasMeasureFuncJNI(long nativePointer, boolean hasMeasureFunc); static native void jni_YGNodeSetHasBaselineFuncJNI(long nativePointer, boolean hasMeasureFunc); static native void jni_YGNodePrintJNI(long nativePointer); diff --git a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.java b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.java index cbba2f55e0427b..1f19ec5bbdeea3 100644 --- a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.java +++ b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.java @@ -188,6 +188,10 @@ public interface Inputs { public abstract void setAspectRatio(float aspectRatio); + public abstract float getGap(YogaGutter gutter); + + public abstract void setGap(YogaGutter gutter, float gapLength); + public abstract float getLayoutX(); public abstract float getLayoutY(); diff --git a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java index 87517b63ccf00e..85aebb3fcc212f 100644 --- a/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -725,4 +725,14 @@ public void markLayoutSeen() { } mHasNewLayout = false; } + + @Override + public float getGap(YogaGutter gutter) { + return YogaNative.jni_YGNodeStyleGetGapJNI(mNativePointer, gutter.intValue()); + } + + @Override + public void setGap(YogaGutter gutter, float gapLength) { + YogaNative.jni_YGNodeStyleSetGapJNI(mNativePointer, gutter.intValue(), gapLength); + } } diff --git a/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNIVanilla.cpp b/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNIVanilla.cpp index 8963814ab74709..e531681cda9645 100644 --- a/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNIVanilla.cpp +++ b/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNIVanilla.cpp @@ -734,6 +734,27 @@ static jlong jni_YGNodeCloneJNI(JNIEnv* env, jobject obj, jlong nativePointer) { return reinterpret_cast(clonedYogaNode); } +static jfloat jni_YGNodeStyleGetGapJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jint gutter) { + return (jfloat) YGNodeStyleGetGap( + _jlong2YGNodeRef(nativePointer), static_cast(gutter)); +} + +static void jni_YGNodeStyleSetGapJNI( + JNIEnv* env, + jobject obj, + jlong nativePointer, + jint gutter, + jfloat gapLength) { + YGNodeStyleSetGap( + _jlong2YGNodeRef(nativePointer), + static_cast(gutter), + static_cast(gapLength)); +} + // Yoga specific properties, not compatible with flexbox specification YG_NODE_JNI_STYLE_PROP(jfloat, float, AspectRatio); @@ -971,6 +992,8 @@ static JNINativeMethod methods[] = { {"jni_YGNodeSetHasMeasureFuncJNI", "(JZ)V", (void*) jni_YGNodeSetHasMeasureFuncJNI}, + {"jni_YGNodeStyleGetGapJNI", "(JI)F", (void*) jni_YGNodeStyleGetGapJNI}, + {"jni_YGNodeStyleSetGapJNI", "(JIF)V", (void*) jni_YGNodeStyleSetGapJNI}, {"jni_YGNodeSetHasBaselineFuncJNI", "(JZ)V", (void*) jni_YGNodeSetHasBaselineFuncJNI},