|
1 /* |
|
2 * Copyright 2006 The Android Open Source Project |
|
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 #ifndef SkWindow_DEFINED |
|
9 #define SkWindow_DEFINED |
|
10 |
|
11 #include "SkView.h" |
|
12 #include "SkBitmap.h" |
|
13 #include "SkMatrix.h" |
|
14 #include "SkRegion.h" |
|
15 #include "SkEvent.h" |
|
16 #include "SkKey.h" |
|
17 #include "SkTDArray.h" |
|
18 |
|
19 #ifdef SK_BUILD_FOR_WINCEx |
|
20 #define SHOW_FPS |
|
21 #endif |
|
22 //#define USE_GX_SCREEN |
|
23 |
|
24 class SkCanvas; |
|
25 |
|
26 class SkOSMenu; |
|
27 |
|
28 class SkWindow : public SkView { |
|
29 public: |
|
30 SkWindow(); |
|
31 virtual ~SkWindow(); |
|
32 |
|
33 const SkBitmap& getBitmap() const { return fBitmap; } |
|
34 |
|
35 void setColorType(SkColorType); |
|
36 void resize(int width, int height, SkColorType = kUnknown_SkColorType); |
|
37 |
|
38 bool isDirty() const { return !fDirtyRgn.isEmpty(); } |
|
39 bool update(SkIRect* updateArea); |
|
40 // does not call through to onHandleInval(), but does force the fDirtyRgn |
|
41 // to be wide open. Call before update() to ensure we redraw everything. |
|
42 void forceInvalAll(); |
|
43 // return the bounds of the dirty/inval rgn, or [0,0,0,0] if none |
|
44 const SkIRect& getDirtyBounds() const { return fDirtyRgn.getBounds(); } |
|
45 |
|
46 bool handleClick(int x, int y, Click::State, void* owner, unsigned modi = 0); |
|
47 bool handleChar(SkUnichar); |
|
48 bool handleKey(SkKey); |
|
49 bool handleKeyUp(SkKey); |
|
50 |
|
51 void addMenu(SkOSMenu*); |
|
52 const SkTDArray<SkOSMenu*>* getMenus() { return &fMenus; } |
|
53 |
|
54 const char* getTitle() const { return fTitle.c_str(); } |
|
55 void setTitle(const char title[]); |
|
56 |
|
57 const SkMatrix& getMatrix() const { return fMatrix; } |
|
58 void setMatrix(const SkMatrix&); |
|
59 void preConcat(const SkMatrix&); |
|
60 void postConcat(const SkMatrix&); |
|
61 |
|
62 virtual SkCanvas* createCanvas(); |
|
63 |
|
64 virtual void onPDFSaved(const char title[], const char desc[], |
|
65 const char path[]) {} |
|
66 protected: |
|
67 virtual bool onEvent(const SkEvent&); |
|
68 virtual bool onDispatchClick(int x, int y, Click::State, void* owner, unsigned modi); |
|
69 // called if part of our bitmap is invalidated |
|
70 virtual void onHandleInval(const SkIRect&); |
|
71 virtual bool onHandleChar(SkUnichar); |
|
72 virtual bool onHandleKey(SkKey); |
|
73 virtual bool onHandleKeyUp(SkKey); |
|
74 virtual void onAddMenu(const SkOSMenu*) {}; |
|
75 virtual void onUpdateMenu(const SkOSMenu*) {}; |
|
76 virtual void onSetTitle(const char title[]) {} |
|
77 |
|
78 // overrides from SkView |
|
79 virtual bool handleInval(const SkRect*); |
|
80 virtual bool onGetFocusView(SkView** focus) const; |
|
81 virtual bool onSetFocusView(SkView* focus); |
|
82 |
|
83 private: |
|
84 SkColorType fColorType; |
|
85 SkBitmap fBitmap; |
|
86 SkRegion fDirtyRgn; |
|
87 |
|
88 SkTDArray<Click*> fClicks; // to track clicks |
|
89 |
|
90 SkTDArray<SkOSMenu*> fMenus; |
|
91 |
|
92 SkView* fFocusView; |
|
93 bool fWaitingOnInval; |
|
94 |
|
95 SkString fTitle; |
|
96 SkMatrix fMatrix; |
|
97 |
|
98 typedef SkView INHERITED; |
|
99 }; |
|
100 |
|
101 //////////////////////////////////////////////////////////////////////////////// |
|
102 |
|
103 #if defined(SK_BUILD_FOR_NACL) |
|
104 #include "SkOSWindow_NaCl.h" |
|
105 #elif defined(SK_BUILD_FOR_MAC) |
|
106 #include "SkOSWindow_Mac.h" |
|
107 #elif defined(SK_BUILD_FOR_WIN) |
|
108 #include "SkOSWindow_Win.h" |
|
109 #elif defined(SK_BUILD_FOR_ANDROID) |
|
110 #include "SkOSWindow_Android.h" |
|
111 #elif defined(SK_BUILD_FOR_UNIX) |
|
112 #include "SkOSWindow_Unix.h" |
|
113 #elif defined(SK_BUILD_FOR_SDL) |
|
114 #include "SkOSWindow_SDL.h" |
|
115 #elif defined(SK_BUILD_FOR_IOS) |
|
116 #include "SkOSWindow_iOS.h" |
|
117 #endif |
|
118 |
|
119 #endif |