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

Side by Side Diff: gm/imagefilterscropped.cpp

Issue 781153002: Fix Morphology effects sourcing outside of the crop rect. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Take into account junov's comments Created 5 years, 11 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
1 /* 1 /*
2 * Copyright 2011 Google Inc. 2 * Copyright 2011 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 #include "SkCanvas.h" 9 #include "SkCanvas.h"
10 #include "SkColorFilter.h" 10 #include "SkColorFilter.h"
11 #include "SkColorPriv.h" 11 #include "SkColorPriv.h"
12 #include "SkShader.h" 12 #include "SkShader.h"
13 13
14 #include "SkBlurImageFilter.h" 14 #include "SkBlurImageFilter.h"
15 #include "SkMorphologyImageFilter.h"
15 #include "SkColorFilterImageFilter.h" 16 #include "SkColorFilterImageFilter.h"
17 #include "SkBitmapSource.h"
16 #include "SkMergeImageFilter.h" 18 #include "SkMergeImageFilter.h"
17 #include "SkOffsetImageFilter.h" 19 #include "SkOffsetImageFilter.h"
18 #include "SkTestImageFilters.h" 20 #include "SkTestImageFilters.h"
19 21
20 /////////////////////////////////////////////////////////////////////////////// 22 ///////////////////////////////////////////////////////////////////////////////
21 23
22 static void draw_paint(SkCanvas* canvas, const SkRect& r, SkImageFilter* imf) { 24 static void draw_paint(SkCanvas* canvas, const SkRect& r, SkImageFilter* imf) {
23 SkPaint paint; 25 SkPaint paint;
24 paint.setImageFilter(imf); 26 paint.setImageFilter(imf);
25 paint.setColor(SK_ColorBLACK); 27 paint.setColor(SK_ColorBLACK);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 public: 95 public:
94 ImageFiltersCroppedGM () {} 96 ImageFiltersCroppedGM () {}
95 97
96 protected: 98 protected:
97 virtual SkString onShortName() { 99 virtual SkString onShortName() {
98 return SkString("imagefilterscropped"); 100 return SkString("imagefilterscropped");
99 } 101 }
100 102
101 virtual SkISize onISize() { return SkISize::Make(400, 640); } 103 virtual SkISize onISize() { return SkISize::Make(400, 640); }
102 104
105 void make_checkerboard() {
106 fCheckerboard.allocN32Pixels(80, 80);
107 SkCanvas canvas(fCheckerboard);
108 canvas.clear(SK_ColorTRANSPARENT);
109 SkPaint darkPaint;
110 darkPaint.setColor(0xFF404040);
111 SkPaint lightPaint;
112 lightPaint.setColor(0xFFA0A0A0);
113 for (int y = 0; y < 80; y += 16) {
114 for (int x = 0; x < 80; x += 16) {
115 canvas.save();
116 canvas.translate(SkIntToScalar(x), SkIntToScalar(y));
117 canvas.drawRect(SkRect::MakeXYWH(0, 0, 8, 8), darkPaint);
118 canvas.drawRect(SkRect::MakeXYWH(8, 0, 8, 8), lightPaint);
119 canvas.drawRect(SkRect::MakeXYWH(0, 8, 8, 8), lightPaint);
120 canvas.drawRect(SkRect::MakeXYWH(8, 8, 8, 8), darkPaint);
121 canvas.restore();
122 }
123 }
124 }
125
103 void draw_frame(SkCanvas* canvas, const SkRect& r) { 126 void draw_frame(SkCanvas* canvas, const SkRect& r) {
104 SkPaint paint; 127 SkPaint paint;
105 paint.setStyle(SkPaint::kStroke_Style); 128 paint.setStyle(SkPaint::kStroke_Style);
106 paint.setColor(SK_ColorRED); 129 paint.setColor(SK_ColorRED);
107 canvas->drawRect(r, paint); 130 canvas->drawRect(r, paint);
108 } 131 }
109 132
110 virtual uint32_t onGetFlags() const { 133 virtual uint32_t onGetFlags() const {
111 // Because of the use of drawSprite, this test is excluded 134 // Because of the use of drawSprite, this test is excluded
112 // from scaled replay tests because drawSprite ignores the 135 // from scaled replay tests because drawSprite ignores the
113 // reciprocal scale that is applied at record time, which is 136 // reciprocal scale that is applied at record time, which is
114 // the intended behavior of drawSprite. 137 // the intended behavior of drawSprite.
115 return kSkipScaledReplay_Flag | kSkipTiled_Flag; 138 return kSkipScaledReplay_Flag | kSkipTiled_Flag;
116 } 139 }
117 140
141 virtual void onOnceBeforeDraw() SK_OVERRIDE{
142 make_checkerboard();
143 }
144
118 virtual void onDraw(SkCanvas* canvas) { 145 virtual void onDraw(SkCanvas* canvas) {
119 void (*drawProc[])(SkCanvas*, const SkRect&, SkImageFilter*) = { 146 void (*drawProc[])(SkCanvas*, const SkRect&, SkImageFilter*) = {
120 draw_sprite, draw_bitmap, draw_path, draw_paint, draw_text 147 draw_sprite, draw_bitmap, draw_path, draw_paint, draw_text
121 }; 148 };
122 149
123 SkAutoTUnref<SkColorFilter> cf( 150 SkAutoTUnref<SkColorFilter> cf(
124 SkColorFilter::CreateModeFilter(SK_ColorBLUE, SkXfermode::kSrcIn_Mod e)); 151 SkColorFilter::CreateModeFilter(SK_ColorBLUE, SkXfermode::kSrcIn_Mod e));
125 SkImageFilter::CropRect cropRect(SkRect::Make(SkIRect::MakeXYWH(10, 10, 44, 44)), SkImageFilter::CropRect::kHasAll_CropEdge); 152 SkImageFilter::CropRect cropRect(SkRect::Make(SkIRect::MakeXYWH(10, 10, 44, 44)), SkImageFilter::CropRect::kHasAll_CropEdge);
126 SkImageFilter::CropRect bogusRect(SkRect::Make(SkIRect::MakeXYWH(-100, - 100, 10, 10)), SkImageFilter::CropRect::kHasAll_CropEdge); 153 SkImageFilter::CropRect bogusRect(SkRect::Make(SkIRect::MakeXYWH(-100, - 100, 10, 10)), SkImageFilter::CropRect::kHasAll_CropEdge);
127 154
128 SkAutoTUnref<SkImageFilter> offset(SkOffsetImageFilter::Create( 155 SkAutoTUnref<SkImageFilter> offset(SkOffsetImageFilter::Create(
129 SkIntToScalar(-10), SkIntToScalar(-10))); 156 SkIntToScalar(-10), SkIntToScalar(-10)));
130 157
131 SkAutoTUnref<SkImageFilter> cfOffset(SkColorFilterImageFilter::Create(cf .get(), offset.get())); 158 SkAutoTUnref<SkImageFilter> cfOffset(SkColorFilterImageFilter::Create(cf .get(), offset.get()));
132
133 SkImageFilter* filters[] = { 159 SkImageFilter* filters[] = {
134 NULL, 160 NULL,
135 SkColorFilterImageFilter::Create(cf.get(), NULL, &cropRect), 161 SkColorFilterImageFilter::Create(cf.get(), NULL, &cropRect),
136 SkBlurImageFilter::Create(1.0f, 1.0f, NULL, &cropRect), 162 SkErodeImageFilter::Create(1, 1, NULL, &cropRect),
137 SkBlurImageFilter::Create(8.0f, 0.0f, NULL, &cropRect), 163 SkErodeImageFilter::Create(8, 0, SkErodeImageFilter::Create(0, 8, NU LL, &cropRect), &cropRect),
138 SkBlurImageFilter::Create(0.0f, 8.0f, NULL, &cropRect), 164 SkErodeImageFilter::Create(0, 8, SkErodeImageFilter::Create(8, 0, NU LL, &cropRect), &cropRect),
139 SkBlurImageFilter::Create(8.0f, 8.0f, NULL, &cropRect), 165 SkErodeImageFilter::Create(8, 8, NULL, &cropRect),
140 SkMergeImageFilter::Create(NULL, cfOffset.get(), SkXfermode::kSrcOve r_Mode, &cropRect), 166 SkMergeImageFilter::Create(NULL, cfOffset.get(), SkXfermode::kSrcOve r_Mode, &cropRect),
141 SkBlurImageFilter::Create(8.0f, 8.0f, NULL, &bogusRect), 167 SkErodeImageFilter::Create(8, 8, NULL, &bogusRect),
142 SkColorFilterImageFilter::Create(cf.get(), NULL, &bogusRect), 168 SkColorFilterImageFilter::Create(cf.get(), NULL, &bogusRect),
143 }; 169 };
144 170
145 SkRect r = SkRect::MakeWH(SkIntToScalar(64), SkIntToScalar(64)); 171 SkRect r = SkRect::MakeWH(SkIntToScalar(64), SkIntToScalar(64));
146 SkScalar MARGIN = SkIntToScalar(16); 172 SkScalar MARGIN = SkIntToScalar(16);
147 SkScalar DX = r.width() + MARGIN; 173 SkScalar DX = r.width() + MARGIN;
148 SkScalar DY = r.height() + MARGIN; 174 SkScalar DY = r.height() + MARGIN;
149 175
150 canvas->translate(MARGIN, MARGIN); 176 canvas->translate(MARGIN, MARGIN);
151 for (size_t j = 0; j < SK_ARRAY_COUNT(drawProc); ++j) { 177 for (size_t j = 0; j < SK_ARRAY_COUNT(drawProc); ++j) {
152 canvas->save(); 178 canvas->save();
153 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { 179 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) {
180 SkPaint paint;
181 canvas->drawBitmap(fCheckerboard, 0, 0);
154 drawProc[j](canvas, r, filters[i]); 182 drawProc[j](canvas, r, filters[i]);
155 canvas->translate(0, DY); 183 canvas->translate(0, DY);
156 } 184 }
157 canvas->restore(); 185 canvas->restore();
158 canvas->translate(DX, 0); 186 canvas->translate(DX, 0);
159 } 187 }
160 188
161 for(size_t j = 0; j < SK_ARRAY_COUNT(filters); ++j) { 189 for(size_t j = 0; j < SK_ARRAY_COUNT(filters); ++j) {
162 SkSafeUnref(filters[j]); 190 SkSafeUnref(filters[j]);
163 } 191 }
164 } 192 }
165 193
166 private: 194 private:
195 SkBitmap fCheckerboard;
167 typedef GM INHERITED; 196 typedef GM INHERITED;
168 }; 197 };
169 198
170 /////////////////////////////////////////////////////////////////////////////// 199 ///////////////////////////////////////////////////////////////////////////////
171 200
172 static skiagm::GM* MyFactory(void*) { return new ImageFiltersCroppedGM; } 201 static skiagm::GM* MyFactory(void*) { return new ImageFiltersCroppedGM; }
173 static skiagm::GMRegistry reg(MyFactory); 202 static skiagm::GMRegistry reg(MyFactory);
OLDNEW
« no previous file with comments | « no previous file | src/effects/SkMorphologyImageFilter.cpp » ('j') | src/effects/SkMorphologyImageFilter.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698