diff --git a/YogaKit/Source/YGLayout.m b/YogaKit/Source/YGLayout.m index 1f21f254..1627a74f 100644 --- a/YogaKit/Source/YGLayout.m +++ b/YogaKit/Source/YGLayout.m @@ -285,6 +285,10 @@ YG_VALUE_PROPERTY(maxWidth, MaxWidth) YG_VALUE_PROPERTY(maxHeight, MaxHeight) YG_PROPERTY(CGFloat, aspectRatio, AspectRatio) +YG_EDGE_PROPERTY(columnGap, ColumnGap, Gap, YGGutterColumn) +YG_EDGE_PROPERTY(rowGap, RowGap, Gap, YGGutterRow) +YG_EDGE_PROPERTY(gap, Gap, Gap, YGGutterAll) + #pragma mark - Layout and Sizing - (YGDirection)resolvedDirection { diff --git a/csharp/Facebook.Yoga/Native.cs b/csharp/Facebook.Yoga/Native.cs index 47bc7f18..1bdc24f0 100644 --- a/csharp/Facebook.Yoga/Native.cs +++ b/csharp/Facebook.Yoga/Native.cs @@ -293,6 +293,12 @@ namespace Facebook.Yoga [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)] public static extern float YGNodeStyleGetAspectRatio(YGNodeHandle node); + [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)] + public static extern void YGNodeStyleSetGap(YGNodeHandle node, YogaGutter gutter, float gapLength); + + [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)] + public static extern float YGNodeStyleGetGap(YGNodeHandle node, YogaGutter gutter); + #endregion #region YG_NODE_STYLE_EDGE_PROPERTY diff --git a/csharp/Facebook.Yoga/YogaNode.cs b/csharp/Facebook.Yoga/YogaNode.cs index e7439d38..7a24df76 100644 --- a/csharp/Facebook.Yoga/YogaNode.cs +++ b/csharp/Facebook.Yoga/YogaNode.cs @@ -432,6 +432,45 @@ namespace Facebook.Yoga } } + public float Gap + { + get + { + return Native.YGNodeStyleGetGap(_ygNode, YogaGutter.All); + } + + set + { + Native.YGNodeStyleSetGap(_ygNode, YogaGutter.All, value); + } + } + + public float ColumnGap + { + get + { + return Native.YGNodeStyleGetGap(_ygNode, YogaGutter.Column); + } + + set + { + Native.YGNodeStyleSetGap(_ygNode, YogaGutter.Column, value); + } + } + + public float RowGap + { + get + { + return Native.YGNodeStyleGetGap(_ygNode, YogaGutter.Row); + } + + set + { + Native.YGNodeStyleSetGap(_ygNode, YogaGutter.Row, value); + } + } + public float LayoutX { get diff --git a/java/com/facebook/yoga/YogaNative.java b/java/com/facebook/yoga/YogaNative.java index 1aca4821..f6c53c3b 100644 --- a/java/com/facebook/yoga/YogaNative.java +++ b/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/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index cbba2f55..1f19ec5b 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -188,6 +188,10 @@ public abstract class YogaNode implements YogaProps { 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/java/com/facebook/yoga/YogaNodeJNIBase.java b/java/com/facebook/yoga/YogaNodeJNIBase.java index 87517b63..85aebb3f 100644 --- a/java/com/facebook/yoga/YogaNodeJNIBase.java +++ b/java/com/facebook/yoga/YogaNodeJNIBase.java @@ -725,4 +725,14 @@ public abstract class YogaNodeJNIBase extends YogaNode implements Cloneable { } 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/java/jni/YGJNIVanilla.cpp b/java/jni/YGJNIVanilla.cpp index 8963814a..e531681c 100644 --- a/java/jni/YGJNIVanilla.cpp +++ b/java/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}, diff --git a/javascript/sources/Node.cc b/javascript/sources/Node.cc index bf7fef7f..9fc631b7 100644 --- a/javascript/sources/Node.cc +++ b/javascript/sources/Node.cc @@ -232,6 +232,10 @@ void Node::setIsReferenceBaseline(bool isReferenceBaseline) { YGNodeSetIsReferenceBaseline(m_node, isReferenceBaseline); } +void Node::setGap(int gutter, double gapLength) { + YGNodeStyleSetGap(m_node, static_cast(gutter), gapLength); +} + int Node::getPositionType(void) const { return YGNodeStyleGetPositionType(m_node); } @@ -327,6 +331,11 @@ Value Node::getPadding(int edge) const { YGNodeStyleGetPadding(m_node, static_cast(edge))); } +Value Node::getGap(int gutter, ) { + return Value::fromYGValue( + YGNodeStyleGetGap(m_node, static_cast(gutter))); +} + bool Node::isReferenceBaseline() { return YGNodeIsReferenceBaseline(m_node); } diff --git a/javascript/sources/Node.hh b/javascript/sources/Node.hh index debf2eee..1a984033 100644 --- a/javascript/sources/Node.hh +++ b/javascript/sources/Node.hh @@ -95,6 +95,8 @@ public: // Style setters void setPadding(int edge, double padding); void setPaddingPercent(int edge, double padding); + void setGap(int gutter, double gapLength); + public: // Style getters int getPositionType(void) const; Value getPosition(int edge) const; @@ -130,6 +132,8 @@ public: // Style getters Value getPadding(int edge) const; + Value getGap(int gutter); + public: // Tree hierarchy mutators void insertChild(Node* child, unsigned index); void removeChild(Node* child); diff --git a/javascript/sources/entry-browser.js b/javascript/sources/entry-browser.js index 5007b9f2..118e95fc 100644 --- a/javascript/sources/entry-browser.js +++ b/javascript/sources/entry-browser.js @@ -43,6 +43,7 @@ export type { Yoga$FlexDirection, Yoga$Direction, Yoga$Wrap, + Yoga$Gutter, Yoga$Edge, Yoga$Display, Yoga$Unit, diff --git a/javascript/sources/entry-common.js b/javascript/sources/entry-common.js index 28109938..7a0a753f 100644 --- a/javascript/sources/entry-common.js +++ b/javascript/sources/entry-common.js @@ -15,6 +15,7 @@ import type { Yoga$Wrap, Yoga$Align, Yoga$FlexDirection, + Yoga$Gap, Yoga$Direction, Yoga$PositionType, Yoga$Overflow, @@ -155,6 +156,7 @@ export type Yoga$Node = { getFlexWrap(): Yoga$Wrap, getHeight(): Value, getJustifyContent(): Yoga$Justify, + getGap(gutter: Yoga$Gutter): Value, getMargin(edge: Yoga$Edge): Value, getMaxHeight(): Value, getMaxWidth(): Value, @@ -189,6 +191,7 @@ export type Yoga$Node = { setHeightAuto(): void, setHeightPercent(height: number): void, setJustifyContent(justifyContent: Yoga$Justify): void, + setGap(gutter: Yoga$Gutter, gapLength: number): Value, setMargin(edge: Yoga$Edge, margin: number): void, setMarginAuto(edge: Yoga$Edge): void, setMarginPercent(edge: Yoga$Edge, margin: number): void, diff --git a/javascript/sources/entry-node.js b/javascript/sources/entry-node.js index c9243be6..f70b6c0c 100644 --- a/javascript/sources/entry-node.js +++ b/javascript/sources/entry-node.js @@ -18,6 +18,7 @@ export type { Yoga$FlexDirection, Yoga$Direction, Yoga$Wrap, + Yoga$Gutter, Yoga$Edge, Yoga$Display, Yoga$Unit, diff --git a/javascript/sources/nbind.cc b/javascript/sources/nbind.cc index 42b86eef..385935ba 100644 --- a/javascript/sources/nbind.cc +++ b/javascript/sources/nbind.cc @@ -98,6 +98,8 @@ NBIND_CLASS(Node) { method(setPadding); method(setPaddingPercent); + method(setGap); + method(getPositionType); method(getPosition); @@ -132,6 +134,8 @@ NBIND_CLASS(Node) { method(getPadding); + method(getGap); + method(insertChild); method(removeChild);