summaryrefslogtreecommitdiff
path: root/src/client/image.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/image.c')
-rwxr-xr-xsrc/client/image.c149
1 files changed, 149 insertions, 0 deletions
diff --git a/src/client/image.c b/src/client/image.c
new file mode 100755
index 0000000..98b2b8b
--- /dev/null
+++ b/src/client/image.c
@@ -0,0 +1,149 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "base/main.h"
+#include "base/list.h"
+#include "base/storage.h"
+
+#include "client/interface.h"
+#include "client/image.h"
+
+static list_t *listStorage;
+
+static bool_t isImageDataInit = FALSE;
+
+bool_t isImageInicialized()
+{
+ return isImageDataInit;
+}
+
+/*
+ * Inicialuzje globalny zoznam obrazkov
+ */
+void initImageData()
+{
+ assert( isInterfaceInicialized() == TRUE );
+
+ printf("init image database..\n");
+ listStorage = newStorage();
+ isImageDataInit = TRUE;
+}
+
+static SDL_Surface *loadImage(const char *filename, int alpha)
+{
+ SDL_Surface *tmp;
+ SDL_Surface *ret;
+
+ char str[STR_PATH_SIZE];
+
+
+ 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;
+}
+
+static void destroySDLSurface(void *p)
+{
+ assert( p != NULL );
+ SDL_FreeSurface((SDL_Surface *)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
+ */
+SDL_Surface* addImageData(char *file, int alpha, char *name, char *group)
+{
+ SDL_Surface *new;
+
+ assert( file != NULL );
+ assert( name != NULL );
+ assert( group != NULL );
+
+ new = loadImage(file, alpha);
+
+ addItemToStorage(listStorage, group, name, new );
+
+ printf("load image %s\n", file);
+
+ return new;
+}
+
+/*
+ * Vrati odkaz na image_data v globalnom zozname obrazkov
+ * a nazvom *s
+ */
+SDL_Surface* 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, destroySDLSurface);
+}
+
+void delAllImageInGroup(char *group)
+{
+ assert( group != NULL );
+
+ delAllItemFromStorage(listStorage, group, destroySDLSurface);
+}
+
+void drawImage(SDL_Surface *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, &src_rect, screen, &dst_rect);
+}
+
+/*
+ * Odstrani zoznam obrazkov z pamate
+ */
+void quitImageData()
+{
+ printf("quit image database..\n");
+ destroyStorage(listStorage, destroySDLSurface);
+ isImageDataInit = FALSE;
+}
+