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

Side by Side Diff: gm/multipicturedraw.cpp

Issue 594363003: Make pictures in multipicturedraw GM fit in 0,0..W,H range (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "gm.h" 8 #include "gm.h"
9 9
10 #include "SkColorFilter.h" 10 #include "SkColorFilter.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 static SkPath make_tri_path(SkScalar originX, SkScalar originY) { 84 static SkPath make_tri_path(SkScalar originX, SkScalar originY) {
85 SkPath tri; 85 SkPath tri;
86 tri.moveTo(originX, originY); 86 tri.moveTo(originX, originY);
87 tri.rLineTo(SkScalarHalf(kTriSide), 1.5f * kTriSide / kRoot3); 87 tri.rLineTo(SkScalarHalf(kTriSide), 1.5f * kTriSide / kRoot3);
88 tri.rLineTo(-kTriSide, 0); 88 tri.rLineTo(-kTriSide, 0);
89 tri.close(); 89 tri.close();
90 return tri; 90 return tri;
91 } 91 }
92 92
93 static const SkPicture* make_tri_picture() { 93 static const SkPicture* make_tri_picture() {
94 SkPath tri = make_tri_path(0, 0); 94 SkPath tri = make_tri_path(SkScalarHalf(kTriSide), 0);
95 95
96 SkPaint fill; 96 SkPaint fill;
97 fill.setStyle(SkPaint::kFill_Style); 97 fill.setStyle(SkPaint::kFill_Style);
98 fill.setColor(SK_ColorLTGRAY);; 98 fill.setColor(SK_ColorLTGRAY);;
99 99
100 SkPaint stroke; 100 SkPaint stroke;
101 stroke.setStyle(SkPaint::kStroke_Style); 101 stroke.setStyle(SkPaint::kStroke_Style);
102 stroke.setStrokeWidth(3); 102 stroke.setStrokeWidth(3);
103 103
104 SkPictureRecorder recorder; 104 SkPictureRecorder recorder;
(...skipping 10 matching lines...) Expand all
115 } 115 }
116 116
117 static const SkPicture* make_sub_picture(const SkPicture* tri) { 117 static const SkPicture* make_sub_picture(const SkPicture* tri) {
118 SkPictureRecorder recorder; 118 SkPictureRecorder recorder;
119 119
120 SkCanvas* canvas = recorder.beginRecording(SkIntToScalar(kPicWidth), 120 SkCanvas* canvas = recorder.beginRecording(SkIntToScalar(kPicWidth),
121 SkIntToScalar(kPicHeight)); 121 SkIntToScalar(kPicHeight));
122 122
123 canvas->scale(1.0f/2.0f, 1.0f/2.0f); 123 canvas->scale(1.0f/2.0f, 1.0f/2.0f);
124 124
125 canvas->drawPicture(tri);
126
127 canvas->save(); 125 canvas->save();
128 canvas->translate(SkScalarHalf(kTriSide), 1.5f * kTriSide / kRoot3); 126 canvas->translate(SkScalarHalf(kTriSide), 0);
129 canvas->drawPicture(tri); 127 canvas->drawPicture(tri);
130 canvas->restore(); 128 canvas->restore();
131 129
132 canvas->save(); 130 canvas->save();
133 canvas->translate(-SkScalarHalf(kTriSide), 1.5f * kTriSide / kRoot3); 131 canvas->translate(SkIntToScalar(kTriSide), 1.5f * kTriSide / kRoot3);
134 canvas->drawPicture(tri); 132 canvas->drawPicture(tri);
135 canvas->restore(); 133 canvas->restore();
136 134
135 canvas->save();
136 canvas->translate(0, 1.5f * kTriSide / kRoot3);
137 canvas->drawPicture(tri);
138 canvas->restore();
139
137 return recorder.endRecording(); 140 return recorder.endRecording();
138 } 141 }
139 142
140 // Create a Sierpinkski-like picture that starts with a top row with a picture 143 // Create a Sierpinkski-like picture that starts with a top row with a picture
141 // that just contains a triangle. Subsequent rows take the prior row's picture, 144 // that just contains a triangle. Subsequent rows take the prior row's picture,
142 // shrinks it and replicates it 3 times then draws and appropriate number of 145 // shrinks it and replicates it 3 times then draws and appropriate number of
143 // copies of it. 146 // copies of it.
144 static const SkPicture* make_sierpinski_picture() { 147 static const SkPicture* make_sierpinski_picture() {
145 SkAutoTUnref<const SkPicture> pic(make_tri_picture()); 148 SkAutoTUnref<const SkPicture> pic(make_tri_picture());
146 149
147 SkPictureRecorder recorder; 150 SkPictureRecorder recorder;
148 151
149 SkCanvas* canvas = recorder.beginRecording(SkIntToScalar(kPicWidth), 152 SkCanvas* canvas = recorder.beginRecording(SkIntToScalar(kPicWidth),
150 SkIntToScalar(kPicHeight)); 153 SkIntToScalar(kPicHeight));
151 154
152 static const int kNumLevels = 4; 155 static const int kNumLevels = 4;
153 for (int i = 0; i < kNumLevels; ++i) { 156 for (int i = 0; i < kNumLevels; ++i) {
154 canvas->save(); 157 canvas->save();
155 canvas->translate(-i*kTriSide / 2.0f, 0); 158 canvas->translate(kPicWidth/2 - (i+1) * (kTriSide/2.0f), 0.0f);
156 for (int j = 0; j < i+1; ++j) { 159 for (int j = 0; j < i+1; ++j) {
157 canvas->drawPicture(pic); 160 canvas->drawPicture(pic);
158 canvas->translate(SkIntToScalar(kTriSide), 0); 161 canvas->translate(SkIntToScalar(kTriSide), 0);
159 } 162 }
160 canvas->restore(); 163 canvas->restore();
161 164
162 pic.reset(make_sub_picture(pic)); 165 pic.reset(make_sub_picture(pic));
163 166
164 canvas->translate(0, 1.5f * kTriSide / kRoot3); 167 canvas->translate(0, 1.5f * kTriSide / kRoot3);
165 } 168 }
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 hex.setFillType(SkPath::kInverseEvenOdd_FillType); 250 hex.setFillType(SkPath::kInverseEvenOdd_FillType);
248 251
249 canvas->clipPath(hex); 252 canvas->clipPath(hex);
250 253
251 canvas->drawPicture(pictures[1]); 254 canvas->drawPicture(pictures[1]);
252 } 255 }
253 256
254 // Reuse a single base (triangular) picture a _lot_ (rotated, scaled and transla ted). 257 // Reuse a single base (triangular) picture a _lot_ (rotated, scaled and transla ted).
255 static void sierpinski(SkCanvas* canvas, const SkPicture* pictures[kNumPictures] ) { 258 static void sierpinski(SkCanvas* canvas, const SkPicture* pictures[kNumPictures] ) {
256 canvas->save(); 259 canvas->save();
257 canvas->translate(kPicWidth / 2.0f, 0.0f);
258 canvas->drawPicture(pictures[2]); 260 canvas->drawPicture(pictures[2]);
259 261
260 canvas->rotate(180.0f); 262 canvas->rotate(180.0f);
261 canvas->translate(0.0f, -SkIntToScalar(kPicHeight)); 263 canvas->translate(-SkIntToScalar(kPicWidth), -SkIntToScalar(kPicHeight)) ;
262 canvas->drawPicture(pictures[2]); 264 canvas->drawPicture(pictures[2]);
263 canvas->restore(); 265 canvas->restore();
264 } 266 }
265 267
266 static const PFContentMtd gContentMthds[] = { 268 static const PFContentMtd gContentMthds[] = {
267 no_clip, 269 no_clip,
268 rect_clip, 270 rect_clip,
269 rrect_clip, 271 rrect_clip,
270 path_clip, 272 path_clip,
271 invpath_clip, 273 invpath_clip,
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 MultiPictureDraw::kTiled_Layout) );) 477 MultiPictureDraw::kTiled_Layout) );)
476 DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kRRectClipMult i_Content, 478 DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kRRectClipMult i_Content,
477 MultiPictureDraw::kTiled_Layout) );) 479 MultiPictureDraw::kTiled_Layout) );)
478 DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kPathClipMulti _Content, 480 DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kPathClipMulti _Content,
479 MultiPictureDraw::kTiled_Layout) );) 481 MultiPictureDraw::kTiled_Layout) );)
480 DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kInvPathClipMu lti_Content, 482 DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kInvPathClipMu lti_Content,
481 MultiPictureDraw::kTiled_Layout) );) 483 MultiPictureDraw::kTiled_Layout) );)
482 DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kSierpinski_Co ntent, 484 DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kSierpinski_Co ntent,
483 MultiPictureDraw::kTiled_Layout) );) 485 MultiPictureDraw::kTiled_Layout) );)
484 } 486 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698