diff options
author | asvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-12 22:59:41 +0000 |
---|---|---|
committer | asvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-12 22:59:41 +0000 |
commit | e232601e029e6222029c8161b2b26687b192839f (patch) | |
tree | 5ae7682c07ac1e70432917f708eda1287912a3fb /ui/gfx/render_text_linux.cc | |
parent | 2ccd201c85f964bbb504f732cf99ff6820e08a60 (diff) | |
download | chromium_src-e232601e029e6222029c8161b2b26687b192839f.zip chromium_src-e232601e029e6222029c8161b2b26687b192839f.tar.gz chromium_src-e232601e029e6222029c8161b2b26687b192839f.tar.bz2 |
Use pango underline metrics in RenderTextLinux.
Also, changes type of SkiaTextRenderer::SetTextSize() to SkScalar to match the underlying Skia type, which is needed for future RenderTextMac implementation.
BUG=126506, 125664, 105550
TEST=Eyeball underlined text in views_examples' text style example.
Review URL: https://chromiumcodereview.appspot.com/10520017
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@141772 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/gfx/render_text_linux.cc')
-rw-r--r-- | ui/gfx/render_text_linux.cc | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/ui/gfx/render_text_linux.cc b/ui/gfx/render_text_linux.cc index 80e8632..4edf575 100644 --- a/ui/gfx/render_text_linux.cc +++ b/ui/gfx/render_text_linux.cc @@ -70,6 +70,21 @@ bool IsSubpixelRenderingEnabledInFontConfig() { 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 @@ void RenderTextLinux::DrawVisualText(Canvas* canvas) { 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 @@ void RenderTextLinux::DrawVisualText(Canvas* canvas) { 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; } |