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

Side by Side Diff: gfx/canvas_skia_linux.cc

Issue 3083022: Rework gfx::Font by moving platform-specific code into inner classes.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « chrome/common/extensions/extension_action.cc ('k') | gfx/canvas_skia_mac.mm » ('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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 "gfx/canvas_skia.h" 5 #include "gfx/canvas_skia.h"
6 6
7 #include <cairo/cairo.h> 7 #include <cairo/cairo.h>
8 #include <gtk/gtk.h> 8 #include <gtk/gtk.h>
9 #include <pango/pango.h> 9 #include <pango/pango.h>
10 #include <pango/pangocairo.h> 10 #include <pango/pangocairo.h>
11 11
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/gtk_util.h" 13 #include "base/gtk_util.h"
14 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
15 #include "gfx/font.h" 15 #include "gfx/font.h"
16 #include "gfx/gtk_util.h" 16 #include "gfx/gtk_util.h"
17 #include "gfx/platform_font_gtk.h"
17 #include "gfx/rect.h" 18 #include "gfx/rect.h"
18 19
19 namespace { 20 namespace {
20 21
21 const gunichar kAcceleratorChar = '&'; 22 const gunichar kAcceleratorChar = '&';
22 23
23 // Font settings that we initialize once and then use when drawing text in 24 // Font settings that we initialize once and then use when drawing text in
24 // DrawStringInt(). 25 // DrawStringInt().
25 static cairo_font_options_t* cairo_font_options = NULL; 26 static cairo_font_options_t* cairo_font_options = NULL;
26 27
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 143
143 // Set the resolution to match that used by Gtk. If we don't set the 144 // Set the resolution to match that used by Gtk. If we don't set the
144 // resolution and the resolution differs from the default, Gtk and Chrome end 145 // resolution and the resolution differs from the default, Gtk and Chrome end
145 // up drawing at different sizes. 146 // up drawing at different sizes.
146 double resolution = gfx::GetPangoResolution(); 147 double resolution = gfx::GetPangoResolution();
147 if (resolution > 0) { 148 if (resolution > 0) {
148 pango_cairo_context_set_resolution(pango_layout_get_context(layout), 149 pango_cairo_context_set_resolution(pango_layout_get_context(layout),
149 resolution); 150 resolution);
150 } 151 }
151 152
152 PangoFontDescription* desc = gfx::Font::PangoFontFromGfxFont(font); 153 PangoFontDescription* desc = font.GetNativeFont();
153 pango_layout_set_font_description(layout, desc); 154 pango_layout_set_font_description(layout, desc);
154 pango_font_description_free(desc); 155 pango_font_description_free(desc);
155 156
156 // Set text and accelerator character if needed. 157 // Set text and accelerator character if needed.
157 std::string utf8 = WideToUTF8(text); 158 std::string utf8 = WideToUTF8(text);
158 if (flags & gfx::Canvas::SHOW_PREFIX) { 159 if (flags & gfx::Canvas::SHOW_PREFIX) {
159 // Escape the text string to be used as markup. 160 // Escape the text string to be used as markup.
160 gchar* escaped_text = g_markup_escape_text(utf8.c_str(), utf8.size()); 161 gchar* escaped_text = g_markup_escape_text(utf8.c_str(), utf8.size());
161 pango_layout_set_markup_with_accel(layout, 162 pango_layout_set_markup_with_accel(layout,
162 escaped_text, 163 escaped_text,
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 // Cairo should draw from the top left corner already. 240 // Cairo should draw from the top left corner already.
240 } else if (flags & Canvas::TEXT_VALIGN_BOTTOM) { 241 } else if (flags & Canvas::TEXT_VALIGN_BOTTOM) {
241 y += (h - height); 242 y += (h - height);
242 } else { 243 } else {
243 // Vertically centered. 244 // Vertically centered.
244 y += ((h - height) / 2); 245 y += ((h - height) / 2);
245 } 246 }
246 247
247 cairo_move_to(cr, x, y); 248 cairo_move_to(cr, x, y);
248 pango_cairo_show_layout(cr, layout); 249 pango_cairo_show_layout(cr, layout);
249 if (font.style() & gfx::Font::UNDERLINED) { 250 if (font.GetStyle() & gfx::Font::UNDERLINED) {
251 gfx::PlatformFontGtk* platform_font =
252 static_cast<gfx::PlatformFontGtk*>(font.platform_font());
250 double underline_y = 253 double underline_y =
251 static_cast<double>(y) + height + font.underline_position(); 254 static_cast<double>(y) + height + platform_font->underline_position();
252 cairo_set_line_width(cr, font.underline_thickness()); 255 cairo_set_line_width(cr, platform_font->underline_thickness());
253 cairo_move_to(cr, x, underline_y); 256 cairo_move_to(cr, x, underline_y);
254 cairo_line_to(cr, x + width, underline_y); 257 cairo_line_to(cr, x + width, underline_y);
255 cairo_stroke(cr); 258 cairo_stroke(cr);
256 } 259 }
257 cairo_restore(cr); 260 cairo_restore(cr);
258 261
259 g_object_unref(layout); 262 g_object_unref(layout);
260 // NOTE: beginPlatformPaint returned its surface, we shouldn't destroy it. 263 // NOTE: beginPlatformPaint returned its surface, we shouldn't destroy it.
261 } 264 }
262 265
263 void CanvasSkia::DrawGdkPixbuf(GdkPixbuf* pixbuf, int x, int y) { 266 void CanvasSkia::DrawGdkPixbuf(GdkPixbuf* pixbuf, int x, int y) {
264 if (!pixbuf) { 267 if (!pixbuf) {
265 NOTREACHED(); 268 NOTREACHED();
266 return; 269 return;
267 } 270 }
268 271
269 cairo_t* cr = beginPlatformPaint(); 272 cairo_t* cr = beginPlatformPaint();
270 gdk_cairo_set_source_pixbuf(cr, pixbuf, x, y); 273 gdk_cairo_set_source_pixbuf(cr, pixbuf, x, y);
271 cairo_paint(cr); 274 cairo_paint(cr);
272 } 275 }
273 276
274 } // namespace gfx 277 } // namespace gfx
OLDNEW
« no previous file with comments | « chrome/common/extensions/extension_action.cc ('k') | gfx/canvas_skia_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698