1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2011 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SampleCode.h" 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkBlurMask.h" 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkBlurMaskFilter.h" 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkCanvas.h" 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkParsePath.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkPath.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRandom.h" 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkView.h" 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void test_huge_stroke(SkCanvas* canvas) { 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect srcR = { 0, 0, 72000, 54000 }; 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect dstR = { 0, 0, 640, 480 }; 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPath path; 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.moveTo(17600, 8000); 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.lineTo(52800, 8000); 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.lineTo(52800, 41600); 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.lineTo(17600, 41600); 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path.close(); 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint paint; 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setAntiAlias(true); 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStrokeWidth(8000); 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStrokeMiter(10); 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStrokeCap(SkPaint::kButt_Cap); 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStrokeJoin(SkPaint::kRound_Join); 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStyle(SkPaint::kStroke_Style); 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkMatrix matrix; 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot matrix.setRectToRect(srcR, dstR, SkMatrix::kCenter_ScaleToFit); 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->concat(matrix); 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(path, paint); 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#if 0 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void test_blur() { 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot uint8_t cell[9]; 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot memset(cell, 0xFF, sizeof(cell)); 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkMask src; 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot src.fImage = cell; 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot src.fFormat = SkMask::kA8_Format; 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkMask dst; 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int y = 1; y <= 3; y++) { 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int x = 1; x <= 3; x++) { 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot src.fBounds.set(0, 0, x, y); 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot src.fRowBytes = src.fBounds.width(); 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar radius = 1.f; 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot printf("src [%d %d %d %d] radius %g\n", src.fBounds.fLeft, src.fBounds.fTop, 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot src.fBounds.fRight, src.fBounds.fBottom, radius); 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkBlurMask::Blur(&dst, src, radius, SkBlurMask::kNormal_Style); 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot uint8_t* dstPtr = dst.fImage; 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int y = 0; y < dst.fBounds.height(); y++) { 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int x = 0; x < dst.fBounds.width(); x++) { 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot printf(" %02X", dstPtr[x]); 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot printf("\n"); 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot dstPtr += dst.fRowBytes; 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic void scale_to_width(SkPath* path, SkScalar dstWidth) { 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkRect& bounds = path->getBounds(); 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar scale = dstWidth / bounds.width(); 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkMatrix matrix; 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot matrix.setScale(scale, scale); 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot path->transform(matrix); 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic const struct { 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint::Style fStyle; 88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint::Join fJoin; 89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int fStrokeWidth; 90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} gRec[] = { 91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot { SkPaint::kFill_Style, SkPaint::kMiter_Join, 0 }, 92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot { SkPaint::kStroke_Style, SkPaint::kMiter_Join, 0 }, 93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot { SkPaint::kStroke_Style, SkPaint::kMiter_Join, 10 }, 94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot { SkPaint::kStrokeAndFill_Style, SkPaint::kMiter_Join, 10 }, 95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass StrokePathView : public SampleView { 98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar fWidth; 99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPath fPath; 100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onOnceBeforeDraw() override { 102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot// test_blur(); 103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fWidth = SkIntToScalar(120); 104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#if 0 106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const char str[] = 107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "M 0, 3" 108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "C 10, -10, 30, -10, 0, 28" 109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "C -30, -10, -10, -10, 0, 3" 110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot "Z"; 111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkParsePath::FromSVGString(str, &fPath); 112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#else 113fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fPath.addCircle(0, 0, SkIntToScalar(50), SkPath::kCW_Direction); 114fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fPath.addCircle(0, SkIntToScalar(-50), SkIntToScalar(30), SkPath::kCW_Direction); 115fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 116fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 117fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot scale_to_width(&fPath, fWidth); 118fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const SkRect& bounds = fPath.getBounds(); 119fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fPath.offset(-bounds.fLeft, -bounds.fTop); 120fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 121fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot this->setBGColor(0xFFDDDDDD); 122fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 123fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 124fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // overrides from SkEventSink 125fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool onQuery(SkEvent* evt) override { 126fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (SampleCode::TitleQ(*evt)) { 127fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SampleCode::TitleR(evt, "StrokePath"); 128fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return true; 129fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 130fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return this->INHERITED::onQuery(evt); 131fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 132fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 133fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRandom rand; 134fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 135fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void drawSet(SkCanvas* canvas, SkPaint* paint) { 136fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkAutoCanvasRestore acr(canvas, true); 137fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 138fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); i++) { 139fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint->setStyle(gRec[i].fStyle); 140fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint->setStrokeJoin(gRec[i].fJoin); 141fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint->setStrokeWidth(SkIntToScalar(gRec[i].fStrokeWidth)); 142fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawPath(fPath, *paint); 143fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(fWidth * 5 / 4, 0); 144fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 145fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 146fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 147fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onDrawContent(SkCanvas* canvas) override { 148fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot test_huge_stroke(canvas); return; 149fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(SkIntToScalar(10), SkIntToScalar(10)); 150fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 151fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint paint; 152fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setAntiAlias(true); 153fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 154fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (true) { 155fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawColor(SK_ColorBLACK); 156fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 157fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setTextSize(24); 158fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setColor(SK_ColorWHITE); 159fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(10, 30); 160fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 161fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static const SkBlurStyle gStyle[] = { 162fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot kNormal_SkBlurStyle, 163fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot kInner_SkBlurStyle, 164fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot kOuter_SkBlurStyle, 165fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot kSolid_SkBlurStyle, 166fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot }; 167fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int x = 0; x < 5; x++) { 168fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar sigma = SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(4)); 169fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int y = 0; y < 10; y++) { 170fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (x) { 171fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setMaskFilter(SkBlurMaskFilter::Make(gStyle[x - 1], sigma)); 172fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 173fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawString("Title Bar", x*SkIntToScalar(100), y*SkIntToScalar(30), paint); 174fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sigma *= 0.75f; 175fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 176fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 177fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 178fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return; 179fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 180fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 181fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setColor(SK_ColorBLUE); 182fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 183fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#if 1 184fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPath p; 185fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot float r = rand.nextUScalar1() + 0.5f; 186fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar x = 0, y = 0; 187fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.moveTo(x, y); 188fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#if 0 189fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.cubicTo(x-75*r, y+75*r, x-40*r, y+125*r, x, y+85*r); 190fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.cubicTo(x+40*r, y+125*r, x+75*r, y+75*r, x, y); 191fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#else 192fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.cubicTo(x+75*r, y+75*r, x+40*r, y+125*r, x, y+85*r); 193fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.cubicTo(x-40*r, y+125*r, x-75*r, y+75*r, x, y); 194fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 195fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot p.close(); 196fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fPath = p; 197fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fPath.offset(100, 0); 198fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 199fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 200fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fPath.setFillType(SkPath::kWinding_FillType); 201fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot drawSet(canvas, &paint); 202fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 203fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(0, fPath.getBounds().height() * 5 / 4); 204fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fPath.setFillType(SkPath::kEvenOdd_FillType); 205fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot drawSet(canvas, &paint); 206fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 207fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 208fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 209fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef SampleView INHERITED; 210fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 211fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 212fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot////////////////////////////////////////////////////////////////////////////// 213fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 214fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic SkView* MyFactory() { return new StrokePathView; } 215fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic SkViewRegister reg(MyFactory); 216