Dont create a spacing object for returning margin, padding, border, and position

Differential Revision: D4050773

fbshipit-source-id: 3fd04c27f887a36875e455b5404a17154ac18f91
This commit is contained in:
Emil Sjolander 2016-10-24 10:35:43 -07:00 коммит произвёл Facebook Github Bot
Родитель 58b5e28e71
Коммит 6664b816d7
7 изменённых файлов: 93 добавлений и 113 удалений

Просмотреть файл

@ -303,15 +303,8 @@ public class CSSNode implements CSSNodeAPI<CSSNode> {
private native float jni_CSSNodeStyleGetMargin(long nativePointer, int edge); private native float jni_CSSNodeStyleGetMargin(long nativePointer, int edge);
@Override @Override
public Spacing getMargin() { public float getMargin(int spacingType) {
Spacing margin = new Spacing(); return jni_CSSNodeStyleGetMargin(mNativePointer, spacingType);
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;
} }
private native void jni_CSSNodeStyleSetMargin(long nativePointer, int edge, float margin); private native void jni_CSSNodeStyleSetMargin(long nativePointer, int edge, float margin);
@ -322,15 +315,8 @@ public class CSSNode implements CSSNodeAPI<CSSNode> {
private native float jni_CSSNodeStyleGetPadding(long nativePointer, int edge); private native float jni_CSSNodeStyleGetPadding(long nativePointer, int edge);
@Override @Override
public Spacing getPadding() { public float getPadding(int spacingType) {
Spacing padding = new Spacing(); return jni_CSSNodeStyleGetPadding(mNativePointer, spacingType);
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;
} }
private native void jni_CSSNodeStyleSetPadding(long nativePointer, int edge, float padding); private native void jni_CSSNodeStyleSetPadding(long nativePointer, int edge, float padding);
@ -341,15 +327,8 @@ public class CSSNode implements CSSNodeAPI<CSSNode> {
private native float jni_CSSNodeStyleGetBorder(long nativePointer, int edge); private native float jni_CSSNodeStyleGetBorder(long nativePointer, int edge);
@Override @Override
public Spacing getBorder() { public float getBorder(int spacingType) {
Spacing border = new Spacing(); return jni_CSSNodeStyleGetBorder(mNativePointer, spacingType);
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;
} }
private native void jni_CSSNodeStyleSetBorder(long nativePointer, int edge, float border); private native void jni_CSSNodeStyleSetBorder(long nativePointer, int edge, float border);
@ -360,15 +339,8 @@ public class CSSNode implements CSSNodeAPI<CSSNode> {
private native float jni_CSSNodeStyleGetPosition(long nativePointer, int edge); private native float jni_CSSNodeStyleGetPosition(long nativePointer, int edge);
@Override @Override
public Spacing getPosition() { public float getPosition(int spacingType) {
Spacing position = new Spacing(); return jni_CSSNodeStyleGetPosition(mNativePointer, spacingType);
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;
} }
private native void jni_CSSNodeStyleSetPosition(long nativePointer, int edge, float position); private native void jni_CSSNodeStyleSetPosition(long nativePointer, int edge, float position);

Просмотреть файл

@ -59,13 +59,13 @@ public interface CSSNodeAPI<CSSNodeType extends CSSNodeAPI> {
void setFlexShrink(float flexShrink); void setFlexShrink(float flexShrink);
float getFlexBasis(); float getFlexBasis();
void setFlexBasis(float flexBasis); void setFlexBasis(float flexBasis);
Spacing getMargin(); float getMargin(int spacingType);
void setMargin(int spacingType, float margin); void setMargin(int spacingType, float margin);
Spacing getPadding(); float getPadding(int spacingType);
void setPadding(int spacingType, float padding); void setPadding(int spacingType, float padding);
Spacing getBorder(); float getBorder(int spacingType);
void setBorder(int spacingType, float border); void setBorder(int spacingType, float border);
Spacing getPosition(); float getPosition(int spacingType);
void setPosition(int spacingType, float position); void setPosition(int spacingType, float position);
float getStyleWidth(); float getStyleWidth();
void setStyleWidth(float width); void setStyleWidth(float width);

Просмотреть файл

@ -413,8 +413,8 @@ public class CSSNodeDEPRECATED implements CSSNodeAPI<CSSNodeDEPRECATED> {
* Get this node's margin, as defined by style + default margin. * Get this node's margin, as defined by style + default margin.
*/ */
@Override @Override
public Spacing getMargin() { public float getMargin(int spacingType) {
return style.margin; return style.margin.get(spacingType);
} }
@Override @Override
@ -428,8 +428,8 @@ public class CSSNodeDEPRECATED implements CSSNodeAPI<CSSNodeDEPRECATED> {
* Get this node's padding, as defined by style + default padding. * Get this node's padding, as defined by style + default padding.
*/ */
@Override @Override
public Spacing getPadding() { public float getPadding(int spacingType) {
return style.padding; return style.padding.get(spacingType);
} }
@Override @Override
@ -443,8 +443,8 @@ public class CSSNodeDEPRECATED implements CSSNodeAPI<CSSNodeDEPRECATED> {
* Get this node's border, as defined by style. * Get this node's border, as defined by style.
*/ */
@Override @Override
public Spacing getBorder() { public float getBorder(int spacingType) {
return style.border; return style.border.get(spacingType);
} }
@Override @Override
@ -458,8 +458,8 @@ public class CSSNodeDEPRECATED implements CSSNodeAPI<CSSNodeDEPRECATED> {
* Get this node's position, as defined by style. * Get this node's position, as defined by style.
*/ */
@Override @Override
public Spacing getPosition() { public float getPosition(int spacingType) {
return style.position; return style.position.get(spacingType);
} }
@Override @Override

Просмотреть файл

@ -36,6 +36,7 @@ import com.facebook.csslayout.CSSMeasureMode;
import com.facebook.csslayout.CSSNodeDEPRECATED; import com.facebook.csslayout.CSSNodeDEPRECATED;
import com.facebook.csslayout.CSSNodeAPI; import com.facebook.csslayout.CSSNodeAPI;
import com.facebook.csslayout.MeasureOutput; import com.facebook.csslayout.MeasureOutput;
import com.facebook.csslayout.Spacing;
import com.facebook.infer.annotation.Assertions; import com.facebook.infer.annotation.Assertions;
import com.facebook.react.bridge.JSApplicationIllegalArgumentException; import com.facebook.react.bridge.JSApplicationIllegalArgumentException;
import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableMap;
@ -585,7 +586,10 @@ public class ReactTextShadowNode extends LayoutShadowNode {
mPreparedSpannableText, mPreparedSpannableText,
UNSET, UNSET,
mContainsImages, mContainsImages,
getPadding(), getPadding(Spacing.START),
getPadding(Spacing.TOP),
getPadding(Spacing.END),
getPadding(Spacing.BOTTOM),
getTextAlign() getTextAlign()
); );
uiViewOperationQueue.enqueueUpdateExtraData(getReactTag(), reactTextUpdate); uiViewOperationQueue.enqueueUpdateExtraData(getReactTag(), reactTextUpdate);

Просмотреть файл

@ -11,8 +11,6 @@ package com.facebook.react.views.text;
import android.text.Spannable; import android.text.Spannable;
import com.facebook.csslayout.Spacing;
/** /**
* Class that contains the data needed for a text update. * Class that contains the data needed for a text update.
* Used by both <Text/> and <TextInput/> * Used by both <Text/> and <TextInput/>
@ -33,15 +31,18 @@ public class ReactTextUpdate {
Spannable text, Spannable text,
int jsEventCounter, int jsEventCounter,
boolean containsImages, boolean containsImages,
Spacing padding, float paddingStart,
float paddingTop,
float paddingEnd,
float paddingBottom,
int textAlign) { int textAlign) {
mText = text; mText = text;
mJsEventCounter = jsEventCounter; mJsEventCounter = jsEventCounter;
mContainsImages = containsImages; mContainsImages = containsImages;
mPaddingLeft = padding.get(Spacing.START); mPaddingLeft = paddingStart;
mPaddingTop = padding.get(Spacing.TOP); mPaddingTop = paddingTop;
mPaddingRight = padding.get(Spacing.END); mPaddingRight = paddingEnd;
mPaddingBottom = padding.get(Spacing.BOTTOM); mPaddingBottom = paddingBottom;
mTextAlign = textAlign; mTextAlign = textAlign;
} }

Просмотреть файл

@ -62,7 +62,12 @@ public class ReactTextInputShadowNode extends ReactTextShadowNode implements
setDefaultPadding(Spacing.TOP, mEditText.getPaddingTop()); setDefaultPadding(Spacing.TOP, mEditText.getPaddingTop());
setDefaultPadding(Spacing.END, mEditText.getPaddingEnd()); setDefaultPadding(Spacing.END, mEditText.getPaddingEnd());
setDefaultPadding(Spacing.BOTTOM, mEditText.getPaddingBottom()); setDefaultPadding(Spacing.BOTTOM, mEditText.getPaddingBottom());
mComputedPadding = spacingToFloatArray(getPadding()); mComputedPadding = new float[] {
getPadding(Spacing.START),
getPadding(Spacing.TOP),
getPadding(Spacing.END),
getPadding(Spacing.BOTTOM),
};
} }
@Override @Override
@ -80,12 +85,17 @@ public class ReactTextInputShadowNode extends ReactTextShadowNode implements
TypedValue.COMPLEX_UNIT_PX, TypedValue.COMPLEX_UNIT_PX,
mFontSize == UNSET ? mFontSize == UNSET ?
(int) Math.ceil(PixelUtil.toPixelFromSP(ViewDefaults.FONT_SIZE_SP)) : mFontSize); (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( editText.setPadding(
(int) Math.floor(getPadding().get(Spacing.START)), (int) Math.floor(getPadding(Spacing.START)),
(int) Math.floor(getPadding().get(Spacing.TOP)), (int) Math.floor(getPadding(Spacing.TOP)),
(int) Math.floor(getPadding().get(Spacing.END)), (int) Math.floor(getPadding(Spacing.END)),
(int) Math.floor(getPadding().get(Spacing.BOTTOM))); (int) Math.floor(getPadding(Spacing.BOTTOM)));
if (mNumberOfLines != UNSET) { if (mNumberOfLines != UNSET) {
editText.setLines(mNumberOfLines); editText.setLines(mNumberOfLines);
@ -115,7 +125,12 @@ public class ReactTextInputShadowNode extends ReactTextShadowNode implements
if (mComputedPadding != null) { if (mComputedPadding != null) {
float[] updatedPadding = mComputedPadding; float[] updatedPadding = mComputedPadding;
if (getLayoutDirection() == CSSDirection.RTL) { 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); uiViewOperationQueue.enqueueUpdateExtraData(getReactTag(), updatedPadding);
mComputedPadding = null; mComputedPadding = null;
@ -128,7 +143,10 @@ public class ReactTextInputShadowNode extends ReactTextShadowNode implements
preparedSpannableText, preparedSpannableText,
mJsEventCount, mJsEventCount,
mContainsImages, mContainsImages,
getPadding(), getPadding(Spacing.START),
getPadding(Spacing.TOP),
getPadding(Spacing.END),
getPadding(Spacing.BOTTOM),
mTextAlign mTextAlign
); );
uiViewOperationQueue.enqueueUpdateExtraData(getReactTag(), reactTextUpdate); uiViewOperationQueue.enqueueUpdateExtraData(getReactTag(), reactTextUpdate);
@ -138,27 +156,12 @@ public class ReactTextInputShadowNode extends ReactTextShadowNode implements
@Override @Override
public void setPadding(int spacingType, float padding) { public void setPadding(int spacingType, float padding) {
super.setPadding(spacingType, padding); super.setPadding(spacingType, padding);
mComputedPadding = spacingToFloatArray(getPadding()); mComputedPadding = new float[] {
getPadding(Spacing.START),
getPadding(Spacing.TOP),
getPadding(Spacing.END),
getPadding(Spacing.BOTTOM),
};
markUpdated(); 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),
};
}
} }

Просмотреть файл

@ -453,39 +453,39 @@ public class LayoutPropertyApplicatorTest {
nodes[idx].updateProperties(mapNodes[idx]); nodes[idx].updateProperties(mapNodes[idx]);
} }
assertEquals(10.0, nodes[0].getPadding().get(Spacing.START), .0001); assertEquals(10.0, nodes[0].getPadding(Spacing.START), .0001);
assertEquals(25.0, nodes[0].getPadding().get(Spacing.TOP), .0001); assertEquals(25.0, nodes[0].getPadding(Spacing.TOP), .0001);
assertEquals(5.0, nodes[0].getPadding().get(Spacing.END), .0001); assertEquals(5.0, nodes[0].getPadding(Spacing.END), .0001);
assertEquals(45.0, nodes[0].getPadding().get(Spacing.BOTTOM), .0001); assertEquals(45.0, nodes[0].getPadding(Spacing.BOTTOM), .0001);
assertEquals(10.0, nodes[1].getPadding().get(Spacing.START), .0001); assertEquals(10.0, nodes[1].getPadding(Spacing.START), .0001);
assertEquals(5.0, nodes[1].getPadding().get(Spacing.TOP), .0001); assertEquals(5.0, nodes[1].getPadding(Spacing.TOP), .0001);
assertEquals(10.0, nodes[1].getPadding().get(Spacing.END), .0001); assertEquals(10.0, nodes[1].getPadding(Spacing.END), .0001);
assertEquals(10.0, nodes[1].getPadding().get(Spacing.BOTTOM), .0001); assertEquals(10.0, nodes[1].getPadding(Spacing.BOTTOM), .0001);
assertEquals(10.0, nodes[2].getPadding().get(Spacing.START), .0001); assertEquals(10.0, nodes[2].getPadding(Spacing.START), .0001);
assertEquals(5.0, nodes[2].getPadding().get(Spacing.TOP), .0001); assertEquals(5.0, nodes[2].getPadding(Spacing.TOP), .0001);
assertEquals(35.0, nodes[2].getPadding().get(Spacing.END), .0001); assertEquals(35.0, nodes[2].getPadding(Spacing.END), .0001);
assertEquals(5.0, nodes[2].getPadding().get(Spacing.BOTTOM), .0001); assertEquals(5.0, nodes[2].getPadding(Spacing.BOTTOM), .0001);
assertEquals(5.0, nodes[3].getPadding().get(Spacing.START), .0001); assertEquals(5.0, nodes[3].getPadding(Spacing.START), .0001);
assertEquals(25.0, nodes[3].getPadding().get(Spacing.TOP), .0001); assertEquals(25.0, nodes[3].getPadding(Spacing.TOP), .0001);
assertEquals(5.0, nodes[3].getPadding().get(Spacing.END), .0001); assertEquals(5.0, nodes[3].getPadding(Spacing.END), .0001);
assertEquals(10.0, nodes[3].getPadding().get(Spacing.BOTTOM), .0001); assertEquals(10.0, nodes[3].getPadding(Spacing.BOTTOM), .0001);
assertEquals(15.0, nodes[4].getPadding().get(Spacing.START), .0001); assertEquals(15.0, nodes[4].getPadding(Spacing.START), .0001);
assertEquals(5.0, nodes[4].getPadding().get(Spacing.TOP), .0001); assertEquals(5.0, nodes[4].getPadding(Spacing.TOP), .0001);
assertEquals(35.0, nodes[4].getPadding().get(Spacing.END), .0001); assertEquals(35.0, nodes[4].getPadding(Spacing.END), .0001);
assertEquals(45.0, nodes[4].getPadding().get(Spacing.BOTTOM), .0001); assertEquals(45.0, nodes[4].getPadding(Spacing.BOTTOM), .0001);
assertEquals(15.0, nodes[5].getPadding().get(Spacing.START), .0001); assertEquals(15.0, nodes[5].getPadding(Spacing.START), .0001);
assertEquals(7.0, nodes[5].getPadding().get(Spacing.TOP), .0001); assertEquals(7.0, nodes[5].getPadding(Spacing.TOP), .0001);
assertEquals(10.0, nodes[5].getPadding().get(Spacing.END), .0001); assertEquals(10.0, nodes[5].getPadding(Spacing.END), .0001);
assertEquals(7.0, nodes[5].getPadding().get(Spacing.BOTTOM), .0001); assertEquals(7.0, nodes[5].getPadding(Spacing.BOTTOM), .0001);
assertEquals(15.0, nodes[6].getPadding().get(Spacing.START), .0001); assertEquals(15.0, nodes[6].getPadding(Spacing.START), .0001);
assertEquals(25.0, nodes[6].getPadding().get(Spacing.TOP), .0001); assertEquals(25.0, nodes[6].getPadding(Spacing.TOP), .0001);
assertEquals(35.0, nodes[6].getPadding().get(Spacing.END), .0001); assertEquals(35.0, nodes[6].getPadding(Spacing.END), .0001);
assertEquals(45.0, nodes[6].getPadding().get(Spacing.BOTTOM), .0001); assertEquals(45.0, nodes[6].getPadding(Spacing.BOTTOM), .0001);
} }
} }