Blender  V2.59
EventToBuf.c
Go to the documentation of this file.
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 }