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

Side by Side Diff: gm/pictureshader.cpp

Issue 221923007: Initial picture shader implementation (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Win build fix + SkShader factory. Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | gyp/core.gypi » ('j') | src/core/SkPictureShader.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "gm.h"
9
10 #include "SkBitmap.h"
11 #include "SkPaint.h"
12 #include "SkPicture.h"
13 #include "SkShader.h"
14
15 namespace skiagm {
16
17 class PictureShaderGM : public GM {
18 public:
19
robertphillips 2014/04/02 18:15:35 Should we also test some of the other tiling modes
f(malita) 2014/04/07 15:06:24 Done.
20 PictureShaderGM(SkScalar tileSize, SkScalar sceneSize)
21 : fTileSize(tileSize)
22 , fSceneSize(sceneSize) {
23
24 // Build the picture shader.
25 SkAutoTUnref<SkPicture> p(SkNEW(SkPicture));
26 SkCanvas* pictureCanvas = p->beginRecording(SkScalarRoundToInt(tileSize) ,
27 SkScalarRoundToInt(tileSize) );
robertphillips 2014/04/02 18:15:35 this->
f(malita) 2014/04/07 15:06:24 Argh, of all the Skia style rules this one never s
28 drawTile(pictureCanvas);
29 p->endRecording();
30 fPictureShader.reset(SkShader::CreatePictureShader(*p,
31 SkShader::kRepeat_Til eMode,
32 SkShader::kRepeat_Til eMode));
33
34 // Build a reference bitmap shader.
35 SkBitmap bm;
36 bm.allocN32Pixels(SkScalarRoundToInt(tileSize), SkScalarRoundToInt(tileS ize));
37 bm.eraseColor(SK_ColorTRANSPARENT);
38 SkCanvas bitmapCanvas(bm);
robertphillips 2014/04/02 18:15:35 this->
39 drawTile(&bitmapCanvas);
40 fBitmapShader.reset(SkShader::CreateBitmapShader(bm,
41 SkShader::kRepeat_TileM ode,
42 SkShader::kRepeat_TileM ode));
43 }
44
45 protected:
robertphillips 2014/04/02 18:15:35 SK_OVERRIDE
f(malita) 2014/04/07 15:06:24 Done (all).
46 virtual SkString onShortName() {
47 return SkString("pictureshader");
48 }
49
robertphillips 2014/04/02 18:15:35 SK_OVERRIDE
50 virtual SkISize onISize() {
51 return SkISize::Make(1300, 1100);
52 }
53
robertphillips 2014/04/02 18:15:35 SK_OVERRIDE
54 virtual void onDraw(SkCanvas* canvas) {
robertphillips 2014/04/02 18:15:35 this-> for all of them
55 drawSceneColumn(canvas, 0, 1, 1);
56 drawSceneColumn(canvas, fSceneSize * 2.4f, 1, 2);
57 drawSceneColumn(canvas, fSceneSize * 4.8f, 2, 1);
58 drawSceneColumn(canvas, fSceneSize * 9.6f, 2, 2);
59 }
60
61 private:
62 void drawSceneColumn(SkCanvas* canvas, SkScalar xpos, SkScalar scale, SkScal ar localScale) {
63 SkMatrix ctm, localMatrix;
64
65 ctm.setTranslate(xpos, 0);
66 ctm.preScale(scale, scale);
67 localMatrix.setScale(localScale, localScale);
robertphillips 2014/04/02 18:15:35 this->
68 drawScene(canvas, ctm, localMatrix);
69
70 ctm.setTranslate(xpos, fSceneSize * 1.2f * scale);
71 ctm.preScale(scale, scale);
72 localMatrix.setTranslate(fTileSize / 4, fTileSize / 4);
73 localMatrix.preScale(localScale, localScale);
robertphillips 2014/04/02 18:15:35 this->
74 drawScene(canvas, ctm, localMatrix);
75
76 ctm.setTranslate(xpos, fSceneSize * 2.4f * scale);
77 ctm.preScale(scale, scale);
78 localMatrix.setRotate(45);
79 localMatrix.preScale(localScale, localScale);
robertphillips 2014/04/02 18:15:35 this->
80 drawScene(canvas, ctm, localMatrix);
81
82 ctm.setTranslate(xpos, fSceneSize * 3.6f * scale);
83 ctm.preScale(scale, scale);
84 localMatrix.setSkew(1, 0);
85 localMatrix.preScale(localScale, localScale);
robertphillips 2014/04/02 18:15:35 this->
86 drawScene(canvas, ctm, localMatrix);
87
88 ctm.setTranslate(xpos, fSceneSize * 4.8f * scale);
89 ctm.preScale(scale, scale);
90 localMatrix.setTranslate(fTileSize / 4, fTileSize / 4);
91 localMatrix.preRotate(45);
92 localMatrix.preScale(localScale, localScale);
robertphillips 2014/04/02 18:15:35 this->
93 drawScene(canvas, ctm, localMatrix);
94 }
95
96 void drawTile(SkCanvas* canvas) {
97 SkPaint paint;
98 paint.setColor(SK_ColorGREEN);
99 paint.setStyle(SkPaint::kFill_Style);
100 paint.setAntiAlias(true);
101
102 canvas->drawCircle(fTileSize / 4, fTileSize / 4, fTileSize / 4, paint);
103 canvas->drawRect(SkRect::MakeXYWH(fTileSize / 2, fTileSize / 2,
104 fTileSize / 2, fTileSize / 2), paint);
105
106 paint.setColor(SK_ColorRED);
107 canvas->drawLine(fTileSize / 2, fTileSize * 1 / 3,
108 fTileSize / 2, fTileSize * 2 / 3, paint);
109 canvas->drawLine(fTileSize * 1 / 3, fTileSize / 2,
110 fTileSize * 2 / 3, fTileSize / 2, paint);
111 }
112
113 void drawScene(SkCanvas* canvas, const SkMatrix& matrix, const SkMatrix& loc alMatrix) {
114 SkPaint paint;
115 paint.setStyle(SkPaint::kFill_Style);
116 paint.setColor(SK_ColorLTGRAY);
117
118 canvas->save();
119 canvas->concat(matrix);
120 canvas->drawRect(SkRect::MakeWH(fSceneSize, fSceneSize), paint);
121 canvas->drawRect(SkRect::MakeXYWH(fSceneSize * 1.1f, 0, fSceneSize, fSce neSize), paint);
122
123 fPictureShader->setLocalMatrix(localMatrix);
124 paint.setShader(fPictureShader.get());
125 canvas->drawRect(SkRect::MakeWH(fSceneSize, fSceneSize), paint);
126
127 canvas->translate(fSceneSize * 1.1f, 0);
128
129 fBitmapShader->setLocalMatrix(localMatrix);
130 paint.setShader(fBitmapShader.get());
131 canvas->drawRect(SkRect::MakeWH(fSceneSize, fSceneSize), paint);
132
133 canvas->restore();
134 }
135
robertphillips 2014/04/02 18:15:35 This should go last.
136 typedef GM INHERITED;
137
138 SkScalar fTileSize;
139 SkScalar fSceneSize;
140
141 SkAutoTUnref<SkShader> fPictureShader;
142 SkAutoTUnref<SkShader> fBitmapShader;
143 };
144
robertphillips 2014/04/02 18:15:35 DEF_GM?
145 static GM* MyFactory(void*) { return SkNEW_ARGS(PictureShaderGM, (50, 100)); }
146 static GMRegistry reg(MyFactory);
147 }
OLDNEW
« no previous file with comments | « no previous file | gyp/core.gypi » ('j') | src/core/SkPictureShader.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698