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 #ifndef UI_GFX_CANVAS_H_ | 5 #ifndef UI_GFX_CANVAS_H_ |
6 #define UI_GFX_CANVAS_H_ | 6 #define UI_GFX_CANVAS_H_ |
7 | 7 |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
11 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
12 #include "base/strings/string16.h" | 12 #include "base/strings/string16.h" |
13 #include "skia/ext/platform_canvas.h" | 13 #include "skia/ext/platform_canvas.h" |
14 #include "skia/ext/refptr.h" | 14 #include "skia/ext/refptr.h" |
15 #include "ui/gfx/image/image_skia.h" | 15 #include "ui/gfx/image/image_skia.h" |
16 #include "ui/gfx/native_widget_types.h" | 16 #include "ui/gfx/native_widget_types.h" |
17 #include "ui/gfx/shadow_value.h" | 17 #include "ui/gfx/shadow_value.h" |
18 | 18 |
19 namespace gfx { | 19 namespace gfx { |
20 | 20 |
21 class Rect; | 21 class Rect; |
22 class Font; | 22 class Font; |
| 23 class FontList; |
23 class Point; | 24 class Point; |
24 class Size; | 25 class Size; |
25 class Transform; | 26 class Transform; |
26 | 27 |
27 // Canvas is a SkCanvas wrapper that provides a number of methods for | 28 // Canvas is a SkCanvas wrapper that provides a number of methods for |
28 // common operations used throughout an application built using ui/gfx. | 29 // common operations used throughout an application built using ui/gfx. |
29 // | 30 // |
30 // All methods that take integer arguments (as is used throughout views) | 31 // All methods that take integer arguments (as is used throughout views) |
31 // end with Int. If you need to use methods provided by SkCanvas, you'll | 32 // end with Int. If you need to use methods provided by SkCanvas, you'll |
32 // need to do a conversion. In particular you'll need to use |SkIntToScalar()|, | 33 // need to do a conversion. In particular you'll need to use |SkIntToScalar()|, |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 // Recreates the backing platform canvas with DIP |size| and |scale_factor|. | 115 // Recreates the backing platform canvas with DIP |size| and |scale_factor|. |
115 // If the canvas is not opaque, it is explicitly cleared. | 116 // If the canvas is not opaque, it is explicitly cleared. |
116 // This method is public so that canvas_skia_paint can recreate the platform | 117 // This method is public so that canvas_skia_paint can recreate the platform |
117 // canvas after having initialized the canvas. | 118 // canvas after having initialized the canvas. |
118 // TODO(pkotwicz): Push the scale factor into skia::PlatformCanvas such that | 119 // TODO(pkotwicz): Push the scale factor into skia::PlatformCanvas such that |
119 // this method can be private. | 120 // this method can be private. |
120 void RecreateBackingCanvas(const gfx::Size& size, | 121 void RecreateBackingCanvas(const gfx::Size& size, |
121 ui::ScaleFactor scale_factor, | 122 ui::ScaleFactor scale_factor, |
122 bool is_opaque); | 123 bool is_opaque); |
123 | 124 |
124 // Compute the size required to draw some text with the provided font. | 125 // Compute the size required to draw some text with the provided fonts. |
125 // Attempts to fit the text with the provided width and height. Increases | 126 // Attempts to fit the text with the provided width and height. Increases |
126 // height and then width as needed to make the text fit. This method | 127 // height and then width as needed to make the text fit. This method |
127 // supports multiple lines. On Skia only a line_height can be specified and | 128 // supports multiple lines. On Skia only a line_height can be specified and |
128 // specifying a 0 value for it will cause the default height to be used. | 129 // specifying a 0 value for it will cause the default height to be used. |
129 static void SizeStringInt(const base::string16& text, | 130 static void SizeStringInt(const base::string16& text, |
| 131 const gfx::FontList& font_list, |
| 132 int* width, |
| 133 int* height, |
| 134 int line_height, |
| 135 int flags); |
| 136 // Obsolete version. Use the above version which takes gfx::FontList. |
| 137 static void SizeStringInt(const base::string16& text, |
130 const gfx::Font& font, | 138 const gfx::Font& font, |
131 int* width, int* height, | 139 int* width, |
| 140 int* height, |
132 int line_height, | 141 int line_height, |
133 int flags); | 142 int flags); |
134 | 143 |
135 // Returns the number of horizontal pixels needed to display the specified | 144 // Returns the number of horizontal pixels needed to display the specified |
136 // |text| with |font|. | 145 // |text| with |font_list|. |
| 146 static int GetStringWidth(const base::string16& text, |
| 147 const gfx::FontList& font_list); |
| 148 // Obsolete version. Use the above version which takes gfx::FontList. |
137 static int GetStringWidth(const base::string16& text, const gfx::Font& font); | 149 static int GetStringWidth(const base::string16& text, const gfx::Font& font); |
138 | 150 |
139 // Returns the default text alignment to be used when drawing text on a | 151 // Returns the default text alignment to be used when drawing text on a |
140 // gfx::Canvas based on the directionality of the system locale language. | 152 // gfx::Canvas based on the directionality of the system locale language. |
141 // This function is used by gfx::Canvas::DrawStringInt when the text alignment | 153 // This function is used by gfx::Canvas::DrawStringInt when the text alignment |
142 // is not specified. | 154 // is not specified. |
143 // | 155 // |
144 // This function returns either gfx::Canvas::TEXT_ALIGN_LEFT or | 156 // This function returns either gfx::Canvas::TEXT_ALIGN_LEFT or |
145 // gfx::Canvas::TEXT_ALIGN_RIGHT. | 157 // gfx::Canvas::TEXT_ALIGN_RIGHT. |
146 static int DefaultCanvasTextAlignment(); | 158 static int DefaultCanvasTextAlignment(); |
147 | 159 |
148 // Draws text with a 1-pixel halo around it of the given color. | 160 // Draws text with a 1-pixel halo around it of the given color. |
149 // On Windows, it allows ClearType to be drawn to an otherwise transparenct | 161 // On Windows, it allows ClearType to be drawn to an otherwise transparent |
150 // bitmap for drag images. Drag images have only 1-bit of transparency, so | 162 // bitmap for drag images. Drag images have only 1-bit of transparency, so |
151 // we don't do any fancy blurring. | 163 // we don't do any fancy blurring. |
152 // On Linux, text with halo is created by stroking it with 2px |halo_color| | 164 // On Linux, text with halo is created by stroking it with 2px |halo_color| |
153 // then filling it with |text_color|. | 165 // then filling it with |text_color|. |
154 // On Mac, NOTIMPLEMENTED. | 166 // On Mac, NOTIMPLEMENTED. |
155 // TODO(dhollowa): Skia-native implementation is underway. Cut over to | 167 // TODO(dhollowa): Skia-native implementation is underway. Cut over to |
156 // that when ready. http::/crbug.com/109946 | 168 // that when ready. http::/crbug.com/109946 |
| 169 void DrawStringWithHaloRect(const base::string16& text, |
| 170 const gfx::FontList& font_list, |
| 171 SkColor text_color, |
| 172 SkColor halo_color, |
| 173 const gfx::Rect& display_rect, |
| 174 int flags); |
| 175 // Obsolete version. Use the above version which takes gfx::FontList. |
157 void DrawStringWithHalo(const base::string16& text, | 176 void DrawStringWithHalo(const base::string16& text, |
158 const gfx::Font& font, | 177 const gfx::Font& font, |
159 SkColor text_color, | 178 SkColor text_color, |
160 SkColor halo_color, | 179 SkColor halo_color, |
161 int x, int y, int w, int h, | 180 int x, |
| 181 int y, |
| 182 int w, |
| 183 int h, |
162 int flags); | 184 int flags); |
163 | 185 |
164 // Extracts an ImageSkiaRep from the contents of this canvas. | 186 // Extracts an ImageSkiaRep from the contents of this canvas. |
165 gfx::ImageSkiaRep ExtractImageRep() const; | 187 gfx::ImageSkiaRep ExtractImageRep() const; |
166 | 188 |
167 // Draws a dashed rectangle of the specified color. | 189 // Draws a dashed rectangle of the specified color. |
168 void DrawDashedRect(const gfx::Rect& rect, SkColor color); | 190 void DrawDashedRect(const gfx::Rect& rect, SkColor color); |
169 | 191 |
170 // Saves a copy of the drawing state onto a stack, operating on this copy | 192 // Saves a copy of the drawing state onto a stack, operating on this copy |
171 // until a balanced call to Restore() is made. | 193 // until a balanced call to Restore() is made. |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 // Helper for DrawImageInt(..., paint) that constructs a temporary paint and | 282 // Helper for DrawImageInt(..., paint) that constructs a temporary paint and |
261 // calls paint.setAlpha(alpha). | 283 // calls paint.setAlpha(alpha). |
262 void DrawImageInt(const gfx::ImageSkia&, int x, int y, uint8 alpha); | 284 void DrawImageInt(const gfx::ImageSkia&, int x, int y, uint8 alpha); |
263 | 285 |
264 // Draws an image with the origin at the specified location, using the | 286 // Draws an image with the origin at the specified location, using the |
265 // specified paint. The upper left corner of the bitmap is rendered at the | 287 // specified paint. The upper left corner of the bitmap is rendered at the |
266 // specified location. | 288 // specified location. |
267 // Parameters are specified relative to current canvas scale not in pixels. | 289 // Parameters are specified relative to current canvas scale not in pixels. |
268 // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1. | 290 // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1. |
269 void DrawImageInt(const gfx::ImageSkia& image, | 291 void DrawImageInt(const gfx::ImageSkia& image, |
270 int x, int y, | 292 int x, |
| 293 int y, |
271 const SkPaint& paint); | 294 const SkPaint& paint); |
272 | 295 |
273 // Draws a portion of an image in the specified location. The src parameters | 296 // Draws a portion of an image in the specified location. The src parameters |
274 // correspond to the region of the bitmap to draw in the region defined | 297 // correspond to the region of the bitmap to draw in the region defined |
275 // by the dest coordinates. | 298 // by the dest coordinates. |
276 // | 299 // |
277 // If the width or height of the source differs from that of the destination, | 300 // If the width or height of the source differs from that of the destination, |
278 // the image will be scaled. When scaling down, a mipmap will be generated. | 301 // the image will be scaled. When scaling down, a mipmap will be generated. |
279 // Set |filter| to use filtering for images, otherwise the nearest-neighbor | 302 // Set |filter| to use filtering for images, otherwise the nearest-neighbor |
280 // algorithm is used for resampling. | 303 // algorithm is used for resampling. |
281 // | 304 // |
282 // An optional custom SkPaint can be provided. | 305 // An optional custom SkPaint can be provided. |
283 // Parameters are specified relative to current canvas scale not in pixels. | 306 // Parameters are specified relative to current canvas scale not in pixels. |
284 // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1. | 307 // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1. |
285 void DrawImageInt(const gfx::ImageSkia& image, | 308 void DrawImageInt(const gfx::ImageSkia& image, |
286 int src_x, int src_y, int src_w, int src_h, | 309 int src_x, |
287 int dest_x, int dest_y, int dest_w, int dest_h, | 310 int src_y, |
| 311 int src_w, |
| 312 int src_h, |
| 313 int dest_x, |
| 314 int dest_y, |
| 315 int dest_w, |
| 316 int dest_h, |
288 bool filter); | 317 bool filter); |
289 void DrawImageInt(const gfx::ImageSkia& image, | 318 void DrawImageInt(const gfx::ImageSkia& image, |
290 int src_x, int src_y, int src_w, int src_h, | 319 int src_x, |
291 int dest_x, int dest_y, int dest_w, int dest_h, | 320 int src_y, |
| 321 int src_w, |
| 322 int src_h, |
| 323 int dest_x, |
| 324 int dest_y, |
| 325 int dest_w, |
| 326 int dest_h, |
292 bool filter, | 327 bool filter, |
293 const SkPaint& paint); | 328 const SkPaint& paint); |
294 | 329 |
295 // Draws an |image| with the top left corner at |x| and |y|, clipped to | 330 // Draws an |image| with the top left corner at |x| and |y|, clipped to |
296 // |path|. | 331 // |path|. |
297 // Parameters are specified relative to current canvas scale not in pixels. | 332 // Parameters are specified relative to current canvas scale not in pixels. |
298 // Thus, x is 2 pixels if canvas scale = 2 & |x| = 1. | 333 // Thus, x is 2 pixels if canvas scale = 2 & |x| = 1. |
299 void DrawImageInPath(const gfx::ImageSkia& image, | 334 void DrawImageInPath(const gfx::ImageSkia& image, |
300 int x, | 335 int x, |
301 int y, | 336 int y, |
302 const SkPath& path, | 337 const SkPath& path, |
303 const SkPaint& paint); | 338 const SkPaint& paint); |
304 | 339 |
305 // Draws text with the specified color, font and location. The text is | 340 // Draws text with the specified color, fonts and location. The text is |
306 // aligned to the left, vertically centered, clipped to the region. If the | 341 // aligned to the left, vertically centered, clipped to the region. If the |
307 // text is too big, it is truncated and '...' is added to the end. | 342 // text is too big, it is truncated and '...' is added to the end. |
| 343 void DrawStringRect(const base::string16& text, |
| 344 const gfx::FontList& font_list, |
| 345 SkColor color, |
| 346 const gfx::Rect& display_rect); |
| 347 // Obsolete versions. Use the above versions which take gfx::FontList. |
308 void DrawStringInt(const base::string16& text, | 348 void DrawStringInt(const base::string16& text, |
309 const gfx::Font& font, | 349 const gfx::Font& font, |
310 SkColor color, | 350 SkColor color, |
311 int x, int y, int w, int h); | 351 int x, |
| 352 int y, |
| 353 int w, |
| 354 int h); |
312 void DrawStringInt(const base::string16& text, | 355 void DrawStringInt(const base::string16& text, |
313 const gfx::Font& font, | 356 const gfx::Font& font, |
314 SkColor color, | 357 SkColor color, |
315 const gfx::Rect& display_rect); | 358 const gfx::Rect& display_rect); |
316 | 359 |
317 // Draws text with the specified color, font and location. The last argument | 360 // Draws text with the specified color, fonts and location. The last argument |
318 // specifies flags for how the text should be rendered. It can be one of | 361 // specifies flags for how the text should be rendered. It can be one of |
319 // TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT or TEXT_ALIGN_LEFT. | 362 // TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT or TEXT_ALIGN_LEFT. |
| 363 void DrawStringWithFlagsRect(const base::string16& text, |
| 364 const gfx::FontList& font_list, |
| 365 SkColor color, |
| 366 const gfx::Rect& display_rect, |
| 367 int flags); |
| 368 // Obsolete version. Use the above version which takes gfx::FontList. |
320 void DrawStringInt(const base::string16& text, | 369 void DrawStringInt(const base::string16& text, |
321 const gfx::Font& font, | 370 const gfx::Font& font, |
322 SkColor color, | 371 SkColor color, |
323 int x, int y, int w, int h, | 372 int x, |
| 373 int y, |
| 374 int w, |
| 375 int h, |
324 int flags); | 376 int flags); |
325 | 377 |
326 // Similar to above DrawStringInt method but with text shadows support. | 378 // Similar to above DrawStringInt method but with text shadows support. |
327 // Currently it's only implemented for canvas skia. Specifying a 0 line_height | 379 // Currently it's only implemented for canvas skia. Specifying a 0 line_height |
328 // will cause the default height to be used. | 380 // will cause the default height to be used. |
| 381 void DrawStringWithShadowsRect(const base::string16& text, |
| 382 const gfx::FontList& font_list, |
| 383 SkColor color, |
| 384 const gfx::Rect& text_bounds, |
| 385 int line_height, |
| 386 int flags, |
| 387 const ShadowValues& shadows); |
| 388 // Obsolete version. Use the above version which takes gfx::FontList. |
329 void DrawStringWithShadows(const base::string16& text, | 389 void DrawStringWithShadows(const base::string16& text, |
330 const gfx::Font& font, | 390 const gfx::Font& font, |
331 SkColor color, | 391 SkColor color, |
332 const gfx::Rect& text_bounds, | 392 const gfx::Rect& text_bounds, |
333 int line_height, | 393 int line_height, |
334 int flags, | 394 int flags, |
335 const ShadowValues& shadows); | 395 const ShadowValues& shadows); |
336 | 396 |
337 // Draws a dotted gray rectangle used for focus purposes. | 397 // Draws a dotted gray rectangle used for focus purposes. |
338 void DrawFocusRect(const gfx::Rect& rect); | 398 void DrawFocusRect(const gfx::Rect& rect); |
339 | 399 |
340 // Tiles the image in the specified region. | 400 // Tiles the image in the specified region. |
341 // Parameters are specified relative to current canvas scale not in pixels. | 401 // Parameters are specified relative to current canvas scale not in pixels. |
342 // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1. | 402 // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1. |
343 void TileImageInt(const gfx::ImageSkia& image, | 403 void TileImageInt(const gfx::ImageSkia& image, |
344 int x, int y, int w, int h); | 404 int x, |
| 405 int y, |
| 406 int w, |
| 407 int h); |
345 void TileImageInt(const gfx::ImageSkia& image, | 408 void TileImageInt(const gfx::ImageSkia& image, |
346 int src_x, int src_y, | 409 int src_x, |
347 int dest_x, int dest_y, int w, int h); | 410 int src_y, |
| 411 int dest_x, |
| 412 int dest_y, |
| 413 int w, |
| 414 int h); |
348 void TileImageInt(const gfx::ImageSkia& image, | 415 void TileImageInt(const gfx::ImageSkia& image, |
349 int src_x, int src_y, | 416 int src_x, |
350 float tile_scale_x, float tile_scale_y, | 417 int src_y, |
351 int dest_x, int dest_y, int w, int h); | 418 float tile_scale_x, |
| 419 float tile_scale_y, |
| 420 int dest_x, |
| 421 int dest_y, |
| 422 int w, |
| 423 int h); |
352 | 424 |
353 // Returns a native drawing context for platform specific drawing routines to | 425 // Returns a native drawing context for platform specific drawing routines to |
354 // use. Must be balanced by a call to EndPlatformPaint(). | 426 // use. Must be balanced by a call to EndPlatformPaint(). |
355 NativeDrawingContext BeginPlatformPaint(); | 427 NativeDrawingContext BeginPlatformPaint(); |
356 | 428 |
357 // Signifies the end of platform drawing using the native drawing context | 429 // Signifies the end of platform drawing using the native drawing context |
358 // returned by BeginPlatformPaint(). | 430 // returned by BeginPlatformPaint(). |
359 void EndPlatformPaint(); | 431 void EndPlatformPaint(); |
360 | 432 |
361 // Apply transformation on the canvas. | 433 // Apply transformation on the canvas. |
362 void Transform(const gfx::Transform& transform); | 434 void Transform(const gfx::Transform& transform); |
363 | 435 |
364 // Draws the given string with the beginning and/or the end using a fade | 436 // Draws the given string with the beginning and/or the end using a fade |
365 // gradient. When truncating the head | 437 // gradient. When truncating the head |
366 // |desired_characters_to_truncate_from_head| specifies the maximum number of | 438 // |desired_characters_to_truncate_from_head| specifies the maximum number of |
367 // characters that can be truncated. | 439 // characters that can be truncated. |
| 440 void DrawFadeTruncatingStringRect( |
| 441 const base::string16& text, |
| 442 TruncateFadeMode truncate_mode, |
| 443 size_t desired_characters_to_truncate_from_head, |
| 444 const gfx::FontList& font_list, |
| 445 SkColor color, |
| 446 const gfx::Rect& display_rect); |
| 447 // Obsolete version. Use the above version which takes gfx::FontList. |
368 void DrawFadeTruncatingString( | 448 void DrawFadeTruncatingString( |
369 const base::string16& text, | 449 const base::string16& text, |
370 TruncateFadeMode truncate_mode, | 450 TruncateFadeMode truncate_mode, |
371 size_t desired_characters_to_truncate_from_head, | 451 size_t desired_characters_to_truncate_from_head, |
372 const gfx::Font& font, | 452 const gfx::Font& font, |
373 SkColor color, | 453 SkColor color, |
374 const gfx::Rect& display_rect); | 454 const gfx::Rect& display_rect); |
375 | 455 |
376 skia::PlatformCanvas* platform_canvas() const { return owned_canvas_.get(); } | 456 skia::PlatformCanvas* platform_canvas() const { return owned_canvas_.get(); } |
377 SkCanvas* sk_canvas() const { return canvas_; } | 457 SkCanvas* sk_canvas() const { return canvas_; } |
(...skipping 25 matching lines...) Expand all Loading... |
403 | 483 |
404 skia::RefPtr<skia::PlatformCanvas> owned_canvas_; | 484 skia::RefPtr<skia::PlatformCanvas> owned_canvas_; |
405 SkCanvas* canvas_; | 485 SkCanvas* canvas_; |
406 | 486 |
407 DISALLOW_COPY_AND_ASSIGN(Canvas); | 487 DISALLOW_COPY_AND_ASSIGN(Canvas); |
408 }; | 488 }; |
409 | 489 |
410 } // namespace gfx | 490 } // namespace gfx |
411 | 491 |
412 #endif // UI_GFX_CANVAS_H_ | 492 #endif // UI_GFX_CANVAS_H_ |
OLD | NEW |