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
committed by Facebook Github Bot
parent 58b5e28e71
commit 6664b816d7
7 changed files with 93 additions and 113 deletions

View File

@@ -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);

View File

@@ -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 <Text/> and <TextInput/>
@@ -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;
}

View File

@@ -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),
};
}
}