提交 e5a42b6b 编写于 作者: A Adam Barth

Add support for letterSpacing

上级 db7f7dac
......@@ -126,7 +126,8 @@ Int32List _encodeTextStyle(Color color,
FontWeight fontWeight,
FontStyle fontStyle,
String fontFamily,
double fontSize) {
double fontSize,
double letterSpacing) {
Int32List result = new Int32List(7);
if (color != null) {
result[0] |= 1 << 1;
......@@ -164,6 +165,10 @@ Int32List _encodeTextStyle(Color color,
result[0] |= 1 << 8;
// Passed separately to native.
}
if (letterSpacing != null) {
result[0] |= 1 << 9;
// Passed separately to native.
}
return result;
}
......@@ -176,7 +181,8 @@ class TextStyle {
FontWeight fontWeight,
FontStyle fontStyle,
String fontFamily,
double fontSize
double fontSize,
double letterSpacing
}) : _encoded = _encodeTextStyle(color,
decoration,
decorationColor,
......@@ -184,13 +190,16 @@ class TextStyle {
fontWeight,
fontStyle,
fontFamily,
fontSize),
fontSize,
letterSpacing),
_fontFamily = fontFamily ?? '',
_fontSize = fontSize;
_fontSize = fontSize,
_letterSpacing = letterSpacing;
final Int32List _encoded;
final String _fontFamily;
final double _fontSize;
final double _letterSpacing;
}
// This encoding must match the C++ version ParagraphBuilder::build.
......@@ -238,7 +247,7 @@ class ParagraphStyle {
class ParagraphBuilder extends _ParagraphBuilder {
void pushStyle(TextStyle style) {
_pushStyle(style._encoded, style._fontFamily, style._fontSize);
_pushStyle(style._encoded, style._fontFamily, style._fontSize, style._letterSpacing);
}
void pop() => _pop();
......
......@@ -43,6 +43,7 @@ const int kFontWeightIndex = 5;
const int kFontStyleIndex = 6;
const int kFontFamilyIndex = 7;
const int kFontSizeIndex = 8;
const int kLetterSpacingIndex = 9;
const int kColorMask = 1 << kColorIndex;
const int kTextDecorationMask = 1 << kTextDecorationIndex;
......@@ -52,6 +53,7 @@ const int kFontWeightMask = 1 << kFontWeightIndex;
const int kFontStyleMask = 1 << kFontStyleIndex;
const int kFontFamilyMask = 1 << kFontFamilyIndex;
const int kFontSizeMask = 1 << kFontSizeIndex;
const int kLetterSpacingMask = 1 << kLetterSpacingIndex;
// ParagraphStyle
......@@ -78,7 +80,7 @@ ParagraphBuilder::~ParagraphBuilder()
{
}
void ParagraphBuilder::pushStyle(Int32List& encoded, const String& fontFamily, double fontSize)
void ParagraphBuilder::pushStyle(Int32List& encoded, const String& fontFamily, double fontSize, double letterSpacing)
{
DCHECK(encoded.num_elements() == 7);
RefPtr<RenderStyle> style = RenderStyle::create();
......@@ -100,7 +102,7 @@ void ParagraphBuilder::pushStyle(Int32List& encoded, const String& fontFamily, d
if (mask & kTextDecorationStyleMask)
style->setTextDecorationStyle(static_cast<TextDecorationStyle>(encoded[kTextDecorationStyleIndex]));
if (mask & (kFontWeightMask | kFontStyleMask | kFontFamilyMask | kFontSizeMask)) {
if (mask & (kFontWeightMask | kFontStyleMask | kFontFamilyMask | kFontSizeMask | kLetterSpacingMask)) {
FontDescription fontDescription = style->fontDescription();
if (mask & kFontWeightMask)
......@@ -115,12 +117,15 @@ void ParagraphBuilder::pushStyle(Int32List& encoded, const String& fontFamily, d
fontDescription.setFamily(family);
}
if (mask & kFontSizeMask) {
if (mask & kFontSizeMask) {
fontDescription.setSpecifiedSize(fontSize);
fontDescription.setIsAbsoluteSize(true);
fontDescription.setComputedSize(FontSize::getComputedSizeFromSpecifiedSize(true, fontSize));
}
if (mask & kLetterSpacingMask)
fontDescription.setLetterSpacing(letterSpacing);
style->setFontDescription(fontDescription);
style->font().update(m_fontSelector);
}
......
......@@ -24,7 +24,7 @@ public:
~ParagraphBuilder() override;
void pushStyle(Int32List& encoded, const String& fontFamily, double fontSize);
void pushStyle(Int32List& encoded, const String& fontFamily, double fontSize, double letterSpacing);
void pop();
void addText(const String& text);
......
......@@ -6,7 +6,7 @@
Constructor(),
PrivateDart,
] interface ParagraphBuilder {
void pushStyle(Int32List encoded, DOMString fontFamily, double fontSize);
void pushStyle(Int32List encoded, DOMString fontFamily, double fontSize, double letterSpacing);
void pop();
void addText(DOMString text);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册