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