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 */ 84868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org#include "gm.h" 9b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com#include "SkBlurMask.h" 104868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org#include "SkBlurDrawLooper.h" 114868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org 124868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.orgnamespace skiagm { 134868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org 144868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org/////////////////////////////////////////////////////////////////////////////// 154868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org 16e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.comstatic void setup(SkPaint* paint, SkColor c, SkScalar strokeWidth) { 17e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com paint->setColor(c); 18e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com if (strokeWidth < 0) { 19e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com paint->setStyle(SkPaint::kFill_Style); 20e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com } else { 21e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com paint->setStyle(SkPaint::kStroke_Style); 22e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com paint->setStrokeWidth(strokeWidth); 23e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com } 24e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com} 254868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org 26e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.comclass ShadowsGM : public GM { 274868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.orgpublic: 284868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org SkPath fCirclePath; 29e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com SkRect fRect; 30e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com 314868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org ShadowsGM() { 3248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com this->setBGColor(0xFFDDDDDD); 334868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org fCirclePath.addCircle(SkIntToScalar(20), SkIntToScalar(20), SkIntToScalar(10) ); 34e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com fRect.set(SkIntToScalar(10), SkIntToScalar(10), 35e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com SkIntToScalar(30), SkIntToScalar(30)); 364868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org } 374868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org 384868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.orgprotected: 39a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 40a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 41a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 42a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 434868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org virtual SkString onShortName() { 444868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org return SkString("shadows"); 454868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org } 464868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org 474868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org virtual SkISize onISize() { 48f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(200, 120); 494868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org } 504868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org 514868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org virtual void onDraw(SkCanvas* canvas) { 524868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org SkBlurDrawLooper* shadowLoopers[5]; 534868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org shadowLoopers[0] = 5473cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::Create(SK_ColorBLUE, 5573cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(10)), 5673cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkIntToScalar(5), SkIntToScalar(10), 5773cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::kIgnoreTransform_BlurFlag | 5873cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::kOverrideColor_BlurFlag | 5973cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::kHighQuality_BlurFlag); 604868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org SkAutoUnref aurL0(shadowLoopers[0]); 614868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org shadowLoopers[1] = 6273cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::Create(SK_ColorBLUE, 6373cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(10)), 6473cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkIntToScalar(5), SkIntToScalar(10), 6573cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::kIgnoreTransform_BlurFlag | 6673cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::kOverrideColor_BlurFlag); 674868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org SkAutoUnref aurL1(shadowLoopers[1]); 684868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org shadowLoopers[2] = 6973cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::Create(SK_ColorBLACK, 7073cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(5)), 7173cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkIntToScalar(5), 7273cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkIntToScalar(10), 7373cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::kIgnoreTransform_BlurFlag | 7473cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::kHighQuality_BlurFlag); 754868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org SkAutoUnref aurL2(shadowLoopers[2]); 764868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org shadowLoopers[3] = 7773cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::Create(0x7FFF0000, 7873cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(5)), 7973cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkIntToScalar(-5), SkIntToScalar(-10), 8073cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::kIgnoreTransform_BlurFlag | 8173cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::kOverrideColor_BlurFlag | 8273cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::kHighQuality_BlurFlag); 834868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org SkAutoUnref aurL3(shadowLoopers[3]); 844868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org shadowLoopers[4] = 8573cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::Create(SK_ColorBLACK, SkIntToScalar(0), 8673cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkIntToScalar(5), SkIntToScalar(5), 8773cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::kIgnoreTransform_BlurFlag | 8873cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::kOverrideColor_BlurFlag | 8973cb15351f33459e0c861a96135c634dec77ef9dcommit-bot@chromium.org SkBlurDrawLooper::kHighQuality_BlurFlag); 904868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org SkAutoUnref aurL4(shadowLoopers[4]); 914868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org 92e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com static const struct { 93e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com SkColor fColor; 94e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com SkScalar fStrokeWidth; 95e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com } gRec[] = { 96e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com { SK_ColorRED, -SK_Scalar1 }, 97e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com { SK_ColorGREEN, SkIntToScalar(4) }, 987c545bddf806fc1b2e9ce61a9888b49d60471d73junov@chromium.org { SK_ColorBLUE, SkIntToScalar(0)}, 99e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com }; 100e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com 101e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com SkPaint paint; 102e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com paint.setAntiAlias(true); 103e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com for (size_t i = 0; i < SK_ARRAY_COUNT(shadowLoopers); ++i) { 104e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com SkAutoCanvasRestore acr(canvas, true); 105e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com 106e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com paint.setLooper(shadowLoopers[i]); 107e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com 108ffe39bd3b66eb5090684959e7f2409346ab72d93tomhudson@google.com canvas->translate(SkIntToScalar((unsigned int)i*40), SkIntToScalar(0)); 109e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com setup(&paint, gRec[0].fColor, gRec[0].fStrokeWidth); 110e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com canvas->drawRect(fRect, paint); 111e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com 1124868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org canvas->translate(SkIntToScalar(0), SkIntToScalar(40)); 113e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com setup(&paint, gRec[1].fColor, gRec[1].fStrokeWidth); 114e3605d0e748c1f79089f1e762f57e2a7d6644aa2reed@google.com canvas->drawPath(fCirclePath, paint); 1157c545bddf806fc1b2e9ce61a9888b49d60471d73junov@chromium.org 1167c545bddf806fc1b2e9ce61a9888b49d60471d73junov@chromium.org canvas->translate(SkIntToScalar(0), SkIntToScalar(40)); 1177c545bddf806fc1b2e9ce61a9888b49d60471d73junov@chromium.org setup(&paint, gRec[2].fColor, gRec[2].fStrokeWidth); 1187c545bddf806fc1b2e9ce61a9888b49d60471d73junov@chromium.org canvas->drawPath(fCirclePath, paint); 1194868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org } 1204868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org} 1214868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org 1224868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.orgprivate: 1234868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org typedef GM INHERITED; 1244868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org}; 1254868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org 1264868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org/////////////////////////////////////////////////////////////////////////////// 1274868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org 1284868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.orgstatic GM* MyFactory(void*) { return new ShadowsGM; } 1294868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.orgstatic GMRegistry reg(MyFactory); 1304868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org 1314868e6b221a4a98e40f977851af5fcf09631ea15senorblanco@chromium.org} 132