Blender V4.3
GHOST_EventPrinter.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
10#include "GHOST_EventPrinter.hh"
11#include "GHOST_Debug.hh"
13#include "GHOST_EventKey.hh"
14
15#include <iomanip>
16#include <iostream>
17
18#include <cstdio>
19
20/* For now only used with NDOF. */
21#ifdef WITH_INPUT_NDOF
22static const char *getButtonActionString(const GHOST_TButtonAction action)
23{
24 switch (action) {
25 case GHOST_kPress:
26 return "Press";
27 case GHOST_kRelease:
28 return "Release";
29 }
30 return "Unknown";
31}
32#endif /* WITH_INPUT_NDOF */
33
35{
36 bool handled = false;
37
38 GHOST_ASSERT(event, "event==0");
39
40 if (event->getType() == GHOST_kEventWindowUpdate) {
41 return false;
42 }
43
44 GHOST_TEventDataPtr data = event->getData();
45
46 std::cout << "GHOST_EventPrinter::processEvent, time: " << int32_t(event->getTime())
47 << ", type: ";
48
49#define CASE_TYPE(ty) \
50 case ty: { \
51 std::cout << #ty; \
52 handled = true; \
53 break; \
54 } \
55 ((void)0)
56
57 const GHOST_TEventType event_type = event->getType();
58 switch (event_type) {
60 std::cout << "GHOST_kEventUnknown";
61 handled = false;
62 break;
63 }
65 const GHOST_TEventCursorData *cursorData = static_cast<const GHOST_TEventCursorData *>(data);
66 std::cout << "GHOST_kEventCursorMove, (x,y): (" << cursorData->x << "," << cursorData->y
67 << ")";
68 handled = true;
69 break;
70 }
72 const GHOST_TEventButtonData *buttonData = static_cast<const GHOST_TEventButtonData *>(data);
73 std::cout << "GHOST_kEventButtonDown, button: " << buttonData->button;
74 handled = true;
75 break;
76 }
78 const GHOST_TEventButtonData *buttonData = static_cast<const GHOST_TEventButtonData *>(data);
79 std::cout << "GHOST_kEventCursorButtonUp, button: " << buttonData->button;
80 handled = true;
81 break;
82 }
83 case GHOST_kEventWheel: {
84 const GHOST_TEventWheelData *wheelData = static_cast<const GHOST_TEventWheelData *>(data);
85 std::cout << "GHOST_kEventWheel, z: " << wheelData->z;
86 handled = true;
87 break;
88 }
89
91
92#ifdef WITH_INPUT_NDOF
93 case GHOST_kEventNDOFMotion: {
94 const GHOST_TEventNDOFMotionData *ndof_motion =
95 static_cast<const GHOST_TEventNDOFMotionData *>(data);
96 std::cout << "GHOST_kEventNDOFMotion: ";
97 std::cout << std::fixed << std::setprecision(2) <<
98 /* Translation. */
99 "tx=" << ndof_motion->tx << " ty=" << ndof_motion->tx << " tz=" << ndof_motion->tz <<
100 /* Rotation. */
101 "rx=" << ndof_motion->rx << " ry=" << ndof_motion->ry << " rz=" << ndof_motion->rz;
102 std::cout << std::fixed << std::setprecision(4) << " dt=" << ndof_motion->dt;
103 handled = true;
104 break;
105 }
106 case GHOST_kEventNDOFButton: {
107 const GHOST_TEventNDOFButtonData *ndof_button =
108 static_cast<const GHOST_TEventNDOFButtonData *>(data);
109 std::cout << "GHOST_kEventNDOFButton: " << getButtonActionString(ndof_button->action)
110 << " button=" << ndof_button->button;
111 handled = true;
112 break;
113 }
114#endif /* WITH_INPUT_NDOF */
115
116 case GHOST_kEventKeyDown: {
117 const GHOST_TEventKeyData *keyData = static_cast<const GHOST_TEventKeyData *>(data);
118 std::cout << "GHOST_kEventKeyDown, key: " << getKeyString(keyData->key);
119 handled = true;
120 break;
121 }
122 case GHOST_kEventKeyUp: {
123 const GHOST_TEventKeyData *keyData = static_cast<const GHOST_TEventKeyData *>(data);
124 std::cout << "GHOST_kEventKeyUp, key: " << getKeyString(keyData->key);
125 handled = true;
126 break;
127 }
128
138
140 const GHOST_TEventDragnDropData *dragnDropData =
141 static_cast<const GHOST_TEventDragnDropData *>(data);
142 std::cout << "GHOST_kEventDraggingEntered, dragged object type : "
143 << dragnDropData->dataType;
144 std::cout << " mouse at x=" << dragnDropData->x << " y=" << dragnDropData->y;
145 handled = true;
146 break;
147 }
149 const GHOST_TEventDragnDropData *dragnDropData =
150 static_cast<const GHOST_TEventDragnDropData *>(data);
151 std::cout << "GHOST_kEventDraggingUpdated, dragged object type : "
152 << dragnDropData->dataType;
153 std::cout << " mouse at x=" << dragnDropData->x << " y=" << dragnDropData->y;
154 handled = true;
155 break;
156 }
158 const GHOST_TEventDragnDropData *dragnDropData =
159 static_cast<const GHOST_TEventDragnDropData *>(data);
160 std::cout << "GHOST_kEventDraggingExited, dragged object type : " << dragnDropData->dataType;
161 handled = true;
162 break;
163 }
165 const GHOST_TEventDragnDropData *dragnDropData =
166 static_cast<const GHOST_TEventDragnDropData *>(data);
167 std::cout << "GHOST_kEventDraggingDropDone,";
168 std::cout << " mouse at x=" << dragnDropData->x << " y=" << dragnDropData->y;
169 switch (dragnDropData->dataType) {
171 std::cout << " type : GHOST_kDragnDropTypeString,";
172 std::cout << "\n String received = " << (char *)dragnDropData->data;
173 break;
174 }
176 GHOST_TStringArray *strArray = (GHOST_TStringArray *)dragnDropData->data;
177 int i;
178 std::cout << " type : GHOST_kDragnDropTypeFilenames,";
179 std::cout << "\n Received " << strArray->count << " filename"
180 << (strArray->count > 1 ? "s:" : ":");
181 for (i = 0; i < strArray->count; i++) {
182 std::cout << "\n File[" << i << "] : " << strArray->strings[i];
183 }
184 break;
185 }
186 default: {
187 break;
188 }
189 }
190 handled = true;
191 break;
192 }
194 if (data) {
195 std::cout << "GHOST_kEventOpenMainFile for path: " << static_cast<const char *>(data);
196 }
197 else {
198 std::cout << "GHOST_kEventOpenMainFile with no path specified!!";
199 }
200 handled = true;
201 break;
202 }
203
205
209 }
210
211#undef CASE_TYPE
212
213 if ((handled == false) && event_type != GHOST_kEventUnknown) {
214 std::cout << "not found";
215 }
216
217 std::cout << std::endl;
218
219 std::cout.flush();
220
221 return handled;
222}
223
225{
226 const char *tstr = nullptr;
227
228#define CASE_KEY(k, v) \
229 case k: { \
230 tstr = v; \
231 break; \
232 }
233
234 switch (key) {
235 CASE_KEY(GHOST_kKeyBackSpace, "BackSpace");
236 CASE_KEY(GHOST_kKeyTab, "Tab");
237 CASE_KEY(GHOST_kKeyLinefeed, "Linefeed");
238 CASE_KEY(GHOST_kKeyClear, "Clear");
239 CASE_KEY(GHOST_kKeyEnter, "Enter");
240 CASE_KEY(GHOST_kKeyEsc, "Esc");
241 CASE_KEY(GHOST_kKeySpace, "Space");
242 CASE_KEY(GHOST_kKeyQuote, "Quote");
245 CASE_KEY(GHOST_kKeyLeftShift, "LeftShift");
246 CASE_KEY(GHOST_kKeyRightShift, "RightShift");
247 CASE_KEY(GHOST_kKeyLeftControl, "LeftControl");
248 CASE_KEY(GHOST_kKeyRightControl, "RightControl");
249 CASE_KEY(GHOST_kKeyLeftAlt, "LeftAlt");
250 CASE_KEY(GHOST_kKeyRightAlt, "RightAlt");
251 CASE_KEY(GHOST_kKeyLeftOS, "LeftOS");
252 CASE_KEY(GHOST_kKeyRightOS, "RightOS");
253 CASE_KEY(GHOST_kKeyApp, "App");
254 CASE_KEY(GHOST_kKeyGrLess, "GrLess");
255 CASE_KEY(GHOST_kKeyCapsLock, "CapsLock");
256 CASE_KEY(GHOST_kKeyNumLock, "NumLock");
257 CASE_KEY(GHOST_kKeyScrollLock, "ScrollLock");
258 CASE_KEY(GHOST_kKeyLeftArrow, "LeftArrow");
259 CASE_KEY(GHOST_kKeyRightArrow, "RightArrow");
260 CASE_KEY(GHOST_kKeyUpArrow, "UpArrow");
261 CASE_KEY(GHOST_kKeyDownArrow, "DownArrow");
262 CASE_KEY(GHOST_kKeyPrintScreen, "PrintScreen");
263 CASE_KEY(GHOST_kKeyPause, "Pause");
264 CASE_KEY(GHOST_kKeyInsert, "Insert");
265 CASE_KEY(GHOST_kKeyDelete, "Delete");
266 CASE_KEY(GHOST_kKeyHome, "Home");
267 CASE_KEY(GHOST_kKeyEnd, "End");
268 CASE_KEY(GHOST_kKeyUpPage, "UpPage");
269 CASE_KEY(GHOST_kKeyDownPage, "DownPage");
270 CASE_KEY(GHOST_kKeyNumpadPeriod, "NumpadPeriod");
271 CASE_KEY(GHOST_kKeyNumpadEnter, "NumpadEnter");
272 CASE_KEY(GHOST_kKeyNumpadPlus, "NumpadPlus");
273 CASE_KEY(GHOST_kKeyNumpadMinus, "NumpadMinus");
274 CASE_KEY(GHOST_kKeyNumpadAsterisk, "NumpadAsterisk");
275 CASE_KEY(GHOST_kKeyNumpadSlash, "NumpadSlash");
276 CASE_KEY(GHOST_kKeyMediaPlay, "MediaPlayPause");
277 CASE_KEY(GHOST_kKeyMediaStop, "MediaStop");
278 CASE_KEY(GHOST_kKeyMediaFirst, "MediaFirst");
279 CASE_KEY(GHOST_kKeyMediaLast, "MediaLast");
280 CASE_KEY(GHOST_kKeyNumpad0, "Numpad 0");
281 CASE_KEY(GHOST_kKeyNumpad1, "Numpad 1");
282 CASE_KEY(GHOST_kKeyNumpad2, "Numpad 2");
283 CASE_KEY(GHOST_kKeyNumpad3, "Numpad 3");
284 CASE_KEY(GHOST_kKeyNumpad4, "Numpad 4");
285 CASE_KEY(GHOST_kKeyNumpad5, "Numpad 5");
286 CASE_KEY(GHOST_kKeyNumpad6, "Numpad 6");
287 CASE_KEY(GHOST_kKeyNumpad7, "Numpad 7");
288 CASE_KEY(GHOST_kKeyNumpad8, "Numpad 8");
289 CASE_KEY(GHOST_kKeyNumpad9, "Numpad 9");
290
291 CASE_KEY(GHOST_kKeyF1, "F1");
292 CASE_KEY(GHOST_kKeyF2, "F2");
293 CASE_KEY(GHOST_kKeyF3, "F3");
294 CASE_KEY(GHOST_kKeyF4, "F4");
295 CASE_KEY(GHOST_kKeyF5, "F5");
296 CASE_KEY(GHOST_kKeyF6, "F6");
297 CASE_KEY(GHOST_kKeyF7, "F7");
298 CASE_KEY(GHOST_kKeyF8, "F8");
299 CASE_KEY(GHOST_kKeyF9, "F9");
300 CASE_KEY(GHOST_kKeyF10, "F10");
301 CASE_KEY(GHOST_kKeyF11, "F11");
302 CASE_KEY(GHOST_kKeyF12, "F12");
303 CASE_KEY(GHOST_kKeyF13, "F13");
304 CASE_KEY(GHOST_kKeyF14, "F14");
305 CASE_KEY(GHOST_kKeyF15, "F15");
306 CASE_KEY(GHOST_kKeyF16, "F16");
307 CASE_KEY(GHOST_kKeyF17, "F17");
308 CASE_KEY(GHOST_kKeyF18, "F18");
309 CASE_KEY(GHOST_kKeyF19, "F19");
310 CASE_KEY(GHOST_kKeyF20, "F20");
311 CASE_KEY(GHOST_kKeyF21, "F21");
312 CASE_KEY(GHOST_kKeyF22, "F22");
313 CASE_KEY(GHOST_kKeyF23, "F23");
314 CASE_KEY(GHOST_kKeyF24, "F24");
315
316 CASE_KEY(GHOST_kKeyUnknown, "Unknown");
317
323 CASE_KEY(GHOST_kKey0, "0");
324 CASE_KEY(GHOST_kKey1, "1");
325 CASE_KEY(GHOST_kKey2, "2");
326 CASE_KEY(GHOST_kKey3, "3");
327 CASE_KEY(GHOST_kKey4, "4");
328 CASE_KEY(GHOST_kKey5, "5");
329 CASE_KEY(GHOST_kKey6, "6");
330 CASE_KEY(GHOST_kKey7, "7");
331 CASE_KEY(GHOST_kKey8, "8");
332 CASE_KEY(GHOST_kKey9, "9");
335 CASE_KEY(GHOST_kKeyA, "A");
336 CASE_KEY(GHOST_kKeyB, "B");
337 CASE_KEY(GHOST_kKeyC, "C");
338 CASE_KEY(GHOST_kKeyD, "D");
339 CASE_KEY(GHOST_kKeyE, "E");
340 CASE_KEY(GHOST_kKeyF, "F");
341 CASE_KEY(GHOST_kKeyG, "G");
342 CASE_KEY(GHOST_kKeyH, "H");
343 CASE_KEY(GHOST_kKeyI, "I");
344 CASE_KEY(GHOST_kKeyJ, "J");
345 CASE_KEY(GHOST_kKeyK, "K");
346 CASE_KEY(GHOST_kKeyL, "L");
347 CASE_KEY(GHOST_kKeyM, "M");
348 CASE_KEY(GHOST_kKeyN, "N");
349 CASE_KEY(GHOST_kKeyO, "O");
350 CASE_KEY(GHOST_kKeyP, "P");
351 CASE_KEY(GHOST_kKeyQ, "Q");
352 CASE_KEY(GHOST_kKeyR, "R");
353 CASE_KEY(GHOST_kKeyS, "S");
354 CASE_KEY(GHOST_kKeyT, "T");
355 CASE_KEY(GHOST_kKeyU, "U");
356 CASE_KEY(GHOST_kKeyV, "V");
357 CASE_KEY(GHOST_kKeyW, "W");
358 CASE_KEY(GHOST_kKeyX, "X");
359 CASE_KEY(GHOST_kKeyY, "Y");
360 CASE_KEY(GHOST_kKeyZ, "Z");
363 }
364
365#undef CASE_KEY
366
367 /* Shouldn't happen (the value is not known to #GHOST_TKey). */
368 if (tstr == nullptr) {
369 tstr = "Invalid";
370 }
371 return tstr;
372}
#define GHOST_ASSERT(x, info)
#define CASE_KEY(k, v)
#define CASE_TYPE(ty)
GHOST_TEventType
@ GHOST_kEventWindowClose
@ GHOST_kEventWheel
@ GHOST_kEventWindowMove
@ GHOST_kEventWindowSize
@ GHOST_kEventDraggingDropDone
@ GHOST_kEventDraggingExited
@ GHOST_kEventNativeResolutionChange
@ GHOST_kEventImeComposition
@ GHOST_kEventCursorMove
@ GHOST_kEventDraggingUpdated
@ GHOST_kEventOpenMainFile
@ GHOST_kEventDraggingEntered
@ GHOST_kEventButtonUp
@ GHOST_kEventWindowActivate
@ GHOST_kEventWindowUpdateDecor
@ GHOST_kEventTrackpad
@ GHOST_kEventWindowUpdate
@ GHOST_kEventWindowDeactivate
@ GHOST_kEventButtonDown
@ GHOST_kEventKeyDown
@ GHOST_kEventImeCompositionStart
@ GHOST_kEventImeCompositionEnd
@ GHOST_kEventWindowDPIHintChanged
@ GHOST_kEventUnknown
@ GHOST_kEventKeyUp
@ GHOST_kEventQuitRequest
GHOST_TKey
@ GHOST_kKeyLeftOS
@ GHOST_kKeyInsert
@ GHOST_kKeySemicolon
@ GHOST_kKey5
@ GHOST_kKeyMediaPlay
@ GHOST_kKeyZ
@ GHOST_kKeyQuote
@ GHOST_kKey4
@ GHOST_kKeyT
@ GHOST_kKeyNumpad3
@ GHOST_kKeyAccentGrave
@ GHOST_kKeyNumpad1
@ GHOST_kKeyW
@ GHOST_kKeyLeftAlt
@ GHOST_kKey3
@ GHOST_kKeyG
@ GHOST_kKeyF23
@ GHOST_kKeyF9
@ GHOST_kKeyC
@ GHOST_kKeyRightShift
@ GHOST_kKeyNumLock
@ GHOST_kKeyI
@ GHOST_kKeyEnter
@ GHOST_kKeyF20
@ GHOST_kKeyP
@ GHOST_kKeyJ
@ GHOST_kKeyNumpadSlash
@ GHOST_kKeyRightArrow
@ GHOST_kKeyF13
@ GHOST_kKeyF6
@ GHOST_kKeyNumpad4
@ GHOST_kKeyF11
@ GHOST_kKeyR
@ GHOST_kKeyF24
@ GHOST_kKeyN
@ GHOST_kKeyPause
@ GHOST_kKeyCapsLock
@ GHOST_kKeyApp
@ GHOST_kKeyMinus
@ GHOST_kKeyO
@ GHOST_kKey6
@ GHOST_kKeyMediaStop
@ GHOST_kKeyBackSpace
@ GHOST_kKey0
@ GHOST_kKeyF5
@ GHOST_kKeyF19
@ GHOST_kKeyDownPage
@ GHOST_kKeyGrLess
@ GHOST_kKeyDownArrow
@ GHOST_kKeyRightOS
@ GHOST_kKeyQ
@ GHOST_kKeyClear
@ GHOST_kKeyNumpadPeriod
@ GHOST_kKeyF12
@ GHOST_kKeyF1
@ GHOST_kKeyF
@ GHOST_kKeyU
@ GHOST_kKeyNumpadAsterisk
@ GHOST_kKeyF22
@ GHOST_kKeyB
@ GHOST_kKeyPrintScreen
@ GHOST_kKeyLeftControl
@ GHOST_kKeyLeftBracket
@ GHOST_kKey1
@ GHOST_kKeyM
@ GHOST_kKeyTab
@ GHOST_kKey8
@ GHOST_kKeyComma
@ GHOST_kKeyRightBracket
@ GHOST_kKeyBackslash
@ GHOST_kKeyLinefeed
@ GHOST_kKeyNumpad2
@ GHOST_kKeyX
@ GHOST_kKeyL
@ GHOST_kKeyRightAlt
@ GHOST_kKeyY
@ GHOST_kKeyPeriod
@ GHOST_kKeyNumpadPlus
@ GHOST_kKeyUpPage
@ GHOST_kKey9
@ GHOST_kKeyNumpad5
@ GHOST_kKeyLeftArrow
@ GHOST_kKeyF17
@ GHOST_kKeyD
@ GHOST_kKeyEqual
@ GHOST_kKey7
@ GHOST_kKeyS
@ GHOST_kKeyF8
@ GHOST_kKeyF18
@ GHOST_kKeyHome
@ GHOST_kKeyNumpad6
@ GHOST_kKeyF14
@ GHOST_kKeyNumpad8
@ GHOST_kKeyNumpad9
@ GHOST_kKeyF15
@ GHOST_kKeyEnd
@ GHOST_kKeyUpArrow
@ GHOST_kKeyH
@ GHOST_kKeyDelete
@ GHOST_kKeyF16
@ GHOST_kKeyNumpad0
@ GHOST_kKeyA
@ GHOST_kKey2
@ GHOST_kKeyMediaFirst
@ GHOST_kKeyK
@ GHOST_kKeyNumpad7
@ GHOST_kKeyRightControl
@ GHOST_kKeyEsc
@ GHOST_kKeyPlus
@ GHOST_kKeyUnknown
@ GHOST_kKeyScrollLock
@ GHOST_kKeySlash
@ GHOST_kKeyV
@ GHOST_kKeyF7
@ GHOST_kKeyNumpadEnter
@ GHOST_kKeyNumpadMinus
@ GHOST_kKeyF10
@ GHOST_kKeyLeftShift
@ GHOST_kKeyF3
@ GHOST_kKeyF2
@ GHOST_kKeyMediaLast
@ GHOST_kKeyF4
@ GHOST_kKeyE
@ GHOST_kKeySpace
@ GHOST_kKeyF21
const void * GHOST_TEventDataPtr
@ GHOST_kDragnDropTypeFilenames
@ GHOST_kDragnDropTypeString
bool processEvent(const GHOST_IEvent *event)
const char * getKeyString(GHOST_TKey key) const
virtual GHOST_TEventType getType() const =0
virtual uint64_t getTime() const =0
signed int int32_t
Definition stdint.h:77
GHOST_TDragnDropTypes dataType
GHOST_TDragnDropDataPtr data