From c30b18c500bd0abb3362df66448febda36ff80d0 Mon Sep 17 00:00:00 2001 From: oroborus Date: Sat, 23 Aug 2008 11:44:09 +0000 Subject: - hotKey API - screen-split sa da prepinat klavesou [F3] - TCP pouziva v setsockopt parameter SO_REUSEADDR git-svn-id: http://opensvn.csie.org/tuxanci_ng@243 0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e --- src/client/hotKey.c | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 src/client/hotKey.c (limited to 'src/client/hotKey.c') diff --git a/src/client/hotKey.c b/src/client/hotKey.c new file mode 100644 index 0000000..43a13ca --- /dev/null +++ b/src/client/hotKey.c @@ -0,0 +1,158 @@ + +#include +#include +#include + +#include "main.h" +#include "list.h" +#include "myTimer.h" + +#include "interface.h" +#include "hotKey.h" + +typedef struct hotKey_struct +{ + SDLKey key; + bool_t active; + void (*handler)(); +} hotKey_t; + +static list_t *listHotKey; +static my_time_t lastActive; + +static hotKey_t* newHotKey(SDLKey key, void (*handler)()) +{ + hotKey_t *new; + + new = malloc( sizeof(hotKey_t) ); + new->key = key; + new->active = TRUE; + new->handler = handler; + + return new; +} + +static void destroyHotKey(hotKey_t *hotkey) +{ + free(hotkey); +} + +static hotKey_t* findHotkey(SDLKey key) +{ + int i; + + for( i = 0 ; i < listHotKey->count ; i++ ) + { + hotKey_t *this; + + this = (hotKey_t *)listHotKey->list[i]; + + if( this->key == key ) + { + return this; + } + } + + return NULL; +} + +void initHotKey() +{ + listHotKey = newList(); + lastActive = getMyTime(); +} + +void registerHotKey(SDLKey key, void (*handler)()) +{ + hotKey_t *hotkey; + + if( findHotkey(key) != NULL ) + { + assert( ! "Conflict with register key"); + } + + hotkey = newHotKey(key, handler); + addList(listHotKey, hotkey); +} + +void unregisterHotKey(SDLKey key) +{ + hotKey_t *hotkey; + int index; + + hotkey = findHotkey(key); + + if( hotkey == NULL ) + { + assert( ! "This hotkey not register"); + } + + index = searchListItem(listHotKey, hotkey); + assert( index != -1 ); + delListItem(listHotKey, index, destroyHotKey); +} + +void enableHotKey(SDLKey key) +{ + hotKey_t *hotkey; + + hotkey = findHotkey(key); + + if( hotkey == NULL ) + { + assert( ! "This hotkey not register"); + } + + lastActive = getMyTime(); + hotkey->active = TRUE; +} + +void disableHotKey(SDLKey key) +{ + hotKey_t *hotkey; + + hotkey = findHotkey(key); + + if( hotkey == NULL ) + { + assert( ! "This hotkey not register"); + } + + lastActive = getMyTime(); + hotkey->active = FALSE; +} + +void eventHotKey() +{ + my_time_t currentTime; + Uint8 *mapa; + int i; + + currentTime = getMyTime(); + + if( currentTime - lastActive < HOTKEY_ACTIVE_INTERVAL ) + { + return; + } + + mapa = SDL_GetKeyState(NULL); + + for( i = 0 ; i < listHotKey->count ; i++ ) + { + hotKey_t *this; + + this = (hotKey_t *)listHotKey->list[i]; + + if( mapa[this->key] == SDL_PRESSED && this->active == TRUE ) + { + lastActive = getMyTime(); + //printf("hotKey = %d\n", this->key); + this->handler(); + } + } +} + +void quitHotKey() +{ + destroyListItem(listHotKey, destroyHotKey); +} -- cgit v1.2.3