Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Side by Side Diff: src/core/SkMultiPictureDraw.cpp

Issue 491313003: SkMultiPictureDraw API (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright 2014 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #include "SkCanvas.h"
9 #include "SkMultiPictureDraw.h"
10 #include "SkPicture.h"
11
12 SkMultiPictureDraw::SkMultiPictureDraw(int sizeHint) {
13 if (sizeHint > 0) {
14 fDrawData.setReserve(sizeHint);
15 }
16 }
17
18 void SkMultiPictureDraw::unrefAll() {
19 for (int i = 0; i < fDrawData.count(); ++i) {
20 fDrawData[i].pic->unref();
21 fDrawData[i].canvas->unref();
22 }
23
24 fDrawData.rewind();
25 }
26
27 void SkMultiPictureDraw::add(const SkPicture* picture, SkCanvas* canvas, const S kMatrix* matrix) {
28 if (NULL == picture || NULL == canvas) {
29 SkDEBUGFAIL("parameters to SkMultiPictureDraw::add should be non-NULL");
30 return;
31 }
32
33 DrawData* data = fDrawData.append();
34
35 data->pic = SkRef(picture);
36 data->canvas = SkRef(canvas);
37 if (NULL != matrix) {
38 data->matrix = *matrix;
39 } else {
40 data->matrix.setIdentity();
41 }
42 data->clipType = DrawData::kNone_ClipType;
43 }
44
45 void SkMultiPictureDraw::add(const SkPicture* picture, SkCanvas* canvas, const S kRect& clipRect, const SkMatrix* matrix) {
46 if (NULL == picture || NULL == canvas) {
47 SkDEBUGFAIL("parameters to SkMultiPictureDraw::add should be non-NULL");
48 return;
49 }
50
51 DrawData* data = fDrawData.append();
52
53 data->pic = SkRef(picture);
54 data->canvas = SkRef(canvas);
55 if (NULL != matrix) {
56 data->matrix = *matrix;
57 } else {
58 data->matrix.setIdentity();
59 }
60 data->clipType = DrawData::kRect_ClipType;
61 data->clipRRect.setRect(clipRect);
62 }
63
64 void SkMultiPictureDraw::add(const SkPicture* picture, SkCanvas* canvas, const S kRRect& clipRRect, const SkMatrix* matrix) {
65 if (NULL == picture || NULL == canvas) {
66 SkDEBUGFAIL("parameters to SkMultiPictureDraw::add should be non-NULL");
67 return;
68 }
69
70 DrawData* data = fDrawData.append();
71
72 data->pic = SkRef(picture);
73 data->canvas = SkRef(canvas);
74 if (NULL != matrix) {
75 data->matrix = *matrix;
76 } else {
77 data->matrix.setIdentity();
78 }
79 data->clipType = DrawData::kRRect_ClipType;
80 data->clipRRect = clipRRect;
81 }
82
83 void SkMultiPictureDraw::draw() {
84 for (int i = 0; i < fDrawData.count(); ++i) {
85 fDrawData[i].canvas->save();
86
87 switch (fDrawData[i].clipType) {
88 case DrawData::kRect_ClipType:
89 fDrawData[i].canvas->clipRect(fDrawData[i].clipRRect.rect());
90 break;
91 case DrawData::kRRect_ClipType:
92 fDrawData[i].canvas->clipRRect(fDrawData[i].clipRRect);
93 break;
94 case DrawData::kNone_ClipType: // fall through
95 default:
96 break;
97 };
98
99 fDrawData[i].canvas->drawPicture(fDrawData[i].pic, &fDrawData[i].matrix, NULL);
100
101 fDrawData[i].canvas->restore();
102 }
103
104 this->unrefAll();
105 }
106
OLDNEW
« include/core/SkMultiPictureDraw.h ('K') | « include/core/SkMultiPictureDraw.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698