From 79d2919f9f128e6982d3ea9baf3ef0ea721b687c Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Wed, 5 Jan 2000 10:26:39 +0000 Subject: [PATCH] add loader flush call and fix gif loader to be able to load when theres no progress set :) SVN revision: 1855 --- loaders/loader_gif.c | 14 +++++++------- src/Imlib2.h | 1 + src/api.c | 7 +++++++ src/image.c | 14 +++++++++++--- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/loaders/loader_gif.c b/loaders/loader_gif.c index 5bba795..cdcaaeb 100644 --- a/loaders/loader_gif.c +++ b/loaders/loader_gif.c @@ -43,13 +43,13 @@ load(ImlibImage *im, progress_func *progress, char progress_granularity, char im /* if immediate_load is 1, then dont delay image laoding as below, or */ /* already data in this image - dont load it again */ if (im->data) - return 0; + return 0; fd = open(im->file, O_RDONLY); if (fd < 0) - return 0; + return 0; gif = DGifOpenFileHandle(fd); if (!gif) - return 0; + return 0; do { if (DGifGetRecordType(gif, &rec) == GIF_ERROR) { PrintGifError(); @@ -118,13 +118,13 @@ load(ImlibImage *im, progress_func *progress, char progress_granularity, char im /* set the format string member to the lower-case full extension */ /* name for the format - so example names would be: */ /* "png", "jpeg", "tiff", "ppm", "pgm", "pbm", "gif", "xpm" ... */ - if (!im->loader) - im->format = strdup("gif"); + im->w = w; + im->h = h; + if (!im->format) + im->format = strdup("gif"); if (im->loader || immediate_load || progress) { bg = gif->SBackGroundColor; cmap = (gif->Image.ColorMap ? gif->Image.ColorMap : gif->SColorMap); - im->w = w; - im->h = h; im->data = (DATA32 *) malloc(sizeof(DATA32) * w * h); if (!im->data) { DGifCloseFile(gif); diff --git a/src/Imlib2.h b/src/Imlib2.h index c07a209..9329dd1 100644 --- a/src/Imlib2.h +++ b/src/Imlib2.h @@ -98,6 +98,7 @@ int imlib_get_cache_size(void); void imlib_set_cache_size(int bytes); int imlib_get_color_usage(void); void imlib_set_color_usage(int max); +void imlib_flush_loaders(void); int imlib_get_visual_depth(Display *display, Visual *visual); Visual *imlib_get_best_visual(Display *display, int screen, int *depth_return); diff --git a/src/api.c b/src/api.c index 3361c47..17569d8 100644 --- a/src/api.c +++ b/src/api.c @@ -208,6 +208,13 @@ imlib_set_color_usage(int max) _max_colors = max; } +void +imlib_flush_loaders(void) +{ + __imlib_RemoveAllLoaders(); + LTDL_Exit(); +} + int imlib_get_visual_depth(Display *display, Visual *visual) { diff --git a/src/image.c b/src/image.c index 32a5c29..9775332 100644 --- a/src/image.c +++ b/src/image.c @@ -490,13 +490,14 @@ __imlib_CleanupImagePixmapCache(void) #define LOADERS_UNINITIALISED -4444 +static int errors = LOADERS_UNINITIALISED; + static void LTDL_Init(void) { - static int errors = LOADERS_UNINITIALISED; - /* Do this only once! */ - if ((errors = LOADERS_UNINITIALISED)) + + if ((errors == LOADERS_UNINITIALISED)) { errors = lt_dlinit(); @@ -514,6 +515,13 @@ LTDL_Init(void) } } +void +LTDL_Exit(void) +{ + errors = LOADERS_UNINITIALISED; + lt_dlexit(); +} + /* try dlopen()ing the file if we succeed finish filling out the malloced */ /* loader struct and return it */ ImlibLoader *