1
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 */
8 #include "SampleCode.h"
9 #include "SkView.h"
10 #include "SkCanvas.h"
11 #include "SkShader.h"
12 #include "SkKey.h"
13
make_bitmap(SkBitmap * bm)14 static void make_bitmap(SkBitmap* bm) {
15 const int W = 100;
16 const int H = 100;
17 bm->allocN32Pixels(W, H);
18
19 SkPaint paint;
20 SkCanvas canvas(*bm);
21 canvas.drawColor(SK_ColorWHITE);
22
23 const SkColor colors[] = {
24 SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE
25 };
26
27 for (int ix = 0; ix < W; ix += 1) {
28 SkScalar x = SkIntToScalar(ix) + SK_ScalarHalf;
29 paint.setColor(colors[ix & 3]);
30 canvas.drawLine(x, 0, x, SkIntToScalar(H - 1), paint);
31 }
32 paint.setColor(SK_ColorGRAY);
33 canvas.drawLine(0, 0, SkIntToScalar(W), 0, paint);
34 }
35
make_paint(SkPaint * paint,SkShader::TileMode tm)36 static void make_paint(SkPaint* paint, SkShader::TileMode tm) {
37 SkBitmap bm;
38 make_bitmap(&bm);
39
40 SkShader* shader = SkShader::CreateBitmapShader(bm, tm, tm);
41 paint->setShader(shader)->unref();
42 }
43
44 class RepeatTileView : public SampleView {
45 public:
RepeatTileView()46 RepeatTileView() {
47 this->setBGColor(SK_ColorGRAY);
48 }
49
50 protected:
51 // overrides from SkEventSink
onQuery(SkEvent * evt)52 bool onQuery(SkEvent* evt) override {
53 if (SampleCode::TitleQ(*evt)) {
54 SampleCode::TitleR(evt, "RepeatTile");
55 return true;
56 }
57 return this->INHERITED::onQuery(evt);
58 }
59
onDrawContent(SkCanvas * canvas)60 void onDrawContent(SkCanvas* canvas) override {
61 SkPaint paint;
62 make_paint(&paint, SkShader::kRepeat_TileMode);
63
64 // canvas->scale(SK_Scalar1*2, SK_Scalar1);
65 canvas->translate(SkIntToScalar(100), SkIntToScalar(100));
66 canvas->drawPaint(paint);
67 }
68
onFindClickHandler(SkScalar x,SkScalar y,unsigned modi)69 SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi) override {
70 this->inval(nullptr);
71
72 return this->INHERITED::onFindClickHandler(x, y, modi);
73 }
74
onClick(Click * click)75 bool onClick(Click* click) override {
76 return this->INHERITED::onClick(click);
77 }
78
handleKey(SkKey)79 virtual bool handleKey(SkKey) {
80 this->inval(nullptr);
81 return true;
82 }
83
84 private:
85 typedef SampleView INHERITED;
86 };
87
88 //////////////////////////////////////////////////////////////////////////////
89
MyFactory()90 static SkView* MyFactory() { return new RepeatTileView; }
91 static SkViewRegister reg(MyFactory);
92