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 */ 87a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com#include "SampleCode.h" 97a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com#include "SkView.h" 107a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com#include "SkCanvas.h" 117a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com#include "SkGraphics.h" 127a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com#include "SkRandom.h" 137a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com#include "SkDashPathEffect.h" 147a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com#include "SkShader.h" 157a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com 167a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.comstatic void setBitmapDash(SkPaint* paint, int width) { 177a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com SkColor c = paint->getColor(); 187a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com 197a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com SkBitmap bm; 20a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org bm.allocN32Pixels(2, 1); 217a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com bm.lockPixels(); 227a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com *bm.getAddr32(0, 0) = SkPreMultiplyARGB(0xFF, SkColorGetR(c), 237a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com SkColorGetG(c), SkColorGetB(c)); 247a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com *bm.getAddr32(1, 0) = 0; 257a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com bm.unlockPixels(); 267a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com 277a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com SkMatrix matrix; 287a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com matrix.setScale(SkIntToScalar(width), SK_Scalar1); 297a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com 307a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com SkShader* s = SkShader::CreateBitmapShader(bm, SkShader::kRepeat_TileMode, 319c9005a347e9996f357bd79591bd34f74f8bbc66commit-bot@chromium.org SkShader::kClamp_TileMode, &matrix); 327a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com 337a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com paint->setShader(s)->unref(); 347a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com} 357a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com 367a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.comclass DashView : public SampleView { 377a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.compublic: 387a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com DashView() { 397a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com this->setBGColor(0xFFDDDDDD); 407a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com } 41ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 427a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.comprotected: 437a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com // overrides from SkEventSink 447a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com virtual bool onQuery(SkEvent* evt) { 457a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com if (SampleCode::TitleQ(*evt)) { 467a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com SampleCode::TitleR(evt, "Dash"); 477a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com return true; 487a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com } 497a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com return this->INHERITED::onQuery(evt); 507a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com } 517a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com 527a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com virtual void onDrawContent(SkCanvas* canvas) { 537a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com static const char* gStr[] = { 547a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com "11", 557a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com "44", 567a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com "112233", 577a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com "411327463524", 587a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com }; 597a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com 607a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com SkPaint paint; 617a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com paint.setStrokeWidth(SkIntToScalar(1)); 627a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com 637a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com SkScalar x0 = SkIntToScalar(10); 647a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com SkScalar y0 = SkIntToScalar(10); 657a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com SkScalar x1 = x0 + SkIntToScalar(1000); 667a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com for (size_t i = 0; i < SK_ARRAY_COUNT(gStr); i++) { 677a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com SkScalar interval[12]; 687a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com size_t len = SkMin32(strlen(gStr[i]), SK_ARRAY_COUNT(interval)); 697a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com for (size_t j = 0; j < len; j++) { 707a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com interval[j] = SkIntToScalar(gStr[i][j] - '0'); 717a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com } 72ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 737a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com SkDashPathEffect dash(interval, len, 0); 747a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com paint.setPathEffect(&dash); 757a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com canvas->drawLine(x0, y0, x1, y0, paint); 767a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com paint.setPathEffect(NULL); 777a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com 787a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com y0 += paint.getStrokeWidth() * 3; 797a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com } 807a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com 817a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com setBitmapDash(&paint, 3); 827a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com canvas->drawLine(x0, y0, x1, y0, paint); 837a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com } 847a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com 857a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.comprivate: 867a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com typedef SampleView INHERITED; 877a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com}; 887a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com 897a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com////////////////////////////////////////////////////////////////////////////// 907a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com 917a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.comstatic SkView* MyFactory() { return new DashView; } 927a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.comstatic SkViewRegister reg(MyFactory); 93