Chromium Code Reviews| Index: app/gfx/font_gtk.cc |
| diff --git a/app/gfx/font_gtk.cc b/app/gfx/font_gtk.cc |
| index 85640b0801021754b304e575f13fbc4624df5b0a..dbd4228c19937384cf76d49457a6bcfedbe9faf8 100644 |
| --- a/app/gfx/font_gtk.cc |
| +++ b/app/gfx/font_gtk.cc |
| @@ -4,6 +4,7 @@ |
| #include "app/gfx/font.h" |
| +#include <algorithm> |
| #include <fontconfig/fontconfig.h> |
| #include <gtk/gtk.h> |
| @@ -48,6 +49,30 @@ static std::wstring FindBestMatchFontFamilyName(const char* family_name) { |
| return font_family; |
| } |
| +// Pango scales font sizes. This returns the scale factor. See |
| +// pango_cairo_context_set_resolution for details. |
| +// NOTE: this isn't entirely accurate, in that Pango also consults the |
| +// FC_PIXEL_SIZE first (see get_font_size in pangocairo-fcfont), but this |
| +// seems to give us the same sizes as used by Pango for all our fonts in both |
| +// English and Thai. |
| +float Font::GetPangoScaleFactor() { |
| + static float scale_factor = 0; |
| + static bool determined_scale = false; |
| + if (!determined_scale) { |
| + PangoContext* context = gdk_pango_context_get(); |
| + scale_factor = pango_cairo_context_get_resolution(context); |
| + // Until we switch to vector graphics, force the max DPI to 96.0. |
| + scale_factor = std::min(scale_factor, 96.f); |
|
Evan Martin
2010/03/19 04:56:56
This is the new code, right?
tony
2010/03/19 04:59:36
Yes.
|
| + g_object_unref(context); |
| + if (scale_factor <= 0) |
| + scale_factor = 1; |
| + else |
| + scale_factor /= 72.0; |
| + determined_scale = true; |
| + } |
| + return scale_factor; |
| +} |
| + |
| // static |
| Font Font::CreateFont(PangoFontDescription* desc) { |
| gint size = pango_font_description_get_size(desc); |
| @@ -105,7 +130,9 @@ PangoFontDescription* Font::PangoFontFromGfxFont( |
| gfx::Font font = gfx_font; // Copy so we can call non-const methods. |
| PangoFontDescription* pfd = pango_font_description_new(); |
| pango_font_description_set_family(pfd, WideToUTF8(font.FontName()).c_str()); |
| - pango_font_description_set_size(pfd, font.FontSize() * PANGO_SCALE); |
| + // Set the absolute size to avoid overflowing UI elements. |
| + pango_font_description_set_absolute_size(pfd, |
| + font.FontSize() * PANGO_SCALE * Font::GetPangoScaleFactor()); |
|
sky
2010/03/23 20:33:32
You also need to change Canvas::SetupPangoLayout o
|
| switch (font.style()) { |
| case gfx::Font::NORMAL: |