/**
 * projectM -- Milkdrop-esque visualisation SDK
 * Copyright (C)2003-2004 projectM Team
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 * See 'LICENSE.txt' included within this release
 *
 */
/**
 * $Id: event.h,v 1.2 2004/10/08 10:54:27 cvs Exp $
 *
 * projectM keycodes. Enables translation from various event schemes such as Win32, SDL
 * &c.
 *
 * $Log: event.h,v $
 */

#ifndef _PROJECTM_EVENT_H
#define _PROJECTM_EVENT_H


typedef enum {
  /** Event types */
  PROJECTM_KEYUP,
  PROJECTM_KEYDOWN,
  PROJECTM_VIDEORESIZE,
  PROJECTM_VIDEOQUIT,
} projectMEvent;

typedef enum {
  /** Keycodes */
  PROJECTM_K_RETURN,
  PROJECTM_K_RIGHT,
  PROJECTM_K_LEFT,
  PROJECTM_K_UP,
  PROJECTM_K_DOWN,
  PROJECTM_K_PAGEUP,
  PROJECTM_K_PAGEDOWN,
  PROJECTM_K_INSERT,
  PROJECTM_K_DELETE,
  PROJECTM_K_ESCAPE,
  PROJECTM_K_LSHIFT,
  PROJECTM_K_RSHIFT,
  PROJECTM_K_CAPSLOCK,
  PROJECTM_K_LCTRL,
  PROJECTM_K_HOME,
  PROJECTM_K_END,
  PROJECTM_K_BACKSPACE,

  PROJECTM_K_F1,
  PROJECTM_K_F2,
  PROJECTM_K_F3,
  PROJECTM_K_F4,
  PROJECTM_K_F5,
  PROJECTM_K_F6,
  PROJECTM_K_F7,
  PROJECTM_K_F8,
  PROJECTM_K_F9,
  PROJECTM_K_F10,
  PROJECTM_K_F11,
  PROJECTM_K_F12,

  PROJECTM_K_0 = 48,
  PROJECTM_K_1,
  PROJECTM_K_2,
  PROJECTM_K_3,
  PROJECTM_K_4,
  PROJECTM_K_5,
  PROJECTM_K_6,
  PROJECTM_K_7,
  PROJECTM_K_8,
  PROJECTM_K_9,

  PROJECTM_K_A = 65,
  PROJECTM_K_B,
  PROJECTM_K_C,
  PROJECTM_K_D,
  PROJECTM_K_E,
  PROJECTM_K_F,
  PROJECTM_K_G,
  PROJECTM_K_H,
  PROJECTM_K_I,
  PROJECTM_K_J,
  PROJECTM_K_K,
  PROJECTM_K_L,
  PROJECTM_K_M,
  PROJECTM_K_N,
  PROJECTM_K_O,
  PROJECTM_K_P,
  PROJECTM_K_Q,
  PROJECTM_K_R,
  PROJECTM_K_S,
  PROJECTM_K_T,
  PROJECTM_K_U,
  PROJECTM_K_V,
  PROJECTM_K_W,
  PROJECTM_K_X,
  PROJECTM_K_Y,
  PROJECTM_K_Z,

  PROJECTM_K_a = 97,
  PROJECTM_K_b,
  PROJECTM_K_c,
  PROJECTM_K_d,
  PROJECTM_K_e,
  PROJECTM_K_f,
  PROJECTM_K_g,
  PROJECTM_K_h,
  PROJECTM_K_i,
  PROJECTM_K_j,
  PROJECTM_K_k,
  PROJECTM_K_l,
  PROJECTM_K_m,
  PROJECTM_K_n,
  PROJECTM_K_o,
  PROJECTM_K_p,
  PROJECTM_K_q,
  PROJECTM_K_r,
  PROJECTM_K_s,
  PROJECTM_K_t,
  PROJECTM_K_u,
  PROJECTM_K_v,
  PROJECTM_K_w,
  PROJECTM_K_x,
  PROJECTM_K_y,
  PROJECTM_K_z,
  PROJECTM_K_NONE,
  PROJECTM_K_PLUS,
  PROJECTM_K_MINUS,
  PROJECTM_K_EQUALS
} projectMKeycode;

typedef enum {
  /** Modifiers */
  PROJECTM_KMOD_LSHIFT,
  PROJECTM_KMOD_RSHIFT,
  PROJECTM_KMOD_CAPS,
  PROJECTM_KMOD_LCTRL,
  PROJECTM_KMOD_RCTRL,
} projectMModifier;


#endif /** !_PROJECTM_EVENT_H */
