summaryrefslogtreecommitdiffstats
path: root/ui/gfx/render_text_linux.cc
diff options
context:
space:
mode:
authorasvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-12 22:59:41 +0000
committerasvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-12 22:59:41 +0000
commite232601e029e6222029c8161b2b26687b192839f (patch)
tree5ae7682c07ac1e70432917f708eda1287912a3fb /ui/gfx/render_text_linux.cc
parent2ccd201c85f964bbb504f732cf99ff6820e08a60 (diff)
downloadchromium_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.cc19
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;
}