blob: 3d1f2665cba5b57f924dbf273659972db2cec973 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
2/*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
bsalomon@google.com48dd1a22011-10-31 14:18:20 +00008
9
reed@android.com8a1c16f2008-12-17 15:59:43 +000010#ifndef SampleCode_DEFINED
11#define SampleCode_DEFINED
12
reed@google.comf2183392011-04-22 14:10:48 +000013#include "SkColor.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000014#include "SkEvent.h"
reed@android.comf2b98d62010-12-20 18:26:13 +000015#include "SkKey.h"
mike@reedtribe.org2eb59522011-04-22 01:59:09 +000016#include "SkView.h"
yangsu@google.com921091f2011-08-02 13:39:12 +000017class SkOSMenu;
reed@google.com3cec4d72011-07-06 13:59:47 +000018class GrContext;
19
reed@android.com8a1c16f2008-12-17 15:59:43 +000020class SampleCode {
21public:
reed@android.comf2b98d62010-12-20 18:26:13 +000022 static bool KeyQ(const SkEvent&, SkKey* outKey);
23 static bool CharQ(const SkEvent&, SkUnichar* outUni);
24
reed@android.com8a1c16f2008-12-17 15:59:43 +000025 static bool TitleQ(const SkEvent&);
26 static void TitleR(SkEvent*, const char title[]);
yangsu@google.comdb03eaa2011-08-08 15:37:23 +000027 static bool RequestTitle(SkView* view, SkString* title);
reed@android.com8a1c16f2008-12-17 15:59:43 +000028
29 static bool PrefSizeQ(const SkEvent&);
30 static void PrefSizeR(SkEvent*, SkScalar width, SkScalar height);
reed@android.comf2b98d62010-12-20 18:26:13 +000031
32 static bool FastTextQ(const SkEvent&);
33
reed@android.com44177402009-11-23 21:07:51 +000034 static SkMSec GetAnimTime();
reed@android.comf2b98d62010-12-20 18:26:13 +000035 static SkMSec GetAnimTimeDelta();
36 static SkScalar GetAnimSecondsDelta();
reed@android.com44177402009-11-23 21:07:51 +000037 static SkScalar GetAnimScalar(SkScalar speedPerSec, SkScalar period = 0);
bsalomon@google.com85003222012-03-28 14:44:37 +000038 // gives a sinusoidal value between 0 and amplitude
39 static SkScalar GetAnimSinScalar(SkScalar amplitude,
40 SkScalar periodInSec,
41 SkScalar phaseInSec = 0);
reed@google.com3cec4d72011-07-06 13:59:47 +000042
43 static GrContext* GetGr();
reed@android.com8a1c16f2008-12-17 15:59:43 +000044};
45
46//////////////////////////////////////////////////////////////////////////////
47
bsalomon@google.com48dd1a22011-10-31 14:18:20 +000048// interface that constructs SkViews
49class SkViewFactory : public SkRefCnt {
reed@android.com8a1c16f2008-12-17 15:59:43 +000050public:
bsalomon@google.com48dd1a22011-10-31 14:18:20 +000051 virtual SkView* operator() () const = 0;
52};
53
54typedef SkView* (*SkViewCreateFunc)();
55
56// wraps SkViewCreateFunc in SkViewFactory interface
57class SkFuncViewFactory : public SkViewFactory {
58public:
59 SkFuncViewFactory(SkViewCreateFunc func);
60 virtual SkView* operator() () const SK_OVERRIDE;
61
62private:
63 SkViewCreateFunc fCreateFunc;
64};
65
66namespace skiagm {
67class GM;
68}
69
70// factory function that creates a skiagm::GM
71typedef skiagm::GM* (*GMFactoryFunc)(void*);
72
73// Takes a GM factory function and implements the SkViewFactory interface
74// by making the GM and wrapping it in a GMSampleView. GMSampleView bridges
75// the SampleView interface to skiagm::GM.
76class SkGMSampleViewFactory : public SkViewFactory {
77public:
78 SkGMSampleViewFactory(GMFactoryFunc func);
79 virtual SkView* operator() () const SK_OVERRIDE;
80private:
81 GMFactoryFunc fFunc;
82};
83
84class SkViewRegister : public SkRefCnt {
85public:
86 explicit SkViewRegister(SkViewFactory*);
87 explicit SkViewRegister(SkViewCreateFunc);
88 explicit SkViewRegister(GMFactoryFunc);
89
90 ~SkViewRegister() {
91 fFact->unref();
92 }
reed@android.com8a1c16f2008-12-17 15:59:43 +000093
94 static const SkViewRegister* Head() { return gHead; }
95
96 SkViewRegister* next() const { return fChain; }
bsalomon@google.com48dd1a22011-10-31 14:18:20 +000097 const SkViewFactory* factory() const { return fFact; }
reed@android.com8a1c16f2008-12-17 15:59:43 +000098
99private:
bsalomon@google.com48dd1a22011-10-31 14:18:20 +0000100 SkViewFactory* fFact;
reed@android.com8a1c16f2008-12-17 15:59:43 +0000101 SkViewRegister* fChain;
102
103 static SkViewRegister* gHead;
104};
105
mike@reedtribe.org2eb59522011-04-22 01:59:09 +0000106///////////////////////////////////////////////////////////////////////////////
107
108class SampleView : public SkView {
109public:
epoger@google.com17b78942011-08-26 14:40:38 +0000110 SampleView() : fBGColor(SK_ColorWHITE), fRepeatCount(1) {
reed@google.com0faac1e2011-05-11 05:58:58 +0000111 fUsePipe = false;
112 }
mike@reedtribe.org2eb59522011-04-22 01:59:09 +0000113
reed@google.comf2183392011-04-22 14:10:48 +0000114 void setBGColor(SkColor color) { fBGColor = color; }
115
reed@google.coma6ff4dc2011-05-12 22:08:24 +0000116 static bool IsSampleView(SkView*);
reed@google.comf2183392011-04-22 14:10:48 +0000117 static bool SetRepeatDraw(SkView*, int count);
reed@google.com0faac1e2011-05-11 05:58:58 +0000118 static bool SetUsePipe(SkView*, bool);
yangsu@google.com921091f2011-08-02 13:39:12 +0000119
yangsu@google.comdb03eaa2011-08-08 15:37:23 +0000120 /**
121 * Call this to request menu items from a SampleView.
122 * Subclassing notes: A subclass of SampleView can overwrite this method
123 * to add new items of various types to the menu and change its title.
124 * The events attached to any new menu items must be handled in its onEvent
125 * method. See SkOSMenu.h for helper functions.
126 */
127 virtual void requestMenu(SkOSMenu* menu) {}
mike@reedtribe.org2eb59522011-04-22 01:59:09 +0000128
129protected:
130 virtual void onDrawBackground(SkCanvas*);
131 virtual void onDrawContent(SkCanvas*) = 0;
yangsu@google.com921091f2011-08-02 13:39:12 +0000132
mike@reedtribe.org2eb59522011-04-22 01:59:09 +0000133 // overrides
134 virtual bool onEvent(const SkEvent& evt);
135 virtual bool onQuery(SkEvent* evt);
yangsu@google.comdb03eaa2011-08-08 15:37:23 +0000136 virtual void draw(SkCanvas*);
mike@reedtribe.org2eb59522011-04-22 01:59:09 +0000137 virtual void onDraw(SkCanvas*);
138
yangsu@google.comdb03eaa2011-08-08 15:37:23 +0000139 bool fUsePipe;
140 SkColor fBGColor;
141
mike@reedtribe.org2eb59522011-04-22 01:59:09 +0000142private:
143 int fRepeatCount;
reed@google.com0faac1e2011-05-11 05:58:58 +0000144
mike@reedtribe.org2eb59522011-04-22 01:59:09 +0000145 typedef SkView INHERITED;
146};
147
reed@android.com8a1c16f2008-12-17 15:59:43 +0000148#endif
149