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 "SkGraphics.h" 12#include "SkRandom.h" 13#include "SkDashPathEffect.h" 14#include "SkShader.h" 15 16static void setBitmapDash(SkPaint* paint, int width) { 17 SkColor c = paint->getColor(); 18 19 SkBitmap bm; 20 bm.allocN32Pixels(2, 1); 21 bm.lockPixels(); 22 *bm.getAddr32(0, 0) = SkPreMultiplyARGB(0xFF, SkColorGetR(c), 23 SkColorGetG(c), SkColorGetB(c)); 24 *bm.getAddr32(1, 0) = 0; 25 bm.unlockPixels(); 26 27 SkMatrix matrix; 28 matrix.setScale(SkIntToScalar(width), SK_Scalar1); 29 30 SkShader* s = SkShader::CreateBitmapShader(bm, SkShader::kRepeat_TileMode, 31 SkShader::kClamp_TileMode, &matrix); 32 33 paint->setShader(s)->unref(); 34} 35 36class DashView : public SampleView { 37public: 38 DashView() { 39 this->setBGColor(0xFFDDDDDD); 40 } 41 42protected: 43 // overrides from SkEventSink 44 virtual bool onQuery(SkEvent* evt) { 45 if (SampleCode::TitleQ(*evt)) { 46 SampleCode::TitleR(evt, "Dash"); 47 return true; 48 } 49 return this->INHERITED::onQuery(evt); 50 } 51 52 virtual void onDrawContent(SkCanvas* canvas) { 53 static const char* gStr[] = { 54 "11", 55 "44", 56 "112233", 57 "411327463524", 58 }; 59 60 SkPaint paint; 61 paint.setStrokeWidth(SkIntToScalar(1)); 62 63 SkScalar x0 = SkIntToScalar(10); 64 SkScalar y0 = SkIntToScalar(10); 65 SkScalar x1 = x0 + SkIntToScalar(1000); 66 for (size_t i = 0; i < SK_ARRAY_COUNT(gStr); i++) { 67 SkScalar interval[12]; 68 size_t len = SkMin32(strlen(gStr[i]), SK_ARRAY_COUNT(interval)); 69 for (size_t j = 0; j < len; j++) { 70 interval[j] = SkIntToScalar(gStr[i][j] - '0'); 71 } 72 73 SkDashPathEffect dash(interval, len, 0); 74 paint.setPathEffect(&dash); 75 canvas->drawLine(x0, y0, x1, y0, paint); 76 paint.setPathEffect(NULL); 77 78 y0 += paint.getStrokeWidth() * 3; 79 } 80 81 setBitmapDash(&paint, 3); 82 canvas->drawLine(x0, y0, x1, y0, paint); 83 } 84 85private: 86 typedef SampleView INHERITED; 87}; 88 89////////////////////////////////////////////////////////////////////////////// 90 91static SkView* MyFactory() { return new DashView; } 92static SkViewRegister reg(MyFactory); 93