blob: 09d90fdf2835cdd60910055e51e396652c640faf [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
2/*
3 * Copyright 2011 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 */
reed@android.com0bfffc52009-06-26 20:22:44 +00008#include "gm.h"
9#include "SkPicture.h"
10#include "SkRectShape.h"
11#include "SkGroupShape.h"
12
13namespace skiagm {
14
15static SkRect make_rect(int l, int t, int r, int b) {
16 SkRect rect;
17 rect.set(SkIntToScalar(l), SkIntToScalar(t),
18 SkIntToScalar(r), SkIntToScalar(b));
19 return rect;
20}
21
22static SkShape* make_shape0(bool red) {
23 SkRectShape* s = new SkRectShape;
24 s->setRect(make_rect(10, 10, 90, 90));
25 if (red) {
26 s->paint().setColor(SK_ColorRED);
27 }
28 return s;
29}
30
31static SkShape* make_shape1() {
32 SkRectShape* s = new SkRectShape;
33 s->setOval(make_rect(10, 10, 90, 90));
34 s->paint().setColor(SK_ColorBLUE);
35 return s;
36}
37
38static SkShape* make_shape2() {
39 SkRectShape* s = new SkRectShape;
40 s->setRRect(make_rect(10, 10, 90, 90),
41 SkIntToScalar(20), SkIntToScalar(20));
42 s->paint().setColor(SK_ColorGREEN);
43 return s;
44}
45
46///////////////////////////////////////////////////////////////////////////////
47
48class ShapesGM : public GM {
49 SkGroupShape fGroup;
50 SkMatrixRef* fMatrixRefs[4];
51public:
52 ShapesGM() {
53 SkMatrix m;
54 fGroup.appendShape(make_shape0(false))->unref();
55 m.setRotate(SkIntToScalar(30), SkIntToScalar(50), SkIntToScalar(50));
56 m.postTranslate(0, SkIntToScalar(120));
57 fGroup.appendShape(make_shape0(true), m)->unref();
58
59 m.setTranslate(SkIntToScalar(120), 0);
60 fGroup.appendShape(make_shape1(), m)->unref();
61 m.postTranslate(0, SkIntToScalar(120));
62 fGroup.appendShape(make_shape2(), m)->unref();
reed@google.com0e4a8852011-01-12 17:14:04 +000063
reed@android.com0bfffc52009-06-26 20:22:44 +000064 for (size_t i = 0; i < SK_ARRAY_COUNT(fMatrixRefs); i++) {
65 SkSafeRef(fMatrixRefs[i] = fGroup.getShapeMatrixRef(i));
66 }
reed@google.com4c9a8152011-05-26 14:42:48 +000067 SkScalar c = SkIntToScalar(50);
68 fMatrixRefs[3]->preRotate(SkIntToScalar(30), c, c);
reed@android.com0bfffc52009-06-26 20:22:44 +000069 }
reed@google.com0e4a8852011-01-12 17:14:04 +000070
reed@android.com0bfffc52009-06-26 20:22:44 +000071 virtual ~ShapesGM() {
72 for (size_t i = 0; i < SK_ARRAY_COUNT(fMatrixRefs); i++) {
73 SkSafeUnref(fMatrixRefs[i]);
74 }
75 }
reed@google.com0e4a8852011-01-12 17:14:04 +000076
reed@android.com0bfffc52009-06-26 20:22:44 +000077protected:
78 virtual SkString onShortName() {
79 return SkString("shapes");
80 }
reed@google.com0e4a8852011-01-12 17:14:04 +000081
reed@android.com0bfffc52009-06-26 20:22:44 +000082 virtual SkISize onISize() {
83 return make_isize(380, 480);
84 }
reed@google.com0e4a8852011-01-12 17:14:04 +000085
reed@android.com0bfffc52009-06-26 20:22:44 +000086 void drawBG(SkCanvas* canvas) {
87 canvas->drawColor(0xFFDDDDDD);
88 }
reed@google.com0e4a8852011-01-12 17:14:04 +000089
reed@android.com0bfffc52009-06-26 20:22:44 +000090 virtual void onDraw(SkCanvas* canvas) {
91 this->drawBG(canvas);
reed@google.com0e4a8852011-01-12 17:14:04 +000092
reed@android.com0bfffc52009-06-26 20:22:44 +000093 SkMatrix matrix;
reed@google.com0e4a8852011-01-12 17:14:04 +000094
reed@android.com0bfffc52009-06-26 20:22:44 +000095 SkGroupShape* gs = new SkGroupShape;
96 SkAutoUnref aur(gs);
97 gs->appendShape(&fGroup);
98 matrix.setScale(-SK_Scalar1, SK_Scalar1);
99 matrix.postTranslate(SkIntToScalar(220), SkIntToScalar(240));
100 gs->appendShape(&fGroup, matrix);
101 matrix.setTranslate(SkIntToScalar(240), 0);
102 matrix.preScale(SK_Scalar1*2, SK_Scalar1*2);
103 gs->appendShape(&fGroup, matrix);
reed@google.com0e4a8852011-01-12 17:14:04 +0000104
reed@google.com5667afc2011-06-27 14:42:15 +0000105#if 1
reed@google.com0e4a8852011-01-12 17:14:04 +0000106 SkPicture* pict = new SkPicture;
107 SkCanvas* cv = pict->beginRecording(1000, 1000);
reed@android.com0bfffc52009-06-26 20:22:44 +0000108 cv->scale(SK_ScalarHalf, SK_ScalarHalf);
reed@google.com5667afc2011-06-27 14:42:15 +0000109 gs->draw(cv);
reed@android.com0bfffc52009-06-26 20:22:44 +0000110 cv->translate(SkIntToScalar(680), SkIntToScalar(480));
111 cv->scale(-SK_Scalar1, SK_Scalar1);
reed@google.com5667afc2011-06-27 14:42:15 +0000112 gs->draw(cv);
reed@google.com0e4a8852011-01-12 17:14:04 +0000113 pict->endRecording();
114 canvas->drawPicture(*pict);
115 pict->unref();
reed@android.com0bfffc52009-06-26 20:22:44 +0000116#endif
reed@android.com0bfffc52009-06-26 20:22:44 +0000117}
reed@google.com0e4a8852011-01-12 17:14:04 +0000118
reed@android.com0bfffc52009-06-26 20:22:44 +0000119private:
120 typedef GM INHERITED;
121};
122
123///////////////////////////////////////////////////////////////////////////////
124
125static GM* MyFactory(void*) { return new ShapesGM; }
126static GMRegistry reg(MyFactory);
127
128}