| Index: ui/gfx/canvas_skia.cc
|
| diff --git a/ui/gfx/canvas_skia.cc b/ui/gfx/canvas_skia.cc
|
| index 2d995cfb8664f7367d398250342e4d9bc55f60b3..baed1dd571ba7767fe9f4f58d486bfea104fef4d 100644
|
| --- a/ui/gfx/canvas_skia.cc
|
| +++ b/ui/gfx/canvas_skia.cc
|
| @@ -169,6 +169,7 @@ int AdjustPlatformSpecificFlags(const string16& text, int flags) {
|
| void Canvas::SizeStringInt(const string16& text,
|
| const Font& font,
|
| int* width, int* height,
|
| + int line_height,
|
| int flags) {
|
| DCHECK_GE(*width, 0);
|
| DCHECK_GE(*height, 0);
|
| @@ -201,7 +202,7 @@ void Canvas::SizeStringInt(const string16& text,
|
| render_text->SetText(strings[i]);
|
| const Size string_size = render_text->GetStringSize();
|
| w = std::max(w, string_size.width());
|
| - h += string_size.height();
|
| + h += (i > 0 && line_height > 0) ? line_height : string_size.height();
|
| }
|
| *width = w;
|
| *height = h;
|
| @@ -228,6 +229,7 @@ void Canvas::DrawStringWithShadows(const string16& text,
|
| const Font& font,
|
| SkColor color,
|
| const Rect& text_bounds,
|
| + int line_height,
|
| int flags,
|
| const ShadowValues& shadows) {
|
| if (!IntersectsClipRect(text_bounds))
|
| @@ -268,18 +270,22 @@ void Canvas::DrawStringWithShadows(const string16& text,
|
| for (size_t i = 0; i < strings.size(); i++) {
|
| ui::Range range = StripAcceleratorChars(flags, &strings[i]);
|
| UpdateRenderText(rect, strings[i], font, flags, color, render_text.get());
|
| - const int line_height = render_text->GetStringSize().height();
|
| + 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 aggregate_height = strings.size() * line_height;
|
| - rect += Vector2d(0, (text_bounds.height() - aggregate_height) / 2);
|
| + 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);
|
| + rect.set_height(line_height - line_padding);
|
|
|
| if (range.IsValid())
|
| render_text->ApplyStyle(UNDERLINE, true, range);
|
| @@ -313,10 +319,10 @@ void Canvas::DrawStringWithShadows(const string16& text,
|
| UpdateRenderText(rect, adjusted_text, font, flags, color,
|
| render_text.get());
|
|
|
| - const int line_height = render_text->GetStringSize().height();
|
| + const int text_height = render_text->GetStringSize().height();
|
| // Center the text vertically.
|
| - rect += Vector2d(0, (text_bounds.height() - line_height) / 2);
|
| - rect.set_height(line_height);
|
| + rect += Vector2d(0, (text_bounds.height() - text_height) / 2);
|
| + rect.set_height(text_height);
|
| render_text->SetDisplayRect(rect);
|
| if (range.IsValid())
|
| render_text->ApplyStyle(UNDERLINE, true, range);
|
|
|