SampleSlides.cpp revision b7061176c7f414616fe2e79e832b3e0abe326af6
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" 13c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com#include "SkFlattenableBuffers.h" 14b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com#include "SkGradientShader.h" 15b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com#include "SkLayerRasterizer.h" 1663e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkPaint.h" 17b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com#include "SkView.h" 1863e34c61818b92c4f40387a1de32594934295bbbreed@android.com 198af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com#define BG_COLOR 0xFFDDDDDD 208af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 2163e34c61818b92c4f40387a1de32594934295bbbreed@android.comtypedef void (*SlideProc)(SkCanvas*); 2263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 2363e34c61818b92c4f40387a1de32594934295bbbreed@android.com/////////////////////////////////////////////////////////////////////////////// 2463e34c61818b92c4f40387a1de32594934295bbbreed@android.com 2563e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "Sk1DPathEffect.h" 2663e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "Sk2DPathEffect.h" 2763e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkCornerPathEffect.h" 2863e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkDashPathEffect.h" 2963e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkDiscretePathEffect.h" 3063e34c61818b92c4f40387a1de32594934295bbbreed@android.com 3163e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void compose_pe(SkPaint* paint) { 3263e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPathEffect* pe = paint->getPathEffect(); 3363e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPathEffect* corner = new SkCornerPathEffect(25); 3463e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPathEffect* compose; 3563e34c61818b92c4f40387a1de32594934295bbbreed@android.com if (pe) { 3663e34c61818b92c4f40387a1de32594934295bbbreed@android.com compose = new SkComposePathEffect(pe, corner); 3763e34c61818b92c4f40387a1de32594934295bbbreed@android.com corner->unref(); 3863e34c61818b92c4f40387a1de32594934295bbbreed@android.com } else { 3963e34c61818b92c4f40387a1de32594934295bbbreed@android.com compose = corner; 4063e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 4163e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setPathEffect(compose)->unref(); 4263e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 4363e34c61818b92c4f40387a1de32594934295bbbreed@android.com 4463e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void hair_pe(SkPaint* paint) { 4563e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setStrokeWidth(0); 4663e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 4763e34c61818b92c4f40387a1de32594934295bbbreed@android.com 4863e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void hair2_pe(SkPaint* paint) { 4963e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setStrokeWidth(0); 5063e34c61818b92c4f40387a1de32594934295bbbreed@android.com compose_pe(paint); 5163e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 5263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 5363e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void stroke_pe(SkPaint* paint) { 5463e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setStrokeWidth(12); 5563e34c61818b92c4f40387a1de32594934295bbbreed@android.com compose_pe(paint); 5663e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 5763e34c61818b92c4f40387a1de32594934295bbbreed@android.com 5863e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void dash_pe(SkPaint* paint) { 5963e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalar inter[] = { 20, 10, 10, 10 }; 6063e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setStrokeWidth(12); 6163e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setPathEffect(new SkDashPathEffect(inter, SK_ARRAY_COUNT(inter), 6263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 0))->unref(); 6363e34c61818b92c4f40387a1de32594934295bbbreed@android.com compose_pe(paint); 6463e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 6563e34c61818b92c4f40387a1de32594934295bbbreed@android.com 6663e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const int gXY[] = { 6763e34c61818b92c4f40387a1de32594934295bbbreed@android.com4, 0, 0, -4, 8, -4, 12, 0, 8, 4, 0, 4 6863e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 6963e34c61818b92c4f40387a1de32594934295bbbreed@android.com 7063e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void scale(SkPath* path, SkScalar scale) { 7163e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkMatrix m; 7263e34c61818b92c4f40387a1de32594934295bbbreed@android.com m.setScale(scale, scale); 7363e34c61818b92c4f40387a1de32594934295bbbreed@android.com path->transform(m); 7463e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 7563e34c61818b92c4f40387a1de32594934295bbbreed@android.com 7663e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void one_d_pe(SkPaint* paint) { 7763e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPath path; 7863e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.moveTo(SkIntToScalar(gXY[0]), SkIntToScalar(gXY[1])); 7963e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (unsigned i = 2; i < SK_ARRAY_COUNT(gXY); i += 2) 8063e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.lineTo(SkIntToScalar(gXY[i]), SkIntToScalar(gXY[i+1])); 8163e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.close(); 8263e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.offset(SkIntToScalar(-6), 0); 83c6ce750c73c6586a5c2e88a0620b04e9569af401robertphillips@google.com scale(&path, SkFloatToScalar(1.5f)); 84ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 8563e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setPathEffect(new SkPath1DPathEffect(path, SkIntToScalar(21), 0, 8663e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPath1DPathEffect::kRotate_Style))->unref(); 8763e34c61818b92c4f40387a1de32594934295bbbreed@android.com compose_pe(paint); 8863e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 8963e34c61818b92c4f40387a1de32594934295bbbreed@android.com 9063e34c61818b92c4f40387a1de32594934295bbbreed@android.comtypedef void (*PE_Proc)(SkPaint*); 9163e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const PE_Proc gPE[] = { hair_pe, hair2_pe, stroke_pe, dash_pe, one_d_pe }; 9263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 9363e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void fill_pe(SkPaint* paint) { 9463e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setStyle(SkPaint::kFill_Style); 9563e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setPathEffect(NULL); 9663e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 9763e34c61818b92c4f40387a1de32594934295bbbreed@android.com 9863e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void discrete_pe(SkPaint* paint) { 9963e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint->setPathEffect(new SkDiscretePathEffect(10, 4))->unref(); 10063e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 10163e34c61818b92c4f40387a1de32594934295bbbreed@android.com 10243e9f20f4b5eecb2335e26461b5c4c84f2e3bcd2reed@google.comstatic SkPathEffect* MakeTileEffect() { 10343e9f20f4b5eecb2335e26461b5c4c84f2e3bcd2reed@google.com SkMatrix m; 10443e9f20f4b5eecb2335e26461b5c4c84f2e3bcd2reed@google.com m.setScale(SkIntToScalar(12), SkIntToScalar(12)); 10563e34c61818b92c4f40387a1de32594934295bbbreed@android.com 10643e9f20f4b5eecb2335e26461b5c4c84f2e3bcd2reed@google.com SkPath path; 10743e9f20f4b5eecb2335e26461b5c4c84f2e3bcd2reed@google.com path.addCircle(0, 0, SkIntToScalar(5)); 108ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 10943e9f20f4b5eecb2335e26461b5c4c84f2e3bcd2reed@google.com return new SkPath2DPathEffect(m, path); 11043e9f20f4b5eecb2335e26461b5c4c84f2e3bcd2reed@google.com} 11163e34c61818b92c4f40387a1de32594934295bbbreed@android.com 11263e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void tile_pe(SkPaint* paint) { 11343e9f20f4b5eecb2335e26461b5c4c84f2e3bcd2reed@google.com paint->setPathEffect(MakeTileEffect())->unref(); 11463e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 11563e34c61818b92c4f40387a1de32594934295bbbreed@android.com 11663e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const PE_Proc gPE2[] = { fill_pe, discrete_pe, tile_pe }; 11763e34c61818b92c4f40387a1de32594934295bbbreed@android.com 11863e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void patheffect_slide(SkCanvas* canvas) { 11963e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPaint paint; 12063e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setAntiAlias(true); 12163e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setStyle(SkPaint::kStroke_Style); 12263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 12363e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPath path; 12463e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.moveTo(20, 20); 12563e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.lineTo(70, 120); 12663e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.lineTo(120, 30); 12763e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.lineTo(170, 80); 12863e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.lineTo(240, 50); 12963e34c61818b92c4f40387a1de32594934295bbbreed@android.com 13063e34c61818b92c4f40387a1de32594934295bbbreed@android.com size_t i; 13163e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->save(); 13263e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (i = 0; i < SK_ARRAY_COUNT(gPE); i++) { 13363e34c61818b92c4f40387a1de32594934295bbbreed@android.com gPE[i](&paint); 13463e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawPath(path, paint); 13563e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(0, 75); 13663e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 13763e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->restore(); 13863e34c61818b92c4f40387a1de32594934295bbbreed@android.com 13963e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.reset(); 14063e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkRect r = { 0, 0, 250, 120 }; 14163e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.addOval(r, SkPath::kCW_Direction); 14263e34c61818b92c4f40387a1de32594934295bbbreed@android.com r.inset(50, 50); 14363e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.addRect(r, SkPath::kCCW_Direction); 144ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 14563e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(320, 20); 14663e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (i = 0; i < SK_ARRAY_COUNT(gPE2); i++) { 14763e34c61818b92c4f40387a1de32594934295bbbreed@android.com gPE2[i](&paint); 14863e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawPath(path, paint); 14963e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(0, 160); 15063e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 15163e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 15263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 15363e34c61818b92c4f40387a1de32594934295bbbreed@android.com/////////////////////////////////////////////////////////////////////////////// 15463e34c61818b92c4f40387a1de32594934295bbbreed@android.com 15563e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkGradientShader.h" 15663e34c61818b92c4f40387a1de32594934295bbbreed@android.com 15763e34c61818b92c4f40387a1de32594934295bbbreed@android.comstruct GradData { 15863e34c61818b92c4f40387a1de32594934295bbbreed@android.com int fCount; 15963e34c61818b92c4f40387a1de32594934295bbbreed@android.com const SkColor* fColors; 16063e34c61818b92c4f40387a1de32594934295bbbreed@android.com const SkScalar* fPos; 16163e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 16263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 16363e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const SkColor gColors[] = { 16463e34c61818b92c4f40387a1de32594934295bbbreed@android.comSK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK 16563e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 16663e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const SkScalar gPos0[] = { 0, SK_Scalar1 }; 16763e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const SkScalar gPos1[] = { SK_Scalar1/4, SK_Scalar1*3/4 }; 16863e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const SkScalar gPos2[] = { 16963e34c61818b92c4f40387a1de32594934295bbbreed@android.com0, SK_Scalar1/8, SK_Scalar1/2, SK_Scalar1*7/8, SK_Scalar1 17063e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 17163e34c61818b92c4f40387a1de32594934295bbbreed@android.com 17263e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const GradData gGradData[] = { 17363e34c61818b92c4f40387a1de32594934295bbbreed@android.com{ 2, gColors, NULL }, 17463e34c61818b92c4f40387a1de32594934295bbbreed@android.com{ 2, gColors, gPos0 }, 17563e34c61818b92c4f40387a1de32594934295bbbreed@android.com{ 2, gColors, gPos1 }, 17663e34c61818b92c4f40387a1de32594934295bbbreed@android.com{ 5, gColors, NULL }, 17763e34c61818b92c4f40387a1de32594934295bbbreed@android.com{ 5, gColors, gPos2 } 17863e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 17963e34c61818b92c4f40387a1de32594934295bbbreed@android.com 18063e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic SkShader* MakeLinear(const SkPoint pts[2], const GradData& data, 18163e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkShader::TileMode tm, SkUnitMapper* mapper) { 18263e34c61818b92c4f40387a1de32594934295bbbreed@android.com return SkGradientShader::CreateLinear(pts, data.fColors, data.fPos, 18363e34c61818b92c4f40387a1de32594934295bbbreed@android.com data.fCount, tm, mapper); 18463e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 18563e34c61818b92c4f40387a1de32594934295bbbreed@android.com 18663e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic SkShader* MakeRadial(const SkPoint pts[2], const GradData& data, 18763e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkShader::TileMode tm, SkUnitMapper* mapper) { 18863e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint center; 18963e34c61818b92c4f40387a1de32594934295bbbreed@android.com center.set(SkScalarAve(pts[0].fX, pts[1].fX), 19063e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalarAve(pts[0].fY, pts[1].fY)); 19163e34c61818b92c4f40387a1de32594934295bbbreed@android.com return SkGradientShader::CreateRadial(center, center.fX, data.fColors, 19263e34c61818b92c4f40387a1de32594934295bbbreed@android.com data.fPos, data.fCount, tm, mapper); 19363e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 19463e34c61818b92c4f40387a1de32594934295bbbreed@android.com 19563e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic SkShader* MakeSweep(const SkPoint pts[2], const GradData& data, 19663e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkShader::TileMode tm, SkUnitMapper* mapper) { 19763e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint center; 19863e34c61818b92c4f40387a1de32594934295bbbreed@android.com center.set(SkScalarAve(pts[0].fX, pts[1].fX), 19963e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalarAve(pts[0].fY, pts[1].fY)); 20063e34c61818b92c4f40387a1de32594934295bbbreed@android.com return SkGradientShader::CreateSweep(center.fX, center.fY, data.fColors, 20163e34c61818b92c4f40387a1de32594934295bbbreed@android.com data.fPos, data.fCount, mapper); 20263e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 20363e34c61818b92c4f40387a1de32594934295bbbreed@android.com 20463e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic SkShader* Make2Radial(const SkPoint pts[2], const GradData& data, 20563e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkShader::TileMode tm, SkUnitMapper* mapper) { 20663e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint center0, center1; 20763e34c61818b92c4f40387a1de32594934295bbbreed@android.com center0.set(SkScalarAve(pts[0].fX, pts[1].fX), 20863e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalarAve(pts[0].fY, pts[1].fY)); 20963e34c61818b92c4f40387a1de32594934295bbbreed@android.com center1.set(SkScalarInterp(pts[0].fX, pts[1].fX, SkIntToScalar(3)/5), 21063e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalarInterp(pts[0].fY, pts[1].fY, SkIntToScalar(1)/4)); 21163e34c61818b92c4f40387a1de32594934295bbbreed@android.com return SkGradientShader::CreateTwoPointRadial( 21263e34c61818b92c4f40387a1de32594934295bbbreed@android.com center1, (pts[1].fX - pts[0].fX) / 7, 21363e34c61818b92c4f40387a1de32594934295bbbreed@android.com center0, (pts[1].fX - pts[0].fX) / 2, 21463e34c61818b92c4f40387a1de32594934295bbbreed@android.com data.fColors, data.fPos, data.fCount, tm, mapper); 21563e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 21663e34c61818b92c4f40387a1de32594934295bbbreed@android.com 21763e34c61818b92c4f40387a1de32594934295bbbreed@android.comtypedef SkShader* (*GradMaker)(const SkPoint pts[2], const GradData& data, 21863e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkShader::TileMode tm, SkUnitMapper* mapper); 21963e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const GradMaker gGradMakers[] = { 22063e34c61818b92c4f40387a1de32594934295bbbreed@android.com MakeLinear, MakeRadial, MakeSweep, Make2Radial 22163e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 22263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 22363e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void gradient_slide(SkCanvas* canvas) { 22463e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint pts[2] = { 22563e34c61818b92c4f40387a1de32594934295bbbreed@android.com { 0, 0 }, 22663e34c61818b92c4f40387a1de32594934295bbbreed@android.com { SkIntToScalar(100), SkIntToScalar(100) } 22763e34c61818b92c4f40387a1de32594934295bbbreed@android.com }; 22863e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkShader::TileMode tm = SkShader::kClamp_TileMode; 22963e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkRect r = { 0, 0, SkIntToScalar(100), SkIntToScalar(100) }; 23063e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPaint paint; 23163e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setAntiAlias(true); 23263e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setDither(true); 233ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 23463e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(SkIntToScalar(20), SkIntToScalar(10)); 23563e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (size_t i = 0; i < SK_ARRAY_COUNT(gGradData); i++) { 23663e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->save(); 23763e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (size_t j = 0; j < SK_ARRAY_COUNT(gGradMakers); j++) { 23863e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkShader* shader = gGradMakers[j](pts, gGradData[i], tm, NULL); 23963e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setShader(shader); 24063e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawRect(r, paint); 24163e34c61818b92c4f40387a1de32594934295bbbreed@android.com shader->unref(); 24263e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(0, SkIntToScalar(120)); 24363e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 24463e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->restore(); 24563e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(SkIntToScalar(120), 0); 24663e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 24763e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 24863e34c61818b92c4f40387a1de32594934295bbbreed@android.com 24963e34c61818b92c4f40387a1de32594934295bbbreed@android.com/////////////////////////////////////////////////////////////////////////////// 25063e34c61818b92c4f40387a1de32594934295bbbreed@android.com 25163e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkPathMeasure.h" 25263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 25363e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic SkScalar getpathlen(const SkPath& path) { 25463e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPathMeasure meas(path, false); 25563e34c61818b92c4f40387a1de32594934295bbbreed@android.com return meas.getLength(); 25663e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 25763e34c61818b92c4f40387a1de32594934295bbbreed@android.com 25863e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void textonpath_slide(SkCanvas* canvas) { 25963e34c61818b92c4f40387a1de32594934295bbbreed@android.com const char* text = "Displacement"; 26063e34c61818b92c4f40387a1de32594934295bbbreed@android.com size_t len =strlen(text); 26163e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPath path; 26263e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.moveTo(100, 300); 26363e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.quadTo(300, 100, 500, 300); 26463e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.offset(0, -100); 26563e34c61818b92c4f40387a1de32594934295bbbreed@android.com 26663e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPaint paint; 26763e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setAntiAlias(true); 26863e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setTextSize(40); 269ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 27063e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setStyle(SkPaint::kStroke_Style); 27163e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawPath(path, paint); 27263e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setStyle(SkPaint::kFill_Style); 273ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 27463e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalar x = 50; 27563e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setColor(0xFF008800); 27663e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawTextOnPathHV(text, len, path, 27763e34c61818b92c4f40387a1de32594934295bbbreed@android.com x, paint.getTextSize()*2/3, paint); 27863e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setColor(SK_ColorRED); 27963e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawTextOnPathHV(text, len, path, 280ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com x + 60, 0, paint); 28163e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setColor(SK_ColorBLUE); 28263e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawTextOnPathHV(text, len, path, 28363e34c61818b92c4f40387a1de32594934295bbbreed@android.com x + 120, -paint.getTextSize()*2/3, paint); 28463e34c61818b92c4f40387a1de32594934295bbbreed@android.com 28563e34c61818b92c4f40387a1de32594934295bbbreed@android.com path.offset(0, 200); 28663e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setTextAlign(SkPaint::kRight_Align); 287ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 28863e34c61818b92c4f40387a1de32594934295bbbreed@android.com text = "Matrices"; 28963e34c61818b92c4f40387a1de32594934295bbbreed@android.com len = strlen(text); 29063e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalar pathLen = getpathlen(path); 29163e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkMatrix matrix; 292ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 29363e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setColor(SK_ColorBLACK); 29463e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setStyle(SkPaint::kStroke_Style); 29563e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawPath(path, paint); 29663e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setStyle(SkPaint::kFill_Style); 29763e34c61818b92c4f40387a1de32594934295bbbreed@android.com 29863e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setTextSize(50); 29963e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawTextOnPath(text, len, path, NULL, paint); 300ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 30163e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setColor(SK_ColorRED); 30263e34c61818b92c4f40387a1de32594934295bbbreed@android.com matrix.setScale(-SK_Scalar1, SK_Scalar1); 30363e34c61818b92c4f40387a1de32594934295bbbreed@android.com matrix.postTranslate(pathLen, 0); 30463e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawTextOnPath(text, len, path, &matrix, paint); 305ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 30663e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setColor(SK_ColorBLUE); 30763e34c61818b92c4f40387a1de32594934295bbbreed@android.com matrix.setScale(SK_Scalar1, -SK_Scalar1); 30863e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawTextOnPath(text, len, path, &matrix, paint); 309ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 31063e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setColor(0xFF008800); 31163e34c61818b92c4f40387a1de32594934295bbbreed@android.com matrix.setScale(-SK_Scalar1, -SK_Scalar1); 31263e34c61818b92c4f40387a1de32594934295bbbreed@android.com matrix.postTranslate(pathLen, 0); 31363e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawTextOnPath(text, len, path, &matrix, paint); 31463e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 31563e34c61818b92c4f40387a1de32594934295bbbreed@android.com 31663e34c61818b92c4f40387a1de32594934295bbbreed@android.com/////////////////////////////////////////////////////////////////////////////// 31763e34c61818b92c4f40387a1de32594934295bbbreed@android.com 31863e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkImageDecoder.h" 31963e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkOSFile.h" 32063e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkRandom.h" 32163e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkStream.h" 32263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 32363e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic SkShader* make_shader0(SkIPoint* size) { 32463e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkBitmap bm; 325ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 32663e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkImageDecoder::DecodeFile("/skimages/logo.gif", &bm); 32763e34c61818b92c4f40387a1de32594934295bbbreed@android.com size->set(bm.width(), bm.height()); 32863e34c61818b92c4f40387a1de32594934295bbbreed@android.com return SkShader::CreateBitmapShader(bm, SkShader::kClamp_TileMode, 32963e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkShader::kClamp_TileMode); 33063e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 33163e34c61818b92c4f40387a1de32594934295bbbreed@android.com 33263e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic SkShader* make_shader1(const SkIPoint& size) { 33364cc579efa7e416c7298ed159d76b074b283c0f9senorblanco@chromium.org SkPoint pts[] = { { 0, 0 }, 33464cc579efa7e416c7298ed159d76b074b283c0f9senorblanco@chromium.org { SkIntToScalar(size.fX), SkIntToScalar(size.fY) } }; 33563e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkColor colors[] = { SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorRED }; 33663e34c61818b92c4f40387a1de32594934295bbbreed@android.com return SkGradientShader::CreateLinear(pts, colors, NULL, 33763e34c61818b92c4f40387a1de32594934295bbbreed@android.com SK_ARRAY_COUNT(colors), SkShader::kMirror_TileMode, NULL); 33863e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 33963e34c61818b92c4f40387a1de32594934295bbbreed@android.com 340f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.comclass Rec { 341f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.compublic: 34263e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkCanvas::VertexMode fMode; 34363e34c61818b92c4f40387a1de32594934295bbbreed@android.com int fCount; 34463e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint* fVerts; 34563e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint* fTexs; 346ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 34763e34c61818b92c4f40387a1de32594934295bbbreed@android.com Rec() : fCount(0), fVerts(NULL), fTexs(NULL) {} 34863e34c61818b92c4f40387a1de32594934295bbbreed@android.com ~Rec() { delete[] fVerts; delete[] fTexs; } 34963e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 35063e34c61818b92c4f40387a1de32594934295bbbreed@android.com 35102939ce4bddd3223d9e8cc98d4abd02939b7f70acaryclark@google.comstatic void make_tris(Rec* rec) { 35263e34c61818b92c4f40387a1de32594934295bbbreed@android.com int n = 10; 35363e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkRandom rand; 354ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 35563e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fMode = SkCanvas::kTriangles_VertexMode; 35663e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fCount = n * 3; 35763e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fVerts = new SkPoint[rec->fCount]; 358ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 35963e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (int i = 0; i < n; i++) { 36063e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint* v = &rec->fVerts[i*3]; 36163e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (int j = 0; j < 3; j++) { 36263e34c61818b92c4f40387a1de32594934295bbbreed@android.com v[j].set(rand.nextUScalar1() * 250, rand.nextUScalar1() * 250); 36363e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 36463e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 36563e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 36663e34c61818b92c4f40387a1de32594934295bbbreed@android.com 36702939ce4bddd3223d9e8cc98d4abd02939b7f70acaryclark@google.comstatic void make_fan(Rec* rec, int texWidth, int texHeight) { 36863e34c61818b92c4f40387a1de32594934295bbbreed@android.com const SkScalar tx = SkIntToScalar(texWidth); 36963e34c61818b92c4f40387a1de32594934295bbbreed@android.com const SkScalar ty = SkIntToScalar(texHeight); 37063e34c61818b92c4f40387a1de32594934295bbbreed@android.com const int n = 24; 371ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 37263e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fMode = SkCanvas::kTriangleFan_VertexMode; 37363e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fCount = n + 2; 37463e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fVerts = new SkPoint[rec->fCount]; 37563e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fTexs = new SkPoint[rec->fCount]; 376ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 37763e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint* v = rec->fVerts; 37863e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint* t = rec->fTexs; 379ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 38063e34c61818b92c4f40387a1de32594934295bbbreed@android.com v[0].set(0, 0); 38163e34c61818b92c4f40387a1de32594934295bbbreed@android.com t[0].set(0, 0); 38263e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (int i = 0; i < n; i++) { 38363e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalar cos; 38463e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalar sin = SkScalarSinCos(SK_ScalarPI * 2 * i / n, &cos); 38563e34c61818b92c4f40387a1de32594934295bbbreed@android.com v[i+1].set(cos, sin); 38663e34c61818b92c4f40387a1de32594934295bbbreed@android.com t[i+1].set(i*tx/n, ty); 38763e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 38863e34c61818b92c4f40387a1de32594934295bbbreed@android.com v[n+1] = v[1]; 38963e34c61818b92c4f40387a1de32594934295bbbreed@android.com t[n+1].set(tx, ty); 390ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 39163e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkMatrix m; 39263e34c61818b92c4f40387a1de32594934295bbbreed@android.com m.setScale(SkIntToScalar(100), SkIntToScalar(100)); 39363e34c61818b92c4f40387a1de32594934295bbbreed@android.com m.postTranslate(SkIntToScalar(110), SkIntToScalar(110)); 39463e34c61818b92c4f40387a1de32594934295bbbreed@android.com m.mapPoints(v, rec->fCount); 39563e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 39663e34c61818b92c4f40387a1de32594934295bbbreed@android.com 39702939ce4bddd3223d9e8cc98d4abd02939b7f70acaryclark@google.comstatic void make_strip(Rec* rec, int texWidth, int texHeight) { 39863e34c61818b92c4f40387a1de32594934295bbbreed@android.com const SkScalar tx = SkIntToScalar(texWidth); 39963e34c61818b92c4f40387a1de32594934295bbbreed@android.com const SkScalar ty = SkIntToScalar(texHeight); 40063e34c61818b92c4f40387a1de32594934295bbbreed@android.com const int n = 24; 401ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 40263e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fMode = SkCanvas::kTriangleStrip_VertexMode; 40363e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fCount = 2 * (n + 1); 40463e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fVerts = new SkPoint[rec->fCount]; 40563e34c61818b92c4f40387a1de32594934295bbbreed@android.com rec->fTexs = new SkPoint[rec->fCount]; 406ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 40763e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint* v = rec->fVerts; 40863e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPoint* t = rec->fTexs; 409ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 41063e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (int i = 0; i < n; i++) { 41163e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalar cos; 41263e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalar sin = SkScalarSinCos(SK_ScalarPI * 2 * i / n, &cos); 41363e34c61818b92c4f40387a1de32594934295bbbreed@android.com v[i*2 + 0].set(cos/2, sin/2); 41463e34c61818b92c4f40387a1de32594934295bbbreed@android.com v[i*2 + 1].set(cos, sin); 415ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 41663e34c61818b92c4f40387a1de32594934295bbbreed@android.com t[i*2 + 0].set(tx * i / n, ty); 41763e34c61818b92c4f40387a1de32594934295bbbreed@android.com t[i*2 + 1].set(tx * i / n, 0); 41863e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 41963e34c61818b92c4f40387a1de32594934295bbbreed@android.com v[2*n + 0] = v[0]; 42063e34c61818b92c4f40387a1de32594934295bbbreed@android.com v[2*n + 1] = v[1]; 421ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 42263e34c61818b92c4f40387a1de32594934295bbbreed@android.com t[2*n + 0].set(tx, ty); 42363e34c61818b92c4f40387a1de32594934295bbbreed@android.com t[2*n + 1].set(tx, 0); 424ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 42563e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkMatrix m; 42663e34c61818b92c4f40387a1de32594934295bbbreed@android.com m.setScale(SkIntToScalar(100), SkIntToScalar(100)); 42763e34c61818b92c4f40387a1de32594934295bbbreed@android.com m.postTranslate(SkIntToScalar(110), SkIntToScalar(110)); 42863e34c61818b92c4f40387a1de32594934295bbbreed@android.com m.mapPoints(v, rec->fCount); 42963e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 43063e34c61818b92c4f40387a1de32594934295bbbreed@android.com 43163e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic void mesh_slide(SkCanvas* canvas) { 43263e34c61818b92c4f40387a1de32594934295bbbreed@android.com Rec fRecs[3]; 43363e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkIPoint size; 434ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 43563e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkShader* fShader0 = make_shader0(&size); 43663e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkShader* fShader1 = make_shader1(size); 437f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 438f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com SkAutoUnref aur0(fShader0); 439f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com SkAutoUnref aur1(fShader1); 440f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 44163e34c61818b92c4f40387a1de32594934295bbbreed@android.com make_strip(&fRecs[0], size.fX, size.fY); 44263e34c61818b92c4f40387a1de32594934295bbbreed@android.com make_fan(&fRecs[1], size.fX, size.fY); 44363e34c61818b92c4f40387a1de32594934295bbbreed@android.com make_tris(&fRecs[2]); 44463e34c61818b92c4f40387a1de32594934295bbbreed@android.com 44563e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkPaint paint; 44663e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setDither(true); 44763e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setFilterBitmap(true); 448ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 44964cc579efa7e416c7298ed159d76b074b283c0f9senorblanco@chromium.org for (size_t i = 0; i < SK_ARRAY_COUNT(fRecs); i++) { 45063e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->save(); 451ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 45263e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setShader(NULL); 45363e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount, 45463e34c61818b92c4f40387a1de32594934295bbbreed@android.com fRecs[i].fVerts, fRecs[i].fTexs, 45563e34c61818b92c4f40387a1de32594934295bbbreed@android.com NULL, NULL, NULL, 0, paint); 456ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 45763e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(SkIntToScalar(210), 0); 458ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 45963e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setShader(fShader0); 46063e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount, 46163e34c61818b92c4f40387a1de32594934295bbbreed@android.com fRecs[i].fVerts, fRecs[i].fTexs, 46263e34c61818b92c4f40387a1de32594934295bbbreed@android.com NULL, NULL, NULL, 0, paint); 463ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 46463e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(SkIntToScalar(210), 0); 465ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 46663e34c61818b92c4f40387a1de32594934295bbbreed@android.com paint.setShader(fShader1); 46763e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->drawVertices(fRecs[i].fMode, fRecs[i].fCount, 46863e34c61818b92c4f40387a1de32594934295bbbreed@android.com fRecs[i].fVerts, fRecs[i].fTexs, 46963e34c61818b92c4f40387a1de32594934295bbbreed@android.com NULL, NULL, NULL, 0, paint); 47063e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->restore(); 471ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 47263e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas->translate(0, SkIntToScalar(250)); 47363e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 47463e34c61818b92c4f40387a1de32594934295bbbreed@android.com} 47563e34c61818b92c4f40387a1de32594934295bbbreed@android.com 47663e34c61818b92c4f40387a1de32594934295bbbreed@android.com/////////////////////////////////////////////////////////////////////////////// 47763e34c61818b92c4f40387a1de32594934295bbbreed@android.com 4788af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.comstatic void r0(SkLayerRasterizer* rast, SkPaint& p) 4798af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 480b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com p.setMaskFilter(SkBlurMaskFilter::Create(SkBlurMaskFilter::kNormal_BlurStyle, 481b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(3))))->unref(); 4828af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p, SkIntToScalar(3), SkIntToScalar(3)); 483ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 4848af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setMaskFilter(NULL); 4858af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kStroke_Style); 4868af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStrokeWidth(SK_Scalar1); 4878af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 488ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 4898af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setAlpha(0x11); 4908af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kFill_Style); 4918af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kSrc_Mode); 4928af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 4938af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 4948af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 4958af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.comstatic void r1(SkLayerRasterizer* rast, SkPaint& p) 4968af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 4978af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 498ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 4998af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setAlpha(0x40); 5008af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kSrc_Mode); 5018af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kStroke_Style); 5028af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStrokeWidth(SK_Scalar1*2); 5038af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 5048af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 5058af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 5068af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.comstatic void r2(SkLayerRasterizer* rast, SkPaint& p) 5078af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 5088af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kStrokeAndFill_Style); 5098af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStrokeWidth(SK_Scalar1*4); 5108af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 511ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5128af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kStroke_Style); 5138af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStrokeWidth(SK_Scalar1*3/2); 5148af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kClear_Mode); 5158af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 5168af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 5178af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 5188af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.comstatic void r3(SkLayerRasterizer* rast, SkPaint& p) 5198af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 5208af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kStroke_Style); 5218af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStrokeWidth(SK_Scalar1*3); 5228af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 523ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5248af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setAlpha(0x20); 5258af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kFill_Style); 5268af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kSrc_Mode); 5278af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 5288af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 5298af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 5308af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.comstatic void r4(SkLayerRasterizer* rast, SkPaint& p) 5318af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 5328af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setAlpha(0x60); 5338af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p, SkIntToScalar(3), SkIntToScalar(3)); 534ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5358af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setAlpha(0xFF); 5368af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kClear_Mode); 5378af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p, SK_Scalar1*3/2, SK_Scalar1*3/2); 538ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5398af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermode(NULL); 5408af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 5418af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 5428af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 5438af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com#include "SkDiscretePathEffect.h" 5448af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 5458af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.comstatic void r5(SkLayerRasterizer* rast, SkPaint& p) 5468af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 5478af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 548ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5498af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setPathEffect(new SkDiscretePathEffect(SK_Scalar1*4, SK_Scalar1*3))->unref(); 5508af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kSrcOut_Mode); 5518af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 5528af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 5538af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 5548af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.comstatic void r6(SkLayerRasterizer* rast, SkPaint& p) 5558af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 5568af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 557ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5588af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setAntiAlias(false); 5598af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com SkLayerRasterizer* rast2 = new SkLayerRasterizer; 5608af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com r5(rast2, p); 5618af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setRasterizer(rast2)->unref(); 5628af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kClear_Mode); 5638af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 5648af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 5658af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 5668af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com#include "Sk2DPathEffect.h" 5678af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 56818dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.comstatic SkPathEffect* MakeDotEffect(SkScalar radius, const SkMatrix& matrix) { 56918dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com SkPath path; 57018dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com path.addCircle(0, 0, radius); 57118dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com return new SkPath2DPathEffect(matrix, path); 57218dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com} 5738af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 5748af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.comstatic void r7(SkLayerRasterizer* rast, SkPaint& p) 5758af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 5768af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com SkMatrix lattice; 5778af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com lattice.setScale(SK_Scalar1*6, SK_Scalar1*6, 0, 0); 5788af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com lattice.postSkew(SK_Scalar1/3, 0, 0, 0); 57918dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com p.setPathEffect(MakeDotEffect(SK_Scalar1*4, lattice))->unref(); 5808af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 5818af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 5828af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 5838af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.comstatic void r8(SkLayerRasterizer* rast, SkPaint& p) 5848af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 5858af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 586ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5878af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com SkMatrix lattice; 5888af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com lattice.setScale(SK_Scalar1*6, SK_Scalar1*6, 0, 0); 5898af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com lattice.postSkew(SK_Scalar1/3, 0, 0, 0); 59018dc47731f4b37d8896b51f1b92ab31abd78b5a0reed@google.com p.setPathEffect(MakeDotEffect(SK_Scalar1*2, lattice))->unref(); 5918af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kClear_Mode); 5928af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 593ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 5948af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setPathEffect(NULL); 5958af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermode(NULL); 5968af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kStroke_Style); 5978af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStrokeWidth(SK_Scalar1); 5988af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 5998af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 6008af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 6018af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.comstatic void r9(SkLayerRasterizer* rast, SkPaint& p) 6028af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com{ 6038af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 604ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 6058af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com SkMatrix lattice; 6068af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com lattice.setScale(SK_Scalar1, SK_Scalar1*6, 0, 0); 6078af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com lattice.postRotate(SkIntToScalar(30), 0, 0); 608d8a6cc814f1a0a8faaddad05ae765ad2f6b11aacscroggo@google.com p.setPathEffect(new SkLine2DPathEffect(SK_Scalar1*2, lattice))->unref(); 6098af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermodeMode(SkXfermode::kClear_Mode); 6108af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 611ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 6128af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setPathEffect(NULL); 6138af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setXfermode(NULL); 6148af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStyle(SkPaint::kStroke_Style); 6158af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setStrokeWidth(SK_Scalar1); 6168af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com rast->addLayer(p); 6178af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 6188af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 6198af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.comtypedef void (*raster_proc)(SkLayerRasterizer*, SkPaint&); 6208af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 6218af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.comstatic const raster_proc gRastProcs[] = { 6228af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com r0, r1, r2, r3, r4, r5, r6, r7, r8, r9 6238af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com}; 6248af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 625ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.comstatic void apply_shader(SkPaint* paint, int index) { 6268af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com raster_proc proc = gRastProcs[index]; 6278af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com SkPaint p; 6288af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com SkLayerRasterizer* rast = new SkLayerRasterizer; 629ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 6308af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com p.setAntiAlias(true); 6318af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com proc(rast, p); 6328af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com paint->setRasterizer(rast)->unref(); 6338af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com paint->setColor(SK_ColorBLUE); 6348af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 6358af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 6368af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com#include "SkTypeface.h" 6378af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 6388af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.comstatic void texteffect_slide(SkCanvas* canvas) { 6398af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com const char* str = "Google"; 6408af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com size_t len = strlen(str); 6418af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com SkScalar x = 20; 6428af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com SkScalar y = 80; 6438af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com SkPaint paint; 6448af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com paint.setTypeface(SkTypeface::CreateFromName("Georgia", SkTypeface::kItalic)); 6458af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com paint.setTextSize(75); 6468af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com paint.setAntiAlias(true); 6478af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com paint.setColor(SK_ColorBLUE); 64864cc579efa7e416c7298ed159d76b074b283c0f9senorblanco@chromium.org for (size_t i = 0; i < SK_ARRAY_COUNT(gRastProcs); i++) { 6498af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com apply_shader(&paint, i); 6508af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com canvas->drawText(str, len, x, y, paint); 6518af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com y += 80; 6528af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com if (i == 4) { 6538af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com x += 320; 6548af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com y = 80; 6558af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com } 6568af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com } 6578af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com} 6588af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 6598af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com/////////////////////////////////////////////////////////////////////////////// 6608af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com 66163e34c61818b92c4f40387a1de32594934295bbbreed@android.com#include "SkImageEncoder.h" 66263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 66363e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic const SlideProc gProc[] = { 66463e34c61818b92c4f40387a1de32594934295bbbreed@android.com patheffect_slide, 66563e34c61818b92c4f40387a1de32594934295bbbreed@android.com gradient_slide, 66663e34c61818b92c4f40387a1de32594934295bbbreed@android.com textonpath_slide, 6678af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com mesh_slide, 6688af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com texteffect_slide 66963e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 67063e34c61818b92c4f40387a1de32594934295bbbreed@android.com 67181e3d7f7943d5c257a07580b75218a5e256b0aadreed@google.comclass SlideView : public SampleView { 67263e34c61818b92c4f40387a1de32594934295bbbreed@android.com int fIndex; 6737b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com bool fOnce; 67463e34c61818b92c4f40387a1de32594934295bbbreed@android.compublic: 67563e34c61818b92c4f40387a1de32594934295bbbreed@android.com SlideView() { 6767b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com fOnce = false; 6777b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com } 678ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 6797b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com void init() { 6807b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com if (fOnce) { 6817b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com return; 6827b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com } 6837b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com fOnce = true; 6847b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com 68563e34c61818b92c4f40387a1de32594934295bbbreed@android.com fIndex = 0; 686ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 68763e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkBitmap bm; 68863e34c61818b92c4f40387a1de32594934295bbbreed@android.com bm.setConfig(SkBitmap::kARGB_8888_Config, 1024, 768); 68963e34c61818b92c4f40387a1de32594934295bbbreed@android.com bm.allocPixels(); 69063e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkCanvas canvas(bm); 69163e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkScalar s = SkIntToScalar(1024) / 640; 69263e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas.scale(s, s); 69363e34c61818b92c4f40387a1de32594934295bbbreed@android.com for (size_t i = 0; i < SK_ARRAY_COUNT(gProc); i++) { 69463e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas.save(); 6958af9602f6161e8d031ea175d7a5e4bd206d8e72breed@android.com canvas.drawColor(BG_COLOR); 69663e34c61818b92c4f40387a1de32594934295bbbreed@android.com gProc[i](&canvas); 69763e34c61818b92c4f40387a1de32594934295bbbreed@android.com canvas.restore(); 69863e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkString str; 6993a67a668dbdc3a6bba68700a6dfdef8164ae0c69senorblanco@chromium.org str.printf("/skimages/slide_" SK_SIZE_T_SPECIFIER ".png", i); 70063e34c61818b92c4f40387a1de32594934295bbbreed@android.com SkImageEncoder::EncodeFile(str.c_str(), bm, SkImageEncoder::kPNG_Type, 100); 70163e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 70281e3d7f7943d5c257a07580b75218a5e256b0aadreed@google.com this->setBGColor(BG_COLOR); 70363e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 704ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 70563e34c61818b92c4f40387a1de32594934295bbbreed@android.comprotected: 70663e34c61818b92c4f40387a1de32594934295bbbreed@android.com // overrides from SkEventSink 70763e34c61818b92c4f40387a1de32594934295bbbreed@android.com virtual bool onQuery(SkEvent* evt) { 70863e34c61818b92c4f40387a1de32594934295bbbreed@android.com if (SampleCode::TitleQ(*evt)) { 70963e34c61818b92c4f40387a1de32594934295bbbreed@android.com SampleCode::TitleR(evt, "Slides"); 71063e34c61818b92c4f40387a1de32594934295bbbreed@android.com return true; 71163e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 71263e34c61818b92c4f40387a1de32594934295bbbreed@android.com return this->INHERITED::onQuery(evt); 71363e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 714ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 71581e3d7f7943d5c257a07580b75218a5e256b0aadreed@google.com virtual void onDrawContent(SkCanvas* canvas) { 7167b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com this->init(); 71763e34c61818b92c4f40387a1de32594934295bbbreed@android.com gProc[fIndex](canvas); 71863e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 71963e34c61818b92c4f40387a1de32594934295bbbreed@android.com 7209c55f801a35b0d6c39f007fae432bd13094f3c52sugoi@google.com virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned) SK_OVERRIDE { 7217b1859034fd1febd69eeeca9efd5e3eb297fb168reed@google.com this->init(); 72263e34c61818b92c4f40387a1de32594934295bbbreed@android.com fIndex = (fIndex + 1) % SK_ARRAY_COUNT(gProc); 72363e34c61818b92c4f40387a1de32594934295bbbreed@android.com this->inval(NULL); 72463e34c61818b92c4f40387a1de32594934295bbbreed@android.com return NULL; 72563e34c61818b92c4f40387a1de32594934295bbbreed@android.com } 72663e34c61818b92c4f40387a1de32594934295bbbreed@android.com 72763e34c61818b92c4f40387a1de32594934295bbbreed@android.comprivate: 72881e3d7f7943d5c257a07580b75218a5e256b0aadreed@google.com typedef SampleView INHERITED; 72963e34c61818b92c4f40387a1de32594934295bbbreed@android.com}; 73063e34c61818b92c4f40387a1de32594934295bbbreed@android.com 73163e34c61818b92c4f40387a1de32594934295bbbreed@android.com////////////////////////////////////////////////////////////////////////////// 73263e34c61818b92c4f40387a1de32594934295bbbreed@android.com 73363e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic SkView* MyFactory() { return new SlideView; } 73463e34c61818b92c4f40387a1de32594934295bbbreed@android.comstatic SkViewRegister reg(MyFactory); 735