diff options
Diffstat (limited to 'src/client/image.c~')
| -rw-r--r-- | src/client/image.c~ | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/src/client/image.c~ b/src/client/image.c~ new file mode 100644 index 0000000..4c4010c --- /dev/null +++ b/src/client/image.c~ @@ -0,0 +1,176 @@ + +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> + +#include "main.h" +#include "list.h" +#include "storage.h" + +#include "interface.h" +#include "image.h" + +static list_t *listStorage; + +static bool_t isImageDataInit = FALSE; + +bool_t isImageInicialized() +{ + return isImageDataInit; +} + +/* + * Inicializuje globalny zoznam obrazkov + */ +void initImageData() +{ + assert( isInterfaceInicialized() == TRUE ); +#ifdef DEBUG + printf(_("Initializing image database\n")); +#endif + listStorage = newStorage(); + isImageDataInit = TRUE; +} + +static SDL_Surface *loadImage(const char *filename, int alpha) +{ + SDL_Surface *tmp; + SDL_Surface *ret; + + char str[STR_PATH_SIZE]; + + + if( isFillPath(filename) ) + { + strcpy(str, filename); + } + else + { + sprintf(str, PATH_IMAGE "%s", filename); + } + + accessExistFile(str); + + if( ( tmp = IMG_Load(str) ) == NULL ) + { + fprintf(stderr, "%s\n", SDL_GetError()); + return NULL; + } + + if( ( ret = (alpha) ? SDL_DisplayFormatAlpha(tmp) : SDL_DisplayFormat(tmp) ) == NULL ) + { + fprintf(stderr, "%s\n", SDL_GetError()); + SDL_FreeSurface(tmp); + return NULL; + } + + SDL_FreeSurface(tmp); + return ret; +} + +image_t* newImage(SDL_Surface *surface) +{ + image_t *new; + + assert( surface != NULL ); + + new = malloc( sizeof(image_t) ); + new->image = surface; + new->w = surface->w; + new->h = surface->h; + + return new; +} + +static void destroyImage(image_t *p) +{ + assert( p != NULL ); + SDL_FreeSurface((SDL_Surface *)p->image); + free(p); +} + +/* + * Prida obrazok do globalneho zoznamu obrazkov + * *file - nazov suboru v ktorom je obrazok ulozeny + * *name - nazov obrazku ( pouzije sa ako vyhadavaci retazec v zazanem ) + * alpha - 0 - nema alpha kanal | 1 - ma alpha kanal + */ +image_t* addImageData(char *file, int alpha, char *name, char *group) +{ + SDL_Surface *surface; + image_t *new; + + assert( file != NULL ); + assert( name != NULL ); + assert( group != NULL ); + + surface = loadImage(file, alpha); + new = newImage(surface); + + addItemToStorage(listStorage, group, name, new ); +#ifdef DEBUG + printf(_("Loading image %s\n"), file); +#endif + return new; +} + +/* + * Vrati odkaz na image_data v globalnom zozname obrazkov + * a nazvom *s + */ +image_t* getImage(char *group, char *name) +{ + assert( group != NULL ); + assert( name != NULL ); + + return getItemFromStorage(listStorage, group, name); +} + +void delImage(char *group, char *name) +{ + assert( group != NULL ); + assert( name != NULL ); + + delItemFromStorage(listStorage, group, name, destroyImage); +} + +void delAllImageInGroup(char *group) +{ + assert( group != NULL ); + + delAllItemFromStorage(listStorage, group, destroyImage); +} + +void drawImage(image_t *p, int x,int y, int px, int py, int w, int h) +{ + static SDL_Surface *screen = NULL; + SDL_Rect dst_rect, src_rect; + + if( screen == NULL ) + { + screen = getSDL_Screen(); + } + + dst_rect.x = x; + dst_rect.y = y; + + src_rect.x = px; + src_rect.y = py; + src_rect.w = w; + src_rect.h = h; + + SDL_BlitSurface(p->image, &src_rect, screen, &dst_rect); +} + +/* + * Odstrani zoznam obrazkov z pamate + */ +void quitImageData() +{ +#ifdef DEBUG + printf(_("Quitting image database\n")); +#endif + destroyStorage(listStorage, destroyImage); + isImageDataInit = FALSE; +} + |