1 /* 2 * Copyright 2016 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 "SampleCode.h" 9 #include "SkCanvas.h" 10 #include "SkString.h" 11 12 #if SK_SUPPORT_GPU 13 # include "GrContext.h" 14 #else 15 class GrContext; 16 #endif 17 18 ////////////////////////////////////////////////////////////////////////////// 19 CharQ(const SkEvent & evt,SkUnichar * outUni)20bool SampleCode::CharQ(const SkEvent& evt, SkUnichar* outUni) { 21 if (evt.isType(gCharEvtName)) { 22 if (outUni) { 23 *outUni = evt.getFast32(); 24 } 25 return true; 26 } 27 return false; 28 } 29 TitleQ(const SkEvent & evt)30bool SampleCode::TitleQ(const SkEvent& evt) { 31 return evt.isType(gTitleEvtName); 32 } 33 TitleR(SkEvent * evt,const char title[])34void SampleCode::TitleR(SkEvent* evt, const char title[]) { 35 SkASSERT(evt && TitleQ(*evt)); 36 evt->setString(gTitleEvtName, title); 37 } 38 RequestTitle(SkView * view,SkString * title)39bool SampleCode::RequestTitle(SkView* view, SkString* title) { 40 SkEvent evt(gTitleEvtName); 41 if (view->doQuery(&evt)) { 42 title->set(evt.findString(gTitleEvtName)); 43 return true; 44 } 45 return false; 46 } 47 48 SkViewRegister* SkViewRegister::gHead; SkViewRegister(SkViewFactory * fact)49SkViewRegister::SkViewRegister(SkViewFactory* fact) : fFact(fact) { 50 fFact->ref(); 51 fChain = gHead; 52 gHead = this; 53 } 54 55 /////////////////////////////////////////////////////////////////////////////// 56 SkFuncViewFactory(SkViewCreateFunc func)57SkFuncViewFactory::SkFuncViewFactory(SkViewCreateFunc func) 58 : fCreateFunc(func) { 59 } 60 operator ()() const61SkView* SkFuncViewFactory::operator() () const { 62 return (*fCreateFunc)(); 63 } 64 SkViewRegister(SkViewCreateFunc func)65SkViewRegister::SkViewRegister(SkViewCreateFunc func) { 66 fFact = new SkFuncViewFactory(func); 67 fChain = gHead; 68 gHead = this; 69 } 70 71 /////////////////////////////////////////////////////////////////////////////// 72 73 static const char is_sample_view_tag[] = "sample-is-sample-view"; 74 IsSampleView(SkView * view)75bool SampleView::IsSampleView(SkView* view) { 76 SkEvent evt(is_sample_view_tag); 77 return view->doQuery(&evt); 78 } 79 onQuery(SkEvent * evt)80bool SampleView::onQuery(SkEvent* evt) { 81 if (evt->isType(is_sample_view_tag)) { 82 return true; 83 } 84 return this->INHERITED::onQuery(evt); 85 } 86 onDraw(SkCanvas * canvas)87void SampleView::onDraw(SkCanvas* canvas) { 88 if (!fHaveCalledOnceBeforeDraw) { 89 fHaveCalledOnceBeforeDraw = true; 90 this->onOnceBeforeDraw(); 91 } 92 this->onDrawBackground(canvas); 93 94 SkAutoCanvasRestore acr(canvas, true); 95 this->onDrawContent(canvas); 96 #if SK_SUPPORT_GPU 97 // Ensure the GrContext doesn't combine GrDrawOps across draw loops. 98 if (GrContext* context = canvas->getGrContext()) { 99 context->flush(); 100 } 101 #endif 102 } 103 onDrawBackground(SkCanvas * canvas)104void SampleView::onDrawBackground(SkCanvas* canvas) { 105 canvas->drawColor(fBGColor); 106 } 107 108