OLD | NEW |
| (Empty) |
1 // Copyright 2017 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 CC_PAINT_RECORD_PAINT_CANVAS_H_ | |
6 #define CC_PAINT_RECORD_PAINT_CANVAS_H_ | |
7 | |
8 #include <memory> | |
9 | |
10 #include "base/compiler_specific.h" | |
11 #include "base/logging.h" | |
12 #include "base/macros.h" | |
13 #include "build/build_config.h" | |
14 #include "cc/paint/paint_canvas.h" | |
15 #include "cc/paint/paint_flags.h" | |
16 #include "cc/paint/paint_record.h" | |
17 #include "third_party/skia/include/utils/SkNoDrawCanvas.h" | |
18 | |
19 namespace cc { | |
20 | |
21 class PaintOpBuffer; | |
22 class PaintFlags; | |
23 | |
24 class CC_PAINT_EXPORT RecordPaintCanvas final : public PaintCanvas { | |
25 public: | |
26 explicit RecordPaintCanvas(PaintOpBuffer* buffer, const SkRect& cull_rect); | |
27 ~RecordPaintCanvas() override; | |
28 | |
29 SkMetaData& getMetaData() override; | |
30 SkImageInfo imageInfo() const override; | |
31 | |
32 void flush() override; | |
33 | |
34 SkISize getBaseLayerSize() const override; | |
35 bool writePixels(const SkImageInfo& info, | |
36 const void* pixels, | |
37 size_t row_bytes, | |
38 int x, | |
39 int y) override; | |
40 int save() override; | |
41 int saveLayer(const SkRect* bounds, const PaintFlags* flags) override; | |
42 int saveLayerAlpha(const SkRect* bounds, uint8_t alpha) override; | |
43 | |
44 void restore() override; | |
45 int getSaveCount() const override; | |
46 void restoreToCount(int save_count) override; | |
47 void translate(SkScalar dx, SkScalar dy) override; | |
48 void scale(SkScalar sx, SkScalar sy) override; | |
49 void rotate(SkScalar degrees) override; | |
50 void concat(const SkMatrix& matrix) override; | |
51 void setMatrix(const SkMatrix& matrix) override; | |
52 | |
53 void clipRect(const SkRect& rect, SkClipOp op, bool antialias) override; | |
54 void clipRRect(const SkRRect& rrect, SkClipOp op, bool antialias) override; | |
55 void clipPath(const SkPath& path, SkClipOp op, bool antialias) override; | |
56 bool quickReject(const SkRect& rect) const override; | |
57 bool quickReject(const SkPath& path) const override; | |
58 SkRect getLocalClipBounds() const override; | |
59 bool getLocalClipBounds(SkRect* bounds) const override; | |
60 SkIRect getDeviceClipBounds() const override; | |
61 bool getDeviceClipBounds(SkIRect* bounds) const override; | |
62 void drawColor(SkColor color, SkBlendMode mode) override; | |
63 void clear(SkColor color) override; | |
64 | |
65 void drawLine(SkScalar x0, | |
66 SkScalar y0, | |
67 SkScalar x1, | |
68 SkScalar y1, | |
69 const PaintFlags& flags) override; | |
70 void drawRect(const SkRect& rect, const PaintFlags& flags) override; | |
71 void drawIRect(const SkIRect& rect, const PaintFlags& flags) override; | |
72 void drawOval(const SkRect& oval, const PaintFlags& flags) override; | |
73 void drawRRect(const SkRRect& rrect, const PaintFlags& flags) override; | |
74 void drawDRRect(const SkRRect& outer, | |
75 const SkRRect& inner, | |
76 const PaintFlags& flags) override; | |
77 void drawCircle(SkScalar cx, | |
78 SkScalar cy, | |
79 SkScalar radius, | |
80 const PaintFlags& flags) override; | |
81 void drawArc(const SkRect& oval, | |
82 SkScalar start_angle, | |
83 SkScalar sweep_angle, | |
84 bool use_center, | |
85 const PaintFlags& flags) override; | |
86 void drawRoundRect(const SkRect& rect, | |
87 SkScalar rx, | |
88 SkScalar ry, | |
89 const PaintFlags& flags) override; | |
90 void drawPath(const SkPath& path, const PaintFlags& flags) override; | |
91 void drawImage(const PaintImage& image, | |
92 SkScalar left, | |
93 SkScalar top, | |
94 const PaintFlags* flags) override; | |
95 void drawImageRect(const PaintImage& image, | |
96 const SkRect& src, | |
97 const SkRect& dst, | |
98 const PaintFlags* flags, | |
99 SrcRectConstraint constraint) override; | |
100 void drawBitmap(const SkBitmap& bitmap, | |
101 SkScalar left, | |
102 SkScalar top, | |
103 const PaintFlags* flags) override; | |
104 | |
105 void drawText(const void* text, | |
106 size_t byte_length, | |
107 SkScalar x, | |
108 SkScalar y, | |
109 const PaintFlags& flags) override; | |
110 void drawPosText(const void* text, | |
111 size_t byte_length, | |
112 const SkPoint pos[], | |
113 const PaintFlags& flags) override; | |
114 void drawTextBlob(sk_sp<SkTextBlob> blob, | |
115 SkScalar x, | |
116 SkScalar y, | |
117 const PaintFlags& flags) override; | |
118 | |
119 void drawDisplayItemList( | |
120 scoped_refptr<DisplayItemList> display_item_list) override; | |
121 | |
122 void drawPicture(sk_sp<const PaintRecord> record) override; | |
123 | |
124 bool isClipEmpty() const override; | |
125 bool isClipRect() const override; | |
126 const SkMatrix& getTotalMatrix() const override; | |
127 | |
128 void temporary_internal_describeTopLayer(SkMatrix* matrix, | |
129 SkIRect* clip_bounds) override; | |
130 | |
131 bool ToPixmap(SkPixmap* output) override; | |
132 void Annotate(AnnotationType type, | |
133 const SkRect& rect, | |
134 sk_sp<SkData> data) override; | |
135 | |
136 void PlaybackPaintRecord(sk_sp<const PaintRecord> record) override; | |
137 | |
138 // Don't shadow non-virtual helper functions. | |
139 using PaintCanvas::clipRect; | |
140 using PaintCanvas::clipRRect; | |
141 using PaintCanvas::clipPath; | |
142 using PaintCanvas::drawBitmap; | |
143 using PaintCanvas::drawColor; | |
144 using PaintCanvas::drawImage; | |
145 using PaintCanvas::drawPicture; | |
146 | |
147 private: | |
148 PaintOpBuffer* buffer_; | |
149 | |
150 // TODO(enne): Although RecordPaintCanvas is mostly a write-only interface | |
151 // where paint commands are stored, occasionally users of PaintCanvas want | |
152 // to ask stateful questions mid-stream of clip and transform state. | |
153 // To avoid duplicating all this code (for now?), just forward to an SkCanvas | |
154 // that's not backed by anything but can answer these questions. | |
155 SkNoDrawCanvas canvas_; | |
156 }; | |
157 | |
158 } // namespace cc | |
159 | |
160 #endif // CC_PAINT_RECORD_PAINT_CANVAS_H_ | |
OLD | NEW |