Index: ui/gfx/canvas.h |
diff --git a/ui/gfx/canvas.h b/ui/gfx/canvas.h |
deleted file mode 100644 |
index c8fd2849bcdcb2f2c35ad838bc2bab60d40de638..0000000000000000000000000000000000000000 |
--- a/ui/gfx/canvas.h |
+++ /dev/null |
@@ -1,465 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef UI_GFX_CANVAS_H_ |
-#define UI_GFX_CANVAS_H_ |
- |
-#include <vector> |
- |
-#include "base/basictypes.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/strings/string16.h" |
-#include "skia/ext/platform_canvas.h" |
-#include "skia/ext/refptr.h" |
-#include "ui/gfx/image/image_skia.h" |
-#include "ui/gfx/native_widget_types.h" |
-#include "ui/gfx/shadow_value.h" |
-#include "ui/gfx/text_constants.h" |
- |
-namespace gfx { |
- |
-class Rect; |
-class FontList; |
-class Point; |
-class Size; |
-class Transform; |
- |
-// Canvas is a SkCanvas wrapper that provides a number of methods for |
-// common operations used throughout an application built using ui/gfx. |
-// |
-// All methods that take integer arguments (as is used throughout views) |
-// end with Int. If you need to use methods provided by SkCanvas, you'll |
-// need to do a conversion. In particular you'll need to use |SkIntToScalar()|, |
-// or if converting from a scalar to an integer |SkScalarRound()|. |
-// |
-// A handful of methods in this class are overloaded providing an additional |
-// argument of type SkXfermode::Mode. SkXfermode::Mode specifies how the |
-// source and destination colors are combined. Unless otherwise specified, |
-// the variant that does not take a SkXfermode::Mode uses a transfer mode |
-// of kSrcOver_Mode. |
-class GFX_EXPORT Canvas { |
- public: |
- // Specifies the alignment for text rendered with the DrawStringRect method. |
- enum { |
- TEXT_ALIGN_LEFT = 1 << 0, |
- TEXT_ALIGN_CENTER = 1 << 1, |
- TEXT_ALIGN_RIGHT = 1 << 2, |
- |
- // Specifies the text consists of multiple lines. |
- MULTI_LINE = 1 << 3, |
- |
- // By default DrawStringRect does not process the prefix ('&') character |
- // specially. That is, the string "&foo" is rendered as "&foo". When |
- // rendering text from a resource that uses the prefix character for |
- // mnemonics, the prefix should be processed and can be rendered as an |
- // underline (SHOW_PREFIX), or not rendered at all (HIDE_PREFIX). |
- SHOW_PREFIX = 1 << 4, |
- HIDE_PREFIX = 1 << 5, |
- |
- // Prevent ellipsizing |
- NO_ELLIPSIS = 1 << 6, |
- |
- // Specifies if words can be split by new lines. |
- // This only works with MULTI_LINE. |
- CHARACTER_BREAK = 1 << 7, |
- |
- // Instructs DrawStringRect() to render the text using RTL directionality. |
- // In most cases, passing this flag is not necessary because information |
- // about the text directionality is going to be embedded within the string |
- // in the form of special Unicode characters. However, we don't insert |
- // directionality characters into strings if the locale is LTR because some |
- // platforms (for example, an English Windows XP with no RTL fonts |
- // installed) don't support these characters. Thus, this flag should be |
- // used to render text using RTL directionality when the locale is LTR. |
- FORCE_RTL_DIRECTIONALITY = 1 << 8, |
- |
- // Similar to FORCE_RTL_DIRECTIONALITY, but left-to-right. |
- // See FORCE_RTL_DIRECTIONALITY for details. |
- FORCE_LTR_DIRECTIONALITY = 1 << 9, |
- |
- // Instructs DrawStringRect() to not use subpixel rendering. This is useful |
- // when rendering text onto a fully- or partially-transparent background |
- // that will later be blended with another image. |
- NO_SUBPIXEL_RENDERING = 1 << 10, |
- }; |
- |
- // Creates an empty canvas with image_scale of 1x. |
- Canvas(); |
- |
- // Creates canvas with provided DIP |size| and |image_scale|. |
- // If this canvas is not opaque, it's explicitly cleared to transparent before |
- // being returned. |
- Canvas(const Size& size, float image_scale, bool is_opaque); |
- |
- // Constructs a canvas with the size and the image_scale of the provided |
- // |image_rep|, and draws the |image_rep| into it. |
- Canvas(const ImageSkiaRep& image_rep, bool is_opaque); |
- |
- virtual ~Canvas(); |
- |
- // Creates a Canvas backed by an |sk_canvas| with |image_scale_|. |
- // |sk_canvas| is assumed to be already scaled based on |image_scale| |
- // so no additional scaling is applied. |
- static Canvas* CreateCanvasWithoutScaling(SkCanvas* sk_canvas, |
- float image_scale); |
- |
- // Recreates the backing platform canvas with DIP |size| and |image_scale_|. |
- // If the canvas is not opaque, it is explicitly cleared. |
- // This method is public so that canvas_skia_paint can recreate the platform |
- // canvas after having initialized the canvas. |
- // TODO(pkotwicz): Push the image_scale into skia::PlatformCanvas such that |
- // this method can be private. |
- void RecreateBackingCanvas(const Size& size, |
- float image_scale, |
- bool is_opaque); |
- |
- // Compute the size required to draw some text with the provided fonts. |
- // Attempts to fit the text with the provided width and height. Increases |
- // height and then width as needed to make the text fit. This method |
- // supports multiple lines. On Skia only a line_height can be specified and |
- // specifying a 0 value for it will cause the default height to be used. |
- static void SizeStringInt(const base::string16& text, |
- const FontList& font_list, |
- int* width, |
- int* height, |
- int line_height, |
- int flags); |
- |
- // This is same as SizeStringInt except that fractional size is returned. |
- // See comment in GetStringWidthF for its usage. |
- static void SizeStringFloat(const base::string16& text, |
- const FontList& font_list, |
- float* width, |
- float* height, |
- int line_height, |
- int flags); |
- |
- // Returns the number of horizontal pixels needed to display the specified |
- // |text| with |font_list|. |
- static int GetStringWidth(const base::string16& text, |
- const FontList& font_list); |
- |
- // This is same as GetStringWidth except that fractional width is returned. |
- // Use this method for the scenario that multiple string widths need to be |
- // summed up. This is because GetStringWidth returns the ceiled width and |
- // adding multiple ceiled widths could cause more precision loss for certain |
- // platform like Mac where the fractioal width is used. |
- static float GetStringWidthF(const base::string16& text, |
- const FontList& font_list); |
- |
- // Returns the default text alignment to be used when drawing text on a |
- // Canvas based on the directionality of the system locale language. |
- // This function is used by Canvas::DrawStringRect when the text alignment |
- // is not specified. |
- // |
- // This function returns either Canvas::TEXT_ALIGN_LEFT or |
- // Canvas::TEXT_ALIGN_RIGHT. |
- static int DefaultCanvasTextAlignment(); |
- |
- // Draws text with a 1-pixel halo around it of the given color. |
- // On Windows, it allows ClearType to be drawn to an otherwise transparent |
- // bitmap for drag images. Drag images have only 1-bit of transparency, so |
- // we don't do any fancy blurring. |
- // On Linux, text with halo is created by stroking it with 2px |halo_color| |
- // then filling it with |text_color|. |
- // On Mac, NOTIMPLEMENTED. |
- // TODO(dhollowa): Skia-native implementation is underway. Cut over to |
- // that when ready. http::/crbug.com/109946 |
- void DrawStringRectWithHalo(const base::string16& text, |
- const FontList& font_list, |
- SkColor text_color, |
- SkColor halo_color, |
- const Rect& display_rect, |
- int flags); |
- |
- // Extracts an ImageSkiaRep from the contents of this canvas. |
- ImageSkiaRep ExtractImageRep() const; |
- |
- // Draws a dashed rectangle of the specified color. |
- void DrawDashedRect(const Rect& rect, SkColor color); |
- |
- // Saves a copy of the drawing state onto a stack, operating on this copy |
- // until a balanced call to Restore() is made. |
- void Save(); |
- |
- // As with Save(), except draws to a layer that is blended with the canvas |
- // at the specified alpha once Restore() is called. |
- // |layer_bounds| are the bounds of the layer relative to the current |
- // transform. |
- void SaveLayerAlpha(uint8 alpha); |
- void SaveLayerAlpha(uint8 alpha, const Rect& layer_bounds); |
- |
- // Restores the drawing state after a call to Save*(). It is an error to |
- // call Restore() more times than Save*(). |
- void Restore(); |
- |
- // Adds |rect| to the current clip. |
- void ClipRect(const Rect& rect); |
- |
- // Adds |path| to the current clip. |do_anti_alias| is true if the clip |
- // should be antialiased. |
- void ClipPath(const SkPath& path, bool do_anti_alias); |
- |
- // Returns true if the current clip is empty. |
- bool IsClipEmpty() const; |
- |
- // Returns the bounds of the current clip (in local coordinates) in the |
- // |bounds| parameter, and returns true if it is non empty. |
- bool GetClipBounds(Rect* bounds); |
- |
- void Translate(const Vector2d& offset); |
- |
- void Scale(int x_scale, int y_scale); |
- |
- // Fills the entire canvas' bitmap (restricted to current clip) with |
- // specified |color| using a transfer mode of SkXfermode::kSrcOver_Mode. |
- void DrawColor(SkColor color); |
- |
- // Fills the entire canvas' bitmap (restricted to current clip) with |
- // specified |color| and |mode|. |
- void DrawColor(SkColor color, SkXfermode::Mode mode); |
- |
- // Fills |rect| with |color| using a transfer mode of |
- // SkXfermode::kSrcOver_Mode. |
- void FillRect(const Rect& rect, SkColor color); |
- |
- // Fills |rect| with the specified |color| and |mode|. |
- void FillRect(const Rect& rect, SkColor color, SkXfermode::Mode mode); |
- |
- // Draws a single pixel rect in the specified region with the specified |
- // color, using a transfer mode of SkXfermode::kSrcOver_Mode. |
- // |
- // NOTE: if you need a single pixel line, use DrawLine. |
- void DrawRect(const Rect& rect, SkColor color); |
- |
- // Draws a single pixel rect in the specified region with the specified |
- // color and transfer mode. |
- // |
- // NOTE: if you need a single pixel line, use DrawLine. |
- void DrawRect(const Rect& rect, SkColor color, SkXfermode::Mode mode); |
- |
- // Draws the given rectangle with the given |paint| parameters. |
- void DrawRect(const Rect& rect, const SkPaint& paint); |
- |
- // Draw the given point with the given |paint| parameters. |
- void DrawPoint(const Point& p, const SkPaint& paint); |
- |
- // Draws a single pixel line with the specified color. |
- void DrawLine(const Point& p1, const Point& p2, SkColor color); |
- |
- // Draws a line with the given |paint| parameters. |
- void DrawLine(const Point& p1, const Point& p2, const SkPaint& paint); |
- |
- // Draws a circle with the given |paint| parameters. |
- void DrawCircle(const Point& center_point, |
- int radius, |
- const SkPaint& paint); |
- |
- // Draws the given rectangle with rounded corners of |radius| using the |
- // given |paint| parameters. |
- void DrawRoundRect(const Rect& rect, int radius, const SkPaint& paint); |
- |
- // Draws the given path using the given |paint| parameters. |
- void DrawPath(const SkPath& path, const SkPaint& paint); |
- |
- // Draws an image with the origin at the specified location. The upper left |
- // corner of the bitmap is rendered at the specified location. |
- // Parameters are specified relative to current canvas scale not in pixels. |
- // Thus, x is 2 pixels if canvas scale = 2 & |x| = 1. |
- void DrawImageInt(const ImageSkia&, int x, int y); |
- |
- // Helper for DrawImageInt(..., paint) that constructs a temporary paint and |
- // calls paint.setAlpha(alpha). |
- void DrawImageInt(const ImageSkia&, int x, int y, uint8 alpha); |
- |
- // Draws an image with the origin at the specified location, using the |
- // specified paint. The upper left corner of the bitmap is rendered at the |
- // specified location. |
- // Parameters are specified relative to current canvas scale not in pixels. |
- // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1. |
- void DrawImageInt(const ImageSkia& image, |
- int x, |
- int y, |
- const SkPaint& paint); |
- |
- // Draws a portion of an image in the specified location. The src parameters |
- // correspond to the region of the bitmap to draw in the region defined |
- // by the dest coordinates. |
- // |
- // If the width or height of the source differs from that of the destination, |
- // the image will be scaled. When scaling down, a mipmap will be generated. |
- // Set |filter| to use filtering for images, otherwise the nearest-neighbor |
- // algorithm is used for resampling. |
- // |
- // An optional custom SkPaint can be provided. |
- // Parameters are specified relative to current canvas scale not in pixels. |
- // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1. |
- void DrawImageInt(const ImageSkia& image, |
- int src_x, |
- int src_y, |
- int src_w, |
- int src_h, |
- int dest_x, |
- int dest_y, |
- int dest_w, |
- int dest_h, |
- bool filter); |
- void DrawImageInt(const ImageSkia& image, |
- int src_x, |
- int src_y, |
- int src_w, |
- int src_h, |
- int dest_x, |
- int dest_y, |
- int dest_w, |
- int dest_h, |
- bool filter, |
- const SkPaint& paint); |
- |
- // Same as the DrawImageInt functions above. Difference being this does not |
- // do any scaling, i.e. it assumes that the source/destination/image, etc are |
- // in pixels. It does translate the destination rectangle to ensure that the |
- // image is displayed at the correct pixel coordinates. |
- void DrawImageIntInPixel(const ImageSkia& image, |
- int src_x, |
- int src_y, |
- int src_w, |
- int src_h, |
- int dest_x, |
- int dest_y, |
- int dest_w, |
- int dest_h, |
- bool filter, |
- const SkPaint& paint); |
- |
- // Draws an |image| with the top left corner at |x| and |y|, clipped to |
- // |path|. |
- // Parameters are specified relative to current canvas scale not in pixels. |
- // Thus, x is 2 pixels if canvas scale = 2 & |x| = 1. |
- void DrawImageInPath(const ImageSkia& image, |
- int x, |
- int y, |
- const SkPath& path, |
- const SkPaint& paint); |
- |
- // Draws text with the specified color, fonts and location. The text is |
- // aligned to the left, vertically centered, clipped to the region. If the |
- // text is too big, it is truncated and '...' is added to the end. |
- void DrawStringRect(const base::string16& text, |
- const FontList& font_list, |
- SkColor color, |
- const Rect& display_rect); |
- |
- // Draws text with the specified color, fonts and location. The last argument |
- // specifies flags for how the text should be rendered. It can be one of |
- // TEXT_ALIGN_CENTER, TEXT_ALIGN_RIGHT or TEXT_ALIGN_LEFT. |
- void DrawStringRectWithFlags(const base::string16& text, |
- const FontList& font_list, |
- SkColor color, |
- const Rect& display_rect, |
- int flags); |
- |
- // Similar to above DrawStringRect method but with text shadows support. |
- // Currently it's only implemented for canvas skia. Specifying a 0 line_height |
- // will cause the default height to be used. |
- void DrawStringRectWithShadows(const base::string16& text, |
- const FontList& font_list, |
- SkColor color, |
- const Rect& text_bounds, |
- int line_height, |
- int flags, |
- const ShadowValues& shadows); |
- |
- // Draws a dotted gray rectangle used for focus purposes. |
- void DrawFocusRect(const Rect& rect); |
- |
- // Draws a |rect| in the specified region with the specified |color| with a |
- // with of one logical pixel which might be more device pixels. |
- void DrawSolidFocusRect(const Rect& rect, SkColor color); |
- |
- // Tiles the image in the specified region. |
- // Parameters are specified relative to current canvas scale not in pixels. |
- // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1. |
- void TileImageInt(const ImageSkia& image, |
- int x, |
- int y, |
- int w, |
- int h); |
- void TileImageInt(const ImageSkia& image, |
- int src_x, |
- int src_y, |
- int dest_x, |
- int dest_y, |
- int w, |
- int h); |
- void TileImageInt(const ImageSkia& image, |
- int src_x, |
- int src_y, |
- float tile_scale_x, |
- float tile_scale_y, |
- int dest_x, |
- int dest_y, |
- int w, |
- int h); |
- |
- // Returns a native drawing context for platform specific drawing routines to |
- // use. Must be balanced by a call to EndPlatformPaint(). |
- NativeDrawingContext BeginPlatformPaint(); |
- |
- // Signifies the end of platform drawing using the native drawing context |
- // returned by BeginPlatformPaint(). |
- void EndPlatformPaint(); |
- |
- // Apply transformation on the canvas. |
- void Transform(const Transform& transform); |
- |
- // Draws the given string with a fade gradient at the end. |
- void DrawFadedString(const base::string16& text, |
- const FontList& font_list, |
- SkColor color, |
- const Rect& display_rect, |
- int flags); |
- |
- skia::PlatformCanvas* platform_canvas() { return owned_canvas_.get(); } |
- SkCanvas* sk_canvas() { return canvas_; } |
- float image_scale() const { return image_scale_; } |
- |
- private: |
- Canvas(SkCanvas* canvas, float image_scale); |
- |
- // Test whether the provided rectangle intersects the current clip rect. |
- bool IntersectsClipRectInt(int x, int y, int w, int h); |
- bool IntersectsClipRect(const Rect& rect); |
- |
- // Helper for the DrawImageInt functions declared above. The |pixel| |
- // parameter if true indicates that the bounds and the image are to |
- // be assumed to be in pixels, i.e. no scaling needs to be performed. |
- void DrawImageIntHelper(const ImageSkia& image, |
- int src_x, |
- int src_y, |
- int src_w, |
- int src_h, |
- int dest_x, |
- int dest_y, |
- int dest_w, |
- int dest_h, |
- bool filter, |
- const SkPaint& paint, |
- float image_scale, |
- bool pixel); |
- |
- // The device scale factor at which drawing on this canvas occurs. |
- // An additional scale can be applied via Canvas::Scale(). However, |
- // Canvas::Scale() does not affect |image_scale_|. |
- float image_scale_; |
- |
- skia::RefPtr<skia::PlatformCanvas> owned_canvas_; |
- SkCanvas* canvas_; |
- |
- DISALLOW_COPY_AND_ASSIGN(Canvas); |
-}; |
- |
-} // namespace gfx |
- |
-#endif // UI_GFX_CANVAS_H_ |