| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 "sk_tool_utils.h" | 8 #include "sk_tool_utils.h" |
| 9 #include "SkBitmapSource.h" | |
| 10 #include "SkColorFilterImageFilter.h" | 9 #include "SkColorFilterImageFilter.h" |
| 11 #include "SkColorMatrixFilter.h" | 10 #include "SkColorMatrixFilter.h" |
| 11 #include "SkImage.h" |
| 12 #include "SkImageSource.h" |
| 12 #include "SkTileImageFilter.h" | 13 #include "SkTileImageFilter.h" |
| 13 #include "gm.h" | 14 #include "gm.h" |
| 14 | 15 |
| 15 #define WIDTH 400 | 16 #define WIDTH 400 |
| 16 #define HEIGHT 100 | 17 #define HEIGHT 100 |
| 17 #define MARGIN 12 | 18 #define MARGIN 12 |
| 18 | 19 |
| 19 namespace skiagm { | 20 namespace skiagm { |
| 20 | 21 |
| 21 class TileImageFilterGM : public GM { | 22 class TileImageFilterGM : public GM { |
| 22 public: | 23 public: |
| 23 TileImageFilterGM() { | 24 TileImageFilterGM() { |
| 24 this->setBGColor(0xFF000000); | 25 this->setBGColor(0xFF000000); |
| 25 } | 26 } |
| 26 | 27 |
| 27 protected: | 28 protected: |
| 28 SkString onShortName() override { | 29 SkString onShortName() override { |
| 29 return SkString("tileimagefilter"); | 30 return SkString("tileimagefilter"); |
| 30 } | 31 } |
| 31 | 32 |
| 32 SkISize onISize() override{ | 33 SkISize onISize() override{ |
| 33 return SkISize::Make(WIDTH, HEIGHT); | 34 return SkISize::Make(WIDTH, HEIGHT); |
| 34 } | 35 } |
| 35 | 36 |
| 36 void onOnceBeforeDraw() override { | 37 void onOnceBeforeDraw() override { |
| 37 fBitmap = sk_tool_utils::create_string_bitmap(50, 50, 0xD000D000, 10, 45
, 50, "e"); | 38 fBitmap.reset(SkImage::NewFromBitmap( |
| 39 sk_tool_utils::create_string_bitmap(50, 50, 0xD000D000, 10, 45, 50,
"e"))); |
| 38 | 40 |
| 39 fCheckerboard = sk_tool_utils::create_checkerboard_bitmap( | 41 fCheckerboard.reset(SkImage::NewFromBitmap( |
| 40 80, 80, | 42 sk_tool_utils::create_checkerboard_bitmap(80, 80, |
| 41 sk_tool_utils::color_to_
565(0xFFA0A0A0), | 43 sk_tool_utils::color_to_56
5(0xFFA0A0A0), |
| 42 sk_tool_utils::color_to_
565(0xFF404040), | 44 sk_tool_utils::color_to_56
5(0xFF404040), |
| 43 8); | 45 8))); |
| 44 } | 46 } |
| 45 | 47 |
| 46 void onDraw(SkCanvas* canvas) override { | 48 void onDraw(SkCanvas* canvas) override { |
| 47 canvas->clear(SK_ColorBLACK); | 49 canvas->clear(SK_ColorBLACK); |
| 48 | 50 |
| 49 int x = 0, y = 0; | 51 int x = 0, y = 0; |
| 50 for (size_t i = 0; i < 4; i++) { | 52 for (size_t i = 0; i < 4; i++) { |
| 51 SkBitmap* bitmap = (i & 0x01) ? &fCheckerboard : &fBitmap; | 53 const SkImage* image = (i & 0x01) ? fCheckerboard : fBitmap; |
| 52 SkRect srcRect = SkRect::MakeXYWH(SkIntToScalar(bitmap->width()/4), | 54 SkRect srcRect = SkRect::MakeXYWH(SkIntToScalar(image->width()/4), |
| 53 SkIntToScalar(bitmap->height()/4), | 55 SkIntToScalar(image->height()/4), |
| 54 SkIntToScalar(bitmap->width()/(i+1
)), | 56 SkIntToScalar(image->width()/(i+1)
), |
| 55 SkIntToScalar(bitmap->height()/(i+
1))); | 57 SkIntToScalar(image->height()/(i+1
))); |
| 56 SkRect dstRect = SkRect::MakeXYWH(SkIntToScalar(i * 8), | 58 SkRect dstRect = SkRect::MakeXYWH(SkIntToScalar(i * 8), |
| 57 SkIntToScalar(i * 4), | 59 SkIntToScalar(i * 4), |
| 58 SkIntToScalar(bitmap->width() - i
* 12), | 60 SkIntToScalar(image->width() - i *
12), |
| 59 SkIntToScalar(bitmap->height()) -
i * 12); | 61 SkIntToScalar(image->height()) - i
* 12); |
| 60 SkAutoTUnref<SkImageFilter> tileInput(SkBitmapSource::Create(*bitmap
)); | 62 SkAutoTUnref<SkImageFilter> tileInput(SkImageSource::Create(image)); |
| 61 SkAutoTUnref<SkImageFilter> filter( | 63 SkAutoTUnref<SkImageFilter> filter( |
| 62 SkTileImageFilter::Create(srcRect, dstRect, tileInput)); | 64 SkTileImageFilter::Create(srcRect, dstRect, tileInput)); |
| 63 canvas->save(); | 65 canvas->save(); |
| 64 canvas->translate(SkIntToScalar(x), SkIntToScalar(y)); | 66 canvas->translate(SkIntToScalar(x), SkIntToScalar(y)); |
| 65 SkPaint paint; | 67 SkPaint paint; |
| 66 paint.setImageFilter(filter); | 68 paint.setImageFilter(filter); |
| 67 canvas->drawBitmap(fBitmap, 0, 0, &paint); | 69 canvas->drawImage(fBitmap, 0, 0, &paint); |
| 68 canvas->restore(); | 70 canvas->restore(); |
| 69 x += bitmap->width() + MARGIN; | 71 x += image->width() + MARGIN; |
| 70 if (x + bitmap->width() > WIDTH) { | 72 if (x + image->width() > WIDTH) { |
| 71 x = 0; | 73 x = 0; |
| 72 y += bitmap->height() + MARGIN; | 74 y += image->height() + MARGIN; |
| 73 } | 75 } |
| 74 } | 76 } |
| 75 | 77 |
| 76 SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0, | 78 SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0, |
| 77 0, SK_Scalar1, 0, 0, 0, | 79 0, SK_Scalar1, 0, 0, 0, |
| 78 0, 0, SK_Scalar1, 0, 0, | 80 0, 0, SK_Scalar1, 0, 0, |
| 79 0, 0, 0, SK_Scalar1, 0 }; | 81 0, 0, 0, SK_Scalar1, 0 }; |
| 80 | 82 |
| 81 SkRect srcRect = SkRect::MakeWH(SkIntToScalar(fBitmap.width()), | 83 SkRect srcRect = SkRect::MakeWH(SkIntToScalar(fBitmap->width()), |
| 82 SkIntToScalar(fBitmap.height())); | 84 SkIntToScalar(fBitmap->height())); |
| 83 SkRect dstRect = SkRect::MakeWH(SkIntToScalar(fBitmap.width() * 2), | 85 SkRect dstRect = SkRect::MakeWH(SkIntToScalar(fBitmap->width() * 2), |
| 84 SkIntToScalar(fBitmap.height() * 2)); | 86 SkIntToScalar(fBitmap->height() * 2)); |
| 85 SkAutoTUnref<SkImageFilter> tile(SkTileImageFilter::Create(srcRect, dstR
ect, nullptr)); | 87 SkAutoTUnref<SkImageFilter> tile(SkTileImageFilter::Create(srcRect, dstR
ect, nullptr)); |
| 86 SkAutoTUnref<SkColorFilter> cf(SkColorMatrixFilter::Create(matrix)); | 88 SkAutoTUnref<SkColorFilter> cf(SkColorMatrixFilter::Create(matrix)); |
| 87 | 89 |
| 88 SkAutoTUnref<SkImageFilter> cfif(SkColorFilterImageFilter::Create(cf, ti
le.get())); | 90 SkAutoTUnref<SkImageFilter> cfif(SkColorFilterImageFilter::Create(cf, ti
le.get())); |
| 89 SkPaint paint; | 91 SkPaint paint; |
| 90 paint.setImageFilter(cfif); | 92 paint.setImageFilter(cfif); |
| 91 canvas->save(); | 93 canvas->save(); |
| 92 canvas->translate(SkIntToScalar(x), SkIntToScalar(y)); | 94 canvas->translate(SkIntToScalar(x), SkIntToScalar(y)); |
| 93 canvas->clipRect(dstRect); | 95 canvas->clipRect(dstRect); |
| 94 canvas->saveLayer(&dstRect, &paint); | 96 canvas->saveLayer(&dstRect, &paint); |
| 95 canvas->drawBitmap(fBitmap, 0, 0); | 97 canvas->drawImage(fBitmap, 0, 0); |
| 96 canvas->restore(); | 98 canvas->restore(); |
| 97 canvas->restore(); | 99 canvas->restore(); |
| 98 } | 100 } |
| 99 private: | 101 private: |
| 100 SkBitmap fBitmap; | 102 SkAutoTUnref<SkImage> fBitmap, fCheckerboard; |
| 101 SkBitmap fCheckerboard; | |
| 102 | 103 |
| 103 typedef GM INHERITED; | 104 typedef GM INHERITED; |
| 104 }; | 105 }; |
| 105 | 106 |
| 106 ////////////////////////////////////////////////////////////////////////////// | 107 ////////////////////////////////////////////////////////////////////////////// |
| 107 | 108 |
| 108 DEF_GM(return new TileImageFilterGM;) | 109 DEF_GM(return new TileImageFilterGM;) |
| 109 } | 110 } |
| OLD | NEW |