diff --git a/Libraries/Text/Text.js b/Libraries/Text/Text.js index 1ecde22773c..8c990d0d5b4 100644 --- a/Libraries/Text/Text.js +++ b/Libraries/Text/Text.js @@ -153,8 +153,6 @@ const Text = React.createClass({ /** * Specifies whether fonts should scale to respect Text Size accessibility setting on iOS. The * default is `true`. - * - * @platform ios */ allowFontScaling: React.PropTypes.bool, /** diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java index 14ce36632c4..f3faee5090f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java @@ -83,6 +83,8 @@ public class ViewProps { public static final String TEXT_ALIGN_VERTICAL = "textAlignVertical"; public static final String TEXT_DECORATION_LINE = "textDecorationLine"; + public static final String ALLOW_FONT_SCALING = "allowFontScaling"; + public static final String BORDER_WIDTH = "borderWidth"; public static final String BORDER_LEFT_WIDTH = "borderLeftWidth"; public static final String BORDER_TOP_WIDTH = "borderTopWidth"; 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 53e2bbca53e..1a38a51f3f0 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 @@ -195,7 +195,9 @@ public class ReactTextShadowNode extends LayoutShadowNode { buildSpannedFromTextCSSNode(textCSSNode, sb, ops); if (textCSSNode.mFontSize == UNSET) { sb.setSpan( - new AbsoluteSizeSpan((int) Math.ceil(PixelUtil.toPixelFromSP(ViewDefaults.FONT_SIZE_SP))), + new AbsoluteSizeSpan(textCSSNode.mAllowFontScaling + ? (int) Math.ceil(PixelUtil.toPixelFromSP(ViewDefaults.FONT_SIZE_SP)) + : (int) Math.ceil(PixelUtil.toPixelFromDIP(ViewDefaults.FONT_SIZE_SP))), 0, sb.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); @@ -305,12 +307,15 @@ public class ReactTextShadowNode extends LayoutShadowNode { private float mLineHeight = Float.NaN; private boolean mIsColorSet = false; + private boolean mAllowFontScaling = true; private int mColor; private boolean mIsBackgroundColorSet = false; private int mBackgroundColor; protected int mNumberOfLines = UNSET; protected int mFontSize = UNSET; + protected float mFontSizeInput = UNSET; + protected int mLineHeightInput = UNSET; protected int mTextAlign = Gravity.NO_GRAVITY; private float mTextShadowOffsetDx = 0; @@ -412,10 +417,26 @@ public class ReactTextShadowNode extends LayoutShadowNode { @ReactProp(name = ViewProps.LINE_HEIGHT, defaultInt = UNSET) public void setLineHeight(int lineHeight) { - mLineHeight = lineHeight == UNSET ? Float.NaN : PixelUtil.toPixelFromSP(lineHeight); + mLineHeightInput = lineHeight; + if (lineHeight == UNSET) { + mLineHeight = Float.NaN; + } else { + mLineHeight = mAllowFontScaling ? + PixelUtil.toPixelFromSP(lineHeight) : PixelUtil.toPixelFromDIP(lineHeight); + } markUpdated(); } + @ReactProp(name = ViewProps.ALLOW_FONT_SCALING, defaultBoolean = true) + public void setAllowFontScaling(boolean allowFontScaling) { + if (allowFontScaling != mAllowFontScaling) { + mAllowFontScaling = allowFontScaling; + setFontSize(mFontSizeInput); + setLineHeight(mLineHeightInput); + markUpdated(); + } + } + @ReactProp(name = ViewProps.TEXT_ALIGN) public void setTextAlign(@Nullable String textAlign) { if (textAlign == null || "auto".equals(textAlign)) { @@ -437,8 +458,10 @@ public class ReactTextShadowNode extends LayoutShadowNode { @ReactProp(name = ViewProps.FONT_SIZE, defaultFloat = UNSET) public void setFontSize(float fontSize) { + mFontSizeInput = fontSize; if (fontSize != UNSET) { - fontSize = (float) Math.ceil(PixelUtil.toPixelFromSP(fontSize)); + fontSize = mAllowFontScaling ? (float) Math.ceil(PixelUtil.toPixelFromSP(fontSize)) + : (float) Math.ceil(PixelUtil.toPixelFromDIP(fontSize)); } mFontSize = (int) fontSize; markUpdated();