From 08729e37d25cc323fa5ef19b453d218b82dd10e0 Mon Sep 17 00:00:00 2001 From: Adam Barth Date: Fri, 23 Oct 2015 09:18:15 -0700 Subject: [PATCH] Fix some fiddly bits in ParagraphBuilder --- sky/engine/core/dart/text.dart | 7 +++++-- sky/engine/core/text/ParagraphBuilder.cpp | 18 ++++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/sky/engine/core/dart/text.dart b/sky/engine/core/dart/text.dart index 4d46d86cdb4..e30c1886462 100644 --- a/sky/engine/core/dart/text.dart +++ b/sky/engine/core/dart/text.dart @@ -134,8 +134,11 @@ Int32List _encodeTextStyle(Color color, } if (decoration != null) { result[0] |= 1 << 2; - for (TextDecoration value in decoration) - result[2] |= 1 << value.index; + for (TextDecoration value in decoration) { + int shift = value.index - 1; + if (shift != 0) + result[2] |= 1 << shift; + } } if (decorationColor != null) { result[0] |= 1 << 3; diff --git a/sky/engine/core/text/ParagraphBuilder.cpp b/sky/engine/core/text/ParagraphBuilder.cpp index f702e3a2920..dbdc3b82322 100644 --- a/sky/engine/core/text/ParagraphBuilder.cpp +++ b/sky/engine/core/text/ParagraphBuilder.cpp @@ -4,9 +4,10 @@ #include "sky/engine/core/text/ParagraphBuilder.h" +#include "sky/engine/core/css/FontSize.h" +#include "sky/engine/core/rendering/RenderInline.h" #include "sky/engine/core/rendering/RenderParagraph.h" #include "sky/engine/core/rendering/RenderText.h" -#include "sky/engine/core/rendering/RenderInline.h" #include "sky/engine/core/rendering/style/RenderStyle.h" namespace blink { @@ -41,7 +42,7 @@ const int kTextDecorationStyleIndex = 4; const int kFontWeightIndex = 5; const int kFontStyleIndex = 6; const int kFontFamilyIndex = 7; -const int kFontDescriptionIndex = 8; +const int kFontSizeIndex = 8; const int kColorMask = 1 << kColorIndex; const int kTextDecorationMask = 1 << kTextDecorationIndex; @@ -50,7 +51,7 @@ const int kTextDecorationStyleMask = 1 << kTextDecorationStyleIndex; const int kFontWeightMask = 1 << kFontWeightIndex; const int kFontStyleMask = 1 << kFontStyleIndex; const int kFontFamilyMask = 1 << kFontFamilyIndex; -const int kFontDescriptionMask = 1 << kFontDescriptionIndex; +const int kFontSizeMask = 1 << kFontSizeIndex; // ParagraphStyle @@ -88,8 +89,10 @@ void ParagraphBuilder::pushStyle(Int32List& encoded, const String& fontFamily, d if (mask & kColorMask) style->setColor(getColorFromARGB(encoded[kColorIndex])); - if (mask & kTextDecorationMask) + if (mask & kTextDecorationMask) { style->setTextDecoration(static_cast(encoded[kTextDecorationIndex])); + style->applyTextDecorations(); + } if (mask & kTextDecorationColorMask) style->setTextDecorationColor(StyleColor(getColorFromARGB(encoded[kTextDecorationColorIndex]))); @@ -97,7 +100,7 @@ void ParagraphBuilder::pushStyle(Int32List& encoded, const String& fontFamily, d if (mask & kTextDecorationStyleMask) style->setTextDecorationStyle(static_cast(encoded[kTextDecorationStyleIndex])); - if (mask & (kFontWeightMask | kFontStyleMask | kFontFamilyMask | kFontDescriptionMask)) { + if (mask & (kFontWeightMask | kFontStyleMask | kFontFamilyMask | kFontSizeMask)) { FontDescription fontDescription = style->fontDescription(); if (mask & kFontWeightMask) @@ -112,8 +115,11 @@ void ParagraphBuilder::pushStyle(Int32List& encoded, const String& fontFamily, d fontDescription.setFamily(family); } - if (mask & kFontDescriptionMask) + if (mask & kFontSizeMask) { fontDescription.setSpecifiedSize(fontSize); + fontDescription.setIsAbsoluteSize(true); + fontDescription.setComputedSize(FontSize::getComputedSizeFromSpecifiedSize(true, fontSize)); + } style->setFontDescription(fontDescription); style->font().update(m_fontSelector);