1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2014 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker
7*8975f5c5SAndroid Build Coastguard Worker #include "OSWindow.h"
8*8975f5c5SAndroid Build Coastguard Worker
9*8975f5c5SAndroid Build Coastguard Worker #include <cstring>
10*8975f5c5SAndroid Build Coastguard Worker #include <fstream>
11*8975f5c5SAndroid Build Coastguard Worker #include <iostream>
12*8975f5c5SAndroid Build Coastguard Worker #include <sstream>
13*8975f5c5SAndroid Build Coastguard Worker
14*8975f5c5SAndroid Build Coastguard Worker #include "common/debug.h"
15*8975f5c5SAndroid Build Coastguard Worker #include "common/system_utils.h"
16*8975f5c5SAndroid Build Coastguard Worker
17*8975f5c5SAndroid Build Coastguard Worker #if defined(ANGLE_PLATFORM_ANDROID)
18*8975f5c5SAndroid Build Coastguard Worker # include "util/android/AndroidWindow.h"
19*8975f5c5SAndroid Build Coastguard Worker #endif // defined(ANGLE_PLATFORM_ANDROID)
20*8975f5c5SAndroid Build Coastguard Worker
21*8975f5c5SAndroid Build Coastguard Worker #ifndef DEBUG_EVENTS
22*8975f5c5SAndroid Build Coastguard Worker # define DEBUG_EVENTS 0
23*8975f5c5SAndroid Build Coastguard Worker #endif
24*8975f5c5SAndroid Build Coastguard Worker
25*8975f5c5SAndroid Build Coastguard Worker #if DEBUG_EVENTS
MouseButtonName(MouseButton button)26*8975f5c5SAndroid Build Coastguard Worker static const char *MouseButtonName(MouseButton button)
27*8975f5c5SAndroid Build Coastguard Worker {
28*8975f5c5SAndroid Build Coastguard Worker switch (button)
29*8975f5c5SAndroid Build Coastguard Worker {
30*8975f5c5SAndroid Build Coastguard Worker case MOUSEBUTTON_UNKNOWN:
31*8975f5c5SAndroid Build Coastguard Worker return "Unknown";
32*8975f5c5SAndroid Build Coastguard Worker case MOUSEBUTTON_LEFT:
33*8975f5c5SAndroid Build Coastguard Worker return "Left";
34*8975f5c5SAndroid Build Coastguard Worker case MOUSEBUTTON_RIGHT:
35*8975f5c5SAndroid Build Coastguard Worker return "Right";
36*8975f5c5SAndroid Build Coastguard Worker case MOUSEBUTTON_MIDDLE:
37*8975f5c5SAndroid Build Coastguard Worker return "Middle";
38*8975f5c5SAndroid Build Coastguard Worker case MOUSEBUTTON_BUTTON4:
39*8975f5c5SAndroid Build Coastguard Worker return "Button4";
40*8975f5c5SAndroid Build Coastguard Worker case MOUSEBUTTON_BUTTON5:
41*8975f5c5SAndroid Build Coastguard Worker return "Button5";
42*8975f5c5SAndroid Build Coastguard Worker default:
43*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
44*8975f5c5SAndroid Build Coastguard Worker return nullptr;
45*8975f5c5SAndroid Build Coastguard Worker }
46*8975f5c5SAndroid Build Coastguard Worker }
47*8975f5c5SAndroid Build Coastguard Worker
KeyName(Key key)48*8975f5c5SAndroid Build Coastguard Worker static const char *KeyName(Key key)
49*8975f5c5SAndroid Build Coastguard Worker {
50*8975f5c5SAndroid Build Coastguard Worker switch (key)
51*8975f5c5SAndroid Build Coastguard Worker {
52*8975f5c5SAndroid Build Coastguard Worker case KEY_UNKNOWN:
53*8975f5c5SAndroid Build Coastguard Worker return "Unknown";
54*8975f5c5SAndroid Build Coastguard Worker case KEY_A:
55*8975f5c5SAndroid Build Coastguard Worker return "A";
56*8975f5c5SAndroid Build Coastguard Worker case KEY_B:
57*8975f5c5SAndroid Build Coastguard Worker return "B";
58*8975f5c5SAndroid Build Coastguard Worker case KEY_C:
59*8975f5c5SAndroid Build Coastguard Worker return "C";
60*8975f5c5SAndroid Build Coastguard Worker case KEY_D:
61*8975f5c5SAndroid Build Coastguard Worker return "D";
62*8975f5c5SAndroid Build Coastguard Worker case KEY_E:
63*8975f5c5SAndroid Build Coastguard Worker return "E";
64*8975f5c5SAndroid Build Coastguard Worker case KEY_F:
65*8975f5c5SAndroid Build Coastguard Worker return "F";
66*8975f5c5SAndroid Build Coastguard Worker case KEY_G:
67*8975f5c5SAndroid Build Coastguard Worker return "G";
68*8975f5c5SAndroid Build Coastguard Worker case KEY_H:
69*8975f5c5SAndroid Build Coastguard Worker return "H";
70*8975f5c5SAndroid Build Coastguard Worker case KEY_I:
71*8975f5c5SAndroid Build Coastguard Worker return "I";
72*8975f5c5SAndroid Build Coastguard Worker case KEY_J:
73*8975f5c5SAndroid Build Coastguard Worker return "J";
74*8975f5c5SAndroid Build Coastguard Worker case KEY_K:
75*8975f5c5SAndroid Build Coastguard Worker return "K";
76*8975f5c5SAndroid Build Coastguard Worker case KEY_L:
77*8975f5c5SAndroid Build Coastguard Worker return "L";
78*8975f5c5SAndroid Build Coastguard Worker case KEY_M:
79*8975f5c5SAndroid Build Coastguard Worker return "M";
80*8975f5c5SAndroid Build Coastguard Worker case KEY_N:
81*8975f5c5SAndroid Build Coastguard Worker return "N";
82*8975f5c5SAndroid Build Coastguard Worker case KEY_O:
83*8975f5c5SAndroid Build Coastguard Worker return "O";
84*8975f5c5SAndroid Build Coastguard Worker case KEY_P:
85*8975f5c5SAndroid Build Coastguard Worker return "P";
86*8975f5c5SAndroid Build Coastguard Worker case KEY_Q:
87*8975f5c5SAndroid Build Coastguard Worker return "Q";
88*8975f5c5SAndroid Build Coastguard Worker case KEY_R:
89*8975f5c5SAndroid Build Coastguard Worker return "R";
90*8975f5c5SAndroid Build Coastguard Worker case KEY_S:
91*8975f5c5SAndroid Build Coastguard Worker return "S";
92*8975f5c5SAndroid Build Coastguard Worker case KEY_T:
93*8975f5c5SAndroid Build Coastguard Worker return "T";
94*8975f5c5SAndroid Build Coastguard Worker case KEY_U:
95*8975f5c5SAndroid Build Coastguard Worker return "U";
96*8975f5c5SAndroid Build Coastguard Worker case KEY_V:
97*8975f5c5SAndroid Build Coastguard Worker return "V";
98*8975f5c5SAndroid Build Coastguard Worker case KEY_W:
99*8975f5c5SAndroid Build Coastguard Worker return "W";
100*8975f5c5SAndroid Build Coastguard Worker case KEY_X:
101*8975f5c5SAndroid Build Coastguard Worker return "X";
102*8975f5c5SAndroid Build Coastguard Worker case KEY_Y:
103*8975f5c5SAndroid Build Coastguard Worker return "Y";
104*8975f5c5SAndroid Build Coastguard Worker case KEY_Z:
105*8975f5c5SAndroid Build Coastguard Worker return "Z";
106*8975f5c5SAndroid Build Coastguard Worker case KEY_NUM0:
107*8975f5c5SAndroid Build Coastguard Worker return "Num0";
108*8975f5c5SAndroid Build Coastguard Worker case KEY_NUM1:
109*8975f5c5SAndroid Build Coastguard Worker return "Num1";
110*8975f5c5SAndroid Build Coastguard Worker case KEY_NUM2:
111*8975f5c5SAndroid Build Coastguard Worker return "Num2";
112*8975f5c5SAndroid Build Coastguard Worker case KEY_NUM3:
113*8975f5c5SAndroid Build Coastguard Worker return "Num3";
114*8975f5c5SAndroid Build Coastguard Worker case KEY_NUM4:
115*8975f5c5SAndroid Build Coastguard Worker return "Num4";
116*8975f5c5SAndroid Build Coastguard Worker case KEY_NUM5:
117*8975f5c5SAndroid Build Coastguard Worker return "Num5";
118*8975f5c5SAndroid Build Coastguard Worker case KEY_NUM6:
119*8975f5c5SAndroid Build Coastguard Worker return "Num6";
120*8975f5c5SAndroid Build Coastguard Worker case KEY_NUM7:
121*8975f5c5SAndroid Build Coastguard Worker return "Num7";
122*8975f5c5SAndroid Build Coastguard Worker case KEY_NUM8:
123*8975f5c5SAndroid Build Coastguard Worker return "Num8";
124*8975f5c5SAndroid Build Coastguard Worker case KEY_NUM9:
125*8975f5c5SAndroid Build Coastguard Worker return "Num9";
126*8975f5c5SAndroid Build Coastguard Worker case KEY_ESCAPE:
127*8975f5c5SAndroid Build Coastguard Worker return "Escape";
128*8975f5c5SAndroid Build Coastguard Worker case KEY_LCONTROL:
129*8975f5c5SAndroid Build Coastguard Worker return "Left Control";
130*8975f5c5SAndroid Build Coastguard Worker case KEY_LSHIFT:
131*8975f5c5SAndroid Build Coastguard Worker return "Left Shift";
132*8975f5c5SAndroid Build Coastguard Worker case KEY_LALT:
133*8975f5c5SAndroid Build Coastguard Worker return "Left Alt";
134*8975f5c5SAndroid Build Coastguard Worker case KEY_LSYSTEM:
135*8975f5c5SAndroid Build Coastguard Worker return "Left System";
136*8975f5c5SAndroid Build Coastguard Worker case KEY_RCONTROL:
137*8975f5c5SAndroid Build Coastguard Worker return "Right Control";
138*8975f5c5SAndroid Build Coastguard Worker case KEY_RSHIFT:
139*8975f5c5SAndroid Build Coastguard Worker return "Right Shift";
140*8975f5c5SAndroid Build Coastguard Worker case KEY_RALT:
141*8975f5c5SAndroid Build Coastguard Worker return "Right Alt";
142*8975f5c5SAndroid Build Coastguard Worker case KEY_RSYSTEM:
143*8975f5c5SAndroid Build Coastguard Worker return "Right System";
144*8975f5c5SAndroid Build Coastguard Worker case KEY_MENU:
145*8975f5c5SAndroid Build Coastguard Worker return "Menu";
146*8975f5c5SAndroid Build Coastguard Worker case KEY_LBRACKET:
147*8975f5c5SAndroid Build Coastguard Worker return "Left Bracket";
148*8975f5c5SAndroid Build Coastguard Worker case KEY_RBRACKET:
149*8975f5c5SAndroid Build Coastguard Worker return "Right Bracket";
150*8975f5c5SAndroid Build Coastguard Worker case KEY_SEMICOLON:
151*8975f5c5SAndroid Build Coastguard Worker return "Semicolon";
152*8975f5c5SAndroid Build Coastguard Worker case KEY_COMMA:
153*8975f5c5SAndroid Build Coastguard Worker return "Comma";
154*8975f5c5SAndroid Build Coastguard Worker case KEY_PERIOD:
155*8975f5c5SAndroid Build Coastguard Worker return "Period";
156*8975f5c5SAndroid Build Coastguard Worker case KEY_QUOTE:
157*8975f5c5SAndroid Build Coastguard Worker return "Quote";
158*8975f5c5SAndroid Build Coastguard Worker case KEY_SLASH:
159*8975f5c5SAndroid Build Coastguard Worker return "Slash";
160*8975f5c5SAndroid Build Coastguard Worker case KEY_BACKSLASH:
161*8975f5c5SAndroid Build Coastguard Worker return "Backslash";
162*8975f5c5SAndroid Build Coastguard Worker case KEY_TILDE:
163*8975f5c5SAndroid Build Coastguard Worker return "Tilde";
164*8975f5c5SAndroid Build Coastguard Worker case KEY_EQUAL:
165*8975f5c5SAndroid Build Coastguard Worker return "Equal";
166*8975f5c5SAndroid Build Coastguard Worker case KEY_DASH:
167*8975f5c5SAndroid Build Coastguard Worker return "Dash";
168*8975f5c5SAndroid Build Coastguard Worker case KEY_SPACE:
169*8975f5c5SAndroid Build Coastguard Worker return "Space";
170*8975f5c5SAndroid Build Coastguard Worker case KEY_RETURN:
171*8975f5c5SAndroid Build Coastguard Worker return "Return";
172*8975f5c5SAndroid Build Coastguard Worker case KEY_BACK:
173*8975f5c5SAndroid Build Coastguard Worker return "Back";
174*8975f5c5SAndroid Build Coastguard Worker case KEY_TAB:
175*8975f5c5SAndroid Build Coastguard Worker return "Tab";
176*8975f5c5SAndroid Build Coastguard Worker case KEY_PAGEUP:
177*8975f5c5SAndroid Build Coastguard Worker return "Page Up";
178*8975f5c5SAndroid Build Coastguard Worker case KEY_PAGEDOWN:
179*8975f5c5SAndroid Build Coastguard Worker return "Page Down";
180*8975f5c5SAndroid Build Coastguard Worker case KEY_END:
181*8975f5c5SAndroid Build Coastguard Worker return "End";
182*8975f5c5SAndroid Build Coastguard Worker case KEY_HOME:
183*8975f5c5SAndroid Build Coastguard Worker return "Home";
184*8975f5c5SAndroid Build Coastguard Worker case KEY_INSERT:
185*8975f5c5SAndroid Build Coastguard Worker return "Insert";
186*8975f5c5SAndroid Build Coastguard Worker case KEY_DELETE:
187*8975f5c5SAndroid Build Coastguard Worker return "Delete";
188*8975f5c5SAndroid Build Coastguard Worker case KEY_ADD:
189*8975f5c5SAndroid Build Coastguard Worker return "Add";
190*8975f5c5SAndroid Build Coastguard Worker case KEY_SUBTRACT:
191*8975f5c5SAndroid Build Coastguard Worker return "Substract";
192*8975f5c5SAndroid Build Coastguard Worker case KEY_MULTIPLY:
193*8975f5c5SAndroid Build Coastguard Worker return "Multiply";
194*8975f5c5SAndroid Build Coastguard Worker case KEY_DIVIDE:
195*8975f5c5SAndroid Build Coastguard Worker return "Divide";
196*8975f5c5SAndroid Build Coastguard Worker case KEY_LEFT:
197*8975f5c5SAndroid Build Coastguard Worker return "Left";
198*8975f5c5SAndroid Build Coastguard Worker case KEY_RIGHT:
199*8975f5c5SAndroid Build Coastguard Worker return "Right";
200*8975f5c5SAndroid Build Coastguard Worker case KEY_UP:
201*8975f5c5SAndroid Build Coastguard Worker return "Up";
202*8975f5c5SAndroid Build Coastguard Worker case KEY_DOWN:
203*8975f5c5SAndroid Build Coastguard Worker return "Down";
204*8975f5c5SAndroid Build Coastguard Worker case KEY_NUMPAD0:
205*8975f5c5SAndroid Build Coastguard Worker return "Numpad 0";
206*8975f5c5SAndroid Build Coastguard Worker case KEY_NUMPAD1:
207*8975f5c5SAndroid Build Coastguard Worker return "Numpad 1";
208*8975f5c5SAndroid Build Coastguard Worker case KEY_NUMPAD2:
209*8975f5c5SAndroid Build Coastguard Worker return "Numpad 2";
210*8975f5c5SAndroid Build Coastguard Worker case KEY_NUMPAD3:
211*8975f5c5SAndroid Build Coastguard Worker return "Numpad 3";
212*8975f5c5SAndroid Build Coastguard Worker case KEY_NUMPAD4:
213*8975f5c5SAndroid Build Coastguard Worker return "Numpad 4";
214*8975f5c5SAndroid Build Coastguard Worker case KEY_NUMPAD5:
215*8975f5c5SAndroid Build Coastguard Worker return "Numpad 5";
216*8975f5c5SAndroid Build Coastguard Worker case KEY_NUMPAD6:
217*8975f5c5SAndroid Build Coastguard Worker return "Numpad 6";
218*8975f5c5SAndroid Build Coastguard Worker case KEY_NUMPAD7:
219*8975f5c5SAndroid Build Coastguard Worker return "Numpad 7";
220*8975f5c5SAndroid Build Coastguard Worker case KEY_NUMPAD8:
221*8975f5c5SAndroid Build Coastguard Worker return "Numpad 8";
222*8975f5c5SAndroid Build Coastguard Worker case KEY_NUMPAD9:
223*8975f5c5SAndroid Build Coastguard Worker return "Numpad 9";
224*8975f5c5SAndroid Build Coastguard Worker case KEY_F1:
225*8975f5c5SAndroid Build Coastguard Worker return "F1";
226*8975f5c5SAndroid Build Coastguard Worker case KEY_F2:
227*8975f5c5SAndroid Build Coastguard Worker return "F2";
228*8975f5c5SAndroid Build Coastguard Worker case KEY_F3:
229*8975f5c5SAndroid Build Coastguard Worker return "F3";
230*8975f5c5SAndroid Build Coastguard Worker case KEY_F4:
231*8975f5c5SAndroid Build Coastguard Worker return "F4";
232*8975f5c5SAndroid Build Coastguard Worker case KEY_F5:
233*8975f5c5SAndroid Build Coastguard Worker return "F5";
234*8975f5c5SAndroid Build Coastguard Worker case KEY_F6:
235*8975f5c5SAndroid Build Coastguard Worker return "F6";
236*8975f5c5SAndroid Build Coastguard Worker case KEY_F7:
237*8975f5c5SAndroid Build Coastguard Worker return "F7";
238*8975f5c5SAndroid Build Coastguard Worker case KEY_F8:
239*8975f5c5SAndroid Build Coastguard Worker return "F8";
240*8975f5c5SAndroid Build Coastguard Worker case KEY_F9:
241*8975f5c5SAndroid Build Coastguard Worker return "F9";
242*8975f5c5SAndroid Build Coastguard Worker case KEY_F10:
243*8975f5c5SAndroid Build Coastguard Worker return "F10";
244*8975f5c5SAndroid Build Coastguard Worker case KEY_F11:
245*8975f5c5SAndroid Build Coastguard Worker return "F11";
246*8975f5c5SAndroid Build Coastguard Worker case KEY_F12:
247*8975f5c5SAndroid Build Coastguard Worker return "F12";
248*8975f5c5SAndroid Build Coastguard Worker case KEY_F13:
249*8975f5c5SAndroid Build Coastguard Worker return "F13";
250*8975f5c5SAndroid Build Coastguard Worker case KEY_F14:
251*8975f5c5SAndroid Build Coastguard Worker return "F14";
252*8975f5c5SAndroid Build Coastguard Worker case KEY_F15:
253*8975f5c5SAndroid Build Coastguard Worker return "F15";
254*8975f5c5SAndroid Build Coastguard Worker case KEY_PAUSE:
255*8975f5c5SAndroid Build Coastguard Worker return "Pause";
256*8975f5c5SAndroid Build Coastguard Worker default:
257*8975f5c5SAndroid Build Coastguard Worker return "Unknown Key";
258*8975f5c5SAndroid Build Coastguard Worker }
259*8975f5c5SAndroid Build Coastguard Worker }
260*8975f5c5SAndroid Build Coastguard Worker
KeyState(const Event::KeyEvent & event)261*8975f5c5SAndroid Build Coastguard Worker static std::string KeyState(const Event::KeyEvent &event)
262*8975f5c5SAndroid Build Coastguard Worker {
263*8975f5c5SAndroid Build Coastguard Worker if (event.Shift || event.Control || event.Alt || event.System)
264*8975f5c5SAndroid Build Coastguard Worker {
265*8975f5c5SAndroid Build Coastguard Worker std::ostringstream buffer;
266*8975f5c5SAndroid Build Coastguard Worker buffer << " [";
267*8975f5c5SAndroid Build Coastguard Worker
268*8975f5c5SAndroid Build Coastguard Worker if (event.Shift)
269*8975f5c5SAndroid Build Coastguard Worker {
270*8975f5c5SAndroid Build Coastguard Worker buffer << "Shift";
271*8975f5c5SAndroid Build Coastguard Worker }
272*8975f5c5SAndroid Build Coastguard Worker if (event.Control)
273*8975f5c5SAndroid Build Coastguard Worker {
274*8975f5c5SAndroid Build Coastguard Worker buffer << "Control";
275*8975f5c5SAndroid Build Coastguard Worker }
276*8975f5c5SAndroid Build Coastguard Worker if (event.Alt)
277*8975f5c5SAndroid Build Coastguard Worker {
278*8975f5c5SAndroid Build Coastguard Worker buffer << "Alt";
279*8975f5c5SAndroid Build Coastguard Worker }
280*8975f5c5SAndroid Build Coastguard Worker if (event.System)
281*8975f5c5SAndroid Build Coastguard Worker {
282*8975f5c5SAndroid Build Coastguard Worker buffer << "System";
283*8975f5c5SAndroid Build Coastguard Worker }
284*8975f5c5SAndroid Build Coastguard Worker
285*8975f5c5SAndroid Build Coastguard Worker buffer << "]";
286*8975f5c5SAndroid Build Coastguard Worker return buffer.str();
287*8975f5c5SAndroid Build Coastguard Worker }
288*8975f5c5SAndroid Build Coastguard Worker return "";
289*8975f5c5SAndroid Build Coastguard Worker }
290*8975f5c5SAndroid Build Coastguard Worker
PrintEvent(const Event & event)291*8975f5c5SAndroid Build Coastguard Worker static void PrintEvent(const Event &event)
292*8975f5c5SAndroid Build Coastguard Worker {
293*8975f5c5SAndroid Build Coastguard Worker switch (event.Type)
294*8975f5c5SAndroid Build Coastguard Worker {
295*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_CLOSED:
296*8975f5c5SAndroid Build Coastguard Worker std::cout << "Event: Window Closed" << std::endl;
297*8975f5c5SAndroid Build Coastguard Worker break;
298*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_MOVED:
299*8975f5c5SAndroid Build Coastguard Worker std::cout << "Event: Window Moved (" << event.Move.X << ", " << event.Move.Y << ")"
300*8975f5c5SAndroid Build Coastguard Worker << std::endl;
301*8975f5c5SAndroid Build Coastguard Worker break;
302*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_RESIZED:
303*8975f5c5SAndroid Build Coastguard Worker std::cout << "Event: Window Resized (" << event.Size.Width << ", " << event.Size.Height
304*8975f5c5SAndroid Build Coastguard Worker << ")" << std::endl;
305*8975f5c5SAndroid Build Coastguard Worker break;
306*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_LOST_FOCUS:
307*8975f5c5SAndroid Build Coastguard Worker std::cout << "Event: Window Lost Focus" << std::endl;
308*8975f5c5SAndroid Build Coastguard Worker break;
309*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_GAINED_FOCUS:
310*8975f5c5SAndroid Build Coastguard Worker std::cout << "Event: Window Gained Focus" << std::endl;
311*8975f5c5SAndroid Build Coastguard Worker break;
312*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_TEXT_ENTERED:
313*8975f5c5SAndroid Build Coastguard Worker // TODO(cwallez) show the character
314*8975f5c5SAndroid Build Coastguard Worker std::cout << "Event: Text Entered" << std::endl;
315*8975f5c5SAndroid Build Coastguard Worker break;
316*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_KEY_PRESSED:
317*8975f5c5SAndroid Build Coastguard Worker std::cout << "Event: Key Pressed (" << KeyName(event.Key.Code) << KeyState(event.Key)
318*8975f5c5SAndroid Build Coastguard Worker << ")" << std::endl;
319*8975f5c5SAndroid Build Coastguard Worker break;
320*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_KEY_RELEASED:
321*8975f5c5SAndroid Build Coastguard Worker std::cout << "Event: Key Released (" << KeyName(event.Key.Code) << KeyState(event.Key)
322*8975f5c5SAndroid Build Coastguard Worker << ")" << std::endl;
323*8975f5c5SAndroid Build Coastguard Worker break;
324*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_MOUSE_WHEEL_MOVED:
325*8975f5c5SAndroid Build Coastguard Worker std::cout << "Event: Mouse Wheel (" << event.MouseWheel.Delta << ")" << std::endl;
326*8975f5c5SAndroid Build Coastguard Worker break;
327*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_MOUSE_BUTTON_PRESSED:
328*8975f5c5SAndroid Build Coastguard Worker std::cout << "Event: Mouse Button Pressed " << MouseButtonName(event.MouseButton.Button)
329*8975f5c5SAndroid Build Coastguard Worker << " at (" << event.MouseButton.X << ", " << event.MouseButton.Y << ")"
330*8975f5c5SAndroid Build Coastguard Worker << std::endl;
331*8975f5c5SAndroid Build Coastguard Worker break;
332*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_MOUSE_BUTTON_RELEASED:
333*8975f5c5SAndroid Build Coastguard Worker std::cout << "Event: Mouse Button Released "
334*8975f5c5SAndroid Build Coastguard Worker << MouseButtonName(event.MouseButton.Button) << " at (" << event.MouseButton.X
335*8975f5c5SAndroid Build Coastguard Worker << ", " << event.MouseButton.Y << ")" << std::endl;
336*8975f5c5SAndroid Build Coastguard Worker break;
337*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_MOUSE_MOVED:
338*8975f5c5SAndroid Build Coastguard Worker std::cout << "Event: Mouse Moved (" << event.MouseMove.X << ", " << event.MouseMove.Y
339*8975f5c5SAndroid Build Coastguard Worker << ")" << std::endl;
340*8975f5c5SAndroid Build Coastguard Worker break;
341*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_MOUSE_ENTERED:
342*8975f5c5SAndroid Build Coastguard Worker std::cout << "Event: Mouse Entered Window" << std::endl;
343*8975f5c5SAndroid Build Coastguard Worker break;
344*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_MOUSE_LEFT:
345*8975f5c5SAndroid Build Coastguard Worker std::cout << "Event: Mouse Left Window" << std::endl;
346*8975f5c5SAndroid Build Coastguard Worker break;
347*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_TEST:
348*8975f5c5SAndroid Build Coastguard Worker std::cout << "Event: Test" << std::endl;
349*8975f5c5SAndroid Build Coastguard Worker break;
350*8975f5c5SAndroid Build Coastguard Worker default:
351*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
352*8975f5c5SAndroid Build Coastguard Worker break;
353*8975f5c5SAndroid Build Coastguard Worker }
354*8975f5c5SAndroid Build Coastguard Worker }
355*8975f5c5SAndroid Build Coastguard Worker #endif
356*8975f5c5SAndroid Build Coastguard Worker
OSWindow()357*8975f5c5SAndroid Build Coastguard Worker OSWindow::OSWindow() : mX(0), mY(0), mWidth(0), mHeight(0), mValid(false), mIgnoreSizeEvents(false)
358*8975f5c5SAndroid Build Coastguard Worker {}
359*8975f5c5SAndroid Build Coastguard Worker
~OSWindow()360*8975f5c5SAndroid Build Coastguard Worker OSWindow::~OSWindow() {}
361*8975f5c5SAndroid Build Coastguard Worker
initialize(const std::string & name,int width,int height)362*8975f5c5SAndroid Build Coastguard Worker bool OSWindow::initialize(const std::string &name, int width, int height)
363*8975f5c5SAndroid Build Coastguard Worker {
364*8975f5c5SAndroid Build Coastguard Worker mValid = initializeImpl(name, width, height);
365*8975f5c5SAndroid Build Coastguard Worker return mValid;
366*8975f5c5SAndroid Build Coastguard Worker }
367*8975f5c5SAndroid Build Coastguard Worker
getX() const368*8975f5c5SAndroid Build Coastguard Worker int OSWindow::getX() const
369*8975f5c5SAndroid Build Coastguard Worker {
370*8975f5c5SAndroid Build Coastguard Worker return mX;
371*8975f5c5SAndroid Build Coastguard Worker }
372*8975f5c5SAndroid Build Coastguard Worker
getY() const373*8975f5c5SAndroid Build Coastguard Worker int OSWindow::getY() const
374*8975f5c5SAndroid Build Coastguard Worker {
375*8975f5c5SAndroid Build Coastguard Worker return mY;
376*8975f5c5SAndroid Build Coastguard Worker }
377*8975f5c5SAndroid Build Coastguard Worker
getWidth() const378*8975f5c5SAndroid Build Coastguard Worker int OSWindow::getWidth() const
379*8975f5c5SAndroid Build Coastguard Worker {
380*8975f5c5SAndroid Build Coastguard Worker return mWidth;
381*8975f5c5SAndroid Build Coastguard Worker }
382*8975f5c5SAndroid Build Coastguard Worker
getHeight() const383*8975f5c5SAndroid Build Coastguard Worker int OSWindow::getHeight() const
384*8975f5c5SAndroid Build Coastguard Worker {
385*8975f5c5SAndroid Build Coastguard Worker return mHeight;
386*8975f5c5SAndroid Build Coastguard Worker }
387*8975f5c5SAndroid Build Coastguard Worker
takeScreenshot(uint8_t * pixelData)388*8975f5c5SAndroid Build Coastguard Worker bool OSWindow::takeScreenshot(uint8_t *pixelData)
389*8975f5c5SAndroid Build Coastguard Worker {
390*8975f5c5SAndroid Build Coastguard Worker return false;
391*8975f5c5SAndroid Build Coastguard Worker }
392*8975f5c5SAndroid Build Coastguard Worker
getPlatformExtension()393*8975f5c5SAndroid Build Coastguard Worker void *OSWindow::getPlatformExtension()
394*8975f5c5SAndroid Build Coastguard Worker {
395*8975f5c5SAndroid Build Coastguard Worker return reinterpret_cast<void *>(getNativeWindow());
396*8975f5c5SAndroid Build Coastguard Worker }
397*8975f5c5SAndroid Build Coastguard Worker
popEvent(Event * event)398*8975f5c5SAndroid Build Coastguard Worker bool OSWindow::popEvent(Event *event)
399*8975f5c5SAndroid Build Coastguard Worker {
400*8975f5c5SAndroid Build Coastguard Worker if (mEvents.size() > 0 && event)
401*8975f5c5SAndroid Build Coastguard Worker {
402*8975f5c5SAndroid Build Coastguard Worker *event = mEvents.front();
403*8975f5c5SAndroid Build Coastguard Worker mEvents.pop_front();
404*8975f5c5SAndroid Build Coastguard Worker return true;
405*8975f5c5SAndroid Build Coastguard Worker }
406*8975f5c5SAndroid Build Coastguard Worker else
407*8975f5c5SAndroid Build Coastguard Worker {
408*8975f5c5SAndroid Build Coastguard Worker return false;
409*8975f5c5SAndroid Build Coastguard Worker }
410*8975f5c5SAndroid Build Coastguard Worker }
411*8975f5c5SAndroid Build Coastguard Worker
pushEvent(Event event)412*8975f5c5SAndroid Build Coastguard Worker void OSWindow::pushEvent(Event event)
413*8975f5c5SAndroid Build Coastguard Worker {
414*8975f5c5SAndroid Build Coastguard Worker switch (event.Type)
415*8975f5c5SAndroid Build Coastguard Worker {
416*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_MOVED:
417*8975f5c5SAndroid Build Coastguard Worker mX = event.Move.X;
418*8975f5c5SAndroid Build Coastguard Worker mY = event.Move.Y;
419*8975f5c5SAndroid Build Coastguard Worker break;
420*8975f5c5SAndroid Build Coastguard Worker case Event::EVENT_RESIZED:
421*8975f5c5SAndroid Build Coastguard Worker mWidth = event.Size.Width;
422*8975f5c5SAndroid Build Coastguard Worker mHeight = event.Size.Height;
423*8975f5c5SAndroid Build Coastguard Worker break;
424*8975f5c5SAndroid Build Coastguard Worker default:
425*8975f5c5SAndroid Build Coastguard Worker break;
426*8975f5c5SAndroid Build Coastguard Worker }
427*8975f5c5SAndroid Build Coastguard Worker
428*8975f5c5SAndroid Build Coastguard Worker mEvents.push_back(event);
429*8975f5c5SAndroid Build Coastguard Worker
430*8975f5c5SAndroid Build Coastguard Worker #if DEBUG_EVENTS
431*8975f5c5SAndroid Build Coastguard Worker PrintEvent(event);
432*8975f5c5SAndroid Build Coastguard Worker #endif
433*8975f5c5SAndroid Build Coastguard Worker }
434*8975f5c5SAndroid Build Coastguard Worker
didTestEventFire()435*8975f5c5SAndroid Build Coastguard Worker bool OSWindow::didTestEventFire()
436*8975f5c5SAndroid Build Coastguard Worker {
437*8975f5c5SAndroid Build Coastguard Worker Event topEvent;
438*8975f5c5SAndroid Build Coastguard Worker while (popEvent(&topEvent))
439*8975f5c5SAndroid Build Coastguard Worker {
440*8975f5c5SAndroid Build Coastguard Worker if (topEvent.Type == Event::EVENT_TEST)
441*8975f5c5SAndroid Build Coastguard Worker {
442*8975f5c5SAndroid Build Coastguard Worker return true;
443*8975f5c5SAndroid Build Coastguard Worker }
444*8975f5c5SAndroid Build Coastguard Worker }
445*8975f5c5SAndroid Build Coastguard Worker
446*8975f5c5SAndroid Build Coastguard Worker return false;
447*8975f5c5SAndroid Build Coastguard Worker }
448*8975f5c5SAndroid Build Coastguard Worker
449*8975f5c5SAndroid Build Coastguard Worker // static
Delete(OSWindow ** window)450*8975f5c5SAndroid Build Coastguard Worker void OSWindow::Delete(OSWindow **window)
451*8975f5c5SAndroid Build Coastguard Worker {
452*8975f5c5SAndroid Build Coastguard Worker delete *window;
453*8975f5c5SAndroid Build Coastguard Worker *window = nullptr;
454*8975f5c5SAndroid Build Coastguard Worker }
455*8975f5c5SAndroid Build Coastguard Worker
456*8975f5c5SAndroid Build Coastguard Worker namespace angle
457*8975f5c5SAndroid Build Coastguard Worker {
FindTestDataPath(const char * searchPath,char * dataPathOut,size_t maxDataPathOutLen)458*8975f5c5SAndroid Build Coastguard Worker bool FindTestDataPath(const char *searchPath, char *dataPathOut, size_t maxDataPathOutLen)
459*8975f5c5SAndroid Build Coastguard Worker {
460*8975f5c5SAndroid Build Coastguard Worker #if defined(ANGLE_PLATFORM_ANDROID)
461*8975f5c5SAndroid Build Coastguard Worker const std::string searchPaths[] = {
462*8975f5c5SAndroid Build Coastguard Worker AndroidWindow::GetExternalStorageDirectory(),
463*8975f5c5SAndroid Build Coastguard Worker AndroidWindow::GetExternalStorageDirectory() + "/third_party/angle",
464*8975f5c5SAndroid Build Coastguard Worker AndroidWindow::GetApplicationDirectory() + "/chromium_tests_root"};
465*8975f5c5SAndroid Build Coastguard Worker #elif ANGLE_PLATFORM_IOS_FAMILY
466*8975f5c5SAndroid Build Coastguard Worker const std::string searchPaths[] = {GetExecutableDirectory(),
467*8975f5c5SAndroid Build Coastguard Worker GetExecutableDirectory() + "/third_party/angle"};
468*8975f5c5SAndroid Build Coastguard Worker #else
469*8975f5c5SAndroid Build Coastguard Worker const std::string searchPaths[] = {
470*8975f5c5SAndroid Build Coastguard Worker GetExecutableDirectory(), GetExecutableDirectory() + "/../..", ".",
471*8975f5c5SAndroid Build Coastguard Worker GetExecutableDirectory() + "/../../third_party/angle", "third_party/angle"};
472*8975f5c5SAndroid Build Coastguard Worker #endif // defined(ANGLE_PLATFORM_ANDROID)
473*8975f5c5SAndroid Build Coastguard Worker
474*8975f5c5SAndroid Build Coastguard Worker for (const std::string &path : searchPaths)
475*8975f5c5SAndroid Build Coastguard Worker {
476*8975f5c5SAndroid Build Coastguard Worker std::stringstream pathStream;
477*8975f5c5SAndroid Build Coastguard Worker pathStream << path << "/" << searchPath;
478*8975f5c5SAndroid Build Coastguard Worker std::string candidatePath = pathStream.str();
479*8975f5c5SAndroid Build Coastguard Worker
480*8975f5c5SAndroid Build Coastguard Worker if (candidatePath.size() + 1 >= maxDataPathOutLen)
481*8975f5c5SAndroid Build Coastguard Worker {
482*8975f5c5SAndroid Build Coastguard Worker ERR() << "FindTestDataPath: Path too long.";
483*8975f5c5SAndroid Build Coastguard Worker return false;
484*8975f5c5SAndroid Build Coastguard Worker }
485*8975f5c5SAndroid Build Coastguard Worker
486*8975f5c5SAndroid Build Coastguard Worker if (angle::IsDirectory(candidatePath.c_str()))
487*8975f5c5SAndroid Build Coastguard Worker {
488*8975f5c5SAndroid Build Coastguard Worker memcpy(dataPathOut, candidatePath.c_str(), candidatePath.size() + 1);
489*8975f5c5SAndroid Build Coastguard Worker return true;
490*8975f5c5SAndroid Build Coastguard Worker }
491*8975f5c5SAndroid Build Coastguard Worker
492*8975f5c5SAndroid Build Coastguard Worker std::ifstream inFile(candidatePath.c_str());
493*8975f5c5SAndroid Build Coastguard Worker if (!inFile.fail())
494*8975f5c5SAndroid Build Coastguard Worker {
495*8975f5c5SAndroid Build Coastguard Worker memcpy(dataPathOut, candidatePath.c_str(), candidatePath.size() + 1);
496*8975f5c5SAndroid Build Coastguard Worker return true;
497*8975f5c5SAndroid Build Coastguard Worker }
498*8975f5c5SAndroid Build Coastguard Worker }
499*8975f5c5SAndroid Build Coastguard Worker
500*8975f5c5SAndroid Build Coastguard Worker return false;
501*8975f5c5SAndroid Build Coastguard Worker }
502*8975f5c5SAndroid Build Coastguard Worker } // namespace angle
503