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 */ 84c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com#include "SampleCode.h" 94c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com#include "SkCanvas.h" 104c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com#include "SkGradientShader.h" 114c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com 124c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.comclass GradientView : public SampleView { 134c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.compublic: 14ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com GradientView() { 154c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com this->setBGColor(0xFFDDDDDD); 16ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com } 17ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 184c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.comprotected: 19ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com struct GradData { 204c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com int fCount; 214c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com const SkColor* fColors; 224c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com const SkScalar* fPos; 234c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com }; 244c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com // overrides from SkEventSink 254c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com virtual bool onQuery(SkEvent* evt) { 264c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com if (SampleCode::TitleQ(*evt)) { 274c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SampleCode::TitleR(evt, "Gradients"); 284c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com return true; 294c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com } 304c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com return this->INHERITED::onQuery(evt); 314c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com } 324c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com virtual void onDrawContent(SkCanvas* canvas) { 334c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkPaint paint; 344c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com paint.setAntiAlias(true); 354c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com paint.setStyle(SkPaint::kStroke_Style); 364c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com paint.setStrokeWidth(SkScalarHalf(SkIntToScalar(3))); 374c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com paint.setStyle(SkPaint::kFill_Style); 38ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 394c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkPoint p = SkPoint::Make(0,0); 404c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkPoint q = SkPoint::Make(100,100); 414c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkPoint pts[] = {p, q}; 42ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 434c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkScalar t, temp, x, y; 444c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkColor gColors[] = { 454c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK 464c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com }; 474c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com t = SampleCode::GetAnimScalar(SkIntToScalar(2), SkIntToScalar(20)); 484c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com temp = SampleCode::GetAnimScalar(SkIntToScalar(1), SkIntToScalar(8)); 494c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkScalar step = SK_ScalarPI / (10); 504c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkScalar angle = t * step; 514c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com x = SkScalarSinCos(angle, &y); 524c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkScalar colorPositions[] = { 0, 0.1 + x, 0.4 + y, 0.9 - x + y, 1.0}; 534c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com GradData data = { 5, gColors, colorPositions }; 54ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 55ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 564c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkRect r = { 0, 0, SkIntToScalar(200), SkIntToScalar(200) }; 574c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkShader* shader1 = SkGradientShader::CreateLinear( 58ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com pts, data.fColors, data.fPos,data.fCount, 594c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkShader::kMirror_TileMode); 604c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com paint.setShader(shader1)->unref(); 61ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 624c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com canvas->drawRect(r, paint); 63ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 64ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 654c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkPoint s = SkPoint::Make(100,100); 664c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkShader* shader2 = SkGradientShader::CreateRadial( 67ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com s, 100, data.fColors, data.fPos, data.fCount, 684c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkShader::kMirror_TileMode); 694c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com paint.setShader(shader2)->unref(); 704c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com canvas->translate(250, 0); 714c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com canvas->drawRect(r, paint); 72ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 734c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkShader* shader3 = SkGradientShader::CreateTwoPointRadial( 744c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com p, 0, q, 100, data.fColors, data.fPos, data.fCount, 754c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkShader::kMirror_TileMode); 764c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com paint.setShader(shader3)->unref(); 774c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com canvas->translate(0, 250); 784c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com canvas->drawRect(r, paint); 79ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 804c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com SkShader* shader4 = SkGradientShader::CreateSweep( 814c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com 100, 100, data.fColors, data.fPos, data.fCount); 82ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 834c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com paint.setShader(shader4)->unref(); 844c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com canvas->translate(-250, 0); 854c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com canvas->drawRect(r, paint); 86ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 87ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com this->inval(NULL); 884c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com } 89ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com 904c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.comprivate: 914c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com typedef SampleView INHERITED; 924c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com}; 934c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com 944c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com////////////////////////////////////////////////////////////////////////////// 954c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.com 964c295a3d9285247a50fffbc3d2a3317c45249c5byangsu@google.comstatic SkView* MyFactory() { return new GradientView; } 97bda03db28935eef7f9a3aae05fdedca57cd984adrmistry@google.comstatic SkViewRegister reg(MyFactory); 98