OLD | NEW |
(Empty) | |
| 1 /* |
| 2 * Copyright 2016 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 #include "SkBlurImageFilter.h" |
| 10 #include "SkCanvas.h" |
| 11 #include "SkColorFilter.h" |
| 12 #include "SkColorFilterImageFilter.h" |
| 13 #include "SkDropShadowImageFilter.h" |
| 14 #include "SkSurface.h" |
| 15 |
| 16 /////////////////////////////////////////////////////////////////////////////// |
| 17 |
| 18 class ImageMakeWithFilterGM : public skiagm::GM { |
| 19 public: |
| 20 ImageMakeWithFilterGM () {} |
| 21 |
| 22 protected: |
| 23 SkString onShortName() override { |
| 24 return SkString("imagemakewithfilter"); |
| 25 } |
| 26 |
| 27 SkISize onISize() override { return SkISize::Make(320, 100); } |
| 28 |
| 29 void onDraw(SkCanvas* canvas) override { |
| 30 auto cf = SkColorFilter::MakeModeFilter(SK_ColorGREEN, SkXfermode::kSrc_
Mode); |
| 31 sk_sp<SkImageFilter> filters[] = { |
| 32 SkColorFilterImageFilter::Make(std::move(cf), nullptr), |
| 33 SkBlurImageFilter::Make(2.0f, 2.0f, nullptr), |
| 34 SkDropShadowImageFilter::Make( |
| 35 10.0f, 5.0f, 3.0f, 3.0f, SK_ColorBLUE, |
| 36 SkDropShadowImageFilter::kDrawShadowAndForeground_ShadowMode, |
| 37 nullptr), |
| 38 }; |
| 39 |
| 40 const SkImageInfo info = SkImageInfo::MakeN32(100, 100, kPremul_SkAlphaT
ype); |
| 41 SkScalar MARGIN = SkIntToScalar(10); |
| 42 SkScalar DX = info.width() + MARGIN; |
| 43 |
| 44 canvas->translate(MARGIN, MARGIN); |
| 45 |
| 46 sk_sp<SkSurface> surface = canvas->makeSurface(info); |
| 47 if (!surface) { |
| 48 surface = SkSurface::MakeRaster(info); |
| 49 } |
| 50 sk_tool_utils::draw_checkerboard(surface->getCanvas()); |
| 51 sk_sp<SkImage> source = surface->makeImageSnapshot(); |
| 52 SkIRect clipBounds = SkIRect::MakeXYWH(0, 0, 75, 75); |
| 53 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { |
| 54 SkIRect subset = SkIRect::MakeXYWH(25, 25, 50, 50); |
| 55 SkIRect outSubset; |
| 56 SkIPoint offset; |
| 57 sk_sp<SkImage> result = source->makeWithFilter(filters[i].get(), sub
set, clipBounds, |
| 58 &outSubset, &offset); |
| 59 SkASSERT(result); |
| 60 SkASSERT(source->isTextureBacked() == result->isTextureBacked()); |
| 61 result = result->makeSubset(outSubset); |
| 62 canvas->drawImage(result.get(), SkIntToScalar(offset.fX), SkIntToSca
lar(offset.fY)); |
| 63 canvas->translate(DX, 0); |
| 64 } |
| 65 } |
| 66 |
| 67 private: |
| 68 typedef GM INHERITED; |
| 69 }; |
| 70 DEF_GM( return new ImageMakeWithFilterGM; ) |
OLD | NEW |