Index: ui/gfx/canvas_skia.cc |
diff --git a/ui/gfx/canvas_skia.cc b/ui/gfx/canvas_skia.cc |
index 428c32a8b590deb49f458eef18dba97d5ee3bbed..6834b17e76ad0231c4dcef6a72d109399a141dea 100644 |
--- a/ui/gfx/canvas_skia.cc |
+++ b/ui/gfx/canvas_skia.cc |
@@ -110,6 +110,15 @@ void UpdateRenderText(const Rect& rect, |
else |
render_text->SetHorizontalAlignment(ALIGN_LEFT); |
+ render_text->SetMultiline((flags & Canvas::MULTI_LINE) != 0); |
msw
2015/04/01 15:07:17
This will break RenderTextMac, which doesn't suppo
|
+ |
+ if (flags & Canvas::TEXT_ALIGN_TOP) |
+ render_text->SetVerticalAlignment(VALIGN_TOP); |
+ else if (flags & Canvas::TEXT_ALIGN_BOTTOM) |
+ render_text->SetVerticalAlignment(VALIGN_BOTTOM); |
+ else |
+ render_text->SetVerticalAlignment(VALIGN_MIDDLE); |
+ |
render_text->set_subpixel_rendering_suppressed( |
(flags & Canvas::NO_SUBPIXEL_RENDERING) != 0); |
@@ -193,75 +202,33 @@ void Canvas::DrawStringRectWithShadows(const base::string16& text, |
scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
render_text->set_shadows(shadows); |
- if (flags & MULTI_LINE) { |
- WordWrapBehavior wrap_behavior = IGNORE_LONG_WORDS; |
msw
2015/04/01 15:07:17
The new code should configure RenderText's word wr
|
- if (flags & CHARACTER_BREAK) |
- wrap_behavior = WRAP_LONG_WORDS; |
- else if (!(flags & NO_ELLIPSIS)) |
- wrap_behavior = ELIDE_LONG_WORDS; |
msw
2015/04/01 15:07:17
RenderTextHarfBuzz doesn't yet support ELIDE_LONG_
|
- |
- std::vector<base::string16> strings; |
- ElideRectangleText(text, font_list, |
- static_cast<float>(text_bounds.width()), |
- text_bounds.height(), wrap_behavior, &strings); |
- |
- for (size_t i = 0; i < strings.size(); i++) { |
- Range range = StripAcceleratorChars(flags, &strings[i]); |
- UpdateRenderText(rect, strings[i], font_list, flags, color, |
- render_text.get()); |
- int line_padding = 0; |
- if (line_height > 0) |
- line_padding = line_height - render_text->GetStringSize().height(); |
- else |
- line_height = render_text->GetStringSize().height(); |
- |
- // TODO(msw|asvitkine): Center Windows multi-line text: crbug.com/107357 |
-#if !defined(OS_WIN) |
- if (i == 0) { |
- // TODO(msw|asvitkine): Support multi-line text with varied heights. |
- const int text_height = strings.size() * line_height - line_padding; |
- rect += Vector2d(0, (text_bounds.height() - text_height) / 2); |
- } |
-#endif |
- |
- rect.set_height(line_height - line_padding); |
- |
- if (range.IsValid()) |
- render_text->ApplyStyle(UNDERLINE, true, range); |
- render_text->SetDisplayRect(rect); |
- render_text->Draw(this); |
- rect += Vector2d(0, line_height); |
- } |
- } else { |
- base::string16 adjusted_text = text; |
- Range range = StripAcceleratorChars(flags, &adjusted_text); |
- bool elide_text = ((flags & NO_ELLIPSIS) == 0); |
+ base::string16 adjusted_text = text; |
+ Range range = StripAcceleratorChars(flags, &adjusted_text); |
+ bool elide_text = ((flags & NO_ELLIPSIS) == 0); |
#if defined(OS_LINUX) |
- // On Linux, eliding really means fading the end of the string. But only |
- // for LTR text. RTL text is still elided (on the left) with "...". |
- if (elide_text) { |
- render_text->SetText(adjusted_text); |
- if (render_text->GetDisplayTextDirection() == base::i18n::LEFT_TO_RIGHT) { |
- render_text->SetElideBehavior(FADE_TAIL); |
- elide_text = false; |
- } |
+ // On Linux, eliding really means fading the end of the string. But only |
+ // for LTR text. RTL text is still elided (on the left) with "...". |
+ if (elide_text) { |
+ render_text->SetText(adjusted_text); |
+ if (render_text->GetDisplayTextDirection() == base::i18n::LEFT_TO_RIGHT) { |
+ render_text->SetElideBehavior(FADE_TAIL); |
+ elide_text = false; |
} |
+ } |
#endif |
- if (elide_text) { |
- ElideTextAndAdjustRange(font_list, |
- static_cast<float>(text_bounds.width()), |
- &adjusted_text, &range); |
- } |
- |
- UpdateRenderText(rect, adjusted_text, font_list, flags, color, |
- render_text.get()); |
- if (range.IsValid()) |
- render_text->ApplyStyle(UNDERLINE, true, range); |
- render_text->Draw(this); |
+ if (elide_text) { |
+ ElideTextAndAdjustRange(font_list, static_cast<float>(text_bounds.width()), |
+ &adjusted_text, &range); |
} |
+ UpdateRenderText(rect, adjusted_text, font_list, flags, color, |
+ render_text.get()); |
+ if (range.IsValid()) |
+ render_text->ApplyStyle(UNDERLINE, true, range); |
+ render_text->Draw(this); |
+ |
canvas_->restore(); |
} |