148dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com/*
348dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com * Copyright 2011 Google Inc.
448dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com *
548dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com * Use of this source code is governed by a BSD-style license that can be
648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com * found in the LICENSE file.
748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com */
848dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
948dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
1048dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com#ifndef GMSampleView_DEFINED
1148dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com#define GMSampleView_DEFINED
1248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
1348dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com#include "SampleCode.h"
1448dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com#include "gm.h"
1548dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
1648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comclass GMSampleView : public SampleView {
1748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comprivate:
18a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com    bool fShowSize;
1948dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    typedef skiagm::GM GM;
2048dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
2148dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.compublic:
2248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    GMSampleView(GM* gm)
232cda3871cbe50ce8047ef035569ac8e962f09d4etfarina@chromium.org    : fShowSize(false), fGM(gm) {}
24ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
2548dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    virtual ~GMSampleView() {
2648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com        delete fGM;
2748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    }
28ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
29a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com    static SkEvent* NewShowSizeEvt(bool doShowSize) {
30a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com        SkEvent* evt = SkNEW_ARGS(SkEvent, ("GMSampleView::showSize"));
31a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com        evt->setFast32(doShowSize);
32a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com        return evt;
33a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com    }
34a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com
3548dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comprotected:
3648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    virtual bool onQuery(SkEvent* evt) {
3748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com        if (SampleCode::TitleQ(*evt)) {
38e9f091d7cd6eeccb0c1b84226a8543dc8a3d285absalomon@google.com            SkString name("GM:");
3938aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org            name.append(fGM->getName());
40ac7aa1bc3feb96c68e5c10f7cbed0e6be7704052reed@google.com            SampleCode::TitleR(evt, name.c_str());
4148dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com            return true;
4248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com        }
4348dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com        return this->INHERITED::onQuery(evt);
4448dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    }
45884e60be30e20f38b3466a4697081187d2f1f814skia.committer@gmail.com
46a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com    virtual bool onEvent(const SkEvent& evt) SK_OVERRIDE {
47a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com        if (evt.isType("GMSampleView::showSize")) {
48a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com            fShowSize = SkToBool(evt.getFast32());
49a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com            return true;
50a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com        }
51a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com        return this->INHERITED::onEvent(evt);
52a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com    }
53ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
5448dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    virtual void onDrawContent(SkCanvas* canvas) {
55a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com        {
56a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com            SkAutoCanvasRestore acr(canvas, fShowSize);
57a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com            fGM->drawContent(canvas);
58a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com        }
59a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com        if (fShowSize) {
60a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com            SkISize size = fGM->getISize();
61a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com            SkRect r = SkRect::MakeWH(SkIntToScalar(size.width()),
62a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com                                      SkIntToScalar(size.height()));
63a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com            SkPaint paint;
64a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com            paint.setColor(0x40FF8833);
65a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com            canvas->drawRect(r, paint);
66a4f8137e67e31390b0e7edc5e637a3a02495d1a2reed@google.com        }
6748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    }
6848dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
6948dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    virtual void onDrawBackground(SkCanvas* canvas) {
7048dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com        fGM->drawBackground(canvas);
7148dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    }
7248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
7348dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comprivate:
7448dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    GM* fGM;
7548dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    typedef SampleView INHERITED;
7648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com};
7748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
7848dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com#endif
79