1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
/*
* Copyright 2006 The Android Open Source Project
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkOSWindow_Win_DEFINED
#define SkOSWindow_Win_DEFINED
#include "../private/SkFunction.h"
#include "../private/SkTHash.h"
#include "SkWindow.h"
#if SK_ANGLE
#include "EGL/egl.h"
#endif
#if SK_COMMAND_BUFFER
class SkCommandBufferGLContext;
#endif
class SkOSWindow : public SkWindow {
public:
struct WindowInit {
const TCHAR* fClass;
HINSTANCE fInstance;
};
SkOSWindow(const void* winInit);
virtual ~SkOSWindow();
static bool PostEvent(SkEvent* evt, SkEventSinkID, SkMSec delay);
enum SkBackEndTypes {
kNone_BackEndType,
#if SK_SUPPORT_GPU
kNativeGL_BackEndType,
#if SK_ANGLE
kANGLE_BackEndType,
#endif // SK_ANGLE
#if SK_COMMAND_BUFFER
kCommandBuffer_BackEndType,
#endif // SK_COMMAND_BUFFER
#endif // SK_SUPPORT_GPU
};
bool attach(SkBackEndTypes attachType, int msaaSampleCount, AttachmentInfo*);
void detach();
void present();
bool wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
static bool QuitOnDeactivate(HWND hWnd);
enum {
SK_WM_SkEvent = WM_APP + 1000,
SK_WM_SkTimerID = 0xFFFF // just need a non-zero value
};
bool makeFullscreen();
void setVsync(bool);
void closeWindow();
static SkOSWindow* GetOSWindowForHWND(void* hwnd) {
SkOSWindow** win = gHwndToOSWindowMap.find(hwnd);
if (!win) {
return NULL;
}
return *win;
}
// Iterates SkFunction over all the SkOSWindows and their corresponding HWNDs.
// The void* argument to the SkFunction is a HWND.
static void ForAllWindows(const SkFunction<void(void*, SkOSWindow**)>& f) {
gHwndToOSWindowMap.foreach(f);
}
protected:
virtual bool quitOnDeactivate() { return true; }
// overrides from SkWindow
virtual void onHandleInval(const SkIRect&);
// overrides from SkView
virtual void onAddMenu(const SkOSMenu*);
virtual void onSetTitle(const char title[]);
private:
static SkTHashMap<void*, SkOSWindow*> gHwndToOSWindowMap;
WindowInit fWinInit;
void* fHWND;
void doPaint(void* ctx);
#if SK_SUPPORT_GPU
void* fHGLRC;
#if SK_ANGLE
EGLDisplay fDisplay;
EGLContext fContext;
EGLSurface fSurface;
EGLConfig fConfig;
#endif // SK_ANGLE
#if SK_COMMAND_BUFFER
SkCommandBufferGLContext* fCommandBuffer;
#endif // SK_COMMAND_BUFFER
#endif // SK_SUPPORT_GPU
bool fFullscreen;
struct SavedWindowState {
bool fZoomed;
LONG fStyle;
LONG fExStyle;
RECT fRect;
LONG fScreenWidth;
LONG fScreenHeight;
LONG fScreenBits;
void* fHWND;
} fSavedWindowState;
HMENU fMBar;
SkBackEndTypes fAttached;
void updateSize();
#if SK_SUPPORT_GPU
bool attachGL(int msaaSampleCount, AttachmentInfo* info);
void detachGL();
void presentGL();
#if SK_ANGLE
bool attachANGLE(int msaaSampleCount, AttachmentInfo* info);
void detachANGLE();
void presentANGLE();
#endif // SK_ANGLE
#if SK_COMMAND_BUFFER
bool attachCommandBuffer(int msaaSampleCount, AttachmentInfo* info);
void detachCommandBuffer();
void presentCommandBuffer();
#endif // SK_COMMAND_BUFFER
#endif // SK_SUPPORT_GPU
typedef SkWindow INHERITED;
};
#endif
|