| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 "SkArithmeticMode.h" | 10 #include "SkArithmeticMode.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 class SimpleOffsetFilter : public SkImageFilter { | 28 class SimpleOffsetFilter : public SkImageFilter { |
| 29 public: | 29 public: |
| 30 class Registrar { | 30 class Registrar { |
| 31 public: | 31 public: |
| 32 Registrar() { | 32 Registrar() { |
| 33 SkFlattenable::Register("SimpleOffsetFilter", | 33 SkFlattenable::Register("SimpleOffsetFilter", |
| 34 SimpleOffsetFilter::CreateProc, | 34 SimpleOffsetFilter::CreateProc, |
| 35 SimpleOffsetFilter::GetFlattenableType()); | 35 SimpleOffsetFilter::GetFlattenableType()); |
| 36 } | 36 } |
| 37 }; | 37 }; |
| 38 static SkImageFilter* Create(SkScalar dx, SkScalar dy, SkImageFilter* input)
{ | 38 static sk_sp<SkImageFilter> Make(SkScalar dx, SkScalar dy, sk_sp<SkImageFilt
er> input) { |
| 39 return new SimpleOffsetFilter(dx, dy, input); | 39 return sk_sp<SkImageFilter>(new SimpleOffsetFilter(dx, dy, std::move(inp
ut))); |
| 40 } | 40 } |
| 41 | 41 |
| 42 SK_TO_STRING_OVERRIDE() |
| 43 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SimpleOffsetFilter); |
| 44 |
| 45 protected: |
| 42 bool onFilterImageDeprecated(Proxy* proxy, const SkBitmap& src, const Contex
t& ctx, | 46 bool onFilterImageDeprecated(Proxy* proxy, const SkBitmap& src, const Contex
t& ctx, |
| 43 SkBitmap* dst, SkIPoint* offset) const override
{ | 47 SkBitmap* dst, SkIPoint* offset) const override
{ |
| 44 SkBitmap source = src; | 48 SkBitmap source = src; |
| 45 SkIPoint srcOffset = SkIPoint::Make(0, 0); | 49 SkIPoint srcOffset = SkIPoint::Make(0, 0); |
| 46 if (!this->filterInputDeprecated(0, proxy, src, ctx, &source, &srcOffset
)) { | 50 if (!this->filterInputDeprecated(0, proxy, src, ctx, &source, &srcOffset
)) { |
| 47 return false; | 51 return false; |
| 48 } | 52 } |
| 49 | 53 |
| 50 SkIRect bounds; | 54 SkIRect bounds; |
| 51 if (!this->applyCropRectDeprecated(ctx, proxy, source, &srcOffset, &boun
ds, &source)) { | 55 if (!this->applyCropRectDeprecated(ctx, proxy, source, &srcOffset, &boun
ds, &source)) { |
| 52 return false; | 56 return false; |
| 53 } | 57 } |
| 54 | 58 |
| 55 SkAutoTUnref<SkBaseDevice> device(proxy->createDevice(bounds.width(), bo
unds.height())); | 59 SkAutoTUnref<SkBaseDevice> device(proxy->createDevice(bounds.width(), bo
unds.height())); |
| 56 SkCanvas canvas(device); | 60 SkCanvas canvas(device); |
| 57 SkPaint paint; | 61 SkPaint paint; |
| 58 paint.setXfermodeMode(SkXfermode::kSrc_Mode); | 62 paint.setXfermodeMode(SkXfermode::kSrc_Mode); |
| 59 canvas.drawBitmap(source, fDX - bounds.left(), fDY - bounds.top(), &pain
t); | 63 canvas.drawBitmap(source, fDX - bounds.left(), fDY - bounds.top(), &pain
t); |
| 60 *dst = device->accessBitmap(false); | 64 *dst = device->accessBitmap(false); |
| 61 offset->fX += bounds.left(); | 65 offset->fX += bounds.left(); |
| 62 offset->fY += bounds.top(); | 66 offset->fY += bounds.top(); |
| 63 return true; | 67 return true; |
| 64 } | 68 } |
| 65 | 69 |
| 66 SK_TO_STRING_OVERRIDE() | |
| 67 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SimpleOffsetFilter); | |
| 68 | |
| 69 protected: | |
| 70 void flatten(SkWriteBuffer& buffer) const override { | 70 void flatten(SkWriteBuffer& buffer) const override { |
| 71 this->INHERITED::flatten(buffer); | 71 this->INHERITED::flatten(buffer); |
| 72 buffer.writeScalar(fDX); | 72 buffer.writeScalar(fDX); |
| 73 buffer.writeScalar(fDY); | 73 buffer.writeScalar(fDY); |
| 74 } | 74 } |
| 75 | 75 |
| 76 private: | 76 private: |
| 77 SimpleOffsetFilter(SkScalar dx, SkScalar dy, SkImageFilter* input) | 77 SimpleOffsetFilter(SkScalar dx, SkScalar dy, sk_sp<SkImageFilter> input) |
| 78 : SkImageFilter(1, &input), fDX(dx), fDY(dy) {} | 78 : SkImageFilter(&input, 1, nullptr) |
| 79 , fDX(dx) |
| 80 , fDY(dy) { |
| 81 } |
| 79 | 82 |
| 80 SkScalar fDX, fDY; | 83 SkScalar fDX, fDY; |
| 81 | 84 |
| 82 typedef SkImageFilter INHERITED; | 85 typedef SkImageFilter INHERITED; |
| 83 }; | 86 }; |
| 84 | 87 |
| 85 static SimpleOffsetFilter::Registrar gReg; | 88 static SimpleOffsetFilter::Registrar gReg; |
| 86 | 89 |
| 87 sk_sp<SkFlattenable> SimpleOffsetFilter::CreateProc(SkReadBuffer& buffer) { | 90 sk_sp<SkFlattenable> SimpleOffsetFilter::CreateProc(SkReadBuffer& buffer) { |
| 88 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); | 91 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); |
| 89 SkScalar dx = buffer.readScalar(); | 92 SkScalar dx = buffer.readScalar(); |
| 90 SkScalar dy = buffer.readScalar(); | 93 SkScalar dy = buffer.readScalar(); |
| 91 return sk_sp<SkFlattenable>(Create(dx, dy, common.getInput(0).get())); | 94 return Make(dx, dy, common.getInput(0)); |
| 92 } | 95 } |
| 93 | 96 |
| 94 #ifndef SK_IGNORE_TO_STRING | 97 #ifndef SK_IGNORE_TO_STRING |
| 95 void SimpleOffsetFilter::toString(SkString* str) const { | 98 void SimpleOffsetFilter::toString(SkString* str) const { |
| 96 str->appendf("SimpleOffsetFilter: ("); | 99 str->appendf("SimpleOffsetFilter: ("); |
| 97 str->append(")"); | 100 str->append(")"); |
| 98 } | 101 } |
| 99 #endif | 102 #endif |
| 100 | 103 |
| 101 class ImageFiltersGraphGM : public skiagm::GM { | 104 class ImageFiltersGraphGM : public skiagm::GM { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 125 sk_sp<SkImageFilter> erode(SkErodeImageFilter::Create(4, 4, blur.get
())); | 128 sk_sp<SkImageFilter> erode(SkErodeImageFilter::Create(4, 4, blur.get
())); |
| 126 sk_sp<SkImageFilter> color(SkColorFilterImageFilter::Create(cf.get()
, erode.get())); | 129 sk_sp<SkImageFilter> color(SkColorFilterImageFilter::Create(cf.get()
, erode.get())); |
| 127 sk_sp<SkImageFilter> merge(SkMergeImageFilter::Make(blur, color)); | 130 sk_sp<SkImageFilter> merge(SkMergeImageFilter::Make(blur, color)); |
| 128 | 131 |
| 129 SkPaint paint; | 132 SkPaint paint; |
| 130 paint.setImageFilter(std::move(merge)); | 133 paint.setImageFilter(std::move(merge)); |
| 131 canvas->drawPaint(paint); | 134 canvas->drawPaint(paint); |
| 132 canvas->translate(SkIntToScalar(100), 0); | 135 canvas->translate(SkIntToScalar(100), 0); |
| 133 } | 136 } |
| 134 { | 137 { |
| 135 SkAutoTUnref<SkImageFilter> morph(SkDilateImageFilter::Create(5, 5))
; | 138 sk_sp<SkImageFilter> morph(SkDilateImageFilter::Create(5, 5)); |
| 136 | 139 |
| 137 SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0, | 140 SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0, |
| 138 0, SK_Scalar1, 0, 0, 0, | 141 0, SK_Scalar1, 0, 0, 0, |
| 139 0, 0, SK_Scalar1, 0, 0, | 142 0, 0, SK_Scalar1, 0, 0, |
| 140 0, 0, 0, 0.5f, 0 }; | 143 0, 0, 0, 0.5f, 0 }; |
| 141 | 144 |
| 142 auto matrixFilter(SkColorFilter::MakeMatrixFilterRowMajor255(matrix)
); | 145 sk_sp<SkColorFilter> matrixFilter(SkColorFilter::MakeMatrixFilterRow
Major255(matrix)); |
| 143 SkAutoTUnref<SkImageFilter> colorMorph(SkColorFilterImageFilter::Cre
ate(matrixFilter.get(), morph)); | 146 sk_sp<SkImageFilter> colorMorph(SkColorFilterImageFilter::Create(mat
rixFilter.get(), |
| 147 mor
ph.get())); |
| 144 SkPaint paint; | 148 SkPaint paint; |
| 145 paint.setImageFilter(SkXfermodeImageFilter::Make( | 149 paint.setImageFilter(SkXfermodeImageFilter::Make( |
| 146 SkXfermode::Make(SkXfermode::kSrcOver_Mo
de), colorMorph)); | 150 SkXfermode::Make(SkXfermode::kSrcOver_Mo
de), |
| 151 colorMorph.get())); |
| 147 | 152 |
| 148 DrawClippedImage(canvas, fImage.get(), paint); | 153 DrawClippedImage(canvas, fImage.get(), paint); |
| 149 canvas->translate(SkIntToScalar(100), 0); | 154 canvas->translate(SkIntToScalar(100), 0); |
| 150 } | 155 } |
| 151 { | 156 { |
| 152 SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0, | 157 SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0, |
| 153 0, SK_Scalar1, 0, 0, 0, | 158 0, SK_Scalar1, 0, 0, 0, |
| 154 0, 0, SK_Scalar1, 0, 0, | 159 0, 0, SK_Scalar1, 0, 0, |
| 155 0, 0, 0, 0.5f, 0 }; | 160 0, 0, 0, 0.5f, 0 }; |
| 156 auto matrixCF(SkColorFilter::MakeMatrixFilterRowMajor255(matrix)); | 161 sk_sp<SkColorFilter> matrixCF(SkColorFilter::MakeMatrixFilterRowMajo
r255(matrix)); |
| 157 SkAutoTUnref<SkImageFilter> matrixFilter(SkColorFilterImageFilter::C
reate(matrixCF.get())); | 162 sk_sp<SkImageFilter> matrixFilter(SkColorFilterImageFilter::Create(m
atrixCF.get())); |
| 158 SkAutoTUnref<SkImageFilter> offsetFilter( | 163 sk_sp<SkImageFilter> offsetFilter(SimpleOffsetFilter::Make(10.0f, 10
.f, matrixFilter)); |
| 159 SimpleOffsetFilter::Create(10.0f, 10.f, matrixFilter)); | |
| 160 | 164 |
| 161 SkPaint paint; | 165 SkPaint paint; |
| 162 paint.setImageFilter( | 166 paint.setImageFilter( |
| 163 SkXfermodeImageFilter::Make(SkArithmeticMode::Make(0, SK_Scalar1
, SK_Scalar1, 0), | 167 SkXfermodeImageFilter::Make(SkArithmeticMode::Make(0, SK_Scalar1
, SK_Scalar1, 0), |
| 164 matrixFilter, offsetFilter, nullptr)
); | 168 matrixFilter.get(), offsetFilter.get
(), nullptr)); |
| 165 | 169 |
| 166 DrawClippedImage(canvas, fImage.get(), paint); | 170 DrawClippedImage(canvas, fImage.get(), paint); |
| 167 canvas->translate(SkIntToScalar(100), 0); | 171 canvas->translate(SkIntToScalar(100), 0); |
| 168 } | 172 } |
| 169 { | 173 { |
| 170 SkAutoTUnref<SkImageFilter> blur(SkBlurImageFilter::Create( | 174 SkAutoTUnref<SkImageFilter> blur(SkBlurImageFilter::Create( |
| 171 SkIntToScalar(10), SkIntToScalar(10))); | 175 SkIntToScalar(10), SkIntToScalar(10))); |
| 172 | 176 |
| 173 SkImageFilter::CropRect cropRect(SkRect::MakeWH(SkIntToScalar(95), S
kIntToScalar(100))); | 177 SkImageFilter::CropRect cropRect(SkRect::MakeWH(SkIntToScalar(95), S
kIntToScalar(100))); |
| 174 SkPaint paint; | 178 SkPaint paint; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 } | 242 } |
| 239 | 243 |
| 240 sk_sp<SkImage> fImage; | 244 sk_sp<SkImage> fImage; |
| 241 | 245 |
| 242 typedef GM INHERITED; | 246 typedef GM INHERITED; |
| 243 }; | 247 }; |
| 244 | 248 |
| 245 /////////////////////////////////////////////////////////////////////////////// | 249 /////////////////////////////////////////////////////////////////////////////// |
| 246 | 250 |
| 247 DEF_GM(return new ImageFiltersGraphGM;) | 251 DEF_GM(return new ImageFiltersGraphGM;) |
| OLD | NEW |