| Index: ui/gfx/render_text_linux.cc
|
| ===================================================================
|
| --- ui/gfx/render_text_linux.cc (revision 141008)
|
| +++ ui/gfx/render_text_linux.cc (working copy)
|
| @@ -70,6 +70,21 @@
|
| return subpixel_enabled;
|
| }
|
|
|
| +// Sets underline metrics on |renderer| according to Pango font |desc|.
|
| +void SetPangoUnderlineMetrics(PangoFontDescription *desc,
|
| + internal::SkiaTextRenderer* renderer) {
|
| + PangoFontMetrics* metrics = GetPangoFontMetrics(desc);
|
| + int thickness = pango_font_metrics_get_underline_thickness(metrics);
|
| + // Pango returns the position "above the baseline". Change its sign to convert
|
| + // it to a vertical offset from the baseline.
|
| + int position = -pango_font_metrics_get_underline_position(metrics);
|
| + pango_quantize_line_geometry(&thickness, &position);
|
| + // Note: pango_quantize_line_geometry() guarantees pixel boundaries, so
|
| + // PANGO_PIXELS() is safe to use.
|
| + renderer->SetUnderlineMetrics(PANGO_PIXELS(thickness),
|
| + PANGO_PIXELS(position));
|
| +}
|
| +
|
| } // namespace
|
|
|
| // TODO(xji): index saved in upper layer is utf16 index. Pango uses utf8 index.
|
| @@ -445,6 +460,8 @@
|
| renderer.SetForegroundColor(styles[style].foreground);
|
| renderer.SetFontFamilyWithStyle(family_name, styles[style].font_style);
|
| renderer.DrawPosText(&pos[start], &glyphs[start], i - start);
|
| + if (styles[style].underline)
|
| + SetPangoUnderlineMetrics(desc.get(), &renderer);
|
| renderer.DrawDecorations(start_x, y, glyph_x - start_x, styles[style]);
|
|
|
| start = i;
|
| @@ -461,6 +478,8 @@
|
| renderer.SetForegroundColor(styles[style].foreground);
|
| renderer.SetFontFamilyWithStyle(family_name, styles[style].font_style);
|
| renderer.DrawPosText(&pos[start], &glyphs[start], glyph_count - start);
|
| + if (styles[style].underline)
|
| + SetPangoUnderlineMetrics(desc.get(), &renderer);
|
| renderer.DrawDecorations(start_x, y, glyph_x - start_x, styles[style]);
|
| x = glyph_x;
|
| }
|
|
|