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 */
87a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com#include "SampleCode.h"
97a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com#include "SkView.h"
107a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com#include "SkCanvas.h"
117a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com#include "SkGraphics.h"
127a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com#include "SkRandom.h"
137a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com#include "SkGradientShader.h"
147a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com#include "SkPicture.h"
157a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com
167a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.comstatic SkShader* make_linear() {
177a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com    SkPoint pts[] = { 0, 0, SK_Scalar1/500, SK_Scalar1/500 };
187a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com    SkColor colors[] = { SK_ColorRED, SK_ColorBLUE };
197a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com    return SkGradientShader::CreateLinear(pts, colors, NULL, 2,
207a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com                                          SkShader::kClamp_TileMode);
217a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com}
227a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com
237a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.comclass ClampView : public SampleView {
247a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com    SkShader*   fGrad;
257a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com
267a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.compublic:
277a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com    ClampView() {
287a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com        fGrad = make_linear();
297a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com    }
307a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com
317a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com    virtual ~ClampView() {
327a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com        fGrad->unref();
337a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com    }
347a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com
357a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.comprotected:
367a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com    // overrides from SkEventSink
377a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com    virtual bool onQuery(SkEvent* evt) {
387a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com        if (SampleCode::TitleQ(*evt)) {
397a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com            SampleCode::TitleR(evt, "Clamp");
407a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com            return true;
417a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com        }
427a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com        return this->INHERITED::onQuery(evt);
437a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com    }
447a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com
457a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com    virtual void onDrawContent(SkCanvas* canvas) {
467a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com        SkPaint paint;
477a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com        paint.setShader(fGrad);
487a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com
497a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com//        canvas->translate(this->width()/2, this->height()/2);
507a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com        canvas->translate(64, 64);
517a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com        canvas->drawPaint(paint);
527a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com
537a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com        SkPicture pic;
547a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com        SkCanvas* c = pic.beginRecording(100, 100, 0);
557a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com        SkCanvas::LayerIter layerIterator(c, false);
567a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com        layerIterator.next();
577a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com        layerIterator.done();
587a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com    }
597a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com
607a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.comprivate:
617a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com    typedef SampleView INHERITED;
627a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com};
637a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com
647a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com//////////////////////////////////////////////////////////////////////////////
657a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.com
667a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.comstatic SkView* MyFactory() { return new ClampView; }
677a253379e7c420002c0fa93ac05a1bffbb5d557dreed@google.comstatic SkViewRegister reg(MyFactory);
68