diff --git a/ReactAndroid/src/main/java/com/facebook/csslayout/CSSNode.java b/ReactAndroid/src/main/java/com/facebook/csslayout/CSSNode.java index eb263dfb70..59d5b35097 100644 --- a/ReactAndroid/src/main/java/com/facebook/csslayout/CSSNode.java +++ b/ReactAndroid/src/main/java/com/facebook/csslayout/CSSNode.java @@ -303,15 +303,8 @@ public class CSSNode implements CSSNodeAPI { private native float jni_CSSNodeStyleGetMargin(long nativePointer, int edge); @Override - public Spacing getMargin() { - Spacing margin = new Spacing(); - margin.set(Spacing.LEFT, jni_CSSNodeStyleGetMargin(mNativePointer, Spacing.LEFT)); - margin.set(Spacing.TOP, jni_CSSNodeStyleGetMargin(mNativePointer, Spacing.TOP)); - margin.set(Spacing.RIGHT, jni_CSSNodeStyleGetMargin(mNativePointer, Spacing.RIGHT)); - margin.set(Spacing.BOTTOM, jni_CSSNodeStyleGetMargin(mNativePointer, Spacing.BOTTOM)); - margin.set(Spacing.START, jni_CSSNodeStyleGetMargin(mNativePointer, Spacing.START)); - margin.set(Spacing.END, jni_CSSNodeStyleGetMargin(mNativePointer, Spacing.END)); - return margin; + public float getMargin(int spacingType) { + return jni_CSSNodeStyleGetMargin(mNativePointer, spacingType); } private native void jni_CSSNodeStyleSetMargin(long nativePointer, int edge, float margin); @@ -322,15 +315,8 @@ public class CSSNode implements CSSNodeAPI { private native float jni_CSSNodeStyleGetPadding(long nativePointer, int edge); @Override - public Spacing getPadding() { - Spacing padding = new Spacing(); - padding.set(Spacing.LEFT, jni_CSSNodeStyleGetPadding(mNativePointer, Spacing.LEFT)); - padding.set(Spacing.TOP, jni_CSSNodeStyleGetPadding(mNativePointer, Spacing.TOP)); - padding.set(Spacing.RIGHT, jni_CSSNodeStyleGetPadding(mNativePointer, Spacing.RIGHT)); - padding.set(Spacing.BOTTOM, jni_CSSNodeStyleGetPadding(mNativePointer, Spacing.BOTTOM)); - padding.set(Spacing.START, jni_CSSNodeStyleGetPadding(mNativePointer, Spacing.START)); - padding.set(Spacing.END, jni_CSSNodeStyleGetPadding(mNativePointer, Spacing.END)); - return padding; + public float getPadding(int spacingType) { + return jni_CSSNodeStyleGetPadding(mNativePointer, spacingType); } private native void jni_CSSNodeStyleSetPadding(long nativePointer, int edge, float padding); @@ -341,15 +327,8 @@ public class CSSNode implements CSSNodeAPI { private native float jni_CSSNodeStyleGetBorder(long nativePointer, int edge); @Override - public Spacing getBorder() { - Spacing border = new Spacing(); - border.set(Spacing.LEFT, jni_CSSNodeStyleGetBorder(mNativePointer, Spacing.LEFT)); - border.set(Spacing.TOP, jni_CSSNodeStyleGetBorder(mNativePointer, Spacing.TOP)); - border.set(Spacing.RIGHT, jni_CSSNodeStyleGetBorder(mNativePointer, Spacing.RIGHT)); - border.set(Spacing.BOTTOM, jni_CSSNodeStyleGetBorder(mNativePointer, Spacing.BOTTOM)); - border.set(Spacing.START, jni_CSSNodeStyleGetBorder(mNativePointer, Spacing.START)); - border.set(Spacing.END, jni_CSSNodeStyleGetBorder(mNativePointer, Spacing.END)); - return border; + public float getBorder(int spacingType) { + return jni_CSSNodeStyleGetBorder(mNativePointer, spacingType); } private native void jni_CSSNodeStyleSetBorder(long nativePointer, int edge, float border); @@ -360,15 +339,8 @@ public class CSSNode implements CSSNodeAPI { private native float jni_CSSNodeStyleGetPosition(long nativePointer, int edge); @Override - public Spacing getPosition() { - Spacing position = new Spacing(); - position.set(Spacing.LEFT, jni_CSSNodeStyleGetPosition(mNativePointer, Spacing.LEFT)); - position.set(Spacing.TOP, jni_CSSNodeStyleGetPosition(mNativePointer, Spacing.TOP)); - position.set(Spacing.RIGHT, jni_CSSNodeStyleGetPosition(mNativePointer, Spacing.RIGHT)); - position.set(Spacing.BOTTOM, jni_CSSNodeStyleGetPosition(mNativePointer, Spacing.BOTTOM)); - position.set(Spacing.START, jni_CSSNodeStyleGetPosition(mNativePointer, Spacing.START)); - position.set(Spacing.END, jni_CSSNodeStyleGetPosition(mNativePointer, Spacing.END)); - return position; + public float getPosition(int spacingType) { + return jni_CSSNodeStyleGetPosition(mNativePointer, spacingType); } private native void jni_CSSNodeStyleSetPosition(long nativePointer, int edge, float position); diff --git a/ReactAndroid/src/main/java/com/facebook/csslayout/CSSNodeAPI.java b/ReactAndroid/src/main/java/com/facebook/csslayout/CSSNodeAPI.java index 3af4ddb587..95ac57189d 100644 --- a/ReactAndroid/src/main/java/com/facebook/csslayout/CSSNodeAPI.java +++ b/ReactAndroid/src/main/java/com/facebook/csslayout/CSSNodeAPI.java @@ -59,13 +59,13 @@ public interface CSSNodeAPI { void setFlexShrink(float flexShrink); float getFlexBasis(); void setFlexBasis(float flexBasis); - Spacing getMargin(); + float getMargin(int spacingType); void setMargin(int spacingType, float margin); - Spacing getPadding(); + float getPadding(int spacingType); void setPadding(int spacingType, float padding); - Spacing getBorder(); + float getBorder(int spacingType); void setBorder(int spacingType, float border); - Spacing getPosition(); + float getPosition(int spacingType); void setPosition(int spacingType, float position); float getStyleWidth(); void setStyleWidth(float width); diff --git a/ReactAndroid/src/main/java/com/facebook/csslayout/CSSNodeDEPRECATED.java b/ReactAndroid/src/main/java/com/facebook/csslayout/CSSNodeDEPRECATED.java index 7d357cc045..ae7d4476b7 100644 --- a/ReactAndroid/src/main/java/com/facebook/csslayout/CSSNodeDEPRECATED.java +++ b/ReactAndroid/src/main/java/com/facebook/csslayout/CSSNodeDEPRECATED.java @@ -413,8 +413,8 @@ public class CSSNodeDEPRECATED implements CSSNodeAPI { * Get this node's margin, as defined by style + default margin. */ @Override - public Spacing getMargin() { - return style.margin; + public float getMargin(int spacingType) { + return style.margin.get(spacingType); } @Override @@ -428,8 +428,8 @@ public class CSSNodeDEPRECATED implements CSSNodeAPI { * Get this node's padding, as defined by style + default padding. */ @Override - public Spacing getPadding() { - return style.padding; + public float getPadding(int spacingType) { + return style.padding.get(spacingType); } @Override @@ -443,8 +443,8 @@ public class CSSNodeDEPRECATED implements CSSNodeAPI { * Get this node's border, as defined by style. */ @Override - public Spacing getBorder() { - return style.border; + public float getBorder(int spacingType) { + return style.border.get(spacingType); } @Override @@ -458,8 +458,8 @@ public class CSSNodeDEPRECATED implements CSSNodeAPI { * Get this node's position, as defined by style. */ @Override - public Spacing getPosition() { - return style.position; + public float getPosition(int spacingType) { + return style.position.get(spacingType); } @Override diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java index 29876e284a..c5d1ff2d35 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java @@ -36,6 +36,7 @@ import com.facebook.csslayout.CSSMeasureMode; import com.facebook.csslayout.CSSNodeDEPRECATED; import com.facebook.csslayout.CSSNodeAPI; import com.facebook.csslayout.MeasureOutput; +import com.facebook.csslayout.Spacing; import com.facebook.infer.annotation.Assertions; import com.facebook.react.bridge.JSApplicationIllegalArgumentException; import com.facebook.react.bridge.ReadableMap; @@ -585,7 +586,10 @@ public class ReactTextShadowNode extends LayoutShadowNode { mPreparedSpannableText, UNSET, mContainsImages, - getPadding(), + getPadding(Spacing.START), + getPadding(Spacing.TOP), + getPadding(Spacing.END), + getPadding(Spacing.BOTTOM), getTextAlign() ); uiViewOperationQueue.enqueueUpdateExtraData(getReactTag(), reactTextUpdate); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextUpdate.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextUpdate.java index 20cb5d51f5..237be1fe8d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextUpdate.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextUpdate.java @@ -11,8 +11,6 @@ package com.facebook.react.views.text; import android.text.Spannable; -import com.facebook.csslayout.Spacing; - /** * Class that contains the data needed for a text update. * Used by both and @@ -33,15 +31,18 @@ public class ReactTextUpdate { Spannable text, int jsEventCounter, boolean containsImages, - Spacing padding, + float paddingStart, + float paddingTop, + float paddingEnd, + float paddingBottom, int textAlign) { mText = text; mJsEventCounter = jsEventCounter; mContainsImages = containsImages; - mPaddingLeft = padding.get(Spacing.START); - mPaddingTop = padding.get(Spacing.TOP); - mPaddingRight = padding.get(Spacing.END); - mPaddingBottom = padding.get(Spacing.BOTTOM); + mPaddingLeft = paddingStart; + mPaddingTop = paddingTop; + mPaddingRight = paddingEnd; + mPaddingBottom = paddingBottom; mTextAlign = textAlign; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputShadowNode.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputShadowNode.java index 60c62c4504..51dff337ab 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputShadowNode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputShadowNode.java @@ -62,7 +62,12 @@ public class ReactTextInputShadowNode extends ReactTextShadowNode implements setDefaultPadding(Spacing.TOP, mEditText.getPaddingTop()); setDefaultPadding(Spacing.END, mEditText.getPaddingEnd()); setDefaultPadding(Spacing.BOTTOM, mEditText.getPaddingBottom()); - mComputedPadding = spacingToFloatArray(getPadding()); + mComputedPadding = new float[] { + getPadding(Spacing.START), + getPadding(Spacing.TOP), + getPadding(Spacing.END), + getPadding(Spacing.BOTTOM), + }; } @Override @@ -80,12 +85,17 @@ public class ReactTextInputShadowNode extends ReactTextShadowNode implements TypedValue.COMPLEX_UNIT_PX, mFontSize == UNSET ? (int) Math.ceil(PixelUtil.toPixelFromSP(ViewDefaults.FONT_SIZE_SP)) : mFontSize); - mComputedPadding = spacingToFloatArray(getPadding()); + mComputedPadding = new float[] { + getPadding(Spacing.START), + getPadding(Spacing.TOP), + getPadding(Spacing.END), + getPadding(Spacing.BOTTOM), + }; editText.setPadding( - (int) Math.floor(getPadding().get(Spacing.START)), - (int) Math.floor(getPadding().get(Spacing.TOP)), - (int) Math.floor(getPadding().get(Spacing.END)), - (int) Math.floor(getPadding().get(Spacing.BOTTOM))); + (int) Math.floor(getPadding(Spacing.START)), + (int) Math.floor(getPadding(Spacing.TOP)), + (int) Math.floor(getPadding(Spacing.END)), + (int) Math.floor(getPadding(Spacing.BOTTOM))); if (mNumberOfLines != UNSET) { editText.setLines(mNumberOfLines); @@ -115,7 +125,12 @@ public class ReactTextInputShadowNode extends ReactTextShadowNode implements if (mComputedPadding != null) { float[] updatedPadding = mComputedPadding; if (getLayoutDirection() == CSSDirection.RTL) { - updatedPadding = spacingToFloatArrayForRTL(getPadding()); + updatedPadding = new float[] { + getPadding(Spacing.END), + getPadding(Spacing.TOP), + getPadding(Spacing.START), + getPadding(Spacing.BOTTOM), + }; } uiViewOperationQueue.enqueueUpdateExtraData(getReactTag(), updatedPadding); mComputedPadding = null; @@ -128,7 +143,10 @@ public class ReactTextInputShadowNode extends ReactTextShadowNode implements preparedSpannableText, mJsEventCount, mContainsImages, - getPadding(), + getPadding(Spacing.START), + getPadding(Spacing.TOP), + getPadding(Spacing.END), + getPadding(Spacing.BOTTOM), mTextAlign ); uiViewOperationQueue.enqueueUpdateExtraData(getReactTag(), reactTextUpdate); @@ -138,27 +156,12 @@ public class ReactTextInputShadowNode extends ReactTextShadowNode implements @Override public void setPadding(int spacingType, float padding) { super.setPadding(spacingType, padding); - mComputedPadding = spacingToFloatArray(getPadding()); + mComputedPadding = new float[] { + getPadding(Spacing.START), + getPadding(Spacing.TOP), + getPadding(Spacing.END), + getPadding(Spacing.BOTTOM), + }; markUpdated(); } - - private float[] spacingToFloatArray(Spacing spacing) { - return new float[] { - spacing.get(Spacing.START), - spacing.get(Spacing.TOP), - spacing.get(Spacing.END), - spacing.get(Spacing.BOTTOM), - }; - } - - // Since TextInput communicate with native component but not CSSLayout, - // So flip the padding for RTL is necessary when the padding is updated - private float[] spacingToFloatArrayForRTL(Spacing spacing) { - return new float[] { - spacing.get(Spacing.END), - spacing.get(Spacing.TOP), - spacing.get(Spacing.START), - spacing.get(Spacing.BOTTOM), - }; - } } diff --git a/ReactAndroid/src/test/java/com/facebook/react/uimanager/LayoutPropertyApplicatorTest.java b/ReactAndroid/src/test/java/com/facebook/react/uimanager/LayoutPropertyApplicatorTest.java index 5fb385c394..35efdf0b74 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/uimanager/LayoutPropertyApplicatorTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/uimanager/LayoutPropertyApplicatorTest.java @@ -453,39 +453,39 @@ public class LayoutPropertyApplicatorTest { nodes[idx].updateProperties(mapNodes[idx]); } - assertEquals(10.0, nodes[0].getPadding().get(Spacing.START), .0001); - assertEquals(25.0, nodes[0].getPadding().get(Spacing.TOP), .0001); - assertEquals(5.0, nodes[0].getPadding().get(Spacing.END), .0001); - assertEquals(45.0, nodes[0].getPadding().get(Spacing.BOTTOM), .0001); + assertEquals(10.0, nodes[0].getPadding(Spacing.START), .0001); + assertEquals(25.0, nodes[0].getPadding(Spacing.TOP), .0001); + assertEquals(5.0, nodes[0].getPadding(Spacing.END), .0001); + assertEquals(45.0, nodes[0].getPadding(Spacing.BOTTOM), .0001); - assertEquals(10.0, nodes[1].getPadding().get(Spacing.START), .0001); - assertEquals(5.0, nodes[1].getPadding().get(Spacing.TOP), .0001); - assertEquals(10.0, nodes[1].getPadding().get(Spacing.END), .0001); - assertEquals(10.0, nodes[1].getPadding().get(Spacing.BOTTOM), .0001); + assertEquals(10.0, nodes[1].getPadding(Spacing.START), .0001); + assertEquals(5.0, nodes[1].getPadding(Spacing.TOP), .0001); + assertEquals(10.0, nodes[1].getPadding(Spacing.END), .0001); + assertEquals(10.0, nodes[1].getPadding(Spacing.BOTTOM), .0001); - assertEquals(10.0, nodes[2].getPadding().get(Spacing.START), .0001); - assertEquals(5.0, nodes[2].getPadding().get(Spacing.TOP), .0001); - assertEquals(35.0, nodes[2].getPadding().get(Spacing.END), .0001); - assertEquals(5.0, nodes[2].getPadding().get(Spacing.BOTTOM), .0001); + assertEquals(10.0, nodes[2].getPadding(Spacing.START), .0001); + assertEquals(5.0, nodes[2].getPadding(Spacing.TOP), .0001); + assertEquals(35.0, nodes[2].getPadding(Spacing.END), .0001); + assertEquals(5.0, nodes[2].getPadding(Spacing.BOTTOM), .0001); - assertEquals(5.0, nodes[3].getPadding().get(Spacing.START), .0001); - assertEquals(25.0, nodes[3].getPadding().get(Spacing.TOP), .0001); - assertEquals(5.0, nodes[3].getPadding().get(Spacing.END), .0001); - assertEquals(10.0, nodes[3].getPadding().get(Spacing.BOTTOM), .0001); + assertEquals(5.0, nodes[3].getPadding(Spacing.START), .0001); + assertEquals(25.0, nodes[3].getPadding(Spacing.TOP), .0001); + assertEquals(5.0, nodes[3].getPadding(Spacing.END), .0001); + assertEquals(10.0, nodes[3].getPadding(Spacing.BOTTOM), .0001); - assertEquals(15.0, nodes[4].getPadding().get(Spacing.START), .0001); - assertEquals(5.0, nodes[4].getPadding().get(Spacing.TOP), .0001); - assertEquals(35.0, nodes[4].getPadding().get(Spacing.END), .0001); - assertEquals(45.0, nodes[4].getPadding().get(Spacing.BOTTOM), .0001); + assertEquals(15.0, nodes[4].getPadding(Spacing.START), .0001); + assertEquals(5.0, nodes[4].getPadding(Spacing.TOP), .0001); + assertEquals(35.0, nodes[4].getPadding(Spacing.END), .0001); + assertEquals(45.0, nodes[4].getPadding(Spacing.BOTTOM), .0001); - assertEquals(15.0, nodes[5].getPadding().get(Spacing.START), .0001); - assertEquals(7.0, nodes[5].getPadding().get(Spacing.TOP), .0001); - assertEquals(10.0, nodes[5].getPadding().get(Spacing.END), .0001); - assertEquals(7.0, nodes[5].getPadding().get(Spacing.BOTTOM), .0001); + assertEquals(15.0, nodes[5].getPadding(Spacing.START), .0001); + assertEquals(7.0, nodes[5].getPadding(Spacing.TOP), .0001); + assertEquals(10.0, nodes[5].getPadding(Spacing.END), .0001); + assertEquals(7.0, nodes[5].getPadding(Spacing.BOTTOM), .0001); - assertEquals(15.0, nodes[6].getPadding().get(Spacing.START), .0001); - assertEquals(25.0, nodes[6].getPadding().get(Spacing.TOP), .0001); - assertEquals(35.0, nodes[6].getPadding().get(Spacing.END), .0001); - assertEquals(45.0, nodes[6].getPadding().get(Spacing.BOTTOM), .0001); + assertEquals(15.0, nodes[6].getPadding(Spacing.START), .0001); + assertEquals(25.0, nodes[6].getPadding(Spacing.TOP), .0001); + assertEquals(35.0, nodes[6].getPadding(Spacing.END), .0001); + assertEquals(45.0, nodes[6].getPadding(Spacing.BOTTOM), .0001); } }