SampleClamp.cpp revision ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976e
1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2011 Google Inc.
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Use of this source code is governed by a BSD-style license that can be
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * found in the LICENSE file.
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "SampleCode.h"
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "SkView.h"
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "SkCanvas.h"
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "SkGraphics.h"
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "SkRandom.h"
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "SkGradientShader.h"
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "SkPicture.h"
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic SkShader* make_linear() {
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    SkPoint pts[] = { 0, 0, SK_Scalar1/500, SK_Scalar1/500 };
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    SkColor colors[] = { SK_ColorRED, SK_ColorBLUE };
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    return SkGradientShader::CreateLinear(pts, colors, NULL, 2,
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                          SkShader::kClamp_TileMode);
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclass ClampView : public SampleView {
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    SkShader*   fGrad;
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpublic:
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    ClampView() {
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        fGrad = make_linear();
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    virtual ~ClampView() {
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        fGrad->unref();
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgprotected:
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    // overrides from SkEventSink
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    virtual bool onQuery(SkEvent* evt) {
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        if (SampleCode::TitleQ(*evt)) {
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            SampleCode::TitleR(evt, "Clamp");
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org            return true;
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        }
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        return this->INHERITED::onQuery(evt);
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    virtual void onDrawContent(SkCanvas* canvas) {
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        SkPaint paint;
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        paint.setShader(fGrad);
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//        canvas->translate(this->width()/2, this->height()/2);
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        canvas->translate(64, 64);
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        canvas->drawPaint(paint);
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        SkPicture pic;
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        SkCanvas* c = pic.beginRecording(100, 100, 0);
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        SkCanvas::LayerIter layerIterator(c, false);
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        layerIterator.next();
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org        layerIterator.done();
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    }
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgprivate:
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    typedef SampleView INHERITED;
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org//////////////////////////////////////////////////////////////////////////////
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic SkView* MyFactory() { return new ClampView; }
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic SkViewRegister reg(MyFactory);
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org