diff options
Diffstat (limited to 'chromium/third_party/skia/samplecode/SampleCode.h')
-rw-r--r-- | chromium/third_party/skia/samplecode/SampleCode.h | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/chromium/third_party/skia/samplecode/SampleCode.h b/chromium/third_party/skia/samplecode/SampleCode.h new file mode 100644 index 00000000000..26a8207ddcb --- /dev/null +++ b/chromium/third_party/skia/samplecode/SampleCode.h @@ -0,0 +1,150 @@ + +/* + * 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 |