diff options
| author | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-06-28 16:38:35 +0000 |
|---|---|---|
| committer | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-06-28 16:38:35 +0000 |
| commit | 2d776fcd61be168e1ff0ff2e4a5e71835e7cea19 (patch) | |
| tree | 7cf274897bf540d5332d446f583ffd066e4e2e1d /src/client/screen.c | |
| parent | b877ae23ac5d380ab3aa48d7724045cf4883b186 (diff) | |
- prekopanie adresarovej struktury, prva cast
git-svn-id: http://opensvn.csie.org/tuxanci_ng@77 0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e
Diffstat (limited to 'src/client/screen.c')
| -rw-r--r-- | src/client/screen.c | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/src/client/screen.c b/src/client/screen.c new file mode 100644 index 0000000..730476e --- /dev/null +++ b/src/client/screen.c @@ -0,0 +1,137 @@ + +#include <stdlib.h> +#include <assert.h> + +#include "base/main.h" +#include "base/list.h" + +#include "client/interface.h" +#include "client/screen.h" +#include "client/layer.h" + +static screen_t *currentScreen; +static list_t *listScreen; + +static bool_t isScreenInit = FALSE; + +bool_t isScreenInicialized() +{ + return isScreenInit; +} + +screen_t* newScreen(char *name, + void (*fce_start)(), void (*fce_event)(), + void (*fce_draw)(), void (*fce_stop)()) +{ + screen_t *new; + + assert( name != NULL ); + assert( fce_start != NULL ); + assert( fce_event != NULL ); + assert( fce_draw != NULL ); + assert( fce_stop != NULL ); + + new = malloc( sizeof(screen_t) ); + new->name = strdup(name); + new->fce_start = fce_start; + new->fce_event = fce_event; + new->fce_draw = fce_draw; + new->fce_stop = fce_stop; + + return new; +} + +void destroyScreen(screen_t *p) +{ + assert( p != NULL ); + + free(p->name); + free(p); +} + +void registerScreen(screen_t *p) +{ + assert( p != NULL ); + + printf("register screen %s..\n", p->name); + addList(listScreen, p); +} + +void initScreen() +{ + listScreen = newList(); + currentScreen = NULL; + isScreenInit = TRUE; +} + +void setScreen(char *name) +{ + int i; + screen_t *this; + + assert( name != NULL ); + + if( currentScreen != NULL && + strcmp(currentScreen->name, name) == 0 ) + { + return; + } + + printf("switch screen %s..\n", name); + + for( i = 0 ; i < listScreen->count ; i++ ) + { + this = (screen_t *) (listScreen->list[i]); + assert( this != NULL ); + + if( strcmp(name, this->name) == 0 ) + { + flushLayer(); + + if( currentScreen != NULL ) + { + printf("stop screen %s..\n", currentScreen->name); + currentScreen->fce_stop(); + } + + currentScreen = this; + printf("start screen %s..\n", currentScreen->name); + currentScreen->fce_start(); + + return; + } + } + + assert( ! "screen sa nenasiel !" ); +} + +char* getScreen() +{ + assert( currentScreen != NULL ); + return currentScreen->name; +} + +void drawScreen() +{ + assert( currentScreen != NULL ); + + currentScreen->fce_draw(); + + interfaceRefresh(); +} + +void eventScreen() +{ + assert( currentScreen != NULL ); + + currentScreen->fce_event(); +} + +void quitScreen() +{ + assert( listScreen != NULL ); + + destroyListItem(listScreen, destroyScreen); + isScreenInit = FALSE; +} + |