OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 "SkBitmapSource.h" | 8 #include "SkBitmapSource.h" |
9 #include "SkTileImageFilter.h" | 9 #include "SkTileImageFilter.h" |
10 #include "gm.h" | 10 #include "gm.h" |
11 | 11 |
| 12 static void create_circle_texture(SkBitmap* bm, SkColor color) { |
| 13 SkCanvas canvas(*bm); |
| 14 canvas.clear(0xFF000000); |
| 15 |
| 16 SkPaint paint; |
| 17 paint.setColor(color); |
| 18 paint.setStrokeWidth(3); |
| 19 paint.setStyle(SkPaint::kStroke_Style); |
| 20 |
| 21 canvas.drawCircle(SkScalarHalf(bm->width()), SkScalarHalf(bm->height()), |
| 22 SkScalarHalf(bm->width()), paint); |
| 23 } |
| 24 |
12 namespace skiagm { | 25 namespace skiagm { |
13 | 26 |
14 class BigTileImageFilterGM : public GM { | 27 class BigTileImageFilterGM : public GM { |
15 public: | 28 public: |
16 BigTileImageFilterGM() { | 29 BigTileImageFilterGM() { |
17 this->setBGColor(0xFF000000); | 30 this->setBGColor(0xFF000000); |
18 } | 31 } |
19 | 32 |
20 protected: | 33 protected: |
21 | 34 |
22 SkString onShortName() override { | 35 SkString onShortName() override { |
23 return SkString("bigtileimagefilter"); | 36 return SkString("bigtileimagefilter"); |
24 } | 37 } |
25 | 38 |
26 SkISize onISize() override{ | 39 SkISize onISize() override{ |
27 return SkISize::Make(kWidth, kHeight); | 40 return SkISize::Make(kWidth, kHeight); |
28 } | 41 } |
29 | 42 |
30 void onOnceBeforeDraw() override { | 43 void onOnceBeforeDraw() override { |
31 fBitmap.allocN32Pixels(kBitmapSize, kBitmapSize); | 44 fRedBitmap.allocN32Pixels(kBitmapSize, kBitmapSize); |
| 45 create_circle_texture(&fRedBitmap, SK_ColorRED); |
32 | 46 |
33 SkCanvas canvas(fBitmap); | 47 fGreenBitmap.allocN32Pixels(kBitmapSize, kBitmapSize); |
34 canvas.clear(0xFF000000); | 48 create_circle_texture(&fGreenBitmap, SK_ColorGREEN); |
35 | |
36 SkPaint paint; | |
37 paint.setColor(SK_ColorRED); | |
38 paint.setStrokeWidth(3); | |
39 paint.setStyle(SkPaint::kStroke_Style); | |
40 | |
41 canvas.drawCircle(SkScalarHalf(kBitmapSize), SkScalarHalf(kBitmapSize), | |
42 SkScalarHalf(kBitmapSize), paint); | |
43 } | 49 } |
44 | 50 |
45 void onDraw(SkCanvas* canvas) override { | 51 void onDraw(SkCanvas* canvas) override { |
46 canvas->clear(SK_ColorBLACK); | 52 canvas->clear(SK_ColorBLACK); |
47 | 53 |
48 SkPaint p; | 54 { |
| 55 SkPaint p; |
49 | 56 |
50 SkAutoTUnref<SkBitmapSource> bms(SkBitmapSource::Create(fBitmap)); | 57 SkRect bound = SkRect::MakeWH(SkIntToScalar(kWidth), SkIntToScalar(k
Height)); |
51 SkAutoTUnref<SkTileImageFilter> tif(SkTileImageFilter::Create( | 58 SkAutoTUnref<SkBitmapSource> bms(SkBitmapSource::Create(fRedBitmap))
; |
| 59 SkAutoTUnref<SkTileImageFilter> tif(SkTileImageFilter::Create( |
52 SkRect::MakeWH(SkIntToScalar(kBitmapSize), SkIntToSc
alar(kBitmapSize)), | 60 SkRect::MakeWH(SkIntToScalar(kBitmapSize), SkIntToSc
alar(kBitmapSize)), |
53 SkRect::MakeWH(SkIntToScalar(kWidth), SkIntToScalar(
kHeight)), | 61 SkRect::MakeWH(SkIntToScalar(kWidth), SkIntToScalar(
kHeight)), |
54 bms)); | 62 bms)); |
55 p.setImageFilter(tif); | 63 p.setImageFilter(tif); |
56 | 64 |
57 SkRect bound = SkRect::MakeWH(SkIntToScalar(kWidth), SkIntToScalar(kHeig
ht)); | 65 canvas->saveLayer(&bound, &p); |
58 canvas->saveLayer(&bound, &p); | 66 canvas->restore(); |
59 canvas->restore(); | 67 } |
| 68 |
| 69 { |
| 70 SkPaint p2; |
| 71 |
| 72 SkRect bound2 = SkRect::MakeWH(SkIntToScalar(kBitmapSize), SkIntToSc
alar(kBitmapSize)); |
| 73 |
| 74 SkAutoTUnref<SkTileImageFilter> tif2(SkTileImageFilter::Create( |
| 75 SkRect::MakeWH(SkIntToScalar(kBitmapSize), SkIntToSc
alar(kBitmapSize)), |
| 76 SkRect::MakeWH(SkIntToScalar(kBitmapSize), SkIntToSc
alar(kBitmapSize)), |
| 77 NULL)); |
| 78 p2.setImageFilter(tif2); |
| 79 |
| 80 canvas->translate(320, 320); |
| 81 canvas->saveLayer(&bound2, &p2); |
| 82 canvas->setMatrix(SkMatrix::I()); |
| 83 |
| 84 SkRect bound3 = SkRect::MakeXYWH(320, 320, |
| 85 SkIntToScalar(kBitmapSize), |
| 86 SkIntToScalar(kBitmapSize)); |
| 87 canvas->drawBitmapRectToRect(fGreenBitmap, &bound2, bound3); |
| 88 canvas->restore(); |
| 89 } |
60 } | 90 } |
61 | 91 |
62 private: | 92 private: |
63 static const int kWidth = 512; | 93 static const int kWidth = 512; |
64 static const int kHeight = 512; | 94 static const int kHeight = 512; |
65 static const int kBitmapSize = 64; | 95 static const int kBitmapSize = 64; |
66 | 96 |
67 SkBitmap fBitmap; | 97 SkBitmap fRedBitmap; |
| 98 SkBitmap fGreenBitmap; |
68 | 99 |
69 typedef GM INHERITED; | 100 typedef GM INHERITED; |
70 }; | 101 }; |
71 | 102 |
72 ////////////////////////////////////////////////////////////////////////////// | 103 ////////////////////////////////////////////////////////////////////////////// |
73 | 104 |
74 DEF_GM( return SkNEW(BigTileImageFilterGM); ) | 105 DEF_GM( return SkNEW(BigTileImageFilterGM); ) |
75 | 106 |
76 } | 107 } |
OLD | NEW |