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