Pass parameters to __imlib_LoadImage() by struct
Makes it much easier to change stuff.
This commit is contained in:
parent
8470ecec66
commit
52b0752af4
|
@ -56,6 +56,11 @@ if (!(param)) \
|
|||
return; \
|
||||
}
|
||||
|
||||
#define ILA0(ctx, imm, noc) \
|
||||
.pfunc = (ImlibProgressFunction)(ctx)->progress_func, \
|
||||
.pgran = (ctx)->progress_granularity, \
|
||||
.immed = imm, .nocache = noc
|
||||
|
||||
/* internal typedefs for function pointers */
|
||||
typedef void (*Imlib_Internal_Progress_Function)(void *, char, int, int,
|
||||
int, int);
|
||||
|
@ -1198,12 +1203,11 @@ EAPI Imlib_Image
|
|||
imlib_load_image(const char *file)
|
||||
{
|
||||
Imlib_Image im;
|
||||
ImlibLoadArgs ila = { ILA0(ctx, 0, 0) };
|
||||
|
||||
CHECK_PARAM_POINTER_RETURN("file", file, NULL);
|
||||
|
||||
im = __imlib_LoadImage(file, NULL,
|
||||
(ImlibProgressFunction) ctx->progress_func,
|
||||
ctx->progress_granularity, 0, 0, NULL);
|
||||
im = __imlib_LoadImage(file, &ila);
|
||||
|
||||
return (Imlib_Image) im;
|
||||
}
|
||||
|
@ -1221,12 +1225,11 @@ EAPI Imlib_Image
|
|||
imlib_load_image_immediately(const char *file)
|
||||
{
|
||||
Imlib_Image im;
|
||||
ImlibLoadArgs ila = { ILA0(ctx, 1, 0) };
|
||||
|
||||
CHECK_PARAM_POINTER_RETURN("file", file, NULL);
|
||||
|
||||
im = __imlib_LoadImage(file, NULL,
|
||||
(ImlibProgressFunction) ctx->progress_func,
|
||||
ctx->progress_granularity, 1, 0, NULL);
|
||||
im = __imlib_LoadImage(file, &ila);
|
||||
|
||||
return (Imlib_Image) im;
|
||||
}
|
||||
|
@ -1242,12 +1245,11 @@ EAPI Imlib_Image
|
|||
imlib_load_image_without_cache(const char *file)
|
||||
{
|
||||
Imlib_Image im;
|
||||
ImlibLoadArgs ila = { ILA0(ctx, 0, 1) };
|
||||
|
||||
CHECK_PARAM_POINTER_RETURN("file", file, NULL);
|
||||
|
||||
im = __imlib_LoadImage(file, NULL,
|
||||
(ImlibProgressFunction) ctx->progress_func,
|
||||
ctx->progress_granularity, 0, 1, NULL);
|
||||
im = __imlib_LoadImage(file, &ila);
|
||||
|
||||
return (Imlib_Image) im;
|
||||
}
|
||||
|
@ -1264,12 +1266,11 @@ EAPI Imlib_Image
|
|||
imlib_load_image_immediately_without_cache(const char *file)
|
||||
{
|
||||
Imlib_Image im;
|
||||
ImlibLoadArgs ila = { ILA0(ctx, 1, 1) };
|
||||
|
||||
CHECK_PARAM_POINTER_RETURN("file", file, NULL);
|
||||
|
||||
im = __imlib_LoadImage(file, NULL,
|
||||
(ImlibProgressFunction) ctx->progress_func,
|
||||
ctx->progress_granularity, 1, 1, NULL);
|
||||
im = __imlib_LoadImage(file, &ila);
|
||||
|
||||
return (Imlib_Image) im;
|
||||
}
|
||||
|
@ -1291,17 +1292,15 @@ EAPI Imlib_Image
|
|||
imlib_load_image_fd(int fd, const char *file)
|
||||
{
|
||||
Imlib_Image im;
|
||||
FILE *fp;
|
||||
ImlibLoadArgs ila = { ILA0(ctx, 1, 1) };
|
||||
|
||||
CHECK_PARAM_POINTER_RETURN("file", file, NULL);
|
||||
|
||||
fp = fdopen(fd, "rb");
|
||||
if (fp)
|
||||
ila.fp = fdopen(fd, "rb");
|
||||
if (ila.fp)
|
||||
{
|
||||
im = __imlib_LoadImage(file, fp,
|
||||
(ImlibProgressFunction) ctx->progress_func,
|
||||
ctx->progress_granularity, 1, 1, NULL);
|
||||
fclose(fp);
|
||||
im = __imlib_LoadImage(file, &ila);
|
||||
fclose(ila.fp);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1326,23 +1325,13 @@ imlib_load_image_with_error_return(const char *file,
|
|||
Imlib_Load_Error * error_return)
|
||||
{
|
||||
Imlib_Image im;
|
||||
ImlibLoadError er;
|
||||
ImlibLoadArgs ila = { ILA0(ctx, 1, 0) };
|
||||
|
||||
CHECK_PARAM_POINTER_RETURN("file", file, NULL);
|
||||
|
||||
im = __imlib_LoadImage(file, NULL,
|
||||
(ImlibProgressFunction) ctx->progress_func,
|
||||
ctx->progress_granularity, 1, 0, &er);
|
||||
|
||||
if (im)
|
||||
*error_return = IMLIB_LOAD_ERROR_NONE;
|
||||
else
|
||||
{
|
||||
if (er == IMLIB_LOAD_ERROR_NONE)
|
||||
*error_return = IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT;
|
||||
else
|
||||
*error_return = (Imlib_Load_Error) er;
|
||||
}
|
||||
im = __imlib_LoadImage(file, &ila);
|
||||
if (error_return)
|
||||
*error_return = (Imlib_Load_Error) ila.err;
|
||||
|
||||
return im;
|
||||
}
|
||||
|
|
|
@ -425,9 +425,7 @@ __imlib_LoadEmbedded(ImlibLoader * l, ImlibImage * im, const char *file,
|
|||
}
|
||||
|
||||
ImlibImage *
|
||||
__imlib_LoadImage(const char *file, FILE * fp, ImlibProgressFunction progress,
|
||||
char progress_granularity, char immediate_load,
|
||||
char dont_cache, ImlibLoadError * er)
|
||||
__imlib_LoadImage(const char *file, ImlibLoadArgs * ila)
|
||||
{
|
||||
ImlibImage *im;
|
||||
ImlibLoader *best_loader;
|
||||
|
@ -451,8 +449,8 @@ __imlib_LoadImage(const char *file, FILE * fp, ImlibProgressFunction progress,
|
|||
{
|
||||
time_t current_modified_time;
|
||||
|
||||
current_modified_time = fp ?
|
||||
__imlib_FileModDateFd(fileno(fp)) :
|
||||
current_modified_time = ila->fp ?
|
||||
__imlib_FileModDateFd(fileno(ila->fp)) :
|
||||
__imlib_FileModDate(im->real_file);
|
||||
/* if the file on disk is newer than the cached one */
|
||||
if (current_modified_time != im->moddate)
|
||||
|
@ -476,9 +474,9 @@ __imlib_LoadImage(const char *file, FILE * fp, ImlibProgressFunction progress,
|
|||
}
|
||||
|
||||
im_file = im_key = NULL;
|
||||
if (fp)
|
||||
if (ila->fp)
|
||||
{
|
||||
err = fstat(fileno(fp), &st);
|
||||
err = fstat(fileno(ila->fp), &st);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -498,11 +496,9 @@ __imlib_LoadImage(const char *file, FILE * fp, ImlibProgressFunction progress,
|
|||
else if (st.st_size == 0)
|
||||
err = IMLIB_LOAD_ERROR_UNKNOWN;
|
||||
|
||||
if (er)
|
||||
*er = err;
|
||||
|
||||
if (err)
|
||||
{
|
||||
ila->err = err;
|
||||
free(im_file);
|
||||
free(im_key);
|
||||
return NULL;
|
||||
|
@ -516,15 +512,14 @@ __imlib_LoadImage(const char *file, FILE * fp, ImlibProgressFunction progress,
|
|||
im->real_file = im_file ? im_file : im->file;
|
||||
im->key = im_key;
|
||||
|
||||
if (fp)
|
||||
im->fp = fp;
|
||||
if (ila->fp)
|
||||
im->fp = ila->fp;
|
||||
else
|
||||
im->fp = fopen(im->real_file, "rb");
|
||||
|
||||
if (!im->fp)
|
||||
{
|
||||
if (er)
|
||||
*er = __imlib_ErrorFromErrno(errno, 0);
|
||||
ila->err = __imlib_ErrorFromErrno(errno, 0);
|
||||
__imlib_ConsumeImage(im);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -533,10 +528,10 @@ __imlib_LoadImage(const char *file, FILE * fp, ImlibProgressFunction progress,
|
|||
|
||||
im->data_memory_func = imlib_context_get_image_data_memory_function();
|
||||
|
||||
if (progress)
|
||||
if (ila->pfunc)
|
||||
{
|
||||
__imlib_LoadCtxInit(im, &ilc, progress, progress_granularity);
|
||||
immediate_load = 1;
|
||||
__imlib_LoadCtxInit(im, &ilc, ila->pfunc, ila->pgran);
|
||||
ila->immed = 1;
|
||||
}
|
||||
|
||||
loader_ret = LOAD_FAIL;
|
||||
|
@ -545,7 +540,7 @@ __imlib_LoadImage(const char *file, FILE * fp, ImlibProgressFunction progress,
|
|||
best_loader = __imlib_FindBestLoaderForFile(im->real_file, 0);
|
||||
errno = 0;
|
||||
if (best_loader)
|
||||
loader_ret = __imlib_LoadImageWrapper(best_loader, im, immediate_load);
|
||||
loader_ret = __imlib_LoadImageWrapper(best_loader, im, ila->immed);
|
||||
|
||||
if (loader_ret > LOAD_FAIL)
|
||||
{
|
||||
|
@ -565,7 +560,7 @@ __imlib_LoadImage(const char *file, FILE * fp, ImlibProgressFunction progress,
|
|||
continue;
|
||||
fflush(im->fp);
|
||||
rewind(im->fp);
|
||||
loader_ret = __imlib_LoadImageWrapper(l, im, immediate_load);
|
||||
loader_ret = __imlib_LoadImageWrapper(l, im, ila->immed);
|
||||
if (loader_ret > LOAD_FAIL)
|
||||
break;
|
||||
}
|
||||
|
@ -587,7 +582,7 @@ __imlib_LoadImage(const char *file, FILE * fp, ImlibProgressFunction progress,
|
|||
|
||||
im->lc = NULL;
|
||||
|
||||
if (!fp)
|
||||
if (!ila->fp)
|
||||
fclose(im->fp);
|
||||
im->fp = NULL;
|
||||
|
||||
|
@ -595,19 +590,17 @@ __imlib_LoadImage(const char *file, FILE * fp, ImlibProgressFunction progress,
|
|||
/* image struct we had and return NULL */
|
||||
if (loader_ret <= LOAD_FAIL)
|
||||
{
|
||||
/* if the caller wants an error return */
|
||||
if (er)
|
||||
*er = __imlib_ErrorFromErrno(errno, 0);
|
||||
ila->err = IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT;
|
||||
__imlib_ConsumeImage(im);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* the load succeeded - make sure the image is referenced then add */
|
||||
/* it to our cache if dont_cache isn't set */
|
||||
/* it to our cache unless nocache is set */
|
||||
im->references = 1;
|
||||
if (loader_ret == LOAD_BREAK)
|
||||
dont_cache = 1;
|
||||
if (!dont_cache)
|
||||
ila->nocache = 1;
|
||||
if (!ila->nocache)
|
||||
__imlib_AddImageToCache(im);
|
||||
else
|
||||
SET_FLAG(im->flags, F_UNCACHEABLE);
|
||||
|
|
|
@ -64,6 +64,15 @@ struct _imlibimage {
|
|||
off_t fsize;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
FILE *fp;
|
||||
ImlibProgressFunction pfunc;
|
||||
int pgran;
|
||||
char immed;
|
||||
char nocache;
|
||||
int err;
|
||||
} ImlibLoadArgs;
|
||||
|
||||
void __imlib_RemoveAllLoaders(void);
|
||||
ImlibLoader **__imlib_GetLoaderList(void);
|
||||
ImlibLoader *__imlib_FindBestLoaderForFile(const char *file,
|
||||
|
@ -78,11 +87,7 @@ void __imlib_LoaderSetFormats(ImlibLoader * l,
|
|||
unsigned int num);
|
||||
|
||||
ImlibImage *__imlib_CreateImage(int w, int h, DATA32 * data);
|
||||
ImlibImage *__imlib_LoadImage(const char *file, FILE * fp,
|
||||
ImlibProgressFunction progress,
|
||||
char progress_granularity,
|
||||
char immediate_load, char dont_cache,
|
||||
ImlibLoadError * er);
|
||||
ImlibImage *__imlib_LoadImage(const char *file, ImlibLoadArgs * ila);
|
||||
int __imlib_LoadEmbedded(ImlibLoader * l, ImlibImage * im,
|
||||
const char *file, int load_data);
|
||||
int __imlib_LoadImageData(ImlibImage * im);
|
||||
|
|
Loading…
Reference in New Issue