1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
8f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com#include "SampleCode.h"
9f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com#include "SkView.h"
10f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com#include "SkCanvas.h"
11f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com#include "SkShader.h"
12f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com#include "SkKey.h"
13f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com
14f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.comstatic void make_bitmap(SkBitmap* bm) {
15f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    const int W = 100;
16f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    const int H = 100;
17a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org    bm->allocN32Pixels(W, H);
18f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com
19f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    SkPaint paint;
20f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    SkCanvas canvas(*bm);
21f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    canvas.drawColor(SK_ColorWHITE);
22f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com
23f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    const SkColor colors[] = {
24f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com        SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE
25f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    };
26f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com
27f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    for (int ix = 0; ix < W; ix += 1) {
28f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com        SkScalar x = SkIntToScalar(ix) + SK_ScalarHalf;
29f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com        paint.setColor(colors[ix & 3]);
30f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com        canvas.drawLine(x, 0, x, SkIntToScalar(H - 1), paint);
31f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    }
32f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    paint.setColor(SK_ColorGRAY);
33f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    canvas.drawLine(0, 0, SkIntToScalar(W), 0, paint);
34f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com}
35f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com
36f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.comstatic void make_paint(SkPaint* paint, SkShader::TileMode tm) {
37f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    SkBitmap bm;
38f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    make_bitmap(&bm);
39f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com
40ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com    SkShader* shader = SkShader::CreateBitmapShader(bm, tm, tm);
41f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    paint->setShader(shader)->unref();
42f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com}
43f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com
4481e3d7f7943d5c257a07580b75218a5e256b0aadreed@google.comclass RepeatTileView : public SampleView {
45f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.compublic:
46ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com    RepeatTileView() {
4781e3d7f7943d5c257a07580b75218a5e256b0aadreed@google.com        this->setBGColor(SK_ColorGRAY);
4881e3d7f7943d5c257a07580b75218a5e256b0aadreed@google.com    }
49f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com
50f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.comprotected:
51f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    // overrides from SkEventSink
52f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    virtual bool onQuery(SkEvent* evt) {
53f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com        if (SampleCode::TitleQ(*evt)) {
54f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com            SampleCode::TitleR(evt, "RepeatTile");
55f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com            return true;
56f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com        }
57f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com        return this->INHERITED::onQuery(evt);
58f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    }
59ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
6081e3d7f7943d5c257a07580b75218a5e256b0aadreed@google.com    virtual void onDrawContent(SkCanvas* canvas) {
61f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com        SkPaint paint;
62f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com        make_paint(&paint, SkShader::kRepeat_TileMode);
63ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
64f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com//        canvas->scale(SK_Scalar1*2, SK_Scalar1);
65f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com        canvas->translate(SkIntToScalar(100), SkIntToScalar(100));
66f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com        canvas->drawPaint(paint);
67f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    }
68ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
694d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com    virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi) SK_OVERRIDE {
70f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com        this->inval(NULL);
71ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
724d5c26de0a24f86c37c1da8b0e30d11a550ea67breed@google.com        return this->INHERITED::onFindClickHandler(x, y, modi);
73f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    }
74ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
75f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    virtual bool onClick(Click* click) {
76f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com        return this->INHERITED::onClick(click);
77f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    }
78f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com
7993c7ee34dc5c8f6bfad65809f4b39f8d00d7f0d4sugoi@google.com    virtual bool handleKey(SkKey) {
80f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com        this->inval(NULL);
81f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com        return true;
82f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com    }
83f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com
84f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.comprivate:
8581e3d7f7943d5c257a07580b75218a5e256b0aadreed@google.com    typedef SampleView INHERITED;
86f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com};
87f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com
88f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com//////////////////////////////////////////////////////////////////////////////
89f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.com
90f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.comstatic SkView* MyFactory() { return new RepeatTileView; }
91f7d5726730f2c13aa53f4a6b78084beaa959c694reed@android.comstatic SkViewRegister reg(MyFactory);
92