Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(453)

Side by Side Diff: app/gfx/font_gtk.cc

Issue 1095004: Clamp the max size of fonts used by skia/chrome canvas. (Closed)
Patch Set: Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « app/gfx/font.h ('k') | app/gfx/font_skia.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "app/gfx/font.h" 5 #include "app/gfx/font.h"
6 6
7 #include <algorithm>
7 #include <fontconfig/fontconfig.h> 8 #include <fontconfig/fontconfig.h>
8 #include <gtk/gtk.h> 9 #include <gtk/gtk.h>
9 10
10 #include "base/logging.h" 11 #include "base/logging.h"
11 #include "base/string_piece.h" 12 #include "base/string_piece.h"
12 #include "base/utf_string_conversions.h" 13 #include "base/utf_string_conversions.h"
13 14
14 namespace gfx { 15 namespace gfx {
15 16
16 Font* Font::default_font_ = NULL; 17 Font* Font::default_font_ = NULL;
(...skipping 24 matching lines...) Expand all
41 FcPatternGetString(match, FC_FAMILY, 0, &match_family); 42 FcPatternGetString(match, FC_FAMILY, 0, &match_family);
42 43
43 std::wstring font_family = UTF8ToWide( 44 std::wstring font_family = UTF8ToWide(
44 reinterpret_cast<char*>(match_family)); 45 reinterpret_cast<char*>(match_family));
45 FcPatternDestroy(match); 46 FcPatternDestroy(match);
46 FcPatternDestroy(pattern); 47 FcPatternDestroy(pattern);
47 free(family_name_copy); 48 free(family_name_copy);
48 return font_family; 49 return font_family;
49 } 50 }
50 51
52 // Pango scales font sizes. This returns the scale factor. See
53 // pango_cairo_context_set_resolution for details.
54 // NOTE: this isn't entirely accurate, in that Pango also consults the
55 // FC_PIXEL_SIZE first (see get_font_size in pangocairo-fcfont), but this
56 // seems to give us the same sizes as used by Pango for all our fonts in both
57 // English and Thai.
58 float Font::GetPangoScaleFactor() {
59 static float scale_factor = 0;
60 static bool determined_scale = false;
61 if (!determined_scale) {
62 PangoContext* context = gdk_pango_context_get();
63 scale_factor = pango_cairo_context_get_resolution(context);
64 // Until we switch to vector graphics, force the max DPI to 96.0.
65 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.
66 g_object_unref(context);
67 if (scale_factor <= 0)
68 scale_factor = 1;
69 else
70 scale_factor /= 72.0;
71 determined_scale = true;
72 }
73 return scale_factor;
74 }
75
51 // static 76 // static
52 Font Font::CreateFont(PangoFontDescription* desc) { 77 Font Font::CreateFont(PangoFontDescription* desc) {
53 gint size = pango_font_description_get_size(desc); 78 gint size = pango_font_description_get_size(desc);
54 const char* family_name = pango_font_description_get_family(desc); 79 const char* family_name = pango_font_description_get_family(desc);
55 80
56 // Find best match font for |family_name| to make sure we can get 81 // Find best match font for |family_name| to make sure we can get
57 // a SkTypeface for the default font. 82 // a SkTypeface for the default font.
58 // TODO(agl): remove this. 83 // TODO(agl): remove this.
59 std::wstring font_family = FindBestMatchFontFamilyName(family_name); 84 std::wstring font_family = FindBestMatchFontFamilyName(family_name);
60 85
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 123
99 CopyFont(*default_font_); 124 CopyFont(*default_font_);
100 } 125 }
101 126
102 // static 127 // static
103 PangoFontDescription* Font::PangoFontFromGfxFont( 128 PangoFontDescription* Font::PangoFontFromGfxFont(
104 const gfx::Font& gfx_font) { 129 const gfx::Font& gfx_font) {
105 gfx::Font font = gfx_font; // Copy so we can call non-const methods. 130 gfx::Font font = gfx_font; // Copy so we can call non-const methods.
106 PangoFontDescription* pfd = pango_font_description_new(); 131 PangoFontDescription* pfd = pango_font_description_new();
107 pango_font_description_set_family(pfd, WideToUTF8(font.FontName()).c_str()); 132 pango_font_description_set_family(pfd, WideToUTF8(font.FontName()).c_str());
108 pango_font_description_set_size(pfd, font.FontSize() * PANGO_SCALE); 133 // Set the absolute size to avoid overflowing UI elements.
134 pango_font_description_set_absolute_size(pfd,
135 font.FontSize() * PANGO_SCALE * Font::GetPangoScaleFactor());
sky 2010/03/23 20:33:32 You also need to change Canvas::SetupPangoLayout o
109 136
110 switch (font.style()) { 137 switch (font.style()) {
111 case gfx::Font::NORMAL: 138 case gfx::Font::NORMAL:
112 // Nothing to do, should already be PANGO_STYLE_NORMAL. 139 // Nothing to do, should already be PANGO_STYLE_NORMAL.
113 break; 140 break;
114 case gfx::Font::BOLD: 141 case gfx::Font::BOLD:
115 pango_font_description_set_weight(pfd, PANGO_WEIGHT_BOLD); 142 pango_font_description_set_weight(pfd, PANGO_WEIGHT_BOLD);
116 break; 143 break;
117 case gfx::Font::ITALIC: 144 case gfx::Font::ITALIC:
118 pango_font_description_set_style(pfd, PANGO_STYLE_ITALIC); 145 pango_font_description_set_style(pfd, PANGO_STYLE_ITALIC);
119 break; 146 break;
120 case gfx::Font::UNDERLINED: 147 case gfx::Font::UNDERLINED:
121 // TODO(deanm): How to do underlined? Where do we use it? Probably have 148 // TODO(deanm): How to do underlined? Where do we use it? Probably have
122 // to paint it ourselves, see pango_font_metrics_get_underline_position. 149 // to paint it ourselves, see pango_font_metrics_get_underline_position.
123 break; 150 break;
124 } 151 }
125 152
126 return pfd; 153 return pfd;
127 } 154 }
128 155
129 } // namespace gfx 156 } // namespace gfx
OLDNEW
« no previous file with comments | « app/gfx/font.h ('k') | app/gfx/font_skia.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698