OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 SkRecords_DEFINED | 8 #ifndef SkRecords_DEFINED |
9 #define SkRecords_DEFINED | 9 #define SkRecords_DEFINED |
10 | 10 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
111 }; | 111 }; |
112 | 112 |
113 #define RECORD5(T, A, a, B, b, C, c, D, d, E, e) \ | 113 #define RECORD5(T, A, a, B, b, C, c, D, d, E, e) \ |
114 struct T { \ | 114 struct T { \ |
115 static const Type kType = T##_Type; \ | 115 static const Type kType = T##_Type; \ |
116 template <typename Z, typename Y, typename X, typename W, typename V> \ | 116 template <typename Z, typename Y, typename X, typename W, typename V> \ |
117 T(Z a, Y b, X c, W d, V e) : a(a), b(b), c(c), d(d), e(e) {} \ | 117 T(Z a, Y b, X c, W d, V e) : a(a), b(b), c(c), d(d), e(e) {} \ |
118 A a; B b; C c; D d; E e; \ | 118 A a; B b; C c; D d; E e; \ |
119 }; | 119 }; |
120 | 120 |
121 #define ACT_AS_PTR(ptr) \ | 121 #define ACT_AS_PTR(ptr) \ |
122 operator T*() { return ptr; } \ | 122 operator T*() const { return ptr; } \ |
tfarina
2014/09/18 17:35:43
why not keep non-const and const versions?
it see
mtklein
2014/09/18 17:52:38
Mostly this is because it is inconvenient to use t
| |
123 operator const T*() const { return ptr; } \ | 123 T* operator->() const { return ptr; } |
124 T* operator->() { return ptr; } \ | |
125 const T* operator->() const { return ptr; } | |
126 | 124 |
127 template <typename T> | 125 template <typename T> |
128 class RefBox : SkNoncopyable { | 126 class RefBox : SkNoncopyable { |
129 public: | 127 public: |
130 RefBox(T* obj) : fObj(SkRef(obj)) {} | 128 RefBox(T* obj) : fObj(SkSafeRef(obj)) {} |
131 ~RefBox() { fObj->unref(); } | 129 ~RefBox() { SkSafeUnref(fObj); } |
132 | 130 |
133 ACT_AS_PTR(fObj); | 131 ACT_AS_PTR(fObj); |
134 | 132 |
135 private: | 133 private: |
136 T* fObj; | 134 T* fObj; |
137 }; | 135 }; |
138 | 136 |
139 // An Optional doesn't own the pointer's memory, but may need to destroy non-POD data. | 137 // An Optional doesn't own the pointer's memory, but may need to destroy non-POD data. |
140 template <typename T> | 138 template <typename T> |
141 class Optional : SkNoncopyable { | 139 class Optional : SkNoncopyable { |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
232 SkRect, dst); | 230 SkRect, dst); |
233 RECORD5(DrawBitmapRectToRect, Optional<SkPaint>, paint, | 231 RECORD5(DrawBitmapRectToRect, Optional<SkPaint>, paint, |
234 ImmutableBitmap, bitmap, | 232 ImmutableBitmap, bitmap, |
235 Optional<SkRect>, src, | 233 Optional<SkRect>, src, |
236 SkRect, dst, | 234 SkRect, dst, |
237 SkCanvas::DrawBitmapRectFlags, flags); | 235 SkCanvas::DrawBitmapRectFlags, flags); |
238 RECORD3(DrawDRRect, SkPaint, paint, SkRRect, outer, SkRRect, inner); | 236 RECORD3(DrawDRRect, SkPaint, paint, SkRRect, outer, SkRRect, inner); |
239 RECORD2(DrawOval, SkPaint, paint, SkRect, oval); | 237 RECORD2(DrawOval, SkPaint, paint, SkRect, oval); |
240 RECORD1(DrawPaint, SkPaint, paint); | 238 RECORD1(DrawPaint, SkPaint, paint); |
241 RECORD2(DrawPath, SkPaint, paint, SkPath, path); | 239 RECORD2(DrawPath, SkPaint, paint, SkPath, path); |
242 //RECORD2(DrawPatch, SkPaint, paint, SkPatch, patch); | |
243 RECORD3(DrawPicture, Optional<SkPaint>, paint, | 240 RECORD3(DrawPicture, Optional<SkPaint>, paint, |
244 RefBox<const SkPicture>, picture, | 241 RefBox<const SkPicture>, picture, |
245 Optional<SkMatrix>, matrix); | 242 Optional<SkMatrix>, matrix); |
246 RECORD4(DrawPoints, SkPaint, paint, SkCanvas::PointMode, mode, size_t, count, Sk Point*, pts); | 243 RECORD4(DrawPoints, SkPaint, paint, SkCanvas::PointMode, mode, size_t, count, Sk Point*, pts); |
247 RECORD4(DrawPosText, SkPaint, paint, | 244 RECORD4(DrawPosText, SkPaint, paint, |
248 PODArray<char>, text, | 245 PODArray<char>, text, |
249 size_t, byteLength, | 246 size_t, byteLength, |
250 PODArray<SkPoint>, pos); | 247 PODArray<SkPoint>, pos); |
251 RECORD5(DrawPosTextH, SkPaint, paint, | 248 RECORD5(DrawPosTextH, SkPaint, paint, |
252 PODArray<char>, text, | 249 PODArray<char>, text, |
(...skipping 13 matching lines...) Expand all Loading... | |
266 SkScalar, x, | 263 SkScalar, x, |
267 SkScalar, y); | 264 SkScalar, y); |
268 RECORD5(DrawTextOnPath, SkPaint, paint, | 265 RECORD5(DrawTextOnPath, SkPaint, paint, |
269 PODArray<char>, text, | 266 PODArray<char>, text, |
270 size_t, byteLength, | 267 size_t, byteLength, |
271 SkPath, path, | 268 SkPath, path, |
272 Optional<SkMatrix>, matrix); | 269 Optional<SkMatrix>, matrix); |
273 | 270 |
274 RECORD2(DrawData, PODArray<char>, data, size_t, length); | 271 RECORD2(DrawData, PODArray<char>, data, size_t, length); |
275 | 272 |
273 RECORD5(DrawPatch, SkPaint, paint, | |
274 PODArray<SkPoint>, cubics, | |
275 PODArray<SkColor>, colors, | |
276 PODArray<SkPoint>, texCoords, | |
277 RefBox<SkXfermode>, xmode); | |
278 | |
276 // This guy is so ugly we just write it manually. | 279 // This guy is so ugly we just write it manually. |
277 struct DrawVertices { | 280 struct DrawVertices { |
278 static const Type kType = DrawVertices_Type; | 281 static const Type kType = DrawVertices_Type; |
279 | 282 |
280 DrawVertices(const SkPaint& paint, | 283 DrawVertices(const SkPaint& paint, |
281 SkCanvas::VertexMode vmode, | 284 SkCanvas::VertexMode vmode, |
282 int vertexCount, | 285 int vertexCount, |
283 SkPoint* vertices, | 286 SkPoint* vertices, |
284 SkPoint* texs, | 287 SkPoint* texs, |
285 SkColor* colors, | 288 SkColor* colors, |
(...skipping 14 matching lines...) Expand all Loading... | |
300 SkCanvas::VertexMode vmode; | 303 SkCanvas::VertexMode vmode; |
301 int vertexCount; | 304 int vertexCount; |
302 PODArray<SkPoint> vertices; | 305 PODArray<SkPoint> vertices; |
303 PODArray<SkPoint> texs; | 306 PODArray<SkPoint> texs; |
304 PODArray<SkColor> colors; | 307 PODArray<SkColor> colors; |
305 SkAutoTUnref<SkXfermode> xmode; | 308 SkAutoTUnref<SkXfermode> xmode; |
306 PODArray<uint16_t> indices; | 309 PODArray<uint16_t> indices; |
307 int indexCount; | 310 int indexCount; |
308 }; | 311 }; |
309 | 312 |
310 struct DrawPatch { | |
311 static const Type kType = DrawPatch_Type; | |
312 | |
313 DrawPatch(const SkPaint& paint, SkPoint cubics[12], SkColor colors[4], | |
314 SkPoint texCoords[4], SkXfermode* xmode) | |
315 : paint(paint) | |
316 , cubics(cubics) | |
317 , colors(colors) | |
318 , texCoords(texCoords) | |
319 , xmode(SkSafeRef(xmode)) { } | |
320 | |
321 SkPaint paint; | |
322 PODArray<SkPoint> cubics; | |
323 PODArray<SkColor> colors; | |
324 PODArray<SkPoint> texCoords; | |
325 SkAutoTUnref<SkXfermode> xmode; | |
326 }; | |
327 | |
328 #undef RECORD0 | 313 #undef RECORD0 |
329 #undef RECORD1 | 314 #undef RECORD1 |
330 #undef RECORD2 | 315 #undef RECORD2 |
331 #undef RECORD3 | 316 #undef RECORD3 |
332 #undef RECORD4 | 317 #undef RECORD4 |
333 #undef RECORD5 | 318 #undef RECORD5 |
334 | 319 |
335 } // namespace SkRecords | 320 } // namespace SkRecords |
336 | 321 |
337 #endif//SkRecords_DEFINED | 322 #endif//SkRecords_DEFINED |
OLD | NEW |