| OLD | NEW |
| 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 "app/gfx/canvas.h" | 5 #include "app/gfx/canvas.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> |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 cairo_surface_t* surface = | 147 cairo_surface_t* surface = |
| 148 cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 0, 0); | 148 cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 0, 0); |
| 149 cairo_t* cr = cairo_create(surface); | 149 cairo_t* cr = cairo_create(surface); |
| 150 PangoLayout* layout = pango_cairo_create_layout(cr); | 150 PangoLayout* layout = pango_cairo_create_layout(cr); |
| 151 | 151 |
| 152 SetupPangoLayout(layout, font, *width, flags); | 152 SetupPangoLayout(layout, font, *width, flags); |
| 153 | 153 |
| 154 std::string utf8 = WideToUTF8(text); | 154 std::string utf8 = WideToUTF8(text); |
| 155 pango_layout_set_text(layout, utf8.data(), utf8.size()); | 155 pango_layout_set_text(layout, utf8.data(), utf8.size()); |
| 156 | 156 |
| 157 int chars_height; | 157 pango_layout_get_pixel_size(layout, width, height); |
| 158 pango_layout_get_size(layout, width, &chars_height); | |
| 159 *width /= PANGO_SCALE; | |
| 160 // Pango returns the height of the characters, not the height of the font. | |
| 161 *height = font.height(); | |
| 162 | 158 |
| 163 g_object_unref(layout); | 159 g_object_unref(layout); |
| 164 cairo_destroy(cr); | 160 cairo_destroy(cr); |
| 165 cairo_surface_destroy(surface); | 161 cairo_surface_destroy(surface); |
| 166 } | 162 } |
| 167 | 163 |
| 168 void Canvas::DrawStringInt(const std::wstring& text, | 164 void Canvas::DrawStringInt(const std::wstring& text, |
| 169 const gfx::Font& font, | 165 const gfx::Font& font, |
| 170 const SkColor& color, | 166 const SkColor& color, |
| 171 int x, int y, int w, int h, | 167 int x, int y, int w, int h, |
| 172 int flags) { | 168 int flags) { |
| 173 cairo_t* cr = beginPlatformPaint(); | 169 cairo_t* cr = beginPlatformPaint(); |
| 174 PangoLayout* layout = pango_cairo_create_layout(cr); | 170 PangoLayout* layout = pango_cairo_create_layout(cr); |
| 175 | 171 |
| 176 SetupPangoLayout(layout, font, w, flags); | 172 SetupPangoLayout(layout, font, w, flags); |
| 177 | 173 |
| 178 pango_layout_set_height(layout, h * PANGO_SCALE); | 174 pango_layout_set_height(layout, h * PANGO_SCALE); |
| 179 | 175 |
| 180 cairo_save(cr); | 176 cairo_save(cr); |
| 181 cairo_set_source_rgb(cr, | 177 cairo_set_source_rgb(cr, |
| 182 SkColorGetR(color) / 255.0, | 178 SkColorGetR(color) / 255.0, |
| 183 SkColorGetG(color) / 255.0, | 179 SkColorGetG(color) / 255.0, |
| 184 SkColorGetB(color) / 255.0); | 180 SkColorGetB(color) / 255.0); |
| 185 | 181 |
| 186 std::string utf8 = WideToUTF8(text); | 182 std::string utf8 = WideToUTF8(text); |
| 187 pango_layout_set_text(layout, utf8.data(), utf8.size()); | 183 pango_layout_set_text(layout, utf8.data(), utf8.size()); |
| 188 | 184 |
| 189 int width, height; | 185 int width, height; |
| 190 pango_layout_get_size(layout, &width, &height); | 186 pango_layout_get_pixel_size(layout, &width, &height); |
| 191 width /= PANGO_SCALE; | |
| 192 height /= PANGO_SCALE; | |
| 193 | 187 |
| 194 if (flags & Canvas::TEXT_VALIGN_TOP) { | 188 if (flags & Canvas::TEXT_VALIGN_TOP) { |
| 195 // Cairo should draw from the top left corner already. | 189 // Cairo should draw from the top left corner already. |
| 196 } else if (flags & Canvas::TEXT_VALIGN_BOTTOM) { | 190 } else if (flags & Canvas::TEXT_VALIGN_BOTTOM) { |
| 197 y += (h - height); | 191 y += (h - height); |
| 198 } else { | 192 } else { |
| 199 // Vertically centered. | 193 // Vertically centered. |
| 200 y += ((h - height) / 2); | 194 y += ((h - height) / 2); |
| 201 } | 195 } |
| 202 | 196 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 216 NOTREACHED(); | 210 NOTREACHED(); |
| 217 return; | 211 return; |
| 218 } | 212 } |
| 219 | 213 |
| 220 cairo_t* cr = beginPlatformPaint(); | 214 cairo_t* cr = beginPlatformPaint(); |
| 221 gdk_cairo_set_source_pixbuf(cr, pixbuf, x, y); | 215 gdk_cairo_set_source_pixbuf(cr, pixbuf, x, y); |
| 222 cairo_paint(cr); | 216 cairo_paint(cr); |
| 223 } | 217 } |
| 224 | 218 |
| 225 } // namespace gfx | 219 } // namespace gfx |
| OLD | NEW |