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
14static 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
36static 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
44class RepeatTileView : public SampleView {
45public:
46    RepeatTileView() {
47        this->setBGColor(SK_ColorGRAY);
48    }
49
50protected:
51    // overrides from SkEventSink
52    virtual bool onQuery(SkEvent* evt) {
53        if (SampleCode::TitleQ(*evt)) {
54            SampleCode::TitleR(evt, "RepeatTile");
55            return true;
56        }
57        return this->INHERITED::onQuery(evt);
58    }
59
60    virtual void onDrawContent(SkCanvas* canvas) {
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
69    virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi) SK_OVERRIDE {
70        this->inval(NULL);
71
72        return this->INHERITED::onFindClickHandler(x, y, modi);
73    }
74
75    virtual bool onClick(Click* click) {
76        return this->INHERITED::onClick(click);
77    }
78
79    virtual bool handleKey(SkKey) {
80        this->inval(NULL);
81        return true;
82    }
83
84private:
85    typedef SampleView INHERITED;
86};
87
88//////////////////////////////////////////////////////////////////////////////
89
90static SkView* MyFactory() { return new RepeatTileView; }
91static SkViewRegister reg(MyFactory);
92