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 */ 863e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SampleCode.h" 9b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com#include "SkBlurMask.h" 10b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com#include "SkBlurMaskFilter.h" 1163e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkCanvas.h" 1263e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkDevice.h" 138b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org#include "SkReadBuffer.h" 148b0e8ac5f582de80356019406e2975079bf0829dcommit-bot@chromium.org#include "SkWriteBuffer.h" 15b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com#include "SkGradientShader.h" 16b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com#include "SkLayerRasterizer.h" 1763e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkPaint.h" 18b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com#include "SkView.h" 1963e34c61818b92c4f40387a1de32594934295bbbreed@android.com 208af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com#define BG_COLOR 0xFFDDDDDD 218af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 2263e34c61818b92c4f40387a1de32594934295bbbreed@android.comtypedef void (*SlideProc)(SkCanvas*); 2363e34c61818b92c4f40387a1de32594934295bbbreed@android.com 2463e34c61818b92c4f40387a1de32594934295bbbreed@android.com/////////////////////////////////////////////////////////////////////////////// 2563e34c61818b92c4f40387a1de32594934295bbbreed@android.com 2663e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "Sk1DPathEffect.h" 2763e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "Sk2DPathEffect.h" 2863e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkCornerPathEffect.h" 2963e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkDashPathEffect.h" 3063e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkDiscretePathEffect.h" 3163e34c61818b92c4f40387a1de32594934295bbbreed@android.com 3263e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void compose_pe(SkPaint* paint) { 3363e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPathEffect* pe = paint->getPathEffect(); 340a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org SkPathEffect* corner = SkCornerPathEffect::Create(25); 3563e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPathEffect* compose; 3663e34c61818b92c4f40387a1de32594934295bbbreed@android.com if (pe) { 370a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org compose = SkComposePathEffect::Create(pe, corner); 3863e34c61818b92c4f40387a1de32594934295bbbreed@android.com corner->unref(); 3963e34c61818b92c4f40387a1de32594934295bbbreed@android.com } else { 4063e34c61818b92c4f40387a1de32594934295bbbreed@android.com compose = corner; 4163e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 4263e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setPathEffect(compose)->unref(); 4363e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 4463e34c61818b92c4f40387a1de32594934295bbbreed@android.com 4563e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void hair_pe(SkPaint* paint) { 4663e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setStrokeWidth(0); 4763e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 4863e34c61818b92c4f40387a1de32594934295bbbreed@android.com 4963e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void hair2_pe(SkPaint* paint) { 5063e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setStrokeWidth(0); 5163e34c61818b92c4f40387a1de32594934295bbbreed@android.com compose_pe(paint); 5263e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 5363e34c61818b92c4f40387a1de32594934295bbbreed@android.com 5463e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void stroke_pe(SkPaint* paint) { 5563e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setStrokeWidth(12); 5663e34c61818b92c4f40387a1de32594934295bbbreed@android.com compose_pe(paint); 5763e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 5863e34c61818b92c4f40387a1de32594934295bbbreed@android.com 5963e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void dash_pe(SkPaint* paint) { 6063e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalar inter[] = { 20, 10, 10, 10 }; 6163e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setStrokeWidth(12); 620a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org paint->setPathEffect(SkDashPathEffect::Create(inter, SK_ARRAY_COUNT(inter), 630a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org 0))->unref(); 6463e34c61818b92c4f40387a1de32594934295bbbreed@android.com compose_pe(paint); 6563e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 6663e34c61818b92c4f40387a1de32594934295bbbreed@android.com 6763e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const int gXY[] = { 6863e34c61818b92c4f40387a1de32594934295bbbreed@android.com4, 0, 0, -4, 8, -4, 12, 0, 8, 4, 0, 4 6963e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 7063e34c61818b92c4f40387a1de32594934295bbbreed@android.com 7163e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void scale(SkPath* path, SkScalar scale) { 7263e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkMatrix m; 7363e34c61818b92c4f40387a1de32594934295bbbreed@android.com m.setScale(scale, scale); 7463e34c61818b92c4f40387a1de32594934295bbbreed@android.com path->transform(m); 7563e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 7663e34c61818b92c4f40387a1de32594934295bbbreed@android.com 7763e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void one_d_pe(SkPaint* paint) { 7863e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPath path; 7963e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.moveTo(SkIntToScalar(gXY[0]), SkIntToScalar(gXY[1])); 8063e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (unsigned i = 2; i < SK_ARRAY_COUNT(gXY); i += 2) 8163e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.lineTo(SkIntToScalar(gXY[i]), SkIntToScalar(gXY[i+1])); 8263e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.close(); 8363e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.offset(SkIntToScalar(-6), 0); 844b413c8bb123e42ca4b9c7bfa6bc2167283cb84ccommit-bot@chromium.org scale(&path, 1.5f); 85ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 860a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org paint->setPathEffect(SkPath1DPathEffect::Create(path, SkIntToScalar(21), 0, 870a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org SkPath1DPathEffect::kRotate_Style))->unref(); 8863e34c61818b92c4f40387a1de32594934295bbbreed@android.com compose_pe(paint); 8963e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 9063e34c61818b92c4f40387a1de32594934295bbbreed@android.com 9163e34c61818b92c4f40387a1de32594934295bbbreed@android.comtypedef void (*PE_Proc)(SkPaint*); 9263e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const PE_Proc gPE[] = { hair_pe, hair2_pe, stroke_pe, dash_pe, one_d_pe }; 9363e34c61818b92c4f40387a1de32594934295bbbreed@android.com 9463e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void fill_pe(SkPaint* paint) { 9563e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setStyle(SkPaint::kFill_Style); 9663e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setPathEffect(NULL); 9763e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 9863e34c61818b92c4f40387a1de32594934295bbbreed@android.com 9963e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void discrete_pe(SkPaint* paint) { 1000a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org paint->setPathEffect(SkDiscretePathEffect::Create(10, 4))->unref(); 10163e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 10263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 10343e9f20f4b5eecb2335e26461b5c4c84f2e3bcd2reed@google.comstatic SkPathEffect* MakeTileEffect() { 10443e9f20f4b5eecb2335e26461b5c4c84f2e3bcd2reed@google.com SkMatrix m; 10543e9f20f4b5eecb2335e26461b5c4c84f2e3bcd2reed@google.com m.setScale(SkIntToScalar(12), SkIntToScalar(12)); 10663e34c61818b92c4f40387a1de32594934295bbbreed@android.com 10743e9f20f4b5eecb2335e26461b5c4c84f2e3bcd2reed@google.com SkPath path; 10843e9f20f4b5eecb2335e26461b5c4c84f2e3bcd2reed@google.com path.addCircle(0, 0, SkIntToScalar(5)); 109ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 1100a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org return SkPath2DPathEffect::Create(m, path); 11143e9f20f4b5eecb2335e26461b5c4c84f2e3bcd2reed@google.com} 11263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 11363e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void tile_pe(SkPaint* paint) { 11443e9f20f4b5eecb2335e26461b5c4c84f2e3bcd2reed@google.com paint->setPathEffect(MakeTileEffect())->unref(); 11563e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 11663e34c61818b92c4f40387a1de32594934295bbbreed@android.com 11763e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const PE_Proc gPE2[] = { fill_pe, discrete_pe, tile_pe }; 11863e34c61818b92c4f40387a1de32594934295bbbreed@android.com 11963e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void patheffect_slide(SkCanvas* canvas) { 12063e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPaint paint; 12163e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setAntiAlias(true); 12263e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setStyle(SkPaint::kStroke_Style); 12363e34c61818b92c4f40387a1de32594934295bbbreed@android.com 12463e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPath path; 12563e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.moveTo(20, 20); 12663e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.lineTo(70, 120); 12763e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.lineTo(120, 30); 12863e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.lineTo(170, 80); 12963e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.lineTo(240, 50); 13063e34c61818b92c4f40387a1de32594934295bbbreed@android.com 13163e34c61818b92c4f40387a1de32594934295bbbreed@android.com size_t i; 13263e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->save(); 13363e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (i = 0; i < SK_ARRAY_COUNT(gPE); i++) { 13463e34c61818b92c4f40387a1de32594934295bbbreed@android.com gPE[i](&paint); 13563e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawPath(path, paint); 13663e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(0, 75); 13763e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 13863e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->restore(); 13963e34c61818b92c4f40387a1de32594934295bbbreed@android.com 14063e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.reset(); 14163e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkRect r = { 0, 0, 250, 120 }; 14263e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.addOval(r, SkPath::kCW_Direction); 14363e34c61818b92c4f40387a1de32594934295bbbreed@android.com r.inset(50, 50); 14463e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.addRect(r, SkPath::kCCW_Direction); 145ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 14663e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(320, 20); 14763e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (i = 0; i < SK_ARRAY_COUNT(gPE2); i++) { 14863e34c61818b92c4f40387a1de32594934295bbbreed@android.com gPE2[i](&paint); 14963e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawPath(path, paint); 15063e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(0, 160); 15163e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 15263e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 15363e34c61818b92c4f40387a1de32594934295bbbreed@android.com 15463e34c61818b92c4f40387a1de32594934295bbbreed@android.com/////////////////////////////////////////////////////////////////////////////// 15563e34c61818b92c4f40387a1de32594934295bbbreed@android.com 15663e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkGradientShader.h" 15763e34c61818b92c4f40387a1de32594934295bbbreed@android.com 15863e34c61818b92c4f40387a1de32594934295bbbreed@android.comstruct GradData { 15963e34c61818b92c4f40387a1de32594934295bbbreed@android.com int fCount; 16063e34c61818b92c4f40387a1de32594934295bbbreed@android.com const SkColor* fColors; 16163e34c61818b92c4f40387a1de32594934295bbbreed@android.com const SkScalar* fPos; 16263e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 16363e34c61818b92c4f40387a1de32594934295bbbreed@android.com 16463e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const SkColor gColors[] = { 16563e34c61818b92c4f40387a1de32594934295bbbreed@android.comSK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK 16663e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 16763e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const SkScalar gPos0[] = { 0, SK_Scalar1 }; 16863e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const SkScalar gPos1[] = { SK_Scalar1/4, SK_Scalar1*3/4 }; 16963e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const SkScalar gPos2[] = { 17063e34c61818b92c4f40387a1de32594934295bbbreed@android.com0, SK_Scalar1/8, SK_Scalar1/2, SK_Scalar1*7/8, SK_Scalar1 17163e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 17263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 17363e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const GradData gGradData[] = { 17463e34c61818b92c4f40387a1de32594934295bbbreed@android.com{ 2, gColors, NULL }, 17563e34c61818b92c4f40387a1de32594934295bbbreed@android.com{ 2, gColors, gPos0 }, 17663e34c61818b92c4f40387a1de32594934295bbbreed@android.com{ 2, gColors, gPos1 }, 17763e34c61818b92c4f40387a1de32594934295bbbreed@android.com{ 5, gColors, NULL }, 17863e34c61818b92c4f40387a1de32594934295bbbreed@android.com{ 5, gColors, gPos2 } 17963e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 18063e34c61818b92c4f40387a1de32594934295bbbreed@android.com 18183f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.orgstatic SkShader* MakeLinear(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm) { 18283f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org return SkGradientShader::CreateLinear(pts, data.fColors, data.fPos, data.fCount, tm); 18363e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 18463e34c61818b92c4f40387a1de32594934295bbbreed@android.com 18583f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.orgstatic SkShader* MakeRadial(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm) { 18663e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint center; 18763e34c61818b92c4f40387a1de32594934295bbbreed@android.com center.set(SkScalarAve(pts[0].fX, pts[1].fX), 18863e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalarAve(pts[0].fY, pts[1].fY)); 18963e34c61818b92c4f40387a1de32594934295bbbreed@android.com return SkGradientShader::CreateRadial(center, center.fX, data.fColors, 19083f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org data.fPos, data.fCount, tm); 19163e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 19263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 19383f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.orgstatic SkShader* MakeSweep(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm) { 19463e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint center; 19563e34c61818b92c4f40387a1de32594934295bbbreed@android.com center.set(SkScalarAve(pts[0].fX, pts[1].fX), 19663e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalarAve(pts[0].fY, pts[1].fY)); 19783f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org return SkGradientShader::CreateSweep(center.fX, center.fY, data.fColors, data.fPos, data.fCount); 19863e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 19963e34c61818b92c4f40387a1de32594934295bbbreed@android.com 20083f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.orgstatic SkShader* Make2Radial(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm) { 20163e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint center0, center1; 20263e34c61818b92c4f40387a1de32594934295bbbreed@android.com center0.set(SkScalarAve(pts[0].fX, pts[1].fX), 20363e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalarAve(pts[0].fY, pts[1].fY)); 20463e34c61818b92c4f40387a1de32594934295bbbreed@android.com center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), 20563e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); 20663e34c61818b92c4f40387a1de32594934295bbbreed@android.com return SkGradientShader::CreateTwoPointRadial( 20763e34c61818b92c4f40387a1de32594934295bbbreed@android.com center1, (pts[1].fX - pts[0].fX) / 7, 20863e34c61818b92c4f40387a1de32594934295bbbreed@android.com center0, (pts[1].fX - pts[0].fX) / 2, 20983f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org data.fColors, data.fPos, data.fCount, tm); 21063e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 21163e34c61818b92c4f40387a1de32594934295bbbreed@android.com 21283f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.orgtypedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm); 21363e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const GradMaker gGradMakers[] = { 21463e34c61818b92c4f40387a1de32594934295bbbreed@android.com MakeLinear, MakeRadial, MakeSweep, Make2Radial 21563e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 21663e34c61818b92c4f40387a1de32594934295bbbreed@android.com 21763e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void gradient_slide(SkCanvas* canvas) { 21863e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint pts[2] = { 21963e34c61818b92c4f40387a1de32594934295bbbreed@android.com { 0, 0 }, 22063e34c61818b92c4f40387a1de32594934295bbbreed@android.com { SkIntToScalar(100), SkIntToScalar(100) } 22163e34c61818b92c4f40387a1de32594934295bbbreed@android.com }; 22263e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkShader::TileMode tm = SkShader::kClamp_TileMode; 22363e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkRect r = { 0, 0, SkIntToScalar(100), SkIntToScalar(100) }; 22463e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPaint paint; 22563e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setAntiAlias(true); 22663e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setDither(true); 227ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 22863e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(SkIntToScalar(20), SkIntToScalar(10)); 22963e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (size_t i = 0; i < SK_ARRAY_COUNT(gGradData); i++) { 23063e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->save(); 23163e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (size_t j = 0; j < SK_ARRAY_COUNT(gGradMakers); j++) { 23283f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org SkShader* shader = gGradMakers[j](pts, gGradData[i], tm); 23363e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setShader(shader); 23463e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawRect(r, paint); 23563e34c61818b92c4f40387a1de32594934295bbbreed@android.com shader->unref(); 23663e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(0, SkIntToScalar(120)); 23763e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 23863e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->restore(); 23963e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(SkIntToScalar(120), 0); 24063e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 24163e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 24263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 24363e34c61818b92c4f40387a1de32594934295bbbreed@android.com/////////////////////////////////////////////////////////////////////////////// 24463e34c61818b92c4f40387a1de32594934295bbbreed@android.com 24563e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkPathMeasure.h" 24663e34c61818b92c4f40387a1de32594934295bbbreed@android.com 24763e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic SkScalar getpathlen(const SkPath& path) { 24863e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPathMeasure meas(path, false); 24963e34c61818b92c4f40387a1de32594934295bbbreed@android.com return meas.getLength(); 25063e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 25163e34c61818b92c4f40387a1de32594934295bbbreed@android.com 25263e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void textonpath_slide(SkCanvas* canvas) { 25363e34c61818b92c4f40387a1de32594934295bbbreed@android.com const char* text = "Displacement"; 25463e34c61818b92c4f40387a1de32594934295bbbreed@android.com size_t len =strlen(text); 25563e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPath path; 25663e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.moveTo(100, 300); 25763e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.quadTo(300, 100, 500, 300); 25863e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.offset(0, -100); 25963e34c61818b92c4f40387a1de32594934295bbbreed@android.com 26063e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPaint paint; 26163e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setAntiAlias(true); 26263e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setTextSize(40); 263ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 26463e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setStyle(SkPaint::kStroke_Style); 26563e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawPath(path, paint); 26663e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setStyle(SkPaint::kFill_Style); 267ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 26863e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalar x = 50; 26963e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setColor(0xFF008800); 27063e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawTextOnPathHV(text, len, path, 27163e34c61818b92c4f40387a1de32594934295bbbreed@android.com x, paint.getTextSize()*2/3, paint); 27263e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setColor(SK_ColorRED); 27363e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawTextOnPathHV(text, len, path, 274ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com x + 60, 0, paint); 27563e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setColor(SK_ColorBLUE); 27663e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawTextOnPathHV(text, len, path, 27763e34c61818b92c4f40387a1de32594934295bbbreed@android.com x + 120, -paint.getTextSize()*2/3, paint); 27863e34c61818b92c4f40387a1de32594934295bbbreed@android.com 27963e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.offset(0, 200); 28063e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setTextAlign(SkPaint::kRight_Align); 281ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 28263e34c61818b92c4f40387a1de32594934295bbbreed@android.com text = "Matrices"; 28363e34c61818b92c4f40387a1de32594934295bbbreed@android.com len = strlen(text); 28463e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalar pathLen = getpathlen(path); 28563e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkMatrix matrix; 286ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 28763e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setColor(SK_ColorBLACK); 28863e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setStyle(SkPaint::kStroke_Style); 28963e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawPath(path, paint); 29063e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setStyle(SkPaint::kFill_Style); 29163e34c61818b92c4f40387a1de32594934295bbbreed@android.com 29263e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setTextSize(50); 29363e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawTextOnPath(text, len, path, NULL, paint); 294ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 29563e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setColor(SK_ColorRED); 29663e34c61818b92c4f40387a1de32594934295bbbreed@android.com matrix.setScale(-SK_Scalar1, SK_Scalar1); 29763e34c61818b92c4f40387a1de32594934295bbbreed@android.com matrix.postTranslate(pathLen, 0); 29863e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawTextOnPath(text, len, path, &matrix, paint); 299ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 30063e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setColor(SK_ColorBLUE); 30163e34c61818b92c4f40387a1de32594934295bbbreed@android.com matrix.setScale(SK_Scalar1, -SK_Scalar1); 30263e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawTextOnPath(text, len, path, &matrix, paint); 303ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 30463e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setColor(0xFF008800); 30563e34c61818b92c4f40387a1de32594934295bbbreed@android.com matrix.setScale(-SK_Scalar1, -SK_Scalar1); 30663e34c61818b92c4f40387a1de32594934295bbbreed@android.com matrix.postTranslate(pathLen, 0); 30763e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawTextOnPath(text, len, path, &matrix, paint); 30863e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 30963e34c61818b92c4f40387a1de32594934295bbbreed@android.com 31063e34c61818b92c4f40387a1de32594934295bbbreed@android.com/////////////////////////////////////////////////////////////////////////////// 31163e34c61818b92c4f40387a1de32594934295bbbreed@android.com 31263e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkImageDecoder.h" 31363e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkOSFile.h" 31463e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkRandom.h" 31563e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkStream.h" 31663e34c61818b92c4f40387a1de32594934295bbbreed@android.com 31763e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic SkShader* make_shader0(SkIPoint* size) { 31863e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkBitmap bm; 319ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 32063e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkImageDecoder::DecodeFile("/skimages/logo.gif", &bm); 32163e34c61818b92c4f40387a1de32594934295bbbreed@android.com size->set(bm.width(), bm.height()); 32263e34c61818b92c4f40387a1de32594934295bbbreed@android.com return SkShader::CreateBitmapShader(bm, SkShader::kClamp_TileMode, 32363e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkShader::kClamp_TileMode); 32463e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 32563e34c61818b92c4f40387a1de32594934295bbbreed@android.com 32663e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic SkShader* make_shader1(const SkIPoint& size) { 32764cc579efa7e416c7298ed159d76b074b283c0f9senorblanco@chromium.org SkPoint pts[] = { { 0, 0 }, 32864cc579efa7e416c7298ed159d76b074b283c0f9senorblanco@chromium.org { SkIntToScalar(size.fX), SkIntToScalar(size.fY) } }; 32963e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkColor colors[] = { SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorRED }; 33063e34c61818b92c4f40387a1de32594934295bbbreed@android.com return SkGradientShader::CreateLinear(pts, colors, NULL, 33183f23d87f1d67e6e73873e1ef7cda621c43703a0commit-bot@chromium.org SK_ARRAY_COUNT(colors), SkShader::kMirror_TileMode); 33263e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 33363e34c61818b92c4f40387a1de32594934295bbbreed@android.com 334f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.comclass Rec { 335f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.compublic: 33663e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkCanvas::VertexMode fMode; 33763e34c61818b92c4f40387a1de32594934295bbbreed@android.com int fCount; 33863e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint* fVerts; 33963e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint* fTexs; 340ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 34163e34c61818b92c4f40387a1de32594934295bbbreed@android.com Rec() : fCount(0), fVerts(NULL), fTexs(NULL) {} 34263e34c61818b92c4f40387a1de32594934295bbbreed@android.com ~Rec() { delete[] fVerts; delete[] fTexs; } 34363e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 34463e34c61818b92c4f40387a1de32594934295bbbreed@android.com 34502939ce4bddd3223d9e8cc98d4abd02939b7f70acaryclark@google.comstatic void make_tris(Rec* rec) { 34663e34c61818b92c4f40387a1de32594934295bbbreed@android.com int n = 10; 347e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 348ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 34963e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fMode = SkCanvas::kTriangles_VertexMode; 35063e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fCount = n * 3; 35163e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fVerts = new SkPoint[rec->fCount]; 352ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 35363e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (int i = 0; i < n; i++) { 35463e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint* v = &rec->fVerts[i*3]; 35563e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (int j = 0; j < 3; j++) { 35663e34c61818b92c4f40387a1de32594934295bbbreed@android.com v[j].set(rand.nextUScalar1() * 250, rand.nextUScalar1() * 250); 35763e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 35863e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 35963e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 36063e34c61818b92c4f40387a1de32594934295bbbreed@android.com 36102939ce4bddd3223d9e8cc98d4abd02939b7f70acaryclark@google.comstatic void make_fan(Rec* rec, int texWidth, int texHeight) { 36263e34c61818b92c4f40387a1de32594934295bbbreed@android.com const SkScalar tx = SkIntToScalar(texWidth); 36363e34c61818b92c4f40387a1de32594934295bbbreed@android.com const SkScalar ty = SkIntToScalar(texHeight); 36463e34c61818b92c4f40387a1de32594934295bbbreed@android.com const int n = 24; 365ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 36663e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fMode = SkCanvas::kTriangleFan_VertexMode; 36763e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fCount = n + 2; 36863e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fVerts = new SkPoint[rec->fCount]; 36963e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fTexs = new SkPoint[rec->fCount]; 370ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 37163e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint* v = rec->fVerts; 37263e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint* t = rec->fTexs; 373ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 37463e34c61818b92c4f40387a1de32594934295bbbreed@android.com v[0].set(0, 0); 37563e34c61818b92c4f40387a1de32594934295bbbreed@android.com t[0].set(0, 0); 37663e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (int i = 0; i < n; i++) { 37763e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalar cos; 37863e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalar sin = SkScalarSinCos(SK_ScalarPI * 2 * i / n, &cos); 37963e34c61818b92c4f40387a1de32594934295bbbreed@android.com v[i+1].set(cos, sin); 38063e34c61818b92c4f40387a1de32594934295bbbreed@android.com t[i+1].set(i*tx/n, ty); 38163e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 38263e34c61818b92c4f40387a1de32594934295bbbreed@android.com v[n+1] = v[1]; 38363e34c61818b92c4f40387a1de32594934295bbbreed@android.com t[n+1].set(tx, ty); 384ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 38563e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkMatrix m; 38663e34c61818b92c4f40387a1de32594934295bbbreed@android.com m.setScale(SkIntToScalar(100), SkIntToScalar(100)); 38763e34c61818b92c4f40387a1de32594934295bbbreed@android.com m.postTranslate(SkIntToScalar(110), SkIntToScalar(110)); 38863e34c61818b92c4f40387a1de32594934295bbbreed@android.com m.mapPoints(v, rec->fCount); 38963e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 39063e34c61818b92c4f40387a1de32594934295bbbreed@android.com 39102939ce4bddd3223d9e8cc98d4abd02939b7f70acaryclark@google.comstatic void make_strip(Rec* rec, int texWidth, int texHeight) { 39263e34c61818b92c4f40387a1de32594934295bbbreed@android.com const SkScalar tx = SkIntToScalar(texWidth); 39363e34c61818b92c4f40387a1de32594934295bbbreed@android.com const SkScalar ty = SkIntToScalar(texHeight); 39463e34c61818b92c4f40387a1de32594934295bbbreed@android.com const int n = 24; 395ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 39663e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fMode = SkCanvas::kTriangleStrip_VertexMode; 39763e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fCount = 2 * (n + 1); 39863e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fVerts = new SkPoint[rec->fCount]; 39963e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fTexs = new SkPoint[rec->fCount]; 400ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 40163e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint* v = rec->fVerts; 40263e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint* t = rec->fTexs; 403ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 40463e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (int i = 0; i < n; i++) { 40563e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalar cos; 40663e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalar sin = SkScalarSinCos(SK_ScalarPI * 2 * i / n, &cos); 40763e34c61818b92c4f40387a1de32594934295bbbreed@android.com v[i*2 + 0].set(cos/2, sin/2); 40863e34c61818b92c4f40387a1de32594934295bbbreed@android.com v[i*2 + 1].set(cos, sin); 409ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 41063e34c61818b92c4f40387a1de32594934295bbbreed@android.com t[i*2 + 0].set(tx * i / n, ty); 41163e34c61818b92c4f40387a1de32594934295bbbreed@android.com t[i*2 + 1].set(tx * i / n, 0); 41263e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 41363e34c61818b92c4f40387a1de32594934295bbbreed@android.com v[2*n + 0] = v[0]; 41463e34c61818b92c4f40387a1de32594934295bbbreed@android.com v[2*n + 1] = v[1]; 415ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 41663e34c61818b92c4f40387a1de32594934295bbbreed@android.com t[2*n + 0].set(tx, ty); 41763e34c61818b92c4f40387a1de32594934295bbbreed@android.com t[2*n + 1].set(tx, 0); 418ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 41963e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkMatrix m; 42063e34c61818b92c4f40387a1de32594934295bbbreed@android.com m.setScale(SkIntToScalar(100), SkIntToScalar(100)); 42163e34c61818b92c4f40387a1de32594934295bbbreed@android.com m.postTranslate(SkIntToScalar(110), SkIntToScalar(110)); 42263e34c61818b92c4f40387a1de32594934295bbbreed@android.com m.mapPoints(v, rec->fCount); 42363e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 42463e34c61818b92c4f40387a1de32594934295bbbreed@android.com 42563e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void mesh_slide(SkCanvas* canvas) { 42663e34c61818b92c4f40387a1de32594934295bbbreed@android.com Rec fRecs[3]; 42763e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkIPoint size; 428ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 42963e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkShader* fShader0 = make_shader0(&size); 43063e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkShader* fShader1 = make_shader1(size); 431f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 432f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com SkAutoUnref aur0(fShader0); 433f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com SkAutoUnref aur1(fShader1); 434f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 43563e34c61818b92c4f40387a1de32594934295bbbreed@android.com make_strip(&fRecs[0], size.fX, size.fY); 43663e34c61818b92c4f40387a1de32594934295bbbreed@android.com make_fan(&fRecs[1], size.fX, size.fY); 43763e34c61818b92c4f40387a1de32594934295bbbreed@android.com make_tris(&fRecs[2]); 43863e34c61818b92c4f40387a1de32594934295bbbreed@android.com 43963e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPaint paint; 44063e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setDither(true); 4414469938e92d779dff05e745559e67907bbf21e78reed@google.com paint.setFilterLevel(SkPaint::kLow_FilterLevel); 442ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 44364cc579efa7e416c7298ed159d76b074b283c0f9senorblanco@chromium.org for (size_t i = 0; i < SK_ARRAY_COUNT(fRecs); i++) { 44463e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->save(); 445ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 44663e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setShader(NULL); 44763e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount, 44863e34c61818b92c4f40387a1de32594934295bbbreed@android.com fRecs[i].fVerts, fRecs[i].fTexs, 44963e34c61818b92c4f40387a1de32594934295bbbreed@android.com NULL, NULL, NULL, 0, paint); 450ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 45163e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(SkIntToScalar(210), 0); 452ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 45363e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setShader(fShader0); 45463e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount, 45563e34c61818b92c4f40387a1de32594934295bbbreed@android.com fRecs[i].fVerts, fRecs[i].fTexs, 45663e34c61818b92c4f40387a1de32594934295bbbreed@android.com NULL, NULL, NULL, 0, paint); 457ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 45863e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(SkIntToScalar(210), 0); 459ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 46063e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setShader(fShader1); 46163e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount, 46263e34c61818b92c4f40387a1de32594934295bbbreed@android.com fRecs[i].fVerts, fRecs[i].fTexs, 46363e34c61818b92c4f40387a1de32594934295bbbreed@android.com NULL, NULL, NULL, 0, paint); 46463e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->restore(); 465ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 46663e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(0, SkIntToScalar(250)); 46763e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 46863e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 46963e34c61818b92c4f40387a1de32594934295bbbreed@android.com 47063e34c61818b92c4f40387a1de32594934295bbbreed@android.com/////////////////////////////////////////////////////////////////////////////// 47163e34c61818b92c4f40387a1de32594934295bbbreed@android.com 472f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.orgstatic void r0(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) 4738af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 474e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org p.setMaskFilter(SkBlurMaskFilter::Create(kNormal_SkBlurStyle, 475b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(3))))->unref(); 476f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p, SkIntToScalar(3), SkIntToScalar(3)); 477ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 4788af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setMaskFilter(NULL); 4798af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kStroke_Style); 4808af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStrokeWidth(SK_Scalar1); 481f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 482ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 4838af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setAlpha(0x11); 4848af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kFill_Style); 4858af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kSrc_Mode); 486f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 4878af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 4888af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 489f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.orgstatic void r1(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) 4908af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 491f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 492ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 4938af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setAlpha(0x40); 4948af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kSrc_Mode); 4958af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kStroke_Style); 4968af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStrokeWidth(SK_Scalar1*2); 497f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 4988af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 4998af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 500f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.orgstatic void r2(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) 5018af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 5028af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kStrokeAndFill_Style); 5038af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStrokeWidth(SK_Scalar1*4); 504f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 505ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5068af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kStroke_Style); 5078af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStrokeWidth(SK_Scalar1*3/2); 5088af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kClear_Mode); 509f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 5108af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 5118af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 512f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.orgstatic void r3(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) 5138af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 5148af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kStroke_Style); 5158af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStrokeWidth(SK_Scalar1*3); 516f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 517ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5188af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setAlpha(0x20); 5198af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kFill_Style); 5208af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kSrc_Mode); 521f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 5228af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 5238af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 524f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.orgstatic void r4(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) 5258af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 5268af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setAlpha(0x60); 527f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p, SkIntToScalar(3), SkIntToScalar(3)); 528ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5298af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setAlpha(0xFF); 5308af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kClear_Mode); 531f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p, SK_Scalar1*3/2, SK_Scalar1*3/2); 532ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5338af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermode(NULL); 534f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 5358af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 5368af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 5378af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com#include "SkDiscretePathEffect.h" 5388af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 539f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.orgstatic void r5(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) 5408af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 541f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 542ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5430a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org p.setPathEffect(SkDiscretePathEffect::Create(SK_Scalar1*4, SK_Scalar1*3))->unref(); 5448af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kSrcOut_Mode); 545f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 5468af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 5478af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 548f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.orgstatic void r6(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) 5498af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 550f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 551ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5528af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setAntiAlias(false); 553f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org SkLayerRasterizer::Builder rastBuilder2; 554f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org r5(&rastBuilder2, p); 555f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org p.setRasterizer(rastBuilder2.detachRasterizer())->unref(); 5568af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kClear_Mode); 557f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 5588af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 5598af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 5608af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com#include "Sk2DPathEffect.h" 5618af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 56218dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.comstatic SkPathEffect* MakeDotEffect(SkScalar radius, const SkMatrix& matrix) { 56318dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com SkPath path; 56418dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com path.addCircle(0, 0, radius); 5650a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org return SkPath2DPathEffect::Create(matrix, path); 56618dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com} 5678af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 568f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.orgstatic void r7(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) 5698af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 5708af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com SkMatrix lattice; 5718af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com lattice.setScale(SK_Scalar1*6, SK_Scalar1*6, 0, 0); 5728af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com lattice.postSkew(SK_Scalar1/3, 0, 0, 0); 57318dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com p.setPathEffect(MakeDotEffect(SK_Scalar1*4, lattice))->unref(); 574f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 5758af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 5768af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 577f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.orgstatic void r8(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) 5788af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 579f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 580ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5818af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com SkMatrix lattice; 5828af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com lattice.setScale(SK_Scalar1*6, SK_Scalar1*6, 0, 0); 5838af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com lattice.postSkew(SK_Scalar1/3, 0, 0, 0); 58418dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com p.setPathEffect(MakeDotEffect(SK_Scalar1*2, lattice))->unref(); 5858af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kClear_Mode); 586f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 587ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5888af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setPathEffect(NULL); 5898af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermode(NULL); 5908af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kStroke_Style); 5918af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStrokeWidth(SK_Scalar1); 592f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 5938af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 5948af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 595f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.orgstatic void r9(SkLayerRasterizer::Builder* rastBuilder, SkPaint& p) 5968af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 597f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 598ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5998af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com SkMatrix lattice; 6008af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com lattice.setScale(SK_Scalar1, SK_Scalar1*6, 0, 0); 6018af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com lattice.postRotate(SkIntToScalar(30), 0, 0); 6020a2bf90dccba3bde188e0386a7f0c60e6dde1ae9commit-bot@chromium.org p.setPathEffect(SkLine2DPathEffect::Create(SK_Scalar1*2, lattice))->unref(); 6038af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kClear_Mode); 604f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 605ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 6068af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setPathEffect(NULL); 6078af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermode(NULL); 6088af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kStroke_Style); 6098af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStrokeWidth(SK_Scalar1); 610f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org rastBuilder->addLayer(p); 6118af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 6128af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 613f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.orgtypedef void (*raster_proc)(SkLayerRasterizer::Builder*, SkPaint&); 6148af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 6158af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.comstatic const raster_proc gRastProcs[] = { 6168af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com r0, r1, r2, r3, r4, r5, r6, r7, r8, r9 6178af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com}; 6188af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 619ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.comstatic void apply_shader(SkPaint* paint, int index) { 6208af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com raster_proc proc = gRastProcs[index]; 6218af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com SkPaint p; 622f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org SkLayerRasterizer::Builder rastBuilder; 623ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 6248af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setAntiAlias(true); 625f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org proc(&rastBuilder, p); 626f792a1b20747f769b28906a4b00fd67691ce8d0bcommit-bot@chromium.org paint->setRasterizer(rastBuilder.detachRasterizer())->unref(); 6278af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com paint->setColor(SK_ColorBLUE); 6288af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 6298af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 6308af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com#include "SkTypeface.h" 6318af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 6328af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.comstatic void texteffect_slide(SkCanvas* canvas) { 6338af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com const char* str = "Google"; 6348af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com size_t len = strlen(str); 6358af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com SkScalar x = 20; 6368af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com SkScalar y = 80; 6378af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com SkPaint paint; 6388af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com paint.setTypeface(SkTypeface::CreateFromName("Georgia", SkTypeface::kItalic)); 6398af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com paint.setTextSize(75); 6408af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com paint.setAntiAlias(true); 6418af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com paint.setColor(SK_ColorBLUE); 64264cc579efa7e416c7298ed159d76b074b283c0f9senorblanco@chromium.org for (size_t i = 0; i < SK_ARRAY_COUNT(gRastProcs); i++) { 6437fa2a65c0cfc714364490cb715171461143024e0reed@google.com apply_shader(&paint, (int)i); 6448af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com canvas->drawText(str, len, x, y, paint); 6458af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com y += 80; 6468af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com if (i == 4) { 6478af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com x += 320; 6488af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com y = 80; 6498af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com } 6508af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com } 6518af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 6528af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 6538af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com/////////////////////////////////////////////////////////////////////////////// 6548af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 65563e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkImageEncoder.h" 65663e34c61818b92c4f40387a1de32594934295bbbreed@android.com 65763e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const SlideProc gProc[] = { 65863e34c61818b92c4f40387a1de32594934295bbbreed@android.com patheffect_slide, 65963e34c61818b92c4f40387a1de32594934295bbbreed@android.com gradient_slide, 66063e34c61818b92c4f40387a1de32594934295bbbreed@android.com textonpath_slide, 6618af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com mesh_slide, 6628af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com texteffect_slide 66363e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 66463e34c61818b92c4f40387a1de32594934295bbbreed@android.com 66581e3d7f7943d5c257a07580b75218a5e256b0aadreed@google.comclass SlideView : public SampleView { 66663e34c61818b92c4f40387a1de32594934295bbbreed@android.com int fIndex; 6677b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com bool fOnce; 66863e34c61818b92c4f40387a1de32594934295bbbreed@android.compublic: 66963e34c61818b92c4f40387a1de32594934295bbbreed@android.com SlideView() { 6707b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com fOnce = false; 6717b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com } 672ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 6737b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com void init() { 6747b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com if (fOnce) { 6757b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com return; 6767b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com } 6777b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com fOnce = true; 6787b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com 67963e34c61818b92c4f40387a1de32594934295bbbreed@android.com fIndex = 0; 680ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 68163e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkBitmap bm; 682a8c183125f2861067daf432cada06d431a795cd0commit-bot@chromium.org bm.allocN32Pixels(1024, 768); 68363e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkCanvas canvas(bm); 68463e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalar s = SkIntToScalar(1024) / 640; 68563e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas.scale(s, s); 68663e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (size_t i = 0; i < SK_ARRAY_COUNT(gProc); i++) { 68763e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas.save(); 6888af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com canvas.drawColor(BG_COLOR); 68963e34c61818b92c4f40387a1de32594934295bbbreed@android.com gProc[i](&canvas); 69063e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas.restore(); 69163e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkString str; 6923a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org str.printf("/skimages/slide_" SK_SIZE_T_SPECIFIER ".png", i); 69363e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkImageEncoder::EncodeFile(str.c_str(), bm, SkImageEncoder::kPNG_Type, 100); 69463e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 69581e3d7f7943d5c257a07580b75218a5e256b0aadreed@google.com this->setBGColor(BG_COLOR); 69663e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 697ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 69863e34c61818b92c4f40387a1de32594934295bbbreed@android.comprotected: 69963e34c61818b92c4f40387a1de32594934295bbbreed@android.com // overrides from SkEventSink 70063e34c61818b92c4f40387a1de32594934295bbbreed@android.com virtual bool onQuery(SkEvent* evt) { 70163e34c61818b92c4f40387a1de32594934295bbbreed@android.com if (SampleCode::TitleQ(*evt)) { 70263e34c61818b92c4f40387a1de32594934295bbbreed@android.com SampleCode::TitleR(evt, "Slides"); 70363e34c61818b92c4f40387a1de32594934295bbbreed@android.com return true; 70463e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 70563e34c61818b92c4f40387a1de32594934295bbbreed@android.com return this->INHERITED::onQuery(evt); 70663e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 707ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 70881e3d7f7943d5c257a07580b75218a5e256b0aadreed@google.com virtual void onDrawContent(SkCanvas* canvas) { 7097b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com this->init(); 71063e34c61818b92c4f40387a1de32594934295bbbreed@android.com gProc[fIndex](canvas); 71163e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 71263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 7139c55f801a35b0d6c39f007fae432bd13094f3c52sugoi@google.com virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned) SK_OVERRIDE { 7147b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com this->init(); 71563e34c61818b92c4f40387a1de32594934295bbbreed@android.com fIndex = (fIndex + 1) % SK_ARRAY_COUNT(gProc); 71663e34c61818b92c4f40387a1de32594934295bbbreed@android.com this->inval(NULL); 71763e34c61818b92c4f40387a1de32594934295bbbreed@android.com return NULL; 71863e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 71963e34c61818b92c4f40387a1de32594934295bbbreed@android.com 72063e34c61818b92c4f40387a1de32594934295bbbreed@android.comprivate: 72181e3d7f7943d5c257a07580b75218a5e256b0aadreed@google.com typedef SampleView INHERITED; 72263e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 72363e34c61818b92c4f40387a1de32594934295bbbreed@android.com 72463e34c61818b92c4f40387a1de32594934295bbbreed@android.com////////////////////////////////////////////////////////////////////////////// 72563e34c61818b92c4f40387a1de32594934295bbbreed@android.com 72663e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic SkView* MyFactory() { return new SlideView; } 72763e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic SkViewRegister reg(MyFactory); 728