1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
7205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com#include "SampleCode.h"
8205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com#include "SkView.h"
9205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com#include "SkCanvas.h"
10205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com#include "SkPaint.h"
11205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com#include "SkShader.h"
12205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
13205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.comstatic SkBitmap createBitmap(int n) {
14205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    SkBitmap bitmap;
15a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org    bitmap.allocN32Pixels(n, n);
16205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    bitmap.eraseColor(SK_ColorGREEN);
17ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
18205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    SkCanvas canvas(bitmap);
19205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    SkRect r;
20205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    r.set(0, 0, SkIntToScalar(n), SkIntToScalar(n));
21205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    SkPaint paint;
22205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    paint.setAntiAlias(true);
23ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
24205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    paint.setColor(SK_ColorRED);
25205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    canvas.drawOval(r, paint);
26205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    paint.setColor(SK_ColorBLUE);
27205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    paint.setStrokeWidth(SkIntToScalar(n)/15);
28205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    paint.setStyle(SkPaint::kStroke_Style);
29205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    canvas.drawLine(0, 0, r.fRight, r.fBottom, paint);
30205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    canvas.drawLine(0, r.fBottom, r.fRight, 0, paint);
31ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
32205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    return bitmap;
33205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com}
34205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
3570b6125ed2dbae26f97d119f783e95e816480729reed@google.comclass AARectView : public SampleView {
36205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    SkBitmap fBitmap;
37205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    enum {
38205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        N = 64
39205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    };
40205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.compublic:
41205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    AARectView() {
42205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        fBitmap = createBitmap(N);
43ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
44205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        fWidth = N;
45205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    }
46ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
47205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.comprotected:
48205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    // overrides from SkEventSink
49205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    virtual bool onQuery(SkEvent* evt) {
50205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        if (SampleCode::TitleQ(*evt)) {
51205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com            SampleCode::TitleR(evt, "AA Rects");
52205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com            return true;
53205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        }
54205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        return this->INHERITED::onQuery(evt);
55205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    }
56205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
5770b6125ed2dbae26f97d119f783e95e816480729reed@google.com    virtual void onDrawContent(SkCanvas* canvas) {
58205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        canvas->translate(SkIntToScalar(10), SkIntToScalar(10));
59205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
60205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        SkPaint bluePaint;
61205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        bluePaint.setARGB(0xff, 0x0, 0x0, 0xff);
62205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        SkPaint bmpPaint;
638a21c9fe7f5fef9e87115defef27bd7218419f28reed        bmpPaint.setShader(SkShader::MakeBitmapShader(fBitmap, SkShader::kRepeat_TileMode,
648a21c9fe7f5fef9e87115defef27bd7218419f28reed                                                      SkShader::kRepeat_TileMode));
65205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        bluePaint.setStrokeWidth(3);
66205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        bmpPaint.setStrokeWidth(3);
67205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
68205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        SkPaint paints[] = { bluePaint, bmpPaint };
69205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
70205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        SkRect rect;
71205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
72205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        SkScalar dx = SkIntToScalar(80);
73205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        SkScalar dy = SkIntToScalar(100);
74205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        SkMatrix matrix;
7564cc579efa7e416c7298ed159d76b074b283c0f9senorblanco@chromium.org        for (size_t p = 0; p < SK_ARRAY_COUNT(paints); ++p) {
76205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com            for (int stroke = 0; stroke < 2; ++stroke) {
77205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                paints[p].setStyle(stroke ? SkPaint::kStroke_Style : SkPaint::kFill_Style);
78205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                for (int a = 0; a < 3; ++ a) {
79205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                    paints[p].setAntiAlias(a > 0);
80205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                    paints[p].setAlpha(a > 1 ? 0x80 : 0xff);
81205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
82205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                    canvas->save();
834b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                        rect = SkRect::MakeLTRB(0.f,
844b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                0.f,
854b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                40.f,
864b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                40.f);
87205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->drawRect(rect, paints[p]);
88205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->translate(dx, 0);
89205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
904b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                        rect = SkRect::MakeLTRB(0.5f,
914b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                0.5f,
924b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                40.5f,
934b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                40.5f);
94205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->drawRect(rect, paints[p]);
95205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->translate(dx, 0);
96205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
974b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                        rect = SkRect::MakeLTRB(0.5f,
984b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                0.5f,
994b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                40.f,
1004b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                40.f);
101205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->drawRect(rect, paints[p]);
102205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->translate(dx, 0);
103205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
1044b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                        rect = SkRect::MakeLTRB(0.75f,
1054b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                0.75f,
1064b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                40.75f,
1074b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                40.75f);
108205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->drawRect(rect, paints[p]);
109205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->translate(dx, 0);
110205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
111205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->save();
1124b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            canvas->translate(.33f, .67f);
1134b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            rect = SkRect::MakeLTRB(0.0f,
1144b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    0.0f,
1154b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    40.0f,
1164b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    40.0f);
117205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                            canvas->drawRect(rect, paints[p]);
118205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->restore();
119205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->translate(dx, 0);
120205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
121205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->save();
1224b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            matrix.setRotate(45.f);
123205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                            canvas->concat(matrix);
1244b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            canvas->translate(20.0f / sqrtf(2.f),
1254b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                20.0f / sqrtf(2.f));
1264b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            rect = SkRect::MakeLTRB(-20.0f,
1274b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    -20.0f,
1284b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    20.0f,
1294b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    20.0f);
130205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                            canvas->drawRect(rect, paints[p]);
131205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->restore();
132205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->translate(dx, 0);
133205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
134205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->save();
1354b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            canvas->rotate(90.f);
1364b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            rect = SkRect::MakeLTRB(0.0f,
1374b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    0.0f,
1384b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    40.0f,
1394b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    -40.0f);
140205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                            canvas->drawRect(rect, paints[p]);
141205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->restore();
142205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->translate(dx, 0);
143205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
144205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->save();
1454b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            canvas->rotate(90.f);
1464b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            rect = SkRect::MakeLTRB(0.5f,
1474b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    0.5f,
1484b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    40.5f,
1494b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    -40.5f);
150205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                            canvas->drawRect(rect, paints[p]);
151205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->restore();
152205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->translate(dx, 0);
153205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
154205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->save();
1554b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            matrix.setScale(-1.f, -1.f);
156205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                            canvas->concat(matrix);
1574b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            rect = SkRect::MakeLTRB(0.5f,
1584b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    0.5f,
1594b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    -40.5f,
1604b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    -40.5f);
161205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                            canvas->drawRect(rect, paints[p]);
162205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->restore();
163205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->translate(dx, 0);
164205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
165205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->save();
1664b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            matrix.setScale(2.1f, 4.1f);
167205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                            canvas->concat(matrix);
1684b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                            rect = SkRect::MakeLTRB(0.1f,
1694b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    0.1f,
1704b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    19.1f,
1714b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org                                                    9.1f);
172205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                            canvas->drawRect(rect, paints[p]);
173205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->restore();
174205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                        canvas->translate(dx, 0);
175205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
176205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                    canvas->restore();
177205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                    canvas->translate(0, dy);
178205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com                }
179205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com            }
180205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com        }
181205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    }
182ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
183205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.comprivate:
184205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com    int fWidth;
185205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
18670b6125ed2dbae26f97d119f783e95e816480729reed@google.com    typedef SampleView INHERITED;
187205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com};
188205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
189205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com//////////////////////////////////////////////////////////////////////////////
190205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.com
191205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.comstatic SkView* MyFactory() { return new AARectView; }
192205d46067ace24bd4b111cf44efc96caff6c4d30bsalomon@google.comstatic SkViewRegister reg(MyFactory);
193