|
Blender
V2.59
|
00001 00029 #include <stdlib.h> 00030 00031 #include <stdio.h> 00032 00033 #include "MEM_guardedalloc.h" 00034 00035 #include "GHOST_C-api.h" 00036 #include "EventToBuf.h" 00037 00038 char *eventtype_to_string(GHOST_TEventType type) { 00039 switch(type) { 00040 case GHOST_kEventCursorMove: return "CursorMove"; 00041 case GHOST_kEventButtonDown: return "ButtonDown"; 00042 case GHOST_kEventButtonUp: return "ButtonUp"; 00043 00044 case GHOST_kEventKeyDown: return "KeyDown"; 00045 case GHOST_kEventKeyUp: return "KeyUp"; 00046 00047 case GHOST_kEventQuit: return "Quit"; 00048 00049 case GHOST_kEventWindowClose: return "WindowClose"; 00050 case GHOST_kEventWindowActivate: return "WindowActivate"; 00051 case GHOST_kEventWindowDeactivate: return "WindowDeactivate"; 00052 case GHOST_kEventWindowUpdate: return "WindowUpdate"; 00053 case GHOST_kEventWindowSize: return "WindowSize"; 00054 default: 00055 return "<invalid>"; 00056 } 00057 } 00058 00059 static char *keytype_to_string(GHOST_TKey key) { 00060 #define K(key) case GHOST_k##key: return #key; 00061 switch (key) { 00062 K(KeyBackSpace); 00063 K(KeyTab); 00064 K(KeyLinefeed); 00065 K(KeyClear); 00066 K(KeyEnter); 00067 00068 K(KeyEsc); 00069 K(KeySpace); 00070 K(KeyQuote); 00071 K(KeyComma); 00072 K(KeyMinus); 00073 K(KeyPeriod); 00074 K(KeySlash); 00075 00076 K(Key0); 00077 K(Key1); 00078 K(Key2); 00079 K(Key3); 00080 K(Key4); 00081 K(Key5); 00082 K(Key6); 00083 K(Key7); 00084 K(Key8); 00085 K(Key9); 00086 00087 K(KeySemicolon); 00088 K(KeyEqual); 00089 00090 K(KeyA); 00091 K(KeyB); 00092 K(KeyC); 00093 K(KeyD); 00094 K(KeyE); 00095 K(KeyF); 00096 K(KeyG); 00097 K(KeyH); 00098 K(KeyI); 00099 K(KeyJ); 00100 K(KeyK); 00101 K(KeyL); 00102 K(KeyM); 00103 K(KeyN); 00104 K(KeyO); 00105 K(KeyP); 00106 K(KeyQ); 00107 K(KeyR); 00108 K(KeyS); 00109 K(KeyT); 00110 K(KeyU); 00111 K(KeyV); 00112 K(KeyW); 00113 K(KeyX); 00114 K(KeyY); 00115 K(KeyZ); 00116 00117 K(KeyLeftBracket); 00118 K(KeyRightBracket); 00119 K(KeyBackslash); 00120 K(KeyAccentGrave); 00121 00122 K(KeyLeftShift); 00123 K(KeyRightShift); 00124 K(KeyLeftControl); 00125 K(KeyRightControl); 00126 K(KeyLeftAlt); 00127 K(KeyRightAlt); 00128 K(KeyOS); 00129 00130 K(KeyCapsLock); 00131 K(KeyNumLock); 00132 K(KeyScrollLock); 00133 00134 K(KeyLeftArrow); 00135 K(KeyRightArrow); 00136 K(KeyUpArrow); 00137 K(KeyDownArrow); 00138 00139 K(KeyPrintScreen); 00140 K(KeyPause); 00141 00142 K(KeyInsert); 00143 K(KeyDelete); 00144 K(KeyHome); 00145 K(KeyEnd); 00146 K(KeyUpPage); 00147 K(KeyDownPage); 00148 00149 K(KeyNumpad0); 00150 K(KeyNumpad1); 00151 K(KeyNumpad2); 00152 K(KeyNumpad3); 00153 K(KeyNumpad4); 00154 K(KeyNumpad5); 00155 K(KeyNumpad6); 00156 K(KeyNumpad7); 00157 K(KeyNumpad8); 00158 K(KeyNumpad9); 00159 K(KeyNumpadPeriod); 00160 K(KeyNumpadEnter); 00161 K(KeyNumpadPlus); 00162 K(KeyNumpadMinus); 00163 K(KeyNumpadAsterisk); 00164 K(KeyNumpadSlash); 00165 00166 K(KeyF1); 00167 K(KeyF2); 00168 K(KeyF3); 00169 K(KeyF4); 00170 K(KeyF5); 00171 K(KeyF6); 00172 K(KeyF7); 00173 K(KeyF8); 00174 K(KeyF9); 00175 K(KeyF10); 00176 K(KeyF11); 00177 K(KeyF12); 00178 K(KeyF13); 00179 K(KeyF14); 00180 K(KeyF15); 00181 K(KeyF16); 00182 K(KeyF17); 00183 K(KeyF18); 00184 K(KeyF19); 00185 K(KeyF20); 00186 K(KeyF21); 00187 K(KeyF22); 00188 K(KeyF23); 00189 K(KeyF24); 00190 00191 default: 00192 return "KeyUnknown"; 00193 } 00194 #undef K 00195 } 00196 00197 void event_to_buf(GHOST_EventHandle evt, char buf[128]) { 00198 GHOST_TEventType type= GHOST_GetEventType(evt); 00199 double time= (double) ((GHOST_TInt64) GHOST_GetEventTime(evt))/1000; 00200 GHOST_WindowHandle win= GHOST_GetEventWindow(evt); 00201 void *data= GHOST_GetEventData(evt); 00202 char *pos= buf; 00203 00204 pos+= sprintf(pos, "event: %6.2f, %16s", time, eventtype_to_string(type)); 00205 if (win) { 00206 char *s= GHOST_GetTitle(win); 00207 pos+= sprintf(pos, " - win: %s", s); 00208 free(s); 00209 } else { 00210 pos+= sprintf(pos, " - sys evt"); 00211 } 00212 switch (type) { 00213 case GHOST_kEventCursorMove: { 00214 GHOST_TEventCursorData *cd= data; 00215 pos+= sprintf(pos, " - pos: (%d, %d)", cd->x, cd->y); 00216 break; 00217 } 00218 case GHOST_kEventButtonDown: 00219 case GHOST_kEventButtonUp: { 00220 GHOST_TEventButtonData *bd= data; 00221 pos+= sprintf(pos, " - but: %d", bd->button); 00222 break; 00223 } 00224 00225 case GHOST_kEventKeyDown: 00226 case GHOST_kEventKeyUp: { 00227 GHOST_TEventKeyData *kd= data; 00228 pos+= sprintf(pos, " - key: %s (%d)", keytype_to_string(kd->key), kd->key); 00229 if (kd->ascii) pos+= sprintf(pos, " ascii: '%c' (%d)", kd->ascii, kd->ascii); 00230 break; 00231 } 00232 } 00233 }