Skip to content

Commit

Permalink
feat(android): add two properties for TextVirtualNode
Browse files Browse the repository at this point in the history
  • Loading branch information
shouxianli authored and siguangli committed Jan 4, 2022
1 parent 2657c0e commit 36fe1b4
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,8 @@ public class NodeProps {
public static final String FONT_STYLE = "fontStyle";
public static final String FONT_FAMILY = "fontFamily";
public static final String LINE_HEIGHT = "lineHeight";
public static final String LINE_SPACING_MULTIPLIER = "lineSpacingMultiplier";
public static final String LINE_SPACING_EXTRA = "lineSpacingExtra";
public static final String NUMBER_OF_LINES = "numberOfLines";
public static final String ELLIPSIZE_MODE = "ellipsizeMode";
public static final String ON = "on";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ public class TextVirtualNode extends VirtualNode {
private float mShadowOffsetDy = 0.0f;
private float mShadowRadius = 1.0f;
private float mLineHeight;
protected float mLineSpacingMultiplier = 1.0f;
protected float mLineSpacingExtra;
private float mLetterSpacing;
private float mLastLayoutWidth = 0.0f;
private boolean mHasUnderlineTextDecoration = false;
Expand Down Expand Up @@ -211,6 +213,20 @@ public void lineHeight(int lineHeight) {
markDirty();
}

@SuppressWarnings("unused")
@HippyControllerProps(name = NodeProps.LINE_SPACING_MULTIPLIER, defaultType = HippyControllerProps.NUMBER)
public void lineSpacingMultiplier(float lineSpacingMultiplier) {
mLineSpacingMultiplier = lineSpacingMultiplier;
markDirty();
}

@SuppressWarnings("unused")
@HippyControllerProps(name = NodeProps.LINE_SPACING_EXTRA, defaultType = HippyControllerProps.NUMBER)
public void lineSpacingExtra(float lineSpacingExtra) {
mLineSpacingExtra = PixelUtil.dp2px(lineSpacingExtra);
markDirty();
}

@SuppressWarnings("unused")
@HippyControllerProps(name = NodeProps.NUMBER_OF_LINES, defaultType = HippyControllerProps.NUMBER)
public void setNumberOfLines(int numberOfLines) {
Expand Down Expand Up @@ -316,7 +332,7 @@ private void createSpanOperationImpl(List<SpanOperation> ops, SpannableStringBui
new TextShadowSpan(mShadowOffsetDx, mShadowOffsetDy, mShadowRadius,
mShadowColor)));
}
if (mLineHeight != 0) {
if (mLineHeight != 0 && mLineSpacingMultiplier == 1.0f && mLineSpacingExtra == 0) {
float lh = mLineHeight;
if (mFontAdapter != null && mEnableScale) {
lh = (lh * mFontAdapter.getFontScale());
Expand All @@ -341,6 +357,10 @@ private void createSpanOperationImpl(List<SpanOperation> ops, SpannableStringBui
}
}

protected float getLineSpacingMultiplier() {
return mLineSpacingMultiplier <= 0 ? 1.0f : mLineSpacingMultiplier;
}

public Layout createLayout(final float width, final FlexMeasureMode widthMode) {
if (mTextPaint == null) {
mTextPaint = new TextPaint(TextPaint.ANTI_ALIAS_FLAG);
Expand All @@ -359,7 +379,7 @@ public Layout createLayout(final float width, final FlexMeasureMode widthMode) {
boolean unconstrainedWidth = (widthMode == FlexMeasureMode.UNDEFINED) || width < 0;
if (boring != null && (unconstrainedWidth || boring.width <= width)) {
layout = BoringLayout
.make(mSpanned, mTextPaint, boring.width, mAlignment, 1.f, 0.f, boring, true);
.make(mSpanned, mTextPaint, boring.width, mAlignment, getLineSpacingMultiplier(), mLineSpacingExtra, boring, true);
} else {
if (!unconstrainedWidth && desiredWidth > width) {
desiredWidth = width;
Expand Down Expand Up @@ -388,7 +408,7 @@ private StaticLayout buildStaticLayout(CharSequence source, int width) {
alignment = Layout.Alignment.ALIGN_NORMAL;
}
}
return new StaticLayout(source, mTextPaint, width, alignment, 1.f, 0.f,
return new StaticLayout(source, mTextPaint, width, alignment, getLineSpacingMultiplier(), mLineSpacingExtra,
true);
}

Expand Down

0 comments on commit 36fe1b4

Please sign in to comment.