Files
kichikuou_xsystem35-sdl2/src/xcore_input.c
T
2017-02-11 19:03:05 +09:00

355 lines
6.4 KiB
C

/*
* xcore_input.c キー入力処理
*
* Copyright (C) 1997-1998 Masaki Chikama (Wren) <chikama@kasumi.ipl.mech.nagoya-u.ac.jp>
* 1998- <masaki-c@is.aist-nara.ac.jp>
*
* 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.
*
* 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
*
*/
/* $Id: xcore_input.c,v 1.13 2003/04/25 17:23:55 chikama Exp $ */
#include "key.h"
#include <X11/keysym.h>
#include "ags.h"
boolean RawKeyInfo[256];
static int convertKeyCode(unsigned int keycode);
static void keyEventProsess(XKeyEvent *e);
static void buttonEventProcess(XButtonEvent *e);
static void keyEventProsess(XKeyEvent *e) {
agsevent_t agse;
boolean bool;
int code = convertKeyCode(e->keycode);
if (e->type == KeyPress) {
bool = TRUE;
agse.type = AGSEVENT_KEY_PRESS;
} else {
bool = FALSE;
agse.type = AGSEVENT_KEY_RELEASE;
}
RawKeyInfo[code] = bool;
if (nact->ags.eventcb) {
agse.d1 = e->x;
agse.d2 = e->y;
agse.d3 = code;
nact->ags.eventcb(&agse);
}
}
static void buttonEventProcess(XButtonEvent *e) {
agsevent_t agse;
boolean bool;
if (e->type == ButtonPress) {
bool = TRUE;
agse.type = AGSEVENT_BUTTON_PRESS;
} else {
bool = FALSE;
agse.type = AGSEVENT_BUTTON_RELEASE;
}
switch(e->button) {
case Button1:
RawKeyInfo[KEY_MOUSE_LEFT] = bool;
agse.d3 = AGSEVENT_BUTTON_LEFT;
break;
case Button2:
RawKeyInfo[KEY_MOUSE_MIDDLE] = bool;
agse.d3 = AGSEVENT_BUTTON_MID;
break;
case Button3:
RawKeyInfo[KEY_MOUSE_RIGHT] = bool;
agse.d3 = AGSEVENT_BUTTON_RIGHT;
break;
case Button4:
agse.d3 = AGSEVENT_WHEEL_UP;
break;
case Button5:
agse.d3 = AGSEVENT_WHEEL_DN;
break;
default:
break;
}
if (nact->ags.eventcb) {
agse.d1 = e->x;
agse.d2 = e->y;
nact->ags.eventcb(&agse);
}
}
static int convertKeyCode(unsigned int keycode) {
KeySym sym = XKeycodeToKeysym(x11_display, keycode, 0);
switch(sym) {
case XK_BackSpace:
return KEY_BS;
case XK_Tab:
return KEY_TAB;
case XK_Clear:
return KEY_CLEAR;
case XK_Return:
case XK_KP_Enter:
return KEY_ENTER;
case XK_Shift_L:
case XK_Shift_R:
return KEY_SHIFT;
case XK_Control_L:
case XK_Control_R:
return KEY_CTRL;
case XK_Alt_L:
case XK_Alt_R:
return KEY_ALT;
case XK_Pause:
return KEY_PAUSE;
case XK_Caps_Lock:
return KEY_CAPSLOCK;
case XK_Kanji:
return KEY_KANAKAN;
case XK_Escape :
return KEY_ESC;
case XK_space:
return KEY_SPACE;
case XK_Page_Up:
return KEY_PAGEUP;
case XK_Page_Down:
return KEY_PAGEDOWN;
case XK_End:
return KEY_END;
case XK_Home:
return KEY_HOME;
case XK_Left:
return KEY_LEFT;
case XK_Up:
return KEY_UP;
case XK_Right:
return KEY_RIGHT;
case XK_Down:
return KEY_DOWN;
case XK_Select:
return KEY_SELECT;
case XK_Execute:
return KEY_EXECUTE;
case XK_Print:
return KEY_PRINTSCREEN;
case XK_Insert:
return KEY_INS;
case XK_Delete:
return KEY_DEL;
case XK_Help:
return KEY_HELP;
case XK_0:
return KEY_0;
case XK_1:
return KEY_1;
case XK_2:
return KEY_2;
case XK_3:
return KEY_3;
case XK_4:
return KEY_4;
case XK_5:
return KEY_5;
case XK_6:
return KEY_6;
case XK_7:
return KEY_7;
case XK_8:
return KEY_8;
case XK_9:
return KEY_9;
case XK_a:
case XK_A:
return KEY_A;
case XK_b:
case XK_B:
return KEY_B;
case XK_c:
case XK_C:
return KEY_C;
case XK_d:
case XK_D:
return KEY_D;
case XK_e:
case XK_E:
return KEY_E;
case XK_f:
case XK_F:
return KEY_F;
case XK_g:
case XK_G:
return KEY_G;
case XK_h:
case XK_H:
return KEY_H;
case XK_i:
case XK_I:
return KEY_I;
case XK_j:
case XK_J:
return KEY_J;
case XK_k:
case XK_K:
return KEY_K;
case XK_l:
case XK_L:
return KEY_L;
case XK_m:
case XK_M:
return KEY_M;
case XK_n:
case XK_N:
return KEY_N;
case XK_o:
case XK_O:
return KEY_O;
case XK_p:
case XK_P:
return KEY_P;
case XK_q:
case XK_Q:
return KEY_Q;
case XK_r:
case XK_R:
return KEY_R;
case XK_s:
case XK_S:
return KEY_S;
case XK_t:
case XK_T:
return KEY_T;
case XK_u:
case XK_U:
return KEY_U;
case XK_v:
case XK_V:
return KEY_V;
case XK_w:
case XK_W:
return KEY_W;
case XK_x:
case XK_X:
return KEY_X;
case XK_y:
case XK_Y:
return KEY_Y;
case XK_z:
case XK_Z:
return KEY_Z;
case XK_KP_Insert:
case XK_KP_0:
return KEY_PAD_0;
case XK_KP_End:
case XK_KP_1:
return KEY_PAD_1;
case XK_KP_Down:
case XK_KP_2:
return KEY_PAD_2;
case XK_KP_Page_Down:
case XK_KP_3:
return KEY_PAD_3;
case XK_KP_Left:
case XK_KP_4:
return KEY_PAD_4;
case XK_KP_5:
return KEY_PAD_5;
case XK_KP_Right:
case XK_KP_6:
return KEY_PAD_6;
case XK_KP_Home:
case XK_KP_7:
return KEY_PAD_7;
case XK_KP_Up:
case XK_KP_8:
return KEY_PAD_8;
case XK_KP_Page_Up:
case XK_KP_9:
return KEY_PAD_9;
case XK_KP_Multiply:
return KEY_PAD_STAR;
case XK_KP_Add:
return KEY_PAD_PLUS;
case XK_KP_Separator:
return KEY_PAD_SEP;
case XK_KP_Subtract:
return KEY_PAD_MINUS;
case XK_KP_Delete:
return KEY_PAD_DOT;
case XK_KP_Divide:
return KEY_PAD_SLASH;
case XK_F1:
return KEY_F1;
case XK_F2:
return KEY_F2;
case XK_F3:
return KEY_F3;
case XK_F4:
return KEY_F4;
case XK_F5:
return KEY_F5;
case XK_F6:
return KEY_F6;
case XK_F7:
return KEY_F7;
case XK_F8:
return KEY_F8;
case XK_F9:
return KEY_F9;
case XK_F10:
return KEY_F10;
case XK_F11:
return KEY_F11;
case XK_F12:
return KEY_F12;
case XK_F13:
return KEY_F13;
case XK_F14:
return KEY_F14;
case XK_F15:
return KEY_F15;
case XK_F16:
return KEY_F16;
case XK_F17:
return KEY_F17;
case XK_F18:
return KEY_F18;
case XK_F19:
return KEY_F19;
case XK_F20:
return KEY_F20;
case XK_F21:
return KEY_F21;
case XK_F22:
return KEY_F22;
case XK_F23:
return KEY_F23;
case XK_F24:
return KEY_F24;
case XK_Num_Lock:
return KEY_NUMLOCK;
case XK_Scroll_Lock:
return KEY_SCROLL_LOCK;
default:
return KEY_UNDEFINED;
}
return KEY_UNDEFINED;
}