From 7935174d48b698edfaeea14bf8ea690106ee56f4 Mon Sep 17 00:00:00 2001 From: David Vacca Date: Tue, 22 Oct 2019 10:16:42 -0700 Subject: [PATCH] Fix negative letterspacing in Fabric android Summary: This diff adds support for negative letterspacing values in Fabric android Changelog: add support fot negative letterspacing values in Fabric android Reviewed By: JoshuaGross Differential Revision: D18054648 fbshipit-source-id: de1b906e6b8c0b021ffdc2e4bdad243075230667 --- .../facebook/react/views/text/TextAttributeProps.java | 10 ++++++++-- .../facebook/react/views/text/TextLayoutManager.java | 4 ++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java index 59654c84e84..c6fc52b22c3 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.java @@ -35,7 +35,6 @@ public class TextAttributeProps { private static final int DEFAULT_TEXT_SHADOW_COLOR = 0x55000000; protected float mLineHeight = Float.NaN; - protected float mLetterSpacing = Float.NaN; protected boolean mIsColorSet = false; protected boolean mAllowFontScaling = true; protected int mColor; @@ -197,10 +196,17 @@ public class TextAttributeProps { public void setLetterSpacing(float letterSpacing) { mLetterSpacingInput = letterSpacing; - mLetterSpacing = + } + + public float getLetterSpacing() { + float letterSpacingPixels = mAllowFontScaling ? PixelUtil.toPixelFromSP(mLetterSpacingInput) : PixelUtil.toPixelFromDIP(mLetterSpacingInput); + + // `letterSpacingPixels` and `mFontSize` are both in pixels, + // yielding an accurate em value. + return letterSpacingPixels / mFontSize; } public void setAllowFontScaling(boolean allowFontScaling) { diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java index 371a42219d0..995856c7102 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java @@ -74,10 +74,10 @@ public class TextLayoutManager { start, end, new ReactBackgroundColorSpan(textAttributes.mBackgroundColor))); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - if (!Float.isNaN(textAttributes.mLetterSpacing)) { + if (!Float.isNaN(textAttributes.getLetterSpacing())) { ops.add( new SetSpanOperation( - start, end, new CustomLetterSpacingSpan(textAttributes.mLetterSpacing))); + start, end, new CustomLetterSpacingSpan(textAttributes.getLetterSpacing()))); } } ops.add(