1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 8129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SampleCode.h" 9129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkView.h" 10129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkCanvas.h" 11129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkGradientShader.h" 12129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkGraphics.h" 13129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkPath.h" 14129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkRegion.h" 15129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkShader.h" 16129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkUtils.h" 17129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkColorPriv.h" 18129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkColorFilter.h" 19129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkParsePath.h" 20129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkTime.h" 21129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkTypeface.h" 22129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org 23129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org#include "SkGeometry.h" 24129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org 25129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.orgclass ConcavePathView : public SampleView { 26129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.orgpublic: 27ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com ConcavePathView() {} 28ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 29129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.orgprotected: 30129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org // overrides from SkEventSink 31129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org virtual bool onQuery(SkEvent* evt) { 32129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org if (SampleCode::TitleQ(*evt)) { 33129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org SampleCode::TitleR(evt, "ConcavePaths"); 34129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org return true; 35129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org } 36129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org return this->INHERITED::onQuery(evt); 37129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org } 38ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 39ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com virtual void onDrawContent(SkCanvas* canvas) { 40129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org SkPaint paint; 41ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 42129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org paint.setAntiAlias(true); 43129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org paint.setStyle(SkPaint::kFill_Style); 44129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org 45129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org // Concave test 46129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org if (1) { 47129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org SkPath path; 48129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->translate(0, 0); 49129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); 50129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); 51129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(30), SkIntToScalar(30)); 52129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); 53129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->drawPath(path, paint); 54129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org } 55129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org // Reverse concave test 56129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org if (1) { 57129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org SkPath path; 58129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->save(); 59129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->translate(100, 0); 60129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); 61129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); 62129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(30), SkIntToScalar(30)); 63129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); 64129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->drawPath(path, paint); 65129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->restore(); 66129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org } 67129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org // Bowtie (intersection) 68129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org if (1) { 69129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org SkPath path; 70129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->save(); 71129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->translate(200, 0); 72129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); 73129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(80), SkIntToScalar(80)); 74129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); 75129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); 76129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->drawPath(path, paint); 77129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->restore(); 78129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org } 79129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org // "fake" bowtie (concave, but no intersection) 80129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org if (1) { 81129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org SkPath path; 82129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->save(); 83129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->translate(300, 0); 84129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); 85129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(50), SkIntToScalar(40)); 86129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); 87129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(80), SkIntToScalar(80)); 88129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(50), SkIntToScalar(60)); 89129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); 90129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->drawPath(path, paint); 91129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->restore(); 92129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org } 93129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org // Fish test (intersection/concave) 94129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org if (1) { 95129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org SkPath path; 96129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->save(); 97129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->translate(0, 100); 98129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); 99129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(80), SkIntToScalar(80)); 100129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(70), SkIntToScalar(50)); 101129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); 102129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); 103129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(0), SkIntToScalar(50)); 104129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->drawPath(path, paint); 105129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->restore(); 106129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org } 107129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org // Collinear test 108129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org if (1) { 109129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org SkPath path; 110129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->save(); 111129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->translate(100, 100); 112129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); 113129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(50), SkIntToScalar(20)); 114129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); 115129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(50), SkIntToScalar(80)); 116129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->drawPath(path, paint); 117129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->restore(); 118129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org } 119129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org // Hole test 120129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org if (1) { 121129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org SkPath path; 122129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->save(); 123129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->translate(200, 100); 124129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.moveTo(SkIntToScalar(20), SkIntToScalar(20)); 125129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(80), SkIntToScalar(20)); 126129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(80), SkIntToScalar(80)); 127129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(20), SkIntToScalar(80)); 128129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.moveTo(SkIntToScalar(30), SkIntToScalar(30)); 129129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(30), SkIntToScalar(70)); 130129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(70), SkIntToScalar(70)); 131129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org path.lineTo(SkIntToScalar(70), SkIntToScalar(30)); 132129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->drawPath(path, paint); 133129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org canvas->restore(); 134129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org } 135129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org } 136ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 137129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.orgprivate: 138129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org typedef SampleView INHERITED; 139129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org}; 140129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org 141129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org////////////////////////////////////////////////////////////////////////////// 142129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.org 143129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.orgstatic SkView* MyFactory() { return new ConcavePathView; } 144129b8e3237b80b9d258a8f48e8f54c0073cafbdcsenorblanco@chromium.orgstatic SkViewRegister reg(MyFactory); 145