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 16 static 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 36 class DashView : public SampleView { 37 public: 38 DashView() { 39 this->setBGColor(0xFFDDDDDD); 40 } 41 42 protected: 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 85 private: 86 typedef SampleView INHERITED; 87 }; 88 89 ////////////////////////////////////////////////////////////////////////////// 90 91 static SkView* MyFactory() { return new DashView; } 92 static SkViewRegister reg(MyFactory); 93