Blender  V3.3
EventToBuf.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2001-2002 NaN Holding BV. All rights reserved. */
3 
4 #include <stdlib.h>
5 
6 #include <stdio.h>
7 
8 #include "MEM_guardedalloc.h"
9 
10 #include "EventToBuf.h"
11 #include "GHOST_C-api.h"
12 
14 {
15  switch (type) {
17  return "CursorMove";
19  return "ButtonDown";
21  return "ButtonUp";
22 
24  return "KeyDown";
25  case GHOST_kEventKeyUp:
26  return "KeyUp";
27 
29  return "Quit";
30 
32  return "WindowClose";
34  return "WindowActivate";
36  return "WindowDeactivate";
38  return "WindowUpdate";
40  return "WindowSize";
41  default:
42  return "<invalid>";
43  }
44 }
45 
46 static char *keytype_to_string(GHOST_TKey key)
47 {
48 #define K(key) \
49  case GHOST_k##key: \
50  return #key;
51  switch (key) {
52  K(KeyBackSpace);
53  K(KeyTab);
54  K(KeyLinefeed);
55  K(KeyClear);
56  K(KeyEnter);
57 
58  K(KeyEsc);
59  K(KeySpace);
60  K(KeyQuote);
61  K(KeyComma);
62  K(KeyMinus);
63  K(KeyPeriod);
64  K(KeySlash);
65 
66  K(Key0);
67  K(Key1);
68  K(Key2);
69  K(Key3);
70  K(Key4);
71  K(Key5);
72  K(Key6);
73  K(Key7);
74  K(Key8);
75  K(Key9);
76 
77  K(KeySemicolon);
78  K(KeyEqual);
79 
80  K(KeyA);
81  K(KeyB);
82  K(KeyC);
83  K(KeyD);
84  K(KeyE);
85  K(KeyF);
86  K(KeyG);
87  K(KeyH);
88  K(KeyI);
89  K(KeyJ);
90  K(KeyK);
91  K(KeyL);
92  K(KeyM);
93  K(KeyN);
94  K(KeyO);
95  K(KeyP);
96  K(KeyQ);
97  K(KeyR);
98  K(KeyS);
99  K(KeyT);
100  K(KeyU);
101  K(KeyV);
102  K(KeyW);
103  K(KeyX);
104  K(KeyY);
105  K(KeyZ);
106 
107  K(KeyLeftBracket);
108  K(KeyRightBracket);
109  K(KeyBackslash);
110  K(KeyAccentGrave);
111 
112  K(KeyLeftShift);
113  K(KeyRightShift);
114  K(KeyLeftControl);
115  K(KeyRightControl);
116  K(KeyLeftAlt);
117  K(KeyRightAlt);
118  K(KeyOS);
119 
120  K(KeyCapsLock);
121  K(KeyNumLock);
122  K(KeyScrollLock);
123 
124  K(KeyLeftArrow);
125  K(KeyRightArrow);
126  K(KeyUpArrow);
127  K(KeyDownArrow);
128 
129  K(KeyPrintScreen);
130  K(KeyPause);
131 
132  K(KeyInsert);
133  K(KeyDelete);
134  K(KeyHome);
135  K(KeyEnd);
136  K(KeyUpPage);
137  K(KeyDownPage);
138 
139  K(KeyNumpad0);
140  K(KeyNumpad1);
141  K(KeyNumpad2);
142  K(KeyNumpad3);
143  K(KeyNumpad4);
144  K(KeyNumpad5);
145  K(KeyNumpad6);
146  K(KeyNumpad7);
147  K(KeyNumpad8);
148  K(KeyNumpad9);
149  K(KeyNumpadPeriod);
150  K(KeyNumpadEnter);
151  K(KeyNumpadPlus);
152  K(KeyNumpadMinus);
153  K(KeyNumpadAsterisk);
154  K(KeyNumpadSlash);
155 
156  K(KeyF1);
157  K(KeyF2);
158  K(KeyF3);
159  K(KeyF4);
160  K(KeyF5);
161  K(KeyF6);
162  K(KeyF7);
163  K(KeyF8);
164  K(KeyF9);
165  K(KeyF10);
166  K(KeyF11);
167  K(KeyF12);
168  K(KeyF13);
169  K(KeyF14);
170  K(KeyF15);
171  K(KeyF16);
172  K(KeyF17);
173  K(KeyF18);
174  K(KeyF19);
175  K(KeyF20);
176  K(KeyF21);
177  K(KeyF22);
178  K(KeyF23);
179  K(KeyF24);
180 
181  default:
182  return "KeyUnknown";
183  }
184 #undef K
185 }
186 
187 void event_to_buf(GHOST_EventHandle evt, char buf[128])
188 {
190  double time = (double)((int64_t)GHOST_GetEventTime(evt)) / 1000;
191  GHOST_WindowHandle win = GHOST_GetEventWindow(evt);
192  void *data = GHOST_GetEventData(evt);
193  char *pos = buf;
194 
195  pos += sprintf(pos, "event: %6.2f, %16s", time, eventtype_to_string(type));
196  if (win) {
197  char *s = GHOST_GetTitle(win);
198  pos += sprintf(pos, " - win: %s", s);
199  free(s);
200  }
201  else {
202  pos += sprintf(pos, " - sys evt");
203  }
204  switch (type) {
205  case GHOST_kEventCursorMove: {
207  pos += sprintf(pos, " - pos: (%d, %d)", cd->x, cd->y);
208  break;
209  }
211  case GHOST_kEventButtonUp: {
213  pos += sprintf(pos, " - but: %d", bd->button);
214  break;
215  }
216 
217  case GHOST_kEventKeyDown:
218  case GHOST_kEventKeyUp: {
220  pos += sprintf(pos, " - key: %s (%d)", keytype_to_string(kd->key), kd->key);
221  /* TODO: ideally this would print the unicode character. */
222  if (kd->utf8_buf[0]) {
223  pos += sprintf(pos, " ascii: '%c' (%d)", kd->utf8_buf[0], kd->utf8_buf[0]);
224  }
225  break;
226  }
227  }
228 }
void BLI_kdtree_nd_() free(KDTree *tree)
Definition: kdtree_impl.h:102
typedef double(DMatrix)[4][4]
#define K(key)
void event_to_buf(GHOST_EventHandle evt, char buf[128])
Definition: EventToBuf.c:187
static char * keytype_to_string(GHOST_TKey key)
Definition: EventToBuf.c:46
char * eventtype_to_string(GHOST_TEventType type)
Definition: EventToBuf.c:13
GHOST C-API function and type declarations.
char * GHOST_GetTitle(GHOST_WindowHandle windowhandle)
uint64_t GHOST_GetEventTime(GHOST_EventHandle eventhandle)
GHOST_TEventDataPtr GHOST_GetEventData(GHOST_EventHandle eventhandle)
GHOST_TEventType GHOST_GetEventType(GHOST_EventHandle eventhandle)
GHOST_WindowHandle GHOST_GetEventWindow(GHOST_EventHandle eventhandle)
GHOST_TEventType
Definition: GHOST_Types.h:169
@ GHOST_kEventWindowClose
Definition: GHOST_Types.h:189
@ GHOST_kEventWindowSize
Definition: GHOST_Types.h:193
@ GHOST_kEventCursorMove
Definition: GHOST_Types.h:172
@ GHOST_kEventButtonUp
Definition: GHOST_Types.h:174
@ GHOST_kEventWindowActivate
Definition: GHOST_Types.h:190
@ GHOST_kEventWindowUpdate
Definition: GHOST_Types.h:192
@ GHOST_kEventWindowDeactivate
Definition: GHOST_Types.h:191
@ GHOST_kEventButtonDown
Definition: GHOST_Types.h:173
@ GHOST_kEventKeyDown
Definition: GHOST_Types.h:183
@ GHOST_kEventKeyUp
Definition: GHOST_Types.h:184
@ GHOST_kEventQuitRequest
Definition: GHOST_Types.h:187
GHOST_TKey
Definition: GHOST_Types.h:259
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
Read Guarded memory(de)allocation.
double time
uint pos
__int64 int64_t
Definition: stdint.h:89
GHOST_TButton button
Definition: GHOST_Types.h:440