Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1121)

Side by Side Diff: tools/viewer/win/Window_win.cpp

Issue 1944413005: More refactoring for Viewer (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix up Android Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/viewer/win/Window_win.h ('k') | tools/viewer/win/main_win.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2016 Google Inc.
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 #include "Window_win.h"
9
10 #include <tchar.h>
11 #include <windows.h>
12 #include <windowsx.h>
13
14 #include "SkUtils.h"
15 #include "VulkanTestContext_win.h"
16
17 namespace sk_app {
18
19 Window* Window::CreateNativeWindow(void* platformData) {
20 HINSTANCE hInstance = (HINSTANCE)platformData;
21
22 Window_win* window = new Window_win();
23 if (!window->init(hInstance)) {
24 delete window;
25 return nullptr;
26 }
27
28 return window;
29 }
30
31 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
32
33 bool Window_win::init(HINSTANCE hInstance) {
34 fHInstance = hInstance ? hInstance : GetModuleHandle(nullptr);
35
36 WNDCLASSEX wcex;
37 // The main window class name
38 static const TCHAR gSZWindowClass[] = _T("SkiaApp");
39
40 wcex.cbSize = sizeof(WNDCLASSEX);
41
42 wcex.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
43 wcex.lpfnWndProc = WndProc;
44 wcex.cbClsExtra = 0;
45 wcex.cbWndExtra = 0;
46 wcex.hInstance = fHInstance;
47 wcex.hIcon = LoadIcon(fHInstance, (LPCTSTR)IDI_WINLOGO);
48 wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);;
49 wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
50 wcex.lpszMenuName = nullptr;
51 wcex.lpszClassName = gSZWindowClass;
52 wcex.hIconSm = LoadIcon(fHInstance, (LPCTSTR)IDI_WINLOGO);;
53
54 if (!RegisterClassEx(&wcex)) {
55 return false;
56 }
57
58 /*
59 if (fullscreen)
60 {
61 DEVMODE dmScreenSettings;
62 // If full screen set the screen to maximum size of the users desktop an d 32bit.
63 memset(&dmScreenSettings, 0, sizeof(dmScreenSettings));
64 dmScreenSettings.dmSize = sizeof(dmScreenSettings);
65 dmScreenSettings.dmPelsWidth = (unsigned long)width;
66 dmScreenSettings.dmPelsHeight = (unsigned long)height;
67 dmScreenSettings.dmBitsPerPel = 32;
68 dmScreenSettings.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT ;
69
70 // Change the display settings to full screen.
71 ChangeDisplaySettings(&dmScreenSettings, CDS_FULLSCREEN);
72
73 // Set the position of the window to the top left corner.
74 posX = posY = 0;
75 }
76 */
77 // gIsFullscreen = fullscreen;
78
79 fHWnd = CreateWindow(gSZWindowClass, nullptr, WS_OVERLAPPEDWINDOW,
80 CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, f HInstance, nullptr);
81 if (!fHWnd)
82 {
83 return false;
84 }
85
86 SetWindowLongPtr(fHWnd, GWLP_USERDATA, (LONG_PTR)this);
87
88 return true;
89 }
90
91 static Window::Key get_key(WPARAM vk) {
92 static const struct {
93 WPARAM fVK;
94 Window::Key fKey;
95 } gPair[] = {
96 { VK_BACK, Window::kBack_Key },
97 { VK_CLEAR, Window::kBack_Key },
98 { VK_RETURN, Window::kOK_Key },
99 { VK_UP, Window::kUp_Key },
100 { VK_DOWN, Window::kDown_Key },
101 { VK_LEFT, Window::kLeft_Key },
102 { VK_RIGHT, Window::kRight_Key }
103 };
104 for (size_t i = 0; i < SK_ARRAY_COUNT(gPair); i++) {
105 if (gPair[i].fVK == vk) {
106 return gPair[i].fKey;
107 }
108 }
109 return Window::kNONE_Key;
110 }
111
112 static uint32_t get_modifiers(UINT message, WPARAM wParam, LPARAM lParam) {
113 uint32_t modifiers = 0;
114
115 switch (message) {
116 case WM_UNICHAR:
117 case WM_CHAR:
118 if (0 == (lParam & (1 << 30))) {
119 modifiers |= Window::kFirstPress_ModifierKey;
120 }
121 if (lParam & (1 << 29)) {
122 modifiers |= Window::kOption_ModifierKey;
123 }
124 break;
125
126 case WM_KEYDOWN:
127 case WM_SYSKEYDOWN:
128 if (0 == (lParam & (1 << 30))) {
129 modifiers |= Window::kFirstPress_ModifierKey;
130 }
131 if (lParam & (1 << 29)) {
132 modifiers |= Window::kOption_ModifierKey;
133 }
134 break;
135
136 case WM_KEYUP:
137 case WM_SYSKEYUP:
138 if (lParam & (1 << 29)) {
139 modifiers |= Window::kOption_ModifierKey;
140 }
141 break;
142
143 case WM_LBUTTONDOWN:
144 case WM_LBUTTONUP:
145 case WM_MOUSEMOVE:
146 if (wParam & MK_CONTROL) {
147 modifiers |= Window::kControl_ModifierKey;
148 }
149 if (wParam & MK_SHIFT) {
150 modifiers |= Window::kShift_ModifierKey;
151 }
152 }
153
154 return modifiers;
155 }
156
157 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
158 {
159 PAINTSTRUCT ps;
160 HDC hdc;
161
162 Window_win* window = (Window_win*) GetWindowLongPtr(hWnd, GWLP_USERDATA);
163
164 bool eventHandled = false;
165
166 switch (message) {
167 case WM_PAINT:
168 hdc = BeginPaint(hWnd, &ps);
169 window->onPaint();
170 EndPaint(hWnd, &ps);
171 eventHandled = true;
172 break;
173
174 case WM_CLOSE:
175 case WM_DESTROY:
176 PostQuitMessage(0);
177 eventHandled = true;
178 break;
179
180 case WM_ACTIVATE:
181 // disable/enable rendering here, depending on wParam != WA_INACTIVE
182 break;
183
184 case WM_SIZE:
185 window->onResize(LOWORD(lParam), HIWORD(lParam));
186 eventHandled = true;
187 break;
188
189 case WM_UNICHAR:
190 eventHandled = window->onChar((SkUnichar)wParam,
191 get_modifiers(message, wParam, lParam) );
192 break;
193
194 case WM_CHAR: {
195 const uint16_t* c = reinterpret_cast<uint16_t*>(&wParam);
196 eventHandled = window->onChar(SkUTF16_NextUnichar(&c),
197 get_modifiers(message, wParam, lParam) );
198 } break;
199
200 case WM_KEYDOWN:
201 case WM_SYSKEYDOWN:
202 eventHandled = window->onKey(get_key(wParam), Window::kDown_InputSta te,
203 get_modifiers(message, wParam, lParam)) ;
204 break;
205
206 case WM_KEYUP:
207 case WM_SYSKEYUP:
208 eventHandled = window->onKey(get_key(wParam), Window::kUp_InputState ,
209 get_modifiers(message, wParam, lParam)) ;
210 break;
211
212 case WM_LBUTTONDOWN:
213 case WM_LBUTTONUP: {
214 int xPos = GET_X_LPARAM(lParam);
215 int yPos = GET_Y_LPARAM(lParam);
216
217 //if (!gIsFullscreen)
218 //{
219 // RECT rc = { 0, 0, 640, 480 };
220 // AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);
221 // xPos -= rc.left;
222 // yPos -= rc.top;
223 //}
224
225 Window::InputState istate = ((wParam & MK_LBUTTON) != 0) ? Window::k Down_InputState
226 : Window::k Up_InputState;
227
228 eventHandled = window->onMouse(xPos, yPos, istate,
229 get_modifiers(message, wParam, lPara m));
230 } break;
231
232 case WM_MOUSEMOVE:
233 // only track if left button is down
234 if ((wParam & MK_LBUTTON) != 0) {
235 int xPos = GET_X_LPARAM(lParam);
236 int yPos = GET_Y_LPARAM(lParam);
237
238 //if (!gIsFullscreen)
239 //{
240 // RECT rc = { 0, 0, 640, 480 };
241 // AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE);
242 // xPos -= rc.left;
243 // yPos -= rc.top;
244 //}
245
246 eventHandled = window->onMouse(xPos, yPos, Window::kMove_InputSt ate,
247 get_modifiers(message, wParam, lP aram));
248 }
249 break;
250
251 default:
252 return DefWindowProc(hWnd, message, wParam, lParam);
253 }
254
255 return eventHandled ? 0 : 1;
256 }
257
258 void Window_win::setTitle(const char* title) {
259 SetWindowTextA(fHWnd, title);
260 }
261
262 void Window_win::show() {
263 ShowWindow(fHWnd, SW_SHOW);
264 }
265
266
267 bool Window_win::attach(BackEndType attachType, int msaaSampleCount) {
268 if (kVulkan_BackendType != attachType) {
269 return false;
270 }
271
272 ContextPlatformData_win platformData;
273 platformData.fHInstance = fHInstance;
274 platformData.fHWnd = fHWnd;
275
276 fTestContext = VulkanTestContext::Create((void*)&platformData, msaaSampleCou nt);
277
278 return (SkToBool(fTestContext));
279 }
280
281 void Window_win::inval() {
282 InvalidateRect(fHWnd, nullptr, false);
283 }
284
285 } // namespace sk_app
OLDNEW
« no previous file with comments | « tools/viewer/win/Window_win.h ('k') | tools/viewer/win/main_win.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698