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 */ 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SampleCode.h" 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkView.h" 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCanvas.h" 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCornerPathEffect.h" 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkCullPoints.h" 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkGradientShader.h" 148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkPath.h" 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkRegion.h" 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkShader.h" 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkUtils.h" 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 19961ddb04a0a7aba843032d829ab867518e52559ereed@google.comclass FillTypeView : public SampleView { 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPath fPath; 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic: 22ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com FillTypeView() { 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkScalar radius = SkIntToScalar(45); 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fPath.addCircle(SkIntToScalar(50), SkIntToScalar(50), radius); 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fPath.addCircle(SkIntToScalar(100), SkIntToScalar(100), radius); 26961ddb04a0a7aba843032d829ab867518e52559ereed@google.com 27961ddb04a0a7aba843032d829ab867518e52559ereed@google.com this->setBGColor(0xFFDDDDDD); 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 29ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected: 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // overrides from SkEventSink 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual bool onQuery(SkEvent* evt) { 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (SampleCode::TitleQ(*evt)) { 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SampleCode::TitleR(evt, "FillType"); 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return this->INHERITED::onQuery(evt); 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 39ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void showPath(SkCanvas* canvas, int x, int y, SkPath::FillType ft, 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScalar scale, const SkPaint& paint) { 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkRect r = { 0, 0, SkIntToScalar(150), SkIntToScalar(150) }; 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->save(); 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->translate(SkIntToScalar(x), SkIntToScalar(y)); 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->clipRect(r); 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawColor(SK_ColorWHITE); 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fPath.setFillType(ft); 508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->translate(r.centerX(), r.centerY()); 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->scale(scale, scale); 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->translate(-r.centerX(), -r.centerY()); 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->drawPath(fPath, paint); 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->restore(); 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 56ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void showFour(SkCanvas* canvas, SkScalar scale, const SkPaint& paint) { 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com showPath(canvas, 0, 0, SkPath::kWinding_FillType, 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com scale, paint); 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com showPath(canvas, 200, 0, SkPath::kEvenOdd_FillType, 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com scale, paint); 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com showPath(canvas, 00, 200, SkPath::kInverseWinding_FillType, 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com scale, paint); 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com showPath(canvas, 200, 200, SkPath::kInverseEvenOdd_FillType, 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com scale, paint); 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 67ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 68961ddb04a0a7aba843032d829ab867518e52559ereed@google.com virtual void onDrawContent(SkCanvas* canvas) { 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->translate(SkIntToScalar(20), SkIntToScalar(20)); 70ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkPaint paint; 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const SkScalar scale = SkIntToScalar(5)/4; 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com paint.setAntiAlias(false); 75b602b8e5334edc0bfcdf086c2ea58e2b5d5f1f3breed@android.com paint.setColor(0x8000FF00); 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com showFour(canvas, SK_Scalar1, paint); 788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->translate(SkIntToScalar(450), 0); 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com showFour(canvas, scale, paint); 808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com paint.setAntiAlias(true); 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->translate(SkIntToScalar(-450), SkIntToScalar(450)); 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com showFour(canvas, SK_Scalar1, paint); 858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com canvas->translate(SkIntToScalar(450), 0); 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com showFour(canvas, scale, paint); 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 88ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate: 90961ddb04a0a7aba843032d829ab867518e52559ereed@google.com typedef SampleView INHERITED; 918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com////////////////////////////////////////////////////////////////////////////// 948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic SkView* MyFactory() { return new FillTypeView; } 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstatic SkViewRegister reg(MyFactory); 97