filename | src/maple/controller.c |
changeset | 1072:d82e04e6d497 |
prev | 1034:7044e01148f0 |
next | 1298:d0eb2307b847 |
author | nkeynes |
date | Tue Jul 21 20:33:21 2009 +1000 (14 years ago) |
permissions | -rw-r--r-- |
last change | Heavy configuration management refactor - Configuration groups now take both an on_change event handler and a default keybinding handler, making most keybinding tasks quite simple - GUI configuration all merged into a unified model, drastically reducing the amount of GUI config code. Bonuses - OSX now has a hotkey preference pane - GTK keybinding editor is much more usable |
file | annotate | diff | log | raw |
1.1 --- a/src/maple/controller.c Wed Jun 24 02:41:12 2009 +00001.2 +++ b/src/maple/controller.c Tue Jul 21 20:33:21 2009 +10001.3 @@ -79,18 +79,17 @@1.5 static void controller_attach( maple_device_t dev );1.6 static void controller_detach( maple_device_t dev );1.7 -static void controller_destroy( maple_device_t dev );1.8 +static void controller_key_callback( void *mdev, uint32_t value, uint32_t pressure, gboolean isKeyDown );1.9 static maple_device_t controller_clone( maple_device_t dev );1.10 static maple_device_t controller_new();1.11 -static lxdream_config_entry_t controller_get_config( maple_device_t dev );1.12 -static void controller_set_config_value( maple_device_t dev, unsigned int key, const gchar *value );1.13 +static lxdream_config_group_t controller_get_config( maple_device_t dev );1.14 static int controller_get_cond( maple_device_t dev, int function, unsigned char *outbuf,1.15 unsigned int *outlen );1.17 typedef struct controller_device {1.18 struct maple_device dev;1.19 uint32_t condition[2];1.20 - struct lxdream_config_entry config[CONTROLLER_CONFIG_ENTRIES+1];1.21 + struct lxdream_config_group config;1.22 } *controller_device_t;1.24 struct maple_device_class controller_class = { "Sega Controller",1.25 @@ -99,26 +98,30 @@1.26 static struct controller_device base_controller = {1.27 { MAPLE_DEVICE_TAG, &controller_class,1.28 CONTROLLER_IDENT, CONTROLLER_VERSION,1.29 - controller_get_config, controller_set_config_value,1.30 - controller_attach, controller_detach, controller_destroy,1.31 + controller_get_config,1.32 + controller_attach, controller_detach, maple_default_destroy,1.33 controller_clone, NULL, NULL, controller_get_cond, NULL, NULL, NULL, NULL, NULL, NULL },1.34 - {0x0000FFFF, 0x80808080},1.35 - {{ "dpad left", N_("Dpad left"), CONFIG_TYPE_KEY },1.36 - { "dpad right", N_("Dpad right"), CONFIG_TYPE_KEY },1.37 - { "dpad up", N_("Dpad up"), CONFIG_TYPE_KEY },1.38 - { "dpad down", N_("Dpad down"), CONFIG_TYPE_KEY },1.39 - { "analog left", N_("Analog left"), CONFIG_TYPE_KEY },1.40 - { "analog right", N_("Analog right"), CONFIG_TYPE_KEY },1.41 - { "analog up", N_("Analog up"), CONFIG_TYPE_KEY },1.42 - { "analog down", N_("Analog down"), CONFIG_TYPE_KEY },1.43 - { "button X", N_("Button X"), CONFIG_TYPE_KEY },1.44 - { "button Y", N_("Button Y"), CONFIG_TYPE_KEY },1.45 - { "button A", N_("Button A"), CONFIG_TYPE_KEY },1.46 - { "button B", N_("Button B"), CONFIG_TYPE_KEY },1.47 - { "trigger left", N_("Trigger left"), CONFIG_TYPE_KEY },1.48 - { "trigger right", N_("Trigger right"), CONFIG_TYPE_KEY },1.49 - { "start", N_("Start button"), CONFIG_TYPE_KEY },1.50 - { NULL, CONFIG_TYPE_NONE }} };1.51 + {0x0000FFFF, 0x80808080},1.52 + {"Sega Controller", NULL, controller_key_callback, NULL,1.53 + {{ "dpad left", N_("Dpad left"), CONFIG_TYPE_KEY, NULL, BUTTON_DPAD_LEFT },1.54 + { "dpad right", N_("Dpad right"), CONFIG_TYPE_KEY, NULL, BUTTON_DPAD_RIGHT },1.55 + { "dpad up", N_("Dpad up"), CONFIG_TYPE_KEY, NULL, BUTTON_DPAD_UP },1.56 + { "dpad down", N_("Dpad down"), CONFIG_TYPE_KEY, NULL, BUTTON_DPAD_DOWN },1.57 + { "analog left", N_("Analog left"), CONFIG_TYPE_KEY, NULL, JOY_LEFT },1.58 + { "analog right", N_("Analog right"), CONFIG_TYPE_KEY, NULL, JOY_RIGHT },1.59 + { "analog up", N_("Analog up"), CONFIG_TYPE_KEY, NULL, JOY_UP },1.60 + { "analog down", N_("Analog down"), CONFIG_TYPE_KEY, NULL, JOY_DOWN },1.61 + { "button X", N_("Button X"), CONFIG_TYPE_KEY, NULL, BUTTON_X },1.62 + { "button Y", N_("Button Y"), CONFIG_TYPE_KEY, NULL, BUTTON_Y },1.63 + { "button A", N_("Button A"), CONFIG_TYPE_KEY, NULL, BUTTON_A },1.64 + { "button B", N_("Button B"), CONFIG_TYPE_KEY, NULL, BUTTON_B },1.65 + { "trigger left", N_("Trigger left"), CONFIG_TYPE_KEY, NULL, BUTTON_LEFT_TRIGGER },1.66 + { "trigger right", N_("Trigger right"), CONFIG_TYPE_KEY, NULL, BUTTON_RIGHT_TRIGGER },1.67 + { "start", N_("Start button"), CONFIG_TYPE_KEY, NULL, BUTTON_START },1.68 + { NULL, CONFIG_TYPE_NONE }}} };1.69 +1.70 +/* Get the controller_device * from a lxdream_config_group_t */1.71 +#define DEV_FROM_CONFIG_GROUP(grp) ((controller_device_t)(((char *)grp) - offsetof( struct controller_device, config )))1.73 static int config_button_map[] = {1.74 BUTTON_DPAD_LEFT, BUTTON_DPAD_RIGHT, BUTTON_DPAD_UP, BUTTON_DPAD_DOWN,1.75 @@ -129,8 +132,9 @@1.77 static maple_device_t controller_new( )1.78 {1.79 - controller_device_t dev = malloc( sizeof(struct controller_device) );1.80 + controller_device_t dev = malloc( sizeof(base_controller) );1.81 memcpy( dev, &base_controller, sizeof(base_controller) );1.82 + dev->config.data = dev;1.83 return MAPLE_DEVICE(dev);1.84 }1.86 @@ -138,7 +142,7 @@1.87 {1.88 controller_device_t src = (controller_device_t)srcdevice;1.89 controller_device_t dev = (controller_device_t)controller_new();1.90 - lxdream_copy_config_list( dev->config, src->config );1.91 + lxdream_copy_config_group( &dev->config, &src->config );1.92 memcpy( dev->condition, src->condition, sizeof(src->condition) );1.93 return MAPLE_DEVICE(dev);1.94 }1.95 @@ -194,25 +198,10 @@1.96 }1.97 }1.99 -static lxdream_config_entry_t controller_get_config( maple_device_t mdev )1.100 +static lxdream_config_group_t controller_get_config( maple_device_t mdev )1.101 {1.102 controller_device_t dev = (controller_device_t)mdev;1.103 - return dev->config;1.104 -}1.105 -1.106 -static void controller_set_config_value( maple_device_t mdev, unsigned int key, const gchar *value )1.107 -{1.108 - controller_device_t dev = (controller_device_t)mdev;1.109 - assert( key < CONTROLLER_CONFIG_ENTRIES );1.110 -1.111 - input_unregister_key( dev->config[key].value, controller_key_callback, dev, config_button_map[key] );1.112 - lxdream_set_config_value( &dev->config[key], value );1.113 - input_register_key( dev->config[key].value, controller_key_callback, dev, config_button_map[key] );1.114 -}1.115 -1.116 -static void controller_destroy( maple_device_t mdev )1.117 -{1.118 - free( mdev );1.119 + return &dev->config;1.120 }1.122 /**1.123 @@ -222,20 +211,15 @@1.124 static void controller_attach( maple_device_t mdev )1.125 {1.126 controller_device_t dev = (controller_device_t)mdev;1.127 - int i;1.128 - for( i=0; i<CONTROLLER_CONFIG_ENTRIES; i++ ) {1.129 - input_register_key( dev->config[i].value, controller_key_callback, dev, config_button_map[i] );1.130 - }1.131 + dev->config.on_change = input_keygroup_changed;1.132 + input_register_keygroup( &dev->config );1.133 }1.135 static void controller_detach( maple_device_t mdev )1.136 {1.137 controller_device_t dev = (controller_device_t)mdev;1.138 - int i;1.139 - for( i=0; i<CONTROLLER_CONFIG_ENTRIES; i++ ) {1.140 - input_unregister_key( dev->config[i].value, controller_key_callback, dev, config_button_map[i] );1.141 - }1.142 -1.143 + input_unregister_keygroup( &dev->config );1.144 + dev->config.on_change = NULL;1.145 }
.