project for a (works on my devices) demo
This commit is contained in:
128
sources/glut_input.c
Normal file
128
sources/glut_input.c
Normal file
@@ -0,0 +1,128 @@
|
||||
#include <stddef.h>
|
||||
#include "../headers/glut_input.h"
|
||||
#include "../headers/input/input_events.h"
|
||||
|
||||
#include <stdio.h> /* a single printf */
|
||||
|
||||
void ( *keyboard_callback) ( unsigned char key, int x, int y) = NULL;
|
||||
void ( *mouse_motion_callback) ( int x, int y) = NULL;
|
||||
|
||||
void warp_pointer_implementation( int x, int y){}
|
||||
|
||||
void assignKeyboardCallback( void ( *callback) (unsigned char key, int x, int y)){
|
||||
if(keyboard_callback != NULL){
|
||||
return;
|
||||
}
|
||||
keyboard_callback = callback;
|
||||
}
|
||||
|
||||
void assignMouseMotionCallback( void ( *callback) (int x, int y)){
|
||||
if(mouse_motion_callback != NULL){
|
||||
return;
|
||||
}
|
||||
mouse_motion_callback = callback;
|
||||
}
|
||||
|
||||
void process_inputs(){
|
||||
int count, index;
|
||||
device_event *events, current;
|
||||
|
||||
count = device_handler_poll_events(&events);
|
||||
|
||||
if( count){
|
||||
printf("glut will dispatch %d events\n", count);
|
||||
}
|
||||
for( index = 0; index < count; index++){
|
||||
current = events[index];
|
||||
dispatch_input_event(current);
|
||||
}
|
||||
|
||||
device_handler_destroy_events(events);
|
||||
process_key_events();
|
||||
process_cursor_events();
|
||||
}
|
||||
|
||||
static void process_cursor_events(){
|
||||
}
|
||||
|
||||
static void process_key_events(){
|
||||
int index, remapped_index;
|
||||
char key_ascii_code;
|
||||
|
||||
for( index = 0; index < KEY_CNT; index++){
|
||||
if( buffered_keys[index]){
|
||||
remapped_index = index;
|
||||
/*
|
||||
printf("this key counts as pressed! %x\n", index);
|
||||
*/
|
||||
/* could add here the selection between classic GLUT and custom keymap */
|
||||
/* for now bad case MAPPING */
|
||||
if(
|
||||
( remapped_index >= BTN_GAMEPAD && remapped_index <= BTN_THUMBR)
|
||||
||
|
||||
( remapped_index >= BTN_DPAD_UP && remapped_index <= BTN_DPAD_RIGHT)
|
||||
){
|
||||
printf("should remap\n");
|
||||
remapped_index = remap_joypad_to_keyboard( remapped_index);
|
||||
}
|
||||
|
||||
key_ascii_code = get_ascii_code(remapped_index);
|
||||
|
||||
/*
|
||||
printf("going to keyCB %d\n", key_ascii_code);
|
||||
*/
|
||||
|
||||
/* NULL character would be zero */
|
||||
if( 0 < key_ascii_code){
|
||||
keyboard_callback( key_ascii_code, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unsigned short remap_joypad_to_keyboard( unsigned short linux_key){
|
||||
switch( linux_key){
|
||||
case BTN_DPAD_DOWN:
|
||||
/* return KEY_DOWN; */
|
||||
return KEY_S;
|
||||
case BTN_DPAD_UP:
|
||||
/* return KEY_UP; */
|
||||
return KEY_W;
|
||||
case BTN_DPAD_LEFT:
|
||||
return KEY_A;
|
||||
/* return KEY_LEFT; */
|
||||
case BTN_DPAD_RIGHT:
|
||||
return KEY_D;
|
||||
/* return KEY_RIGHT; */
|
||||
|
||||
case BTN_NORTH:
|
||||
return KEY_0;
|
||||
case BTN_WEST:
|
||||
return KEY_1;
|
||||
case BTN_SOUTH:
|
||||
return KEY_2;
|
||||
case BTN_EAST:
|
||||
return KEY_3;
|
||||
|
||||
case BTN_TL:
|
||||
return KEY_4;
|
||||
case BTN_TL2:
|
||||
return KEY_5;
|
||||
case BTN_TR2:
|
||||
return KEY_6;
|
||||
case BTN_TR:
|
||||
return KEY_7;
|
||||
|
||||
case BTN_START:
|
||||
return KEY_SPACE;
|
||||
case BTN_SELECT:
|
||||
return KEY_ESC;
|
||||
/*
|
||||
case BTN_THUMBL:
|
||||
case BTN_THUMBR:
|
||||
*/
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user