• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2013 Google Inc.
3  *
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  *
8  */
9 
10 #ifndef SkExample_DEFINED
11 #define SkExample_DEFINED
12 
13 #include "SkWindow.h"
14 #include "SkTRegistry.h"
15 
16 class GrContext;
17 struct GrGLInterface;
18 class GrRenderTarget;
19 class SkCanvas;
20 class SkExampleWindow;
21 
22 class SkExample : SkNoncopyable {
23 public:
SkExample(SkExampleWindow * window)24     SkExample(SkExampleWindow* window) : fWindow(window) {}
25 
~SkExample()26     virtual ~SkExample() {}
27 
28     // Your class should override this method to do its thing.
29     virtual void draw(SkCanvas* canvas) = 0;
30 
getName()31     SkString getName() { return fName; };
32     // Use this public registry to tell the world about your sample.
33     typedef SkTRegistry<SkExample*(*)(SkExampleWindow*)> Registry;
34 
35 protected:
36     SkExampleWindow* fWindow;
37     SkString fName;
38 };
39 
40 class SkExampleWindow : public SkOSWindow {
41 public:
42     enum DeviceType {
43         kRaster_DeviceType,
44         kGPU_DeviceType,
45     };
46     SkExampleWindow(void* hwnd);
47 
48     // Changes the device type of the object.
49     bool setupBackend(DeviceType type);
50     void tearDownBackend();
51 
getDeviceType()52     DeviceType getDeviceType() const { return fType; }
53 
54 protected:
55     virtual void draw(SkCanvas* canvas) SK_OVERRIDE;
56 
57     virtual void onSizeChange() SK_OVERRIDE;
58 
59 #ifdef SK_BUILD_FOR_WIN
60     virtual void onHandleInval(const SkIRect&) SK_OVERRIDE;
61 #endif
62 
63     SkCanvas* createCanvas() SK_OVERRIDE;
64 
65 private:
66     bool findNextMatch();  // Set example to the first one that matches FLAGS_match.
67     void setupRenderTarget();
68     bool onHandleChar(SkUnichar unichar) SK_OVERRIDE;
69 
70     DeviceType fType;
71 
72     SkExample* fCurrExample;
73     const SkExample::Registry* fRegistry;
74     GrContext* fContext;
75     GrRenderTarget* fRenderTarget;
76     AttachmentInfo fAttachmentInfo;
77     const GrGLInterface* fInterface;
78 
79     typedef SkOSWindow INHERITED;
80 };
81 
82 #endif
83