| Index: ui/gfx/render_text_harfbuzz.cc
|
| diff --git a/ui/gfx/render_text_harfbuzz.cc b/ui/gfx/render_text_harfbuzz.cc
|
| index d0b3dd7200278cbaadb91c086ddda01ec5a6638b..891cf6609cd71a9756fa594fee199c490285eee2 100644
|
| --- a/ui/gfx/render_text_harfbuzz.cc
|
| +++ b/ui/gfx/render_text_harfbuzz.cc
|
| @@ -1590,4 +1590,43 @@ const internal::TextRunList* RenderTextHarfBuzz::GetRunList() const {
|
| return const_cast<RenderTextHarfBuzz*>(this)->GetRunList();
|
| }
|
|
|
| +bool RenderTextHarfBuzz::GetDecoratedTextForRange(
|
| + const Range& range,
|
| + DecoratedText* decorated_text) const {
|
| + if (obscured())
|
| + return false;
|
| +
|
| + decorated_text->attributes.clear();
|
| + decorated_text->text = GetTextFromRange(range);
|
| +
|
| + const internal::TextRunList* run_list = GetRunList();
|
| + for (size_t i = 0; i < run_list->size(); i++) {
|
| + const internal::TextRunHarfBuzz& run = *run_list->runs()[i];
|
| +
|
| + const Range intersection = range.Intersect(run.range);
|
| + DCHECK(!intersection.is_reversed());
|
| +
|
| + if (!intersection.is_empty()) {
|
| + int style = Font::NORMAL;
|
| + if (run.italic)
|
| + style |= Font::ITALIC;
|
| + if (run.underline)
|
| + style |= Font::UNDERLINE;
|
| +
|
| + Font font_with_style = run.font.Derive(0, style, run.weight);
|
| +
|
| + // Get range relative to the decorated text.
|
| + DecoratedText::RangedAttribute attribute(
|
| + gfx::Range(intersection.start() - range.GetMin(),
|
| + intersection.end() - range.GetMin()),
|
| + font_with_style);
|
| +
|
| + attribute.strike = run.strike;
|
| + attribute.diagonal_strike = run.diagonal_strike;
|
| + decorated_text->attributes.push_back(attribute);
|
| + }
|
| + }
|
| + return true;
|
| +}
|
| +
|
| } // namespace gfx
|
|
|