#include <stdlib.h>
#include "entity.h"
#include "SDL.h"
#include "sdl-common.h"
static gint
sdl_key_refresh (ENode * node, EBuf * attr, EBuf * value)
{
Uint8 *keys;
keys = SDL_GetKeyState(NULL);
sdl_keys_call_sets (node, keys);
return TRUE;
}
static void
sdl_keys_call_handler (ENode * user_data)
{
ENode *node = user_data;
gchar *function = NULL;
function = enode_attrib_str (node, "onpress", NULL);
if (function)
enode_call_ignore_return (node, function, "");
}
/**sdl_keys_call_sets
* Runs through the keys and calls all the "onpress" functions.
*
*/
void
sdl_keys_call_sets (ENode * node, Uint8 * keys)
{
char * val_str = NULL;
int value = -1;
/* Get value from the node attrib. */
val_str = enode_attrib_str (node, "value", NULL);
if (NULL == val_str)
{
fprintf (stderr, "bad val\n");
return;
}
value = atoi (val_str);
if ( value > -1 && keys[value] == SDL_PRESSED )
{
sdl_keys_call_handler (node);
}
}
/**sdl_keys_setup
* setup the keys.
*/
static void
sdl_keys_setup (ENode * node)
{
}
/**sdl_keys_destroy
* Free the keys.
*/
static void
sdl_keys_destroy (ENode * node)
{
}
/**sdl_keys_register
* Register the sdl key attributes.
*/
void sdl_keys_register (void)
{
Element *element;
ElementAttr *e_attr;
/* Register sdl-mouse. */
element = g_new0 (Element, 1);
element->render_func = sdl_keys_setup;
element->destroy_func = sdl_keys_destroy;
element->parent_func = NULL;
element->tag = "sdl-key";
element->description = "Create a new SDL key callback.";
element_register (element);
/* Value of the key. */
e_attr = g_new0 (ElementAttr, 1);
e_attr->attribute = "value";
e_attr->description = "The value of the key we care about. See libsdl docs.";
e_attr->value_desc = "integer";
e_attr->possible_values = "-1,*";
element_register_attrib (element, e_attr);
/* Onpress attribute. */
e_attr = g_new0 (ElementAttr, 1);
e_attr->attribute = "onpress";
e_attr->description = "Sets up a handler for keyboard press events";
e_attr->value_desc = "function";
e_attr->possible_values = "(caling_node)";
element_register_attrib (element, e_attr);
e_attr = g_new0 (ElementAttr, 1);
e_attr->attribute = "_refresh";
e_attr->description = "A force refresh";
e_attr->value_desc = "integer";
e_attr->possible_values = "*";
e_attr->set_attr_func = sdl_key_refresh;
element_register_attrib (element, e_attr);
}
syntax highlighted by Code2HTML, v. 0.9.1