Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Unified Diff: third_party/WebKit/Source/platform/fonts/shaping/ShapeResultBloberizer.cpp

Issue 2845883002: [LayoutNG] Add NG-specific DrawText support to GraphicsContext (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/fonts/shaping/ShapeResultBloberizer.cpp
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/ShapeResultBloberizer.cpp b/third_party/WebKit/Source/platform/fonts/shaping/ShapeResultBloberizer.cpp
index 739cae2dc8c073675a3ba0f0ee3b23d08302e19b..a96adcb29fb268630002a53c65b3932197070266 100644
--- a/third_party/WebKit/Source/platform/fonts/shaping/ShapeResultBloberizer.cpp
+++ b/third_party/WebKit/Source/platform/fonts/shaping/ShapeResultBloberizer.cpp
@@ -147,14 +147,31 @@ void ShapeResultBloberizer::FillTextEmphasisGlyphs(
for (unsigned i = 0; i < word_result->runs_.size(); i++) {
unsigned resolved_offset =
word_offset - (run_info.run.Rtl() ? word_result->NumCharacters() : 0);
- advance +=
- FillTextEmphasisGlyphsForRun(word_result->runs_[i].get(), run_info,
- emphasis_data, advance, resolved_offset);
+ advance += FillTextEmphasisGlyphsForRun(
+ word_result->runs_[i].get(), run_info.run,
+ run_info.run.CharactersLength(), run_info.run.Direction(),
+ run_info.from, run_info.to, emphasis_data, advance, resolved_offset);
}
word_offset += word_result->NumCharacters() * (run_info.run.Rtl() ? -1 : 1);
}
}
+void ShapeResultBloberizer::FillTextEmphasisGlyphs(const StringView& text,
+ TextDirection direction,
+ unsigned from,
+ unsigned to,
+ const GlyphData& emphasis,
+ const ShapeResult* result) {
+ float advance = 0;
+ unsigned offset = 0;
+
+ for (unsigned i = 0; i < result->runs_.size(); i++) {
+ advance += FillTextEmphasisGlyphsForRun(result->runs_[i].get(), text,
+ text.length(), direction, from, to,
+ emphasis, advance, offset);
+ }
+}
+
namespace {
template <typename TextContainerType>
@@ -307,9 +324,14 @@ float ShapeResultBloberizer::FillFastHorizontalGlyphs(
return advance;
}
+template <typename TextContainerType>
float ShapeResultBloberizer::FillTextEmphasisGlyphsForRun(
const ShapeResult::RunInfo* run,
- const TextRunPaintInfo& run_info,
+ const TextContainerType& text,
+ unsigned text_length,
+ TextDirection direction,
+ unsigned from,
+ unsigned to,
const GlyphData& emphasis_data,
float initial_advance,
unsigned run_offset) {
@@ -322,12 +344,6 @@ float ShapeResultBloberizer::FillTextEmphasisGlyphsForRun(
FloatPoint glyph_center =
emphasis_data.font_data->BoundsForGlyph(emphasis_data.glyph).Center();
- const auto& text_run = run_info.run;
- const auto from = run_info.from;
- const auto to = run_info.to;
-
- TextDirection direction = text_run.Direction();
-
// A "cluster" in this context means a cluster as it is used by HarfBuzz:
// The minimal group of characters and corresponding glyphs, that cannot be
// broken down further from a text shaping point of view. A cluster can
@@ -360,10 +376,9 @@ float ShapeResultBloberizer::FillTextEmphasisGlyphsForRun(
cluster_advance += glyph_data.advance;
- if (text_run.Is8Bit()) {
+ if (text.Is8Bit()) {
float glyph_advance_x = glyph_data.advance;
- if (Character::CanReceiveTextEmphasis(
- text_run[current_character_index])) {
+ if (Character::CanReceiveTextEmphasis(text[current_character_index])) {
AddEmphasisMark(*this, emphasis_data, glyph_center,
advance_so_far + glyph_advance_x / 2);
}
@@ -378,8 +393,7 @@ float ShapeResultBloberizer::FillTextEmphasisGlyphsForRun(
: run->GlyphToCharacterIndex(i + 1) + run_offset);
}
graphemes_in_cluster = CountGraphemesInCluster(
- text_run.Characters16(), text_run.CharactersLength(), cluster_start,
- cluster_end);
+ text.Characters16(), text_length, cluster_start, cluster_end);
if (!graphemes_in_cluster || !cluster_advance)
continue;
@@ -387,8 +401,7 @@ float ShapeResultBloberizer::FillTextEmphasisGlyphsForRun(
for (unsigned j = 0; j < graphemes_in_cluster; ++j) {
// Do not put emphasis marks on space, separator, and control
// characters.
- if (Character::CanReceiveTextEmphasis(
- text_run[current_character_index])) {
+ if (Character::CanReceiveTextEmphasis(text[current_character_index])) {
AddEmphasisMark(*this, emphasis_data, glyph_center,
advance_so_far + glyph_advance_x / 2);
}

Powered by Google App Engine
This is Rietveld 408576698