| 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 |