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 "gm.h" | 8 #include "gm.h" |
9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" |
10 #include "SkCanvas.h" | 10 #include "SkCanvas.h" |
(...skipping 27 matching lines...) Expand all Loading... |
38 bmp.unlockPixels(); | 38 bmp.unlockPixels(); |
39 | 39 |
40 return bmp; | 40 return bmp; |
41 } | 41 } |
42 | 42 |
43 static const SkScalar RECT_SIZE = 64; | 43 static const SkScalar RECT_SIZE = 64; |
44 static const SkScalar SLIDE_SIZE = 300; | 44 static const SkScalar SLIDE_SIZE = 300; |
45 | 45 |
46 class ClippedBitmapShadersGM : public GM { | 46 class ClippedBitmapShadersGM : public GM { |
47 public: | 47 public: |
48 ClippedBitmapShadersGM(SkShader::TileMode mode) | 48 ClippedBitmapShadersGM(SkShader::TileMode mode, bool hq=false) |
49 : fMode(mode) { | 49 : fMode(mode), fHQ(hq) { |
50 } | 50 } |
51 | 51 |
52 protected: | 52 protected: |
53 SkShader::TileMode fMode; | 53 SkShader::TileMode fMode; |
| 54 bool fHQ; |
54 | 55 |
55 virtual SkString onShortName() { | 56 virtual SkString onShortName() { |
56 SkString descriptor; | 57 SkString descriptor; |
57 switch (fMode) { | 58 switch (fMode) { |
58 case SkShader::kRepeat_TileMode: | 59 case SkShader::kRepeat_TileMode: |
59 descriptor = "tile"; | 60 descriptor = "tile"; |
60 break; | 61 break; |
61 case SkShader::kMirror_TileMode: | 62 case SkShader::kMirror_TileMode: |
62 descriptor = "mirror"; | 63 descriptor = "mirror"; |
63 break; | 64 break; |
64 case SkShader::kClamp_TileMode: | 65 case SkShader::kClamp_TileMode: |
65 descriptor = "clamp"; | 66 descriptor = "clamp"; |
66 break; | 67 break; |
67 default: | 68 default: |
68 SkASSERT(false); | 69 SkASSERT(false); |
69 } | 70 } |
70 descriptor.prepend("clipped-bitmap-shaders-"); | 71 descriptor.prepend("clipped-bitmap-shaders-"); |
| 72 if (fHQ) { |
| 73 descriptor.append("-hq"); |
| 74 } |
71 return descriptor; | 75 return descriptor; |
72 } | 76 } |
73 | 77 |
74 virtual SkISize onISize() { | 78 virtual SkISize onISize() { |
75 return SkISize::Make(300, 300); | 79 return SkISize::Make(300, 300); |
76 } | 80 } |
77 | 81 |
78 virtual void onDraw(SkCanvas* canvas) { | 82 virtual void onDraw(SkCanvas* canvas) { |
79 SkBitmap bmp = create_bitmap(); | 83 SkBitmap bmp = create_bitmap(); |
80 SkShader* shader = SkShader::CreateBitmapShader( | 84 SkShader* shader = SkShader::CreateBitmapShader( |
81 bmp, fMode, fMode); | 85 bmp, fMode, fMode); |
82 | 86 |
83 SkPaint paint; | 87 SkPaint paint; |
84 SkMatrix s; | 88 SkMatrix s; |
85 s.reset(); | 89 s.reset(); |
86 s.setScale(8, 8); | 90 s.setScale(8, 8); |
87 s.postTranslate(SLIDE_SIZE / 2, SLIDE_SIZE / 2); | 91 s.postTranslate(SLIDE_SIZE / 2, SLIDE_SIZE / 2); |
88 shader->setLocalMatrix(s); | 92 shader->setLocalMatrix(s); |
89 paint.setShader(shader)->unref(); | 93 paint.setShader(shader)->unref(); |
| 94 |
| 95 if (fHQ) { |
| 96 paint.setFilterLevel(SkPaint::kHigh_FilterLevel); |
| 97 } |
90 | 98 |
91 SkScalar margin = (SLIDE_SIZE / 3 - RECT_SIZE) / 2; | 99 SkScalar margin = (SLIDE_SIZE / 3 - RECT_SIZE) / 2; |
92 for (int i = 0; i < 3; i++) { | 100 for (int i = 0; i < 3; i++) { |
93 SkScalar yOrigin = SLIDE_SIZE / 3 * i + margin; | 101 SkScalar yOrigin = SLIDE_SIZE / 3 * i + margin; |
94 for (int j = 0; j < 3; j++) { | 102 for (int j = 0; j < 3; j++) { |
95 SkScalar xOrigin = SLIDE_SIZE / 3 * j + margin; | 103 SkScalar xOrigin = SLIDE_SIZE / 3 * j + margin; |
96 if (i == 1 && j == 1) { | 104 if (i == 1 && j == 1) { |
97 continue; // skip center element | 105 continue; // skip center element |
98 } | 106 } |
99 SkRect rect = SkRect::MakeXYWH(xOrigin, yOrigin, | 107 SkRect rect = SkRect::MakeXYWH(xOrigin, yOrigin, |
100 RECT_SIZE, RECT_SIZE); | 108 RECT_SIZE, RECT_SIZE); |
101 canvas->save(); | 109 canvas->save(); |
102 canvas->clipRect(rect); | 110 canvas->clipRect(rect); |
103 canvas->drawRect(rect, paint); | 111 canvas->drawRect(rect, paint); |
104 canvas->restore(); | 112 canvas->restore(); |
105 } | 113 } |
106 } | 114 } |
107 } | 115 } |
108 | 116 |
109 private: | 117 private: |
110 typedef GM INHERITED; | 118 typedef GM INHERITED; |
111 }; | 119 }; |
112 | 120 |
113 ////////////////////////////////////////////////////////////////////////////// | 121 ////////////////////////////////////////////////////////////////////////////// |
114 | 122 |
115 DEF_GM( return new ClippedBitmapShadersGM(SkShader::kRepeat_TileMode); ) | 123 DEF_GM( return new ClippedBitmapShadersGM(SkShader::kRepeat_TileMode); ) |
116 DEF_GM( return new ClippedBitmapShadersGM(SkShader::kMirror_TileMode); ) | 124 DEF_GM( return new ClippedBitmapShadersGM(SkShader::kMirror_TileMode); ) |
117 DEF_GM( return new ClippedBitmapShadersGM(SkShader::kClamp_TileMode); ) | 125 DEF_GM( return new ClippedBitmapShadersGM(SkShader::kClamp_TileMode); ) |
| 126 |
| 127 DEF_GM( return new ClippedBitmapShadersGM(SkShader::kRepeat_TileMode, true); ) |
| 128 DEF_GM( return new ClippedBitmapShadersGM(SkShader::kMirror_TileMode, true); ) |
| 129 DEF_GM( return new ClippedBitmapShadersGM(SkShader::kClamp_TileMode, true); ) |
| 130 |
| 131 |
118 } | 132 } |
OLD | NEW |