OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ui/gfx/canvas.h" | 5 #include "ui/gfx/canvas.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include <cairo/cairo.h> | 9 #include <cairo/cairo.h> |
10 #include <pango/pango.h> | 10 #include <pango/pango.h> |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 } | 105 } |
106 | 106 |
107 void DrawStringContext::Draw(SkColor text_color) { | 107 void DrawStringContext::Draw(SkColor text_color) { |
108 DrawPangoLayout(cr_, layout_, font_, bounds_, text_rect_, text_color, | 108 DrawPangoLayout(cr_, layout_, font_, bounds_, text_rect_, text_color, |
109 text_direction_, flags_); | 109 text_direction_, flags_); |
110 } | 110 } |
111 | 111 |
112 void DrawStringContext::DrawWithHalo(SkColor text_color, | 112 void DrawStringContext::DrawWithHalo(SkColor text_color, |
113 SkColor halo_color) { | 113 SkColor halo_color) { |
114 gfx::Size size(bounds_.width() + 2, bounds_.height() + 2); | 114 gfx::Size size(bounds_.width() + 2, bounds_.height() + 2); |
115 gfx::Canvas text_canvas(size, false); | 115 gfx::Canvas text_canvas(size, scale_factor(), false); |
116 text_canvas.FillRect(gfx::Rect(size), static_cast<SkColor>(0)); | 116 text_canvas.FillRect(gfx::Rect(size), static_cast<SkColor>(0)); |
117 | 117 |
118 { | 118 { |
119 skia::ScopedPlatformPaint scoped_platform_paint(text_canvas.sk_canvas()); | 119 skia::ScopedPlatformPaint scoped_platform_paint(text_canvas.sk_canvas()); |
120 cairo_t* text_cr = scoped_platform_paint.GetPlatformSurface(); | 120 cairo_t* text_cr = scoped_platform_paint.GetPlatformSurface(); |
121 | 121 |
122 // TODO: The current approach (stroking the text path to generate the halo | 122 // TODO: The current approach (stroking the text path to generate the halo |
123 // and then filling it for the main text) won't work if |text_color| is | 123 // and then filling it for the main text) won't work if |text_color| is |
124 // non-opaque. If we need to do this at some later point, | 124 // non-opaque. If we need to do this at some later point, |
125 // http://lists.freedesktop.org/archives/cairo/2004-September/001829.html | 125 // http://lists.freedesktop.org/archives/cairo/2004-September/001829.html |
(...skipping 24 matching lines...) Expand all Loading... |
150 SkColorGetB(text_color) / 255.0, | 150 SkColorGetB(text_color) / 255.0, |
151 SkColorGetA(text_color) / 255.0); | 151 SkColorGetA(text_color) / 255.0); |
152 cairo_fill(text_cr); | 152 cairo_fill(text_cr); |
153 | 153 |
154 if (font_.GetStyle() & gfx::Font::UNDERLINED) | 154 if (font_.GetStyle() & gfx::Font::UNDERLINED) |
155 DrawUnderline(text_cr, 0.0); | 155 DrawUnderline(text_cr, 0.0); |
156 } | 156 } |
157 | 157 |
158 const SkBitmap& text_bitmap = const_cast<SkBitmap&>( | 158 const SkBitmap& text_bitmap = const_cast<SkBitmap&>( |
159 skia::GetTopDevice(*text_canvas.sk_canvas())->accessBitmap(false)); | 159 skia::GetTopDevice(*text_canvas.sk_canvas())->accessBitmap(false)); |
160 canvas_->DrawImageInt(text_bitmap, text_rect_.x() - 1, text_rect_.y() - 1); | 160 const gfx::ImageSkia text_image = gfx::ImageSkia(gfx::ImageSkiaRep( |
| 161 text_bitmap, text_canvas.scale_factor())); |
| 162 canvas_->DrawImageInt(text_image, text_rect_.x() - 1, text_rect_.y() - 1); |
161 } | 163 } |
162 | 164 |
163 void DrawStringContext::DrawUnderline(cairo_t* cr, double extra_edge_width) { | 165 void DrawStringContext::DrawUnderline(cairo_t* cr, double extra_edge_width) { |
164 gfx::PlatformFontPango* platform_font = | 166 gfx::PlatformFontPango* platform_font = |
165 static_cast<gfx::PlatformFontPango*>(font_.platform_font()); | 167 static_cast<gfx::PlatformFontPango*>(font_.platform_font()); |
166 gfx::DrawPangoTextUnderline(cr, | 168 gfx::DrawPangoTextUnderline(cr, |
167 platform_font, | 169 platform_font, |
168 extra_edge_width, | 170 extra_edge_width, |
169 text_rect_); | 171 text_rect_); |
170 } | 172 } |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 DLOG_IF(WARNING, !shadows.empty()) << "Text shadow not implemented."; | 255 DLOG_IF(WARNING, !shadows.empty()) << "Text shadow not implemented."; |
254 | 256 |
255 if (!IntersectsClipRect(text_bounds)) | 257 if (!IntersectsClipRect(text_bounds)) |
256 return; | 258 return; |
257 | 259 |
258 DrawStringContext context(this, text, font, text_bounds, text_bounds, flags); | 260 DrawStringContext context(this, text, font, text_bounds, text_bounds, flags); |
259 context.Draw(color); | 261 context.Draw(color); |
260 } | 262 } |
261 | 263 |
262 } // namespace gfx | 264 } // namespace gfx |
OLD | NEW |