- add sources.
[platform/framework/web/crosswalk.git] / src / skia / ext / analysis_canvas.h
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef SKIA_EXT_ANALYSIS_CANVAS_H_
6 #define SKIA_EXT_ANALYSIS_CANVAS_H_
7
8 #include "base/compiler_specific.h"
9 #include "third_party/skia/include/core/SkBitmapDevice.h"
10 #include "third_party/skia/include/core/SkCanvas.h"
11 #include "third_party/skia/include/core/SkPicture.h"
12
13 namespace skia {
14
15 class AnalysisDevice;
16
17 // Does not render anything, but gathers statistics about a region
18 // (specified as a clip rectangle) of an SkPicture as the picture is
19 // played back through it.
20 // To use: create a SkBitmap with kNo_Config, create an AnalysisDevice
21 // using that bitmap, and create an AnalysisCanvas using the device.
22 // Play a picture into the canvas, and then check result.
23 class SK_API AnalysisCanvas : public SkCanvas, public SkDrawPictureCallback {
24  public:
25   AnalysisCanvas(AnalysisDevice*);
26   virtual ~AnalysisCanvas();
27
28   // Returns true when a SkColor can be used to represent result.
29   bool GetColorIfSolid(SkColor* color) const;
30   bool HasText() const;
31
32   // SkDrawPictureCallback override.
33   virtual bool abortDrawing() OVERRIDE;
34
35   // SkCanvas overrides.
36   virtual bool clipRect(const SkRect& rect,
37                         SkRegion::Op op = SkRegion::kIntersect_Op,
38                         bool do_anti_alias = false) OVERRIDE;
39   virtual bool clipPath(const SkPath& path,
40                         SkRegion::Op op = SkRegion::kIntersect_Op,
41                         bool do_anti_alias = false) OVERRIDE;
42   virtual bool clipRRect(const SkRRect& rrect,
43                          SkRegion::Op op = SkRegion::kIntersect_Op,
44                          bool do_anti_alias = false) OVERRIDE;
45
46   virtual int saveLayer(const SkRect* bounds,
47                         const SkPaint* paint,
48                         SkCanvas::SaveFlags flags) OVERRIDE;
49   virtual int save(SaveFlags flags = kMatrixClip_SaveFlag) OVERRIDE;
50
51   virtual void restore() OVERRIDE;
52
53  private:
54   typedef SkCanvas INHERITED;
55
56   int saved_stack_size_;
57   int force_not_solid_stack_level_;
58   int force_not_transparent_stack_level_;
59 };
60
61 // TODO(robertphillips): Once Skia's SkBaseDevice API is refactored to
62 // remove the bitmap-specific entry points, it might make sense for this
63 // to be derived from SkBaseDevice (rather than SkBitmapDevice)
64 class SK_API AnalysisDevice : public SkBitmapDevice {
65  public:
66   AnalysisDevice(const SkBitmap& bitmap);
67   virtual ~AnalysisDevice();
68
69   bool GetColorIfSolid(SkColor* color) const;
70   bool HasText() const;
71
72   void SetForceNotSolid(bool flag);
73   void SetForceNotTransparent(bool flag);
74
75  protected:
76   // SkBaseDevice overrides.
77   virtual void clear(SkColor color) OVERRIDE;
78   virtual void drawPaint(const SkDraw& draw, const SkPaint& paint) OVERRIDE;
79   virtual void drawPoints(const SkDraw& draw,
80                           SkCanvas::PointMode mode,
81                           size_t count,
82                           const SkPoint points[],
83                           const SkPaint& paint) OVERRIDE;
84   virtual void drawRect(const SkDraw& draw,
85                         const SkRect& rect,
86                         const SkPaint& paint) OVERRIDE;
87   virtual void drawOval(const SkDraw& draw,
88                         const SkRect& oval,
89                         const SkPaint& paint) OVERRIDE;
90   virtual void drawPath(const SkDraw& draw,
91                         const SkPath& path,
92                         const SkPaint& paint,
93                         const SkMatrix* pre_path_matrix = NULL,
94                         bool path_is_mutable = false) OVERRIDE;
95   virtual void drawBitmap(const SkDraw& draw,
96                           const SkBitmap& bitmap,
97                           const SkMatrix& matrix,
98                           const SkPaint& paint) OVERRIDE;
99   virtual void drawSprite(const SkDraw& draw,
100                           const SkBitmap& bitmap,
101                           int x,
102                           int y,
103                           const SkPaint& paint) OVERRIDE;
104   virtual void drawBitmapRect(const SkDraw& draw,
105                               const SkBitmap& bitmap,
106                               const SkRect* src_or_null,
107                               const SkRect& dst,
108                               const SkPaint& paint,
109                               SkCanvas::DrawBitmapRectFlags flags) OVERRIDE;
110   virtual void drawText(const SkDraw& draw,
111                         const void* text,
112                         size_t len,
113                         SkScalar x,
114                         SkScalar y,
115                         const SkPaint& paint) OVERRIDE;
116   virtual void drawPosText(const SkDraw& draw,
117                            const void* text,
118                            size_t len,
119                            const SkScalar pos[],
120                            SkScalar const_y,
121                            int scalars_per_pos,
122                            const SkPaint& paint) OVERRIDE;
123   virtual void drawTextOnPath(const SkDraw& draw,
124                               const void* text,
125                               size_t len,
126                               const SkPath& path,
127                               const SkMatrix* matrix,
128                               const SkPaint& paint) OVERRIDE;
129 #ifdef SK_BUILD_FOR_ANDROID
130   virtual void drawPosTextOnPath(const SkDraw& draw,
131                                  const void* text,
132                                  size_t len,
133                                  const SkPoint pos[],
134                                  const SkPaint& paint,
135                                  const SkPath& path,
136                                  const SkMatrix* matrix) OVERRIDE;
137 #endif
138   virtual void drawVertices(const SkDraw& draw,
139                             SkCanvas::VertexMode vertex_mode,
140                             int vertex_count,
141                             const SkPoint verts[],
142                             const SkPoint texs[],
143                             const SkColor colors[],
144                             SkXfermode* xmode,
145                             const uint16_t indices[],
146                             int index_count,
147                             const SkPaint& paint) OVERRIDE;
148   virtual void drawDevice(const SkDraw& draw,
149                           SkBaseDevice* device,
150                           int x,
151                           int y,
152                           const SkPaint& paint) OVERRIDE;
153
154  private:
155   typedef SkBitmapDevice INHERITED;
156
157   bool is_forced_not_solid_;
158   bool is_forced_not_transparent_;
159   bool is_solid_color_;
160   SkColor color_;
161   bool is_transparent_;
162   bool has_text_;
163 };
164
165 }  // namespace skia
166
167 #endif  // SKIA_EXT_ANALYSIS_CANVAS_H_
168