| /* | |
| * Copyright 2011 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef SampleCode_DEFINED | |
| #define SampleCode_DEFINED | |
| #include "SkColor.h" | |
| #include "SkEvent.h" | |
| #include "SkKey.h" | |
| #include "SkView.h" | |
| #include "SkOSMenu.h" | |
| class GrContext; | |
| class SampleCode { | |
| public: | |
| static bool KeyQ(const SkEvent&, SkKey* outKey); | |
| static bool CharQ(const SkEvent&, SkUnichar* outUni); | |
| static bool TitleQ(const SkEvent&); | |
| static void TitleR(SkEvent*, const char title[]); | |
| static bool RequestTitle(SkView* view, SkString* title); | |
| static bool PrefSizeQ(const SkEvent&); | |
| static void PrefSizeR(SkEvent*, SkScalar width, SkScalar height); | |
| static bool FastTextQ(const SkEvent&); | |
| static SkMSec GetAnimTime(); | |
| static SkMSec GetAnimTimeDelta(); | |
| static SkScalar GetAnimSecondsDelta(); | |
| static SkScalar GetAnimScalar(SkScalar speedPerSec, SkScalar period = 0); | |
| // gives a sinusoidal value between 0 and amplitude | |
| static SkScalar GetAnimSinScalar(SkScalar amplitude, | |
| SkScalar periodInSec, | |
| SkScalar phaseInSec = 0); | |
| }; | |
| ////////////////////////////////////////////////////////////////////////////// | |
| // interface that constructs SkViews | |
| class SkViewFactory : public SkRefCnt { | |
| public: | |
| virtual SkView* operator() () const = 0; | |
| }; | |
| typedef SkView* (*SkViewCreateFunc)(); | |
| // wraps SkViewCreateFunc in SkViewFactory interface | |
| class SkFuncViewFactory : public SkViewFactory { | |
| public: | |
| SkFuncViewFactory(SkViewCreateFunc func); | |
| virtual SkView* operator() () const SK_OVERRIDE; | |
| private: | |
| SkViewCreateFunc fCreateFunc; | |
| }; | |
| namespace skiagm { | |
| class GM; | |
| } | |
| // factory function that creates a skiagm::GM | |
| typedef skiagm::GM* (*GMFactoryFunc)(void*); | |
| // Takes a GM factory function and implements the SkViewFactory interface | |
| // by making the GM and wrapping it in a GMSampleView. GMSampleView bridges | |
| // the SampleView interface to skiagm::GM. | |
| class SkGMSampleViewFactory : public SkViewFactory { | |
| public: | |
| SkGMSampleViewFactory(GMFactoryFunc func); | |
| virtual SkView* operator() () const SK_OVERRIDE; | |
| private: | |
| GMFactoryFunc fFunc; | |
| }; | |
| class SkViewRegister : public SkRefCnt { | |
| public: | |
| explicit SkViewRegister(SkViewFactory*); | |
| explicit SkViewRegister(SkViewCreateFunc); | |
| explicit SkViewRegister(GMFactoryFunc); | |
| ~SkViewRegister() { | |
| fFact->unref(); | |
| } | |
| static const SkViewRegister* Head() { return gHead; } | |
| SkViewRegister* next() const { return fChain; } | |
| const SkViewFactory* factory() const { return fFact; } | |
| private: | |
| SkViewFactory* fFact; | |
| SkViewRegister* fChain; | |
| static SkViewRegister* gHead; | |
| }; | |
| /////////////////////////////////////////////////////////////////////////////// | |
| class SampleView : public SkView { | |
| public: | |
| SampleView() | |
| : fPipeState(SkOSMenu::kOffState) | |
| , fBGColor(SK_ColorWHITE) | |
| , fRepeatCount(1) | |
| {} | |
| void setBGColor(SkColor color) { fBGColor = color; } | |
| static bool IsSampleView(SkView*); | |
| static bool SetRepeatDraw(SkView*, int count); | |
| static bool SetUsePipe(SkView*, SkOSMenu::TriState); | |
| /** | |
| * Call this to request menu items from a SampleView. | |
| * Subclassing notes: A subclass of SampleView can overwrite this method | |
| * to add new items of various types to the menu and change its title. | |
| * The events attached to any new menu items must be handled in its onEvent | |
| * method. See SkOSMenu.h for helper functions. | |
| */ | |
| virtual void requestMenu(SkOSMenu* menu) {} | |
| virtual void onTileSizeChanged(const SkSize& tileSize) {} | |
| protected: | |
| virtual void onDrawBackground(SkCanvas*); | |
| virtual void onDrawContent(SkCanvas*) = 0; | |
| // overrides | |
| virtual bool onEvent(const SkEvent& evt); | |
| virtual bool onQuery(SkEvent* evt); | |
| virtual void draw(SkCanvas*); | |
| virtual void onDraw(SkCanvas*); | |
| SkOSMenu::TriState fPipeState; | |
| SkColor fBGColor; | |
| private: | |
| int fRepeatCount; | |
| typedef SkView INHERITED; | |
| }; | |
| #endif |