summaryrefslogtreecommitdiff
path: root/src/client/image.c~
diff options
context:
space:
mode:
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;
+}
+