Logo Search packages:      
Sourcecode: blender version File versions

EventToBuf.c

/**
 * $Id: EventToBuf.c,v 1.3 2002/11/25 09:53:00 mein Exp $
 * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version. The Blender
 * Foundation also sells licenses for use in proprietary software under
 * the Blender License.  See http://www.blender.org/BL/ for information
 * about this.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
 * All rights reserved.
 *
 * The Original Code is: all of this file.
 *
 * Contributor(s): none yet.
 *
 * ***** END GPL/BL DUAL LICENSE BLOCK *****
 */

#include <stdlib.h>

#include <stdio.h>

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include "MEM_guardedalloc.h"

#include "GHOST_C-api.h"
#include "EventToBuf.h"

char *eventtype_to_string(GHOST_TEventType type) {
      switch(type) {
      case GHOST_kEventCursorMove:        return "CursorMove";
      case GHOST_kEventButtonDown:        return "ButtonDown";
      case GHOST_kEventButtonUp:                return "ButtonUp";

      case GHOST_kEventKeyDown:                 return "KeyDown";
      case GHOST_kEventKeyUp:                   return "KeyUp";

      case GHOST_kEventQuit:                    return "Quit";

      case GHOST_kEventWindowClose:       return "WindowClose";
      case GHOST_kEventWindowActivate:    return "WindowActivate";      
      case GHOST_kEventWindowDeactivate:  return "WindowDeactivate";
      case GHOST_kEventWindowUpdate:            return "WindowUpdate";
      case GHOST_kEventWindowSize:        return "WindowSize";
      default:
            return "<invalid>";
      }
}

static char *keytype_to_string(GHOST_TKey key) {
#define K(key)    case GHOST_k##key:      return #key;
      switch (key) {
      K(KeyBackSpace);
      K(KeyTab);
      K(KeyLinefeed);
      K(KeyClear);
      K(KeyEnter);

      K(KeyEsc);
      K(KeySpace);
      K(KeyQuote);
      K(KeyComma);
      K(KeyMinus);
      K(KeyPeriod);
      K(KeySlash);

      K(Key0);
      K(Key1);
      K(Key2);
      K(Key3);
      K(Key4);
      K(Key5);
      K(Key6);
      K(Key7);
      K(Key8);
      K(Key9);

      K(KeySemicolon);
      K(KeyEqual);

      K(KeyA);
      K(KeyB);
      K(KeyC);
      K(KeyD);
      K(KeyE);
      K(KeyF);
      K(KeyG);
      K(KeyH);
      K(KeyI);
      K(KeyJ);
      K(KeyK);
      K(KeyL);
      K(KeyM);
      K(KeyN);
      K(KeyO);
      K(KeyP);
      K(KeyQ);
      K(KeyR);
      K(KeyS);
      K(KeyT);
      K(KeyU);
      K(KeyV);
      K(KeyW);
      K(KeyX);
      K(KeyY);
      K(KeyZ);

      K(KeyLeftBracket);
      K(KeyRightBracket);
      K(KeyBackslash);
      K(KeyAccentGrave);

      K(KeyLeftShift);
      K(KeyRightShift);
      K(KeyLeftControl);
      K(KeyRightControl);
      K(KeyLeftAlt);
      K(KeyRightAlt);
      K(KeyCommand);

      K(KeyCapsLock);
      K(KeyNumLock);
      K(KeyScrollLock);

      K(KeyLeftArrow);
      K(KeyRightArrow);
      K(KeyUpArrow);
      K(KeyDownArrow);

      K(KeyPrintScreen);
      K(KeyPause);

      K(KeyInsert);
      K(KeyDelete);
      K(KeyHome);
      K(KeyEnd);
      K(KeyUpPage);
      K(KeyDownPage);

      K(KeyNumpad0);
      K(KeyNumpad1);
      K(KeyNumpad2);
      K(KeyNumpad3);
      K(KeyNumpad4);
      K(KeyNumpad5);
      K(KeyNumpad6);
      K(KeyNumpad7);
      K(KeyNumpad8);
      K(KeyNumpad9);
      K(KeyNumpadPeriod);
      K(KeyNumpadEnter);
      K(KeyNumpadPlus);
      K(KeyNumpadMinus);
      K(KeyNumpadAsterisk);
      K(KeyNumpadSlash);

      K(KeyF1);
      K(KeyF2);
      K(KeyF3);
      K(KeyF4);
      K(KeyF5);
      K(KeyF6);
      K(KeyF7);
      K(KeyF8);
      K(KeyF9);
      K(KeyF10);
      K(KeyF11);
      K(KeyF12);
      K(KeyF13);
      K(KeyF14);
      K(KeyF15);
      K(KeyF16);
      K(KeyF17);
      K(KeyF18);
      K(KeyF19);
      K(KeyF20);
      K(KeyF21);
      K(KeyF22);
      K(KeyF23);
      K(KeyF24);
      
      default:
            return "KeyUnknown";
      }
#undef K
}

void event_to_buf(GHOST_EventHandle evt, char buf[128]) {
      GHOST_TEventType type= GHOST_GetEventType(evt);
      double time= (double) ((GHOST_TInt64) GHOST_GetEventTime(evt))/1000;
      GHOST_WindowHandle win= GHOST_GetEventWindow(evt);
      void *data= GHOST_GetEventData(evt);
      char *pos= buf;

      pos+= sprintf(pos, "event: %6.2f, %16s", time, eventtype_to_string(type));
      if (win) {
            char *s= GHOST_GetTitle(win);
            pos+= sprintf(pos, " - win: %s", s);
            free(s);
      } else {
            pos+= sprintf(pos, " - sys evt");
      }
      switch (type) {
      case GHOST_kEventCursorMove: {
            GHOST_TEventCursorData *cd= data;
            pos+= sprintf(pos, " - pos: (%d, %d)", cd->x, cd->y);
            break;
      }
      case GHOST_kEventButtonDown:
      case GHOST_kEventButtonUp: {
            GHOST_TEventButtonData *bd= data;
            pos+= sprintf(pos, " - but: %d", bd->button);
            break;
      }
      
      case GHOST_kEventKeyDown:
      case GHOST_kEventKeyUp: {
            GHOST_TEventKeyData *kd= data;
            pos+= sprintf(pos, " - key: %s (%d)", keytype_to_string(kd->key), kd->key);
            if (kd->ascii) pos+= sprintf(pos, " ascii: '%c' (%d)", kd->ascii, kd->ascii);
            break;
      }
      }
}

Generated by  Doxygen 1.6.0   Back to index