OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef GrDrawContext_DEFINED | 8 #ifndef GrDrawContext_DEFINED |
9 #define GrDrawContext_DEFINED | 9 #define GrDrawContext_DEFINED |
10 | 10 |
(...skipping 10 matching lines...) Expand all Loading... |
21 class GrContext; | 21 class GrContext; |
22 class GrDrawBatch; | 22 class GrDrawBatch; |
23 class GrDrawContextPriv; | 23 class GrDrawContextPriv; |
24 class GrDrawPathBatchBase; | 24 class GrDrawPathBatchBase; |
25 class GrDrawingManager; | 25 class GrDrawingManager; |
26 class GrDrawTarget; | 26 class GrDrawTarget; |
27 class GrPaint; | 27 class GrPaint; |
28 class GrPathProcessor; | 28 class GrPathProcessor; |
29 class GrPipelineBuilder; | 29 class GrPipelineBuilder; |
30 class GrRenderTarget; | 30 class GrRenderTarget; |
31 class GrStrokeInfo; | 31 class GrStyle; |
32 class GrSurface; | 32 class GrSurface; |
33 class SkDrawFilter; | 33 class SkDrawFilter; |
34 struct SkIPoint; | 34 struct SkIPoint; |
35 struct SkIRect; | 35 struct SkIRect; |
36 class SkMatrix; | 36 class SkMatrix; |
37 class SkPaint; | 37 class SkPaint; |
38 class SkPath; | 38 class SkPath; |
39 struct SkPoint; | 39 struct SkPoint; |
40 struct SkRect; | 40 struct SkRect; |
41 class SkRRect; | 41 class SkRRect; |
42 struct SkRSXform; | 42 struct SkRSXform; |
43 class SkTextBlob; | 43 class SkTextBlob; |
44 | 44 |
45 /* | 45 /* |
46 * A helper object to orchestrate draws | 46 * A helper object to orchestrate draws |
47 */ | 47 */ |
48 class SK_API GrDrawContext : public SkRefCnt { | 48 class SK_API GrDrawContext : public SkRefCnt { |
49 public: | 49 public: |
50 ~GrDrawContext() override; | 50 ~GrDrawContext() override; |
51 | 51 |
52 bool copySurface(GrSurface* src, const SkIRect& srcRect, const SkIPoint& dst
Point); | 52 bool copySurface(GrSurface* src, const SkIRect& srcRect, const SkIPoint& dst
Point); |
53 | 53 |
54 // TODO: it is odd that we need both the SkPaint in the following 3 methods. | 54 // TODO: it is odd that we need both the SkPaint in the following 3 methods. |
55 // We should extract the text parameters from SkPaint and pass them separate
ly | 55 // We should extract the text parameters from SkPaint and pass them separate
ly |
56 // akin to GrStrokeInfo (GrTextInfo?) | 56 // akin to GrStyle (GrTextInfo?) |
57 virtual void drawText(const GrClip&, const GrPaint&, const SkPaint&, | 57 virtual void drawText(const GrClip&, const GrPaint&, const SkPaint&, |
58 const SkMatrix& viewMatrix, const char text[], size_t
byteLength, | 58 const SkMatrix& viewMatrix, const char text[], size_t
byteLength, |
59 SkScalar x, SkScalar y, const SkIRect& clipBounds); | 59 SkScalar x, SkScalar y, const SkIRect& clipBounds); |
60 virtual void drawPosText(const GrClip&, const GrPaint&, const SkPaint&, | 60 virtual void drawPosText(const GrClip&, const GrPaint&, const SkPaint&, |
61 const SkMatrix& viewMatrix, const char text[], size
_t byteLength, | 61 const SkMatrix& viewMatrix, const char text[], size
_t byteLength, |
62 const SkScalar pos[], int scalarsPerPosition, | 62 const SkScalar pos[], int scalarsPerPosition, |
63 const SkPoint& offset, const SkIRect& clipBounds); | 63 const SkPoint& offset, const SkIRect& clipBounds); |
64 virtual void drawTextBlob(const GrClip&, const SkPaint&, | 64 virtual void drawTextBlob(const GrClip&, const SkPaint&, |
65 const SkMatrix& viewMatrix, const SkTextBlob*, | 65 const SkMatrix& viewMatrix, const SkTextBlob*, |
66 SkScalar x, SkScalar y, | 66 SkScalar x, SkScalar y, |
(...skipping 16 matching lines...) Expand all Loading... |
83 | 83 |
84 /** | 84 /** |
85 * Draw everywhere (respecting the clip) with the paint. | 85 * Draw everywhere (respecting the clip) with the paint. |
86 */ | 86 */ |
87 void drawPaint(const GrClip&, const GrPaint&, const SkMatrix& viewMatrix); | 87 void drawPaint(const GrClip&, const GrPaint&, const SkMatrix& viewMatrix); |
88 | 88 |
89 /** | 89 /** |
90 * Draw the rect using a paint. | 90 * Draw the rect using a paint. |
91 * @param paint describes how to color pixels. | 91 * @param paint describes how to color pixels. |
92 * @param viewMatrix transformation matrix | 92 * @param viewMatrix transformation matrix |
93 * @param strokeInfo the stroke information (width, join, cap), and. | 93 * @param style The style to apply. Null means fill. Currently path
effects are not |
94 * the dash information (intervals, count, phase). | 94 * allowed. |
95 * If strokeInfo == NULL, then the rect is filled. | |
96 * Otherwise, if stroke width == 0, then the stroke | |
97 * is always a single pixel thick, else the rect is | |
98 * mitered/beveled stroked based on stroke width. | |
99 * The rects coords are used to access the paint (through texture matrix) | 95 * The rects coords are used to access the paint (through texture matrix) |
100 */ | 96 */ |
101 void drawRect(const GrClip&, | 97 void drawRect(const GrClip&, |
102 const GrPaint& paint, | 98 const GrPaint& paint, |
103 const SkMatrix& viewMatrix, | 99 const SkMatrix& viewMatrix, |
104 const SkRect&, | 100 const SkRect&, |
105 const GrStrokeInfo* strokeInfo = nullptr); | 101 const GrStyle* style = nullptr); |
106 | 102 |
107 /** | 103 /** |
108 * Maps a rectangle of shader coordinates to a rectangle and fills that rect
angle. | 104 * Maps a rectangle of shader coordinates to a rectangle and fills that rect
angle. |
109 * | 105 * |
110 * @param paint describes how to color pixels. | 106 * @param paint describes how to color pixels. |
111 * @param viewMatrix transformation matrix which applies to rectToDraw | 107 * @param viewMatrix transformation matrix which applies to rectToDraw |
112 * @param rectToDraw the rectangle to draw | 108 * @param rectToDraw the rectangle to draw |
113 * @param localRect the rectangle of shader coordinates applied to rectT
oDraw | 109 * @param localRect the rectangle of shader coordinates applied to rectT
oDraw |
114 */ | 110 */ |
115 void fillRectToRect(const GrClip&, | 111 void fillRectToRect(const GrClip&, |
(...skipping 10 matching lines...) Expand all Loading... |
126 const SkMatrix& viewMatrix, | 122 const SkMatrix& viewMatrix, |
127 const SkRect& rect, | 123 const SkRect& rect, |
128 const SkMatrix& localMatrix); | 124 const SkMatrix& localMatrix); |
129 | 125 |
130 /** | 126 /** |
131 * Draw a roundrect using a paint. | 127 * Draw a roundrect using a paint. |
132 * | 128 * |
133 * @param paint describes how to color pixels. | 129 * @param paint describes how to color pixels. |
134 * @param viewMatrix transformation matrix | 130 * @param viewMatrix transformation matrix |
135 * @param rrect the roundrect to draw | 131 * @param rrect the roundrect to draw |
136 * @param strokeInfo the stroke information (width, join, cap) and | 132 * @param style style to apply to the rrect. Currently path effects
are not allowed. |
137 * the dash information (intervals, count, phase). | |
138 */ | 133 */ |
139 void drawRRect(const GrClip&, | 134 void drawRRect(const GrClip&, |
140 const GrPaint&, | 135 const GrPaint&, |
141 const SkMatrix& viewMatrix, | 136 const SkMatrix& viewMatrix, |
142 const SkRRect& rrect, | 137 const SkRRect& rrect, |
143 const GrStrokeInfo&); | 138 const GrStyle& style); |
144 | 139 |
145 /** | 140 /** |
146 * Shortcut for drawing an SkPath consisting of nested rrects using a paint
. | 141 * Shortcut for drawing an SkPath consisting of nested rrects using a paint
. |
147 * Does not support stroking. The result is undefined if outer does not con
tain | 142 * Does not support stroking. The result is undefined if outer does not con
tain |
148 * inner. | 143 * inner. |
149 * | 144 * |
150 * @param paint describes how to color pixels. | 145 * @param paint describes how to color pixels. |
151 * @param viewMatrix transformation matrix | 146 * @param viewMatrix transformation matrix |
152 * @param outer the outer roundrect | 147 * @param outer the outer roundrect |
153 * @param inner the inner roundrect | 148 * @param inner the inner roundrect |
154 */ | 149 */ |
155 void drawDRRect(const GrClip&, | 150 void drawDRRect(const GrClip&, |
156 const GrPaint&, | 151 const GrPaint&, |
157 const SkMatrix& viewMatrix, | 152 const SkMatrix& viewMatrix, |
158 const SkRRect& outer, | 153 const SkRRect& outer, |
159 const SkRRect& inner); | 154 const SkRRect& inner); |
160 | 155 |
161 /** | 156 /** |
162 * Draws a path. | 157 * Draws a path. |
163 * | 158 * |
164 * @param paint describes how to color pixels. | 159 * @param paint describes how to color pixels. |
165 * @param viewMatrix transformation matrix | 160 * @param viewMatrix transformation matrix |
166 * @param path the path to draw | 161 * @param path the path to draw |
167 * @param strokeInfo the stroke information (width, join, cap) and | 162 * @param style style to apply to the path. |
168 * the dash information (intervals, count, phase). | |
169 */ | 163 */ |
170 void drawPath(const GrClip&, | 164 void drawPath(const GrClip&, |
171 const GrPaint&, | 165 const GrPaint&, |
172 const SkMatrix& viewMatrix, | 166 const SkMatrix& viewMatrix, |
173 const SkPath&, | 167 const SkPath&, |
174 const GrStrokeInfo&); | 168 const GrStyle& style); |
175 | 169 |
176 /** | 170 /** |
177 * Draws vertices with a paint. | 171 * Draws vertices with a paint. |
178 * | 172 * |
179 * @param paint describes how to color pixels. | 173 * @param paint describes how to color pixels. |
180 * @param viewMatrix transformation matrix | 174 * @param viewMatrix transformation matrix |
181 * @param primitiveType primitives type to draw. | 175 * @param primitiveType primitives type to draw. |
182 * @param vertexCount number of vertices. | 176 * @param vertexCount number of vertices. |
183 * @param positions array of vertex positions, required. | 177 * @param positions array of vertex positions, required. |
184 * @param texCoords optional array of texture coordinates used | 178 * @param texCoords optional array of texture coordinates used |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 const SkRSXform xform[], | 213 const SkRSXform xform[], |
220 const SkRect texRect[], | 214 const SkRect texRect[], |
221 const SkColor colors[]); | 215 const SkColor colors[]); |
222 | 216 |
223 /** | 217 /** |
224 * Draws an oval. | 218 * Draws an oval. |
225 * | 219 * |
226 * @param paint describes how to color pixels. | 220 * @param paint describes how to color pixels. |
227 * @param viewMatrix transformation matrix | 221 * @param viewMatrix transformation matrix |
228 * @param oval the bounding rect of the oval. | 222 * @param oval the bounding rect of the oval. |
229 * @param strokeInfo the stroke information (width, join, cap) and | 223 * @param style style to apply to the oval. Currently path effects a
re not allowed. |
230 * the dash information (intervals, count, phase). | |
231 */ | 224 */ |
232 void drawOval(const GrClip&, | 225 void drawOval(const GrClip&, |
233 const GrPaint& paint, | 226 const GrPaint& paint, |
234 const SkMatrix& viewMatrix, | 227 const SkMatrix& viewMatrix, |
235 const SkRect& oval, | 228 const SkRect& oval, |
236 const GrStrokeInfo& strokeInfo); | 229 const GrStyle& style); |
237 | 230 |
238 /** | 231 /** |
239 * Draw the image stretched differentially to fit into dst. | 232 * Draw the image stretched differentially to fit into dst. |
240 * center is a rect within the image, and logically divides the image | 233 * center is a rect within the image, and logically divides the image |
241 * into 9 sections (3x3). For example, if the middle pixel of a [5x5] | 234 * into 9 sections (3x3). For example, if the middle pixel of a [5x5] |
242 * image is the "center", then the center-rect should be [2, 2, 3, 3]. | 235 * image is the "center", then the center-rect should be [2, 2, 3, 3]. |
243 * | 236 * |
244 * If the dst is >= the image size, then... | 237 * If the dst is >= the image size, then... |
245 * - The 4 corners are not stretched at all. | 238 * - The 4 corners are not stretched at all. |
246 * - The sides are stretched in only one axis. | 239 * - The sides are stretched in only one axis. |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 const SkRRect& origInner); | 304 const SkRRect& origInner); |
312 | 305 |
313 GrDrawBatch* getFillRectBatch(const GrPaint& paint, | 306 GrDrawBatch* getFillRectBatch(const GrPaint& paint, |
314 const SkMatrix& viewMatrix, | 307 const SkMatrix& viewMatrix, |
315 const SkRect& rect); | 308 const SkRect& rect); |
316 | 309 |
317 void internalDrawPath(const GrClip& clip, | 310 void internalDrawPath(const GrClip& clip, |
318 const GrPaint& paint, | 311 const GrPaint& paint, |
319 const SkMatrix& viewMatrix, | 312 const SkMatrix& viewMatrix, |
320 const SkPath& path, | 313 const SkPath& path, |
321 const GrStrokeInfo& strokeInfo); | 314 const GrStyle& style); |
322 | 315 |
323 // This entry point allows the GrTextContext-derived classes to add their ba
tches to | 316 // This entry point allows the GrTextContext-derived classes to add their ba
tches to |
324 // the drawTarget. | 317 // the drawTarget. |
325 void drawBatch(GrPipelineBuilder* pipelineBuilder, GrDrawBatch* batch); | 318 void drawBatch(GrPipelineBuilder* pipelineBuilder, GrDrawBatch* batch); |
326 | 319 |
327 GrDrawTarget* getDrawTarget(); | 320 GrDrawTarget* getDrawTarget(); |
328 | 321 |
329 GrDrawingManager* fDrawingManager; | 322 GrDrawingManager* fDrawingManager; |
330 sk_sp<GrRenderTarget> fRenderTarget; | 323 sk_sp<GrRenderTarget> fRenderTarget; |
331 | 324 |
332 // In MDB-mode the drawTarget can be closed by some other drawContext that h
as picked | 325 // In MDB-mode the drawTarget can be closed by some other drawContext that h
as picked |
333 // it up. For this reason, the drawTarget should only ever be accessed via '
getDrawTarget'. | 326 // it up. For this reason, the drawTarget should only ever be accessed via '
getDrawTarget'. |
334 GrDrawTarget* fDrawTarget; | 327 GrDrawTarget* fDrawTarget; |
335 SkAutoTDelete<GrAtlasTextContext> fAtlasTextContext; | 328 SkAutoTDelete<GrAtlasTextContext> fAtlasTextContext; |
336 GrContext* fContext; | 329 GrContext* fContext; |
337 | 330 |
338 SkSurfaceProps fSurfaceProps; | 331 SkSurfaceProps fSurfaceProps; |
339 GrAuditTrail* fAuditTrail; | 332 GrAuditTrail* fAuditTrail; |
340 | 333 |
341 // In debug builds we guard against improper thread handling | 334 // In debug builds we guard against improper thread handling |
342 SkDEBUGCODE(mutable GrSingleOwner* fSingleOwner;) | 335 SkDEBUGCODE(mutable GrSingleOwner* fSingleOwner;) |
343 }; | 336 }; |
344 | 337 |
345 #endif | 338 #endif |
OLD | NEW |