xref: /aosp_15_r20/external/angle/util/OSWindow.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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