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 #include "gm.h" | 8 #include "gm.h" |
9 | 9 |
10 #include "SkPaint.h" | 10 #include "SkPaint.h" |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 | 50 |
51 { 0, 0, 1, 1.5f, 0, 0 }, | 51 { 0, 0, 1, 1.5f, 0, 0 }, |
52 { -0.5f, -0.5f, 1, 1.5f, 0, 0 }, | 52 { -0.5f, -0.5f, 1, 1.5f, 0, 0 }, |
53 { 0.5f, 0.5f, 1, 1.5f, 0, 0 }, | 53 { 0.5f, 0.5f, 1, 1.5f, 0, 0 }, |
54 | 54 |
55 { 0, 0, 1, 0.5f, 0, 0 }, | 55 { 0, 0, 1, 0.5f, 0, 0 }, |
56 { 0.25f, 0.25f, 1, 0.5f, 0, 0 }, | 56 { 0.25f, 0.25f, 1, 0.5f, 0, 0 }, |
57 { -0.25f, -0.25f, 1, 0.5f, 0, 0 }, | 57 { -0.25f, -0.25f, 1, 0.5f, 0, 0 }, |
58 }; | 58 }; |
59 | 59 |
| 60 static void draw_scene(SkCanvas* canvas, SkScalar pictureSize) { |
| 61 canvas->clear(SK_ColorWHITE); |
| 62 |
| 63 SkPaint paint; |
| 64 paint.setColor(SK_ColorGREEN); |
| 65 paint.setStyle(SkPaint::kFill_Style); |
| 66 paint.setAntiAlias(true); |
| 67 |
| 68 canvas->drawCircle(pictureSize / 4, pictureSize / 4, pictureSize / 4, paint)
; |
| 69 canvas->drawRect(SkRect::MakeXYWH(pictureSize / 2, pictureSize / 2, |
| 70 pictureSize / 2, pictureSize / 2), paint); |
| 71 |
| 72 paint.setColor(SK_ColorRED); |
| 73 canvas->drawLine(pictureSize / 2, pictureSize * 1 / 3, |
| 74 pictureSize / 2, pictureSize * 2 / 3, paint); |
| 75 canvas->drawLine(pictureSize * 1 / 3, pictureSize / 2, |
| 76 pictureSize * 2 / 3, pictureSize / 2, paint); |
| 77 |
| 78 paint.setColor(SK_ColorBLACK); |
| 79 paint.setStyle(SkPaint::kStroke_Style); |
| 80 canvas->drawRect(SkRect::MakeWH(pictureSize, pictureSize), paint); |
| 81 } |
| 82 |
60 class PictureShaderTileGM : public skiagm::GM { | 83 class PictureShaderTileGM : public skiagm::GM { |
61 protected: | 84 protected: |
62 virtual uint32_t onGetFlags() const SK_OVERRIDE { | 85 uint32_t onGetFlags() const SK_OVERRIDE { |
63 return kSkipTiled_Flag; | 86 return kSkipTiled_Flag; |
64 } | 87 } |
65 | 88 |
66 virtual SkString onShortName() SK_OVERRIDE { | 89 SkString onShortName() SK_OVERRIDE { |
67 return SkString("pictureshadertile"); | 90 return SkString("pictureshadertile"); |
68 } | 91 } |
69 | 92 |
70 virtual SkISize onISize() SK_OVERRIDE { | 93 SkISize onISize() SK_OVERRIDE { |
71 return SkISize::Make(800, 600); | 94 return SkISize::Make(800, 600); |
72 } | 95 } |
73 | 96 |
74 virtual void onOnceBeforeDraw() SK_OVERRIDE { | 97 void onOnceBeforeDraw() SK_OVERRIDE { |
75 SkPictureRecorder recorder; | 98 SkPictureRecorder recorder; |
76 SkCanvas* pictureCanvas = recorder.beginRecording(kPictureSize, kPicture
Size); | 99 SkCanvas* pictureCanvas = recorder.beginRecording(kPictureSize, kPicture
Size); |
77 drawScene(pictureCanvas, kPictureSize); | 100 draw_scene(pictureCanvas, kPictureSize); |
78 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); | 101 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); |
79 | 102 |
80 SkPoint offset = SkPoint::Make(100, 100); | 103 SkPoint offset = SkPoint::Make(100, 100); |
81 pictureCanvas = recorder.beginRecording(SkRect::MakeXYWH(offset.x(), off
set.y(), | 104 pictureCanvas = recorder.beginRecording(SkRect::MakeXYWH(offset.x(), off
set.y(), |
82 kPictureSize, k
PictureSize)); | 105 kPictureSize, k
PictureSize)); |
83 pictureCanvas->translate(offset.x(), offset.y()); | 106 pictureCanvas->translate(offset.x(), offset.y()); |
84 drawScene(pictureCanvas, kPictureSize); | 107 draw_scene(pictureCanvas, kPictureSize); |
85 SkAutoTUnref<SkPicture> offsetPicture(recorder.endRecording()); | 108 SkAutoTUnref<SkPicture> offsetPicture(recorder.endRecording()); |
86 | 109 |
87 for (unsigned i = 0; i < SK_ARRAY_COUNT(tiles); ++i) { | 110 for (unsigned i = 0; i < SK_ARRAY_COUNT(tiles); ++i) { |
88 SkRect tile = SkRect::MakeXYWH(tiles[i].x * kPictureSize, | 111 SkRect tile = SkRect::MakeXYWH(tiles[i].x * kPictureSize, |
89 tiles[i].y * kPictureSize, | 112 tiles[i].y * kPictureSize, |
90 tiles[i].w * kPictureSize, | 113 tiles[i].w * kPictureSize, |
91 tiles[i].h * kPictureSize); | 114 tiles[i].h * kPictureSize); |
92 SkMatrix localMatrix; | 115 SkMatrix localMatrix; |
93 localMatrix.setTranslate(tiles[i].offsetX * kPictureSize, | 116 localMatrix.setTranslate(tiles[i].offsetX * kPictureSize, |
94 tiles[i].offsetY * kPictureSize); | 117 tiles[i].offsetY * kPictureSize); |
95 localMatrix.postScale(kFillSize / (2 * kPictureSize), | 118 localMatrix.postScale(kFillSize / (2 * kPictureSize), |
96 kFillSize / (2 * kPictureSize)); | 119 kFillSize / (2 * kPictureSize)); |
97 | 120 |
98 SkPicture* picturePtr = picture.get(); | 121 SkPicture* picturePtr = picture.get(); |
99 SkRect* tilePtr = &tile; | 122 SkRect* tilePtr = &tile; |
100 | 123 |
101 if (tile == SkRect::MakeWH(kPictureSize, kPictureSize)) { | 124 if (tile == SkRect::MakeWH(kPictureSize, kPictureSize)) { |
102 // When the tile == picture bounds, exercise the picture + offse
t path. | 125 // When the tile == picture bounds, exercise the picture + offse
t path. |
103 picturePtr = offsetPicture.get(); | 126 picturePtr = offsetPicture.get(); |
104 tilePtr = NULL; | 127 tilePtr = NULL; |
105 } | 128 } |
106 | 129 |
107 fShaders[i].reset(SkShader::CreatePictureShader(picturePtr, | 130 fShaders[i].reset(SkShader::CreatePictureShader(picturePtr, |
108 SkShader::kRepeat_TileMode, | 131 SkShader::kRepeat_Ti
leMode, |
109 SkShader::kRepeat_TileMode, | 132 SkShader::kRepeat_Ti
leMode, |
110 &localMatrix, | 133 &localMatrix, |
111 tilePtr)); | 134 tilePtr)); |
112 } | 135 } |
113 } | 136 } |
114 | 137 |
115 virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { | 138 void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
116 canvas->clear(SK_ColorBLACK); | 139 canvas->clear(SK_ColorBLACK); |
117 | 140 |
118 SkPaint paint; | 141 SkPaint paint; |
119 paint.setStyle(SkPaint::kFill_Style); | 142 paint.setStyle(SkPaint::kFill_Style); |
120 | 143 |
121 for (unsigned i = 0; i < SK_ARRAY_COUNT(fShaders); ++i) { | 144 for (unsigned i = 0; i < SK_ARRAY_COUNT(fShaders); ++i) { |
122 paint.setShader(fShaders[i]); | 145 paint.setShader(fShaders[i]); |
123 | 146 |
124 canvas->save(); | 147 canvas->save(); |
125 canvas->translate((i % kRowSize) * kFillSize * 1.1f, | 148 canvas->translate((i % kRowSize) * kFillSize * 1.1f, |
126 (i / kRowSize) * kFillSize * 1.1f); | 149 (i / kRowSize) * kFillSize * 1.1f); |
127 canvas->drawRect(SkRect::MakeWH(kFillSize, kFillSize), paint); | 150 canvas->drawRect(SkRect::MakeWH(kFillSize, kFillSize), paint); |
128 canvas->restore(); | 151 canvas->restore(); |
129 } | 152 } |
130 } | 153 } |
131 | 154 |
132 private: | 155 private: |
133 void drawScene(SkCanvas* canvas, SkScalar pictureSize) { | |
134 canvas->clear(SK_ColorWHITE); | |
135 | |
136 SkPaint paint; | |
137 paint.setColor(SK_ColorGREEN); | |
138 paint.setStyle(SkPaint::kFill_Style); | |
139 paint.setAntiAlias(true); | |
140 | |
141 canvas->drawCircle(pictureSize / 4, pictureSize / 4, pictureSize / 4, pa
int); | |
142 canvas->drawRect(SkRect::MakeXYWH(pictureSize / 2, pictureSize / 2, | |
143 pictureSize / 2, pictureSize / 2), pai
nt); | |
144 | |
145 paint.setColor(SK_ColorRED); | |
146 canvas->drawLine(pictureSize / 2, pictureSize * 1 / 3, | |
147 pictureSize / 2, pictureSize * 2 / 3, paint); | |
148 canvas->drawLine(pictureSize * 1 / 3, pictureSize / 2, | |
149 pictureSize * 2 / 3, pictureSize / 2, paint); | |
150 | |
151 paint.setColor(SK_ColorBLACK); | |
152 paint.setStyle(SkPaint::kStroke_Style); | |
153 canvas->drawRect(SkRect::MakeWH(pictureSize, pictureSize), paint); | |
154 } | |
155 | |
156 SkAutoTUnref<SkShader> fShaders[SK_ARRAY_COUNT(tiles)]; | 156 SkAutoTUnref<SkShader> fShaders[SK_ARRAY_COUNT(tiles)]; |
157 | 157 |
158 typedef GM INHERITED; | 158 typedef GM INHERITED; |
159 }; | 159 }; |
160 | 160 |
161 DEF_GM( return SkNEW(PictureShaderTileGM); ) | 161 DEF_GM( return SkNEW(PictureShaderTileGM); ) |
OLD | NEW |