• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2015 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "GMSampleView.h"
9 
GMSampleView(GM * gm)10 GMSampleView::GMSampleView(GM* gm) : fShowSize(false), fGM(gm) {}
11 
~GMSampleView()12 GMSampleView::~GMSampleView() {
13     delete fGM;
14 }
15 
NewShowSizeEvt(bool doShowSize)16 SkEvent* GMSampleView::NewShowSizeEvt(bool doShowSize) {
17     SkEvent* evt = new SkEvent("GMSampleView::showSize");
18     evt->setFast32(doShowSize);
19     return evt;
20 }
21 
onQuery(SkEvent * evt)22 bool GMSampleView::onQuery(SkEvent* evt) {
23     if (SampleCode::TitleQ(*evt)) {
24         SkString name("GM:");
25         name.append(fGM->getName());
26         SampleCode::TitleR(evt, name.c_str());
27         return true;
28     }
29 
30     SkUnichar uni;
31     if (SampleCode::CharQ(*evt, &uni)) {
32         if (fGM->handleKey(uni)) {
33             this->inval(nullptr);
34             return true;
35         }
36     }
37 
38     return this->INHERITED::onQuery(evt);
39 }
40 
onEvent(const SkEvent & evt)41 bool GMSampleView::onEvent(const SkEvent& evt) {
42     if (evt.isType("GMSampleView::showSize")) {
43         fShowSize = SkToBool(evt.getFast32());
44         return true;
45     }
46     return this->INHERITED::onEvent(evt);
47 }
48 
49 #include "SkPicture.h"
round_trip_serialize(SkPicture * src)50 static sk_sp<SkPicture> round_trip_serialize(SkPicture* src) {
51     return SkPicture::MakeFromData(src->serialize().get());
52 }
53 
54 #include "SkPictureRecorder.h"
onDrawContent(SkCanvas * canvas)55 void GMSampleView::onDrawContent(SkCanvas* canvas) {
56     SkPictureRecorder recorder;
57     SkCanvas* origCanvas = canvas;
58 
59     if (false) {
60         SkISize size = fGM->getISize();
61         canvas = recorder.beginRecording(SkRect::MakeIWH(size.width(), size.height()));
62     }
63 
64     {
65         SkAutoCanvasRestore acr(canvas, fShowSize);
66         fGM->drawContent(canvas);
67     }
68 
69     if (origCanvas != canvas) {
70         sk_sp<SkPicture> pic = recorder.finishRecordingAsPicture();
71         if (false) {
72             pic = round_trip_serialize(pic.get());
73         }
74         origCanvas->drawPicture(pic);
75         canvas = origCanvas;
76     }
77 
78     if (fShowSize) {
79         SkISize size = fGM->getISize();
80         SkRect r = SkRect::MakeWH(SkIntToScalar(size.width()),
81                                   SkIntToScalar(size.height()));
82         SkPaint paint;
83         paint.setColor(0x40FF8833);
84         canvas->drawRect(r, paint);
85     }
86 }
87 
onDrawBackground(SkCanvas * canvas)88 void GMSampleView::onDrawBackground(SkCanvas* canvas) {
89     fGM->drawBackground(canvas);
90 }
91 
onAnimate(const SkAnimTimer & timer)92 bool GMSampleView::onAnimate(const SkAnimTimer& timer) {
93     return fGM->animate(timer);
94 }
95