1 2/* 3 * Copyright 2012 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8#include "gm.h" 9 10#include "SkColorPriv.h" 11#include "SkShader.h" 12 13namespace skiagm { 14 15class BigMatrixGM : public GM { 16public: 17 BigMatrixGM() { 18 this->setBGColor(0xFF66AA99); 19 } 20 21protected: 22 virtual uint32_t onGetFlags() const SK_OVERRIDE { 23 return kSkipTiled_Flag; 24 } 25 26 virtual SkString onShortName() { 27 return SkString("bigmatrix"); 28 } 29 30 virtual SkISize onISize() { 31 return SkISize::Make(50, 50); 32 } 33 34 virtual void onDraw(SkCanvas* canvas) { 35 SkMatrix m; 36 m.reset(); 37 m.setRotate(33 * SK_Scalar1); 38 m.postScale(3000 * SK_Scalar1, 3000 * SK_Scalar1); 39 m.postTranslate(6000 * SK_Scalar1, -5000 * SK_Scalar1); 40 canvas->concat(m); 41 42 SkPaint paint; 43 paint.setColor(SK_ColorRED); 44 paint.setAntiAlias(true); 45 46 bool success = m.invert(&m); 47 SkASSERT(success); 48 (void) success; // silence compiler :( 49 50 SkPath path; 51 52 SkPoint pt = {10 * SK_Scalar1, 10 * SK_Scalar1}; 53 SkScalar small = 1 / (500 * SK_Scalar1); 54 55 m.mapPoints(&pt, 1); 56 path.addCircle(pt.fX, pt.fY, small); 57 canvas->drawPath(path, paint); 58 59 pt.set(30 * SK_Scalar1, 10 * SK_Scalar1); 60 m.mapPoints(&pt, 1); 61 SkRect rect = {pt.fX - small, pt.fY - small, 62 pt.fX + small, pt.fY + small}; 63 canvas->drawRect(rect, paint); 64 65 SkBitmap bmp; 66 bmp.allocN32Pixels(2, 2); 67 uint32_t* pixels = reinterpret_cast<uint32_t*>(bmp.getPixels()); 68 pixels[0] = SkPackARGB32(0xFF, 0xFF, 0x00, 0x00); 69 pixels[1] = SkPackARGB32(0xFF, 0x00, 0xFF, 0x00); 70 pixels[2] = SkPackARGB32(0x80, 0x00, 0x00, 0x00); 71 pixels[3] = SkPackARGB32(0xFF, 0x00, 0x00, 0xFF); 72 pt.set(30 * SK_Scalar1, 30 * SK_Scalar1); 73 m.mapPoints(&pt, 1); 74 SkMatrix s; 75 s.reset(); 76 s.setScale(SK_Scalar1 / 1000, SK_Scalar1 / 1000); 77 SkShader* shader = SkShader::CreateBitmapShader( 78 bmp, 79 SkShader::kRepeat_TileMode, 80 SkShader::kRepeat_TileMode, 81 &s); 82 paint.setShader(shader)->unref(); 83 paint.setAntiAlias(false); 84 paint.setFilterLevel(SkPaint::kLow_FilterLevel); 85 rect.setLTRB(pt.fX - small, pt.fY - small, 86 pt.fX + small, pt.fY + small); 87 canvas->drawRect(rect, paint); 88 } 89 90private: 91 typedef GM INHERITED; 92}; 93 94////////////////////////////////////////////////////////////////////////////// 95 96static GM* MyFactory(void*) { return new BigMatrixGM; } 97static GMRegistry reg(MyFactory); 98 99} 100