| 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" |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 // source and destination colors are combined. Unless otherwise specified, | 38 // source and destination colors are combined. Unless otherwise specified, |
| 39 // the variant that does not take a SkXfermode::Mode uses a transfer mode | 39 // the variant that does not take a SkXfermode::Mode uses a transfer mode |
| 40 // of kSrcOver_Mode. | 40 // of kSrcOver_Mode. |
| 41 class GFX_EXPORT Canvas { | 41 class GFX_EXPORT Canvas { |
| 42 public: | 42 public: |
| 43 enum TruncateFadeMode { | 43 enum TruncateFadeMode { |
| 44 TruncateFadeTail, | 44 TruncateFadeTail, |
| 45 TruncateFadeHead, | 45 TruncateFadeHead, |
| 46 }; | 46 }; |
| 47 | 47 |
| 48 // Specifies the alignment for text rendered with the DrawStringInt method. | 48 // Specifies the alignment for text rendered with the DrawStringRect method. |
| 49 enum { | 49 enum { |
| 50 TEXT_ALIGN_LEFT = 1 << 0, | 50 TEXT_ALIGN_LEFT = 1 << 0, |
| 51 TEXT_ALIGN_CENTER = 1 << 1, | 51 TEXT_ALIGN_CENTER = 1 << 1, |
| 52 TEXT_ALIGN_RIGHT = 1 << 2, | 52 TEXT_ALIGN_RIGHT = 1 << 2, |
| 53 | 53 |
| 54 // Specifies the text consists of multiple lines. | 54 // Specifies the text consists of multiple lines. |
| 55 MULTI_LINE = 1 << 3, | 55 MULTI_LINE = 1 << 3, |
| 56 | 56 |
| 57 // By default DrawStringInt does not process the prefix ('&') character | 57 // By default DrawStringRect does not process the prefix ('&') character |
| 58 // specially. That is, the string "&foo" is rendered as "&foo". When | 58 // specially. That is, the string "&foo" is rendered as "&foo". When |
| 59 // rendering text from a resource that uses the prefix character for | 59 // rendering text from a resource that uses the prefix character for |
| 60 // mnemonics, the prefix should be processed and can be rendered as an | 60 // mnemonics, the prefix should be processed and can be rendered as an |
| 61 // underline (SHOW_PREFIX), or not rendered at all (HIDE_PREFIX). | 61 // underline (SHOW_PREFIX), or not rendered at all (HIDE_PREFIX). |
| 62 SHOW_PREFIX = 1 << 4, | 62 SHOW_PREFIX = 1 << 4, |
| 63 HIDE_PREFIX = 1 << 5, | 63 HIDE_PREFIX = 1 << 5, |
| 64 | 64 |
| 65 // Prevent ellipsizing | 65 // Prevent ellipsizing |
| 66 NO_ELLIPSIS = 1 << 6, | 66 NO_ELLIPSIS = 1 << 6, |
| 67 | 67 |
| 68 // Specifies if words can be split by new lines. | 68 // Specifies if words can be split by new lines. |
| 69 // This only works with MULTI_LINE. | 69 // This only works with MULTI_LINE. |
| 70 CHARACTER_BREAK = 1 << 7, | 70 CHARACTER_BREAK = 1 << 7, |
| 71 | 71 |
| 72 // Instructs DrawStringInt() to render the text using RTL directionality. | 72 // Instructs DrawStringRect() to render the text using RTL directionality. |
| 73 // In most cases, passing this flag is not necessary because information | 73 // In most cases, passing this flag is not necessary because information |
| 74 // about the text directionality is going to be embedded within the string | 74 // about the text directionality is going to be embedded within the string |
| 75 // in the form of special Unicode characters. However, we don't insert | 75 // in the form of special Unicode characters. However, we don't insert |
| 76 // directionality characters into strings if the locale is LTR because some | 76 // directionality characters into strings if the locale is LTR because some |
| 77 // platforms (for example, an English Windows XP with no RTL fonts | 77 // platforms (for example, an English Windows XP with no RTL fonts |
| 78 // installed) don't support these characters. Thus, this flag should be | 78 // installed) don't support these characters. Thus, this flag should be |
| 79 // used to render text using RTL directionality when the locale is LTR. | 79 // used to render text using RTL directionality when the locale is LTR. |
| 80 FORCE_RTL_DIRECTIONALITY = 1 << 8, | 80 FORCE_RTL_DIRECTIONALITY = 1 << 8, |
| 81 | 81 |
| 82 // Similar to FORCE_RTL_DIRECTIONALITY, but left-to-right. | 82 // Similar to FORCE_RTL_DIRECTIONALITY, but left-to-right. |
| 83 // See FORCE_RTL_DIRECTIONALITY for details. | 83 // See FORCE_RTL_DIRECTIONALITY for details. |
| 84 FORCE_LTR_DIRECTIONALITY = 1 << 9, | 84 FORCE_LTR_DIRECTIONALITY = 1 << 9, |
| 85 | 85 |
| 86 // Instructs DrawStringInt() to not use subpixel rendering. This is useful | 86 // Instructs DrawStringRect() to not use subpixel rendering. This is useful |
| 87 // when rendering text onto a fully- or partially-transparent background | 87 // when rendering text onto a fully- or partially-transparent background |
| 88 // that will later be blended with another image. | 88 // that will later be blended with another image. |
| 89 NO_SUBPIXEL_RENDERING = 1 << 10, | 89 NO_SUBPIXEL_RENDERING = 1 << 10, |
| 90 }; | 90 }; |
| 91 | 91 |
| 92 // Creates an empty canvas with image_scale of 1x. | 92 // Creates an empty canvas with image_scale of 1x. |
| 93 Canvas(); | 93 Canvas(); |
| 94 | 94 |
| 95 // Creates canvas with provided DIP |size| and |image_scale|. | 95 // Creates canvas with provided DIP |size| and |image_scale|. |
| 96 // If this canvas is not opaque, it's explicitly cleared to transparent before | 96 // If this canvas is not opaque, it's explicitly cleared to transparent before |
| (...skipping 26 matching lines...) Expand all Loading... |
| 123 // Attempts to fit the text with the provided width and height. Increases | 123 // Attempts to fit the text with the provided width and height. Increases |
| 124 // height and then width as needed to make the text fit. This method | 124 // height and then width as needed to make the text fit. This method |
| 125 // supports multiple lines. On Skia only a line_height can be specified and | 125 // supports multiple lines. On Skia only a line_height can be specified and |
| 126 // specifying a 0 value for it will cause the default height to be used. | 126 // specifying a 0 value for it will cause the default height to be used. |
| 127 static void SizeStringInt(const base::string16& text, | 127 static void SizeStringInt(const base::string16& text, |
| 128 const FontList& font_list, | 128 const FontList& font_list, |
| 129 int* width, | 129 int* width, |
| 130 int* height, | 130 int* height, |
| 131 int line_height, | 131 int line_height, |
| 132 int flags); | 132 int flags); |
| 133 // Obsolete version. Use the above version which takes FontList. | |
| 134 static void SizeStringInt(const base::string16& text, | |
| 135 const Font& font, | |
| 136 int* width, | |
| 137 int* height, | |
| 138 int line_height, | |
| 139 int flags); | |
| 140 | 133 |
| 141 // This is same as SizeStringInt except that fractional size is returned. | 134 // This is same as SizeStringInt except that fractional size is returned. |
| 142 // See comment in GetStringWidthF for its usage. | 135 // See comment in GetStringWidthF for its usage. |
| 143 static void SizeStringFloat(const base::string16& text, | 136 static void SizeStringFloat(const base::string16& text, |
| 144 const FontList& font_list, | 137 const FontList& font_list, |
| 145 float* width, | 138 float* width, |
| 146 float* height, | 139 float* height, |
| 147 int line_height, | 140 int line_height, |
| 148 int flags); | 141 int flags); |
| 149 | 142 |
| 150 // Returns the number of horizontal pixels needed to display the specified | 143 // Returns the number of horizontal pixels needed to display the specified |
| 151 // |text| with |font_list|. | 144 // |text| with |font_list|. |
| 152 static int GetStringWidth(const base::string16& text, | 145 static int GetStringWidth(const base::string16& text, |
| 153 const FontList& font_list); | 146 const FontList& font_list); |
| 154 // Obsolete version. Use the above version which takes FontList. | 147 // Obsolete version. Use the above version which takes FontList. |
| 155 static int GetStringWidth(const base::string16& text, const Font& font); | 148 static int GetStringWidth(const base::string16& text, const Font& font); |
| 156 | 149 |
| 157 // This is same as GetStringWidth except that fractional width is returned. | 150 // This is same as GetStringWidth except that fractional width is returned. |
| 158 // Use this method for the scenario that multiple string widths need to be | 151 // Use this method for the scenario that multiple string widths need to be |
| 159 // summed up. This is because GetStringWidth returns the ceiled width and | 152 // summed up. This is because GetStringWidth returns the ceiled width and |
| 160 // adding multiple ceiled widths could cause more precision loss for certain | 153 // adding multiple ceiled widths could cause more precision loss for certain |
| 161 // platform like Mac where the fractioal width is used. | 154 // platform like Mac where the fractioal width is used. |
| 162 static float GetStringWidthF(const base::string16& text, | 155 static float GetStringWidthF(const base::string16& text, |
| 163 const FontList& font_list); | 156 const FontList& font_list); |
| 164 | 157 |
| 165 // Returns the default text alignment to be used when drawing text on a | 158 // Returns the default text alignment to be used when drawing text on a |
| 166 // Canvas based on the directionality of the system locale language. | 159 // Canvas based on the directionality of the system locale language. |
| 167 // This function is used by Canvas::DrawStringInt when the text alignment | 160 // This function is used by Canvas::DrawStringRect when the text alignment |
| 168 // is not specified. | 161 // is not specified. |
| 169 // | 162 // |
| 170 // This function returns either Canvas::TEXT_ALIGN_LEFT or | 163 // This function returns either Canvas::TEXT_ALIGN_LEFT or |
| 171 // Canvas::TEXT_ALIGN_RIGHT. | 164 // Canvas::TEXT_ALIGN_RIGHT. |
| 172 static int DefaultCanvasTextAlignment(); | 165 static int DefaultCanvasTextAlignment(); |
| 173 | 166 |
| 174 // Draws text with a 1-pixel halo around it of the given color. | 167 // Draws text with a 1-pixel halo around it of the given color. |
| 175 // On Windows, it allows ClearType to be drawn to an otherwise transparent | 168 // On Windows, it allows ClearType to be drawn to an otherwise transparent |
| 176 // bitmap for drag images. Drag images have only 1-bit of transparency, so | 169 // bitmap for drag images. Drag images have only 1-bit of transparency, so |
| 177 // we don't do any fancy blurring. | 170 // we don't do any fancy blurring. |
| 178 // On Linux, text with halo is created by stroking it with 2px |halo_color| | 171 // On Linux, text with halo is created by stroking it with 2px |halo_color| |
| 179 // then filling it with |text_color|. | 172 // then filling it with |text_color|. |
| 180 // On Mac, NOTIMPLEMENTED. | 173 // On Mac, NOTIMPLEMENTED. |
| 181 // TODO(dhollowa): Skia-native implementation is underway. Cut over to | 174 // TODO(dhollowa): Skia-native implementation is underway. Cut over to |
| 182 // that when ready. http::/crbug.com/109946 | 175 // that when ready. http::/crbug.com/109946 |
| 183 void DrawStringRectWithHalo(const base::string16& text, | 176 void DrawStringRectWithHalo(const base::string16& text, |
| 184 const FontList& font_list, | 177 const FontList& font_list, |
| 185 SkColor text_color, | 178 SkColor text_color, |
| 186 SkColor halo_color, | 179 SkColor halo_color, |
| 187 const Rect& display_rect, | 180 const Rect& display_rect, |
| 188 int flags); | 181 int flags); |
| 189 // Obsolete version. Use the above version which takes FontList. | |
| 190 void DrawStringWithHalo(const base::string16& text, | |
| 191 const Font& font, | |
| 192 SkColor text_color, | |
| 193 SkColor halo_color, | |
| 194 int x, | |
| 195 int y, | |
| 196 int w, | |
| 197 int h, | |
| 198 int flags); | |
| 199 | 182 |
| 200 // Extracts an ImageSkiaRep from the contents of this canvas. | 183 // Extracts an ImageSkiaRep from the contents of this canvas. |
| 201 ImageSkiaRep ExtractImageRep() const; | 184 ImageSkiaRep ExtractImageRep() const; |
| 202 | 185 |
| 203 // Draws a dashed rectangle of the specified color. | 186 // Draws a dashed rectangle of the specified color. |
| 204 void DrawDashedRect(const Rect& rect, SkColor color); | 187 void DrawDashedRect(const Rect& rect, SkColor color); |
| 205 | 188 |
| 206 // Saves a copy of the drawing state onto a stack, operating on this copy | 189 // Saves a copy of the drawing state onto a stack, operating on this copy |
| 207 // until a balanced call to Restore() is made. | 190 // until a balanced call to Restore() is made. |
| 208 void Save(); | 191 void Save(); |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 const SkPath& path, | 332 const SkPath& path, |
| 350 const SkPaint& paint); | 333 const SkPaint& paint); |
| 351 | 334 |
| 352 // Draws text with the specified color, fonts and location. The text is | 335 // Draws text with the specified color, fonts and location. The text is |
| 353 // aligned to the left, vertically centered, clipped to the region. If the | 336 // aligned to the left, vertically centered, clipped to the region. If the |
| 354 // text is too big, it is truncated and '...' is added to the end. | 337 // text is too big, it is truncated and '...' is added to the end. |
| 355 void DrawStringRect(const base::string16& text, | 338 void DrawStringRect(const base::string16& text, |
| 356 const FontList& font_list, | 339 const FontList& font_list, |
| 357 SkColor color, | 340 SkColor color, |
| 358 const Rect& display_rect); | 341 const Rect& display_rect); |
| 359 // Obsolete versions. Use the above versions which take FontList. | |
| 360 void DrawStringInt(const base::string16& text, | |
| 361 const Font& font, | |
| 362 SkColor color, | |
| 363 int x, | |
| 364 int y, | |
| 365 int w, | |
| 366 int h); | |
| 367 void DrawStringInt(const base::string16& text, | |
| 368 const Font& font, | |
| 369 SkColor color, | |
| 370 const Rect& display_rect); | |
| 371 | 342 |
| 372 // Draws text with the specified color, fonts and location. The last argument | 343 // Draws text with the specified color, fonts and location. The last argument |
| 373 // specifies flags for how the text should be rendered. It can be one of | 344 // specifies flags for how the text should be rendered. It can be one of |
| 374 // TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT or TEXT_ALIGN_LEFT. | 345 // TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT or TEXT_ALIGN_LEFT. |
| 375 void DrawStringRectWithFlags(const base::string16& text, | 346 void DrawStringRectWithFlags(const base::string16& text, |
| 376 const FontList& font_list, | 347 const FontList& font_list, |
| 377 SkColor color, | 348 SkColor color, |
| 378 const Rect& display_rect, | 349 const Rect& display_rect, |
| 379 int flags); | 350 int flags); |
| 380 // Obsolete version. Use the above version which takes FontList. | |
| 381 void DrawStringInt(const base::string16& text, | |
| 382 const Font& font, | |
| 383 SkColor color, | |
| 384 int x, | |
| 385 int y, | |
| 386 int w, | |
| 387 int h, | |
| 388 int flags); | |
| 389 | 351 |
| 390 // Similar to above DrawStringInt method but with text shadows support. | 352 // Similar to above DrawStringRect method but with text shadows support. |
| 391 // Currently it's only implemented for canvas skia. Specifying a 0 line_height | 353 // Currently it's only implemented for canvas skia. Specifying a 0 line_height |
| 392 // will cause the default height to be used. | 354 // will cause the default height to be used. |
| 393 void DrawStringRectWithShadows(const base::string16& text, | 355 void DrawStringRectWithShadows(const base::string16& text, |
| 394 const FontList& font_list, | 356 const FontList& font_list, |
| 395 SkColor color, | 357 SkColor color, |
| 396 const Rect& text_bounds, | 358 const Rect& text_bounds, |
| 397 int line_height, | 359 int line_height, |
| 398 int flags, | 360 int flags, |
| 399 const ShadowValues& shadows); | 361 const ShadowValues& shadows); |
| 400 // Obsolete version. Use the above version which takes FontList. | |
| 401 void DrawStringWithShadows(const base::string16& text, | |
| 402 const Font& font, | |
| 403 SkColor color, | |
| 404 const Rect& text_bounds, | |
| 405 int line_height, | |
| 406 int flags, | |
| 407 const ShadowValues& shadows); | |
| 408 | 362 |
| 409 // Draws a dotted gray rectangle used for focus purposes. | 363 // Draws a dotted gray rectangle used for focus purposes. |
| 410 void DrawFocusRect(const Rect& rect); | 364 void DrawFocusRect(const Rect& rect); |
| 411 | 365 |
| 412 // Draws a |rect| in the specified region with the specified |color| with a | 366 // Draws a |rect| in the specified region with the specified |color| with a |
| 413 // with of one logical pixel which might be more device pixels. | 367 // with of one logical pixel which might be more device pixels. |
| 414 void DrawSolidFocusRect(const Rect& rect, SkColor color); | 368 void DrawSolidFocusRect(const Rect& rect, SkColor color); |
| 415 | 369 |
| 416 // Tiles the image in the specified region. | 370 // Tiles the image in the specified region. |
| 417 // Parameters are specified relative to current canvas scale not in pixels. | 371 // Parameters are specified relative to current canvas scale not in pixels. |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 493 | 447 |
| 494 skia::RefPtr<skia::PlatformCanvas> owned_canvas_; | 448 skia::RefPtr<skia::PlatformCanvas> owned_canvas_; |
| 495 SkCanvas* canvas_; | 449 SkCanvas* canvas_; |
| 496 | 450 |
| 497 DISALLOW_COPY_AND_ASSIGN(Canvas); | 451 DISALLOW_COPY_AND_ASSIGN(Canvas); |
| 498 }; | 452 }; |
| 499 | 453 |
| 500 } // namespace gfx | 454 } // namespace gfx |
| 501 | 455 |
| 502 #endif // UI_GFX_CANVAS_H_ | 456 #endif // UI_GFX_CANVAS_H_ |
| OLD | NEW |