• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
13 namespace skiagm {
14 
15 class BigMatrixGM : public GM {
16 public:
BigMatrixGM()17     BigMatrixGM() {
18         this->setBGColor(0xFF66AA99);
19     }
20 
21 protected:
onGetFlags() const22     virtual uint32_t onGetFlags() const SK_OVERRIDE {
23         return kSkipTiled_Flag;
24     }
25 
onShortName()26     virtual SkString onShortName() {
27         return SkString("bigmatrix");
28     }
29 
onISize()30     virtual SkISize onISize() {
31         return SkISize::Make(50, 50);
32     }
33 
onDraw(SkCanvas * canvas)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 
90 private:
91     typedef GM INHERITED;
92 };
93 
94 //////////////////////////////////////////////////////////////////////////////
95 
MyFactory(void *)96 static GM* MyFactory(void*) { return new BigMatrixGM; }
97 static GMRegistry reg(MyFactory);
98 
99 }
100