forked from old/legacy-imlib2
added ability to attach integert vlue and data poitner tags to images by
string keys (with destructors optional) - wil be used for saving of images (savers will look for these keys to gleen parameters for saaving) SVN revision: 1092
This commit is contained in:
parent
da9869d97d
commit
73b408fc3d
60
api.c
60
api.c
|
@ -47,8 +47,9 @@ if (!(param)) \
|
|||
return; \
|
||||
}
|
||||
|
||||
typedef void (*Imlib_Internal_Progress_Function)(ImlibImage*, char,
|
||||
typedef void (*Imlib_Internal_Progress_Function)(void *, char,
|
||||
int, int, int, int);
|
||||
typedef void (*Imlib_Internal_Data_Destructor_Function)(void *, void *);
|
||||
|
||||
int
|
||||
imlib_get_cache_size(void)
|
||||
|
@ -1798,3 +1799,60 @@ imlib_image_query_pixel(Imlib_Image image, int x, int y,
|
|||
color_return->blue = (*p) & 0xff;
|
||||
color_return->alpha = ((*p) >> 24) & 0xff;
|
||||
}
|
||||
|
||||
void
|
||||
imlib_image_attach_data_value(Imlib_Image image, char *key,
|
||||
void *data, int value,
|
||||
Imlib_Internal_Data_Destructor_Function destructor_function)
|
||||
{
|
||||
ImlibImage *im;
|
||||
|
||||
CAST_IMAGE(im, image);
|
||||
__imlib_AttachTag(im, key, value, data, destructor_function);
|
||||
}
|
||||
|
||||
void *
|
||||
imlib_image_get_attached_data(Imlib_Image image, char *key)
|
||||
{
|
||||
ImlibImageTag *t;
|
||||
ImlibImage *im;
|
||||
|
||||
CAST_IMAGE(im, image);
|
||||
t = __imlib_GetTag(im, key);
|
||||
if (t)
|
||||
return t->data;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int
|
||||
imlib_image_get_attached_value(Imlib_Image image, char *key)
|
||||
{
|
||||
ImlibImageTag *t;
|
||||
ImlibImage *im;
|
||||
|
||||
CAST_IMAGE(im, image);
|
||||
t = __imlib_GetTag(im, key);
|
||||
if (t)
|
||||
return t->val;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
imlib_image_remove_attached_data_value(Imlib_Image image, char *key)
|
||||
{
|
||||
ImlibImage *im;
|
||||
|
||||
CAST_IMAGE(im, image);
|
||||
__imlib_RemoveTag(im, key);
|
||||
}
|
||||
|
||||
void
|
||||
imlib_image_remove_and_free_attached_data_value(Imlib_Image image, char *key)
|
||||
{
|
||||
ImlibImageTag *t;
|
||||
ImlibImage *im;
|
||||
|
||||
CAST_IMAGE(im, image);
|
||||
t = __imlib_RemoveTag(im, key);
|
||||
__imlib_FreeTag(im, t);
|
||||
}
|
||||
|
|
12
api.h
12
api.h
|
@ -70,9 +70,10 @@ struct _imlib_rectangle
|
|||
int x, y, width, height;
|
||||
};
|
||||
|
||||
typedef void (*Imlib_Progress_Function)(Imlib_Image *im, char percent,
|
||||
typedef void (*Imlib_Progress_Function)(Imlib_Image im, char percent,
|
||||
int update_x, int update_y,
|
||||
int update_w, int update_h);
|
||||
typedef void (*Imlib_Data_Destructor_Function)(Imlib_Image im, void *data);
|
||||
|
||||
/* init and setup functions */
|
||||
int imlib_get_cache_size(void);
|
||||
|
@ -363,6 +364,15 @@ void imlib_image_fill_color_range_rectangle(Imlib_Image image, int x, int y,
|
|||
void imlib_image_query_pixel(Imlib_Image image, int x, int y,
|
||||
Imlib_Color *color_return);
|
||||
|
||||
|
||||
void imlib_image_attach_data_value(Imlib_Image image, char *key,
|
||||
void *data, int value,
|
||||
Imlib_Data_Destructor_Function destructor_function);
|
||||
void *imlib_image_get_attached_data(Imlib_Image image, char *key);
|
||||
int imlib_image_get_attached_value(Imlib_Image image, char *key);
|
||||
void imlib_image_remove_attached_data_value(Imlib_Image image, char *key);
|
||||
void imlib_image_remove_and_free_attached_data_value(Imlib_Image image, char *key);
|
||||
|
||||
# if 0
|
||||
/* image saving functions */
|
||||
void imlib_save_image(Imlib_Image image, char *filename);
|
||||
|
|
510
blend.c
510
blend.c
|
@ -302,21 +302,24 @@ __imlib_AddBlendRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + ((r * a) >> 8);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = gg + ((g * a) >> 8);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = bb + ((b * a) >> 8);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
if (a > 0)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + ((r * a) >> 8);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = gg + ((g * a) >> 8);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = bb + ((b * a) >> 8);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
}
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
|
@ -340,25 +343,28 @@ __imlib_AddBlendRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
aa = (*p2 >> 24) & 0xff;
|
||||
|
||||
tmp = rr + ((r * a) >> 8);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = gg + ((g * a) >> 8);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = bb + ((b * a) >> 8);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = a + aa;
|
||||
na = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
if (a > 0)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
aa = (*p2 >> 24) & 0xff;
|
||||
|
||||
tmp = rr + ((r * a) >> 8);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = gg + ((g * a) >> 8);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = bb + ((b * a) >> 8);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = a + aa;
|
||||
na = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
}
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
|
@ -390,11 +396,11 @@ __imlib_AddCopyRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + r;
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = gg + g;
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = bb + b;
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
*p2 = (*p2 & 0xff000000) | (nr << 16) | (ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
|
@ -427,11 +433,11 @@ __imlib_AddCopyRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + r;
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = gg + g;
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = bb + b;
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
|
@ -458,21 +464,24 @@ __imlib_SubBlendRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr - ((r * a) >> 8);
|
||||
nr = tmp & (~(tmp >> 8));
|
||||
tmp = gg - ((g * a) >> 8);
|
||||
ng = tmp & (~(tmp >> 8));
|
||||
tmp = bb - ((b * a) >> 8);
|
||||
nb = tmp & (~(tmp >> 8));
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
if (a > 0)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr - ((r * a) >> 8);
|
||||
nr = tmp & (~(tmp >> 8));
|
||||
tmp = gg - ((g * a) >> 8);
|
||||
ng = tmp & (~(tmp >> 8));
|
||||
tmp = bb - ((b * a) >> 8);
|
||||
nb = tmp & (~(tmp >> 8));
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
}
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
|
@ -496,25 +505,28 @@ __imlib_SubBlendRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
aa = (*p2 >> 24) & 0xff;
|
||||
|
||||
tmp = rr - ((r * a) >> 8);
|
||||
nr = tmp & (~(tmp >> 8));
|
||||
tmp = gg - ((g * a) >> 8);
|
||||
ng = tmp & (~(tmp >> 8));
|
||||
tmp = bb - ((b * a) >> 8);
|
||||
nb = tmp & (~(tmp >> 8));
|
||||
tmp = a + aa;
|
||||
na = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
if (a > 0)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
aa = (*p2 >> 24) & 0xff;
|
||||
|
||||
tmp = rr - ((r * a) >> 8);
|
||||
nr = tmp & (~(tmp >> 8));
|
||||
tmp = gg - ((g * a) >> 8);
|
||||
ng = tmp & (~(tmp >> 8));
|
||||
tmp = bb - ((b * a) >> 8);
|
||||
nb = tmp & (~(tmp >> 8));
|
||||
tmp = a + aa;
|
||||
na = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
}
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
|
@ -615,21 +627,24 @@ __imlib_ReBlendRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + (((r - 127) * a) >> 7);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
tmp = gg + (((g - 127) * a) >> 7);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
tmp = bb + (((b - 127) * a) >> 7);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
if (a > 0)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + (((r - 127) * a) >> 7);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
tmp = gg + (((g - 127) * a) >> 7);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
tmp = bb + (((b - 127) * a) >> 7);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
}
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
|
@ -653,25 +668,28 @@ __imlib_ReBlendRGBAToRGBA(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
aa = (*p2 >> 24) & 0xff;
|
||||
|
||||
tmp = rr + (((r - 127) * a) >> 7);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
tmp = gg + (((g - 127) * a) >> 7);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
tmp = bb + (((b - 127) * a) >> 7);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
tmp = a + aa;
|
||||
na = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
if (a > 0)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
aa = (*p2 >> 24) & 0xff;
|
||||
|
||||
tmp = rr + (((r - 127) * a) >> 7);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
tmp = gg + (((g - 127) * a) >> 7);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
tmp = bb + (((b - 127) * a) >> 7);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
tmp = a + aa;
|
||||
na = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
}
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
|
@ -703,11 +721,11 @@ __imlib_ReCopyRGBAToRGB(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump,
|
|||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + ((r - 127) << 1);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
tmp = gg + ((g - 127) << 1);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
tmp = bb + ((b - 127) << 1);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
*p2 = (*p2 & 0xff000000) | (nr << 16) | (ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
|
@ -940,23 +958,26 @@ __imlib_AddBlendRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_ju
|
|||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + ((r * a) >> 8);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = gg + ((g * a) >> 8);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = bb + ((b * a) >> 8);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
if (a > 0)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + ((r * a) >> 8);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = gg + ((g * a) >> 8);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = bb + ((b * a) >> 8);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
}
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
|
@ -980,27 +1001,30 @@ __imlib_AddBlendRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_j
|
|||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
aa = (*p2 >> 24) & 0xff;
|
||||
|
||||
tmp = rr + ((r * a) >> 8);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = gg + ((g * a) >> 8);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = bb + ((b * a) >> 8);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
tmp = a + aa;
|
||||
na = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
if (a > 0)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
aa = (*p2 >> 24) & 0xff;
|
||||
|
||||
tmp = rr + ((r * a) >> 8);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = gg + ((g * a) >> 8);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = bb + ((b * a) >> 8);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = a + aa;
|
||||
na = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
}
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
|
@ -1034,11 +1058,11 @@ __imlib_AddCopyRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jum
|
|||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + r;
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = gg + g;
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = bb + b;
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
*p2 = (*p2 & 0xff000000) | (nr << 16) | (ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
|
@ -1073,11 +1097,11 @@ __imlib_AddCopyRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_ju
|
|||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + r;
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = gg + g;
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
tmp = bb + b;
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & 0xff;
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
|
@ -1104,23 +1128,26 @@ __imlib_SubBlendRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_ju
|
|||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr - ((r * a) >> 8);
|
||||
nr = tmp & (~(tmp >> 8));
|
||||
tmp = gg - ((g * a) >> 8);
|
||||
ng = tmp & (~(tmp >> 8));
|
||||
tmp = bb - ((b * a) >> 8);
|
||||
nb = tmp & (~(tmp >> 8));
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
if (a > 0)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr - ((r * a) >> 8);
|
||||
nr = tmp & (~(tmp >> 8));
|
||||
tmp = gg - ((g * a) >> 8);
|
||||
ng = tmp & (~(tmp >> 8));
|
||||
tmp = bb - ((b * a) >> 8);
|
||||
nb = tmp & (~(tmp >> 8));
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
}
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
|
@ -1144,27 +1171,30 @@ __imlib_SubBlendRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_j
|
|||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
aa = (*p2 >> 24) & 0xff;
|
||||
|
||||
tmp = rr - ((r * a) >> 8);
|
||||
nr = tmp & (~(tmp >> 8));
|
||||
tmp = gg - ((g * a) >> 8);
|
||||
ng = tmp & (~(tmp >> 8));
|
||||
tmp = bb - ((b * a) >> 8);
|
||||
nb = tmp & (~(tmp >> 8));
|
||||
tmp = a + aa;
|
||||
na = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
if (a > 0)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
aa = (*p2 >> 24) & 0xff;
|
||||
|
||||
tmp = rr - ((r * a) >> 8);
|
||||
nr = tmp & (~(tmp >> 8));
|
||||
tmp = gg - ((g * a) >> 8);
|
||||
ng = tmp & (~(tmp >> 8));
|
||||
tmp = bb - ((b * a) >> 8);
|
||||
nb = tmp & (~(tmp >> 8));
|
||||
tmp = a + aa;
|
||||
na = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
}
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
|
@ -1269,23 +1299,26 @@ __imlib_ReBlendRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jum
|
|||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + (((r - 127) * a) >> 7);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
tmp = gg + (((g - 127) * a) >> 7);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
tmp = bb + (((b - 127) * a) >> 7);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
if (a > 0)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + (((r - 127) * a) >> 7);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
tmp = gg + (((g - 127) * a) >> 7);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
tmp = bb + (((b - 127) * a) >> 7);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
}
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
|
@ -1309,27 +1342,30 @@ __imlib_ReBlendRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_ju
|
|||
for (x = 0; x < w; x++)
|
||||
{
|
||||
a = (*p1 >> 24) & 0xff;
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
aa = (*p2 >> 24) & 0xff;
|
||||
|
||||
tmp = rr + (((r - 127) * a) >> 7);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
tmp = gg + (((g - 127) * a) >> 7);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
tmp = bb + (((b - 127) * a) >> 7);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
tmp = a + aa;
|
||||
na = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
if (a > 0)
|
||||
{
|
||||
b = (*p1 ) & 0xff;
|
||||
g = (*p1 >> 8 ) & 0xff;
|
||||
r = (*p1 >> 16) & 0xff;
|
||||
|
||||
CMOD_APPLY_RGBA(cm, r, g, b, a);
|
||||
|
||||
bb = (*p2 ) & 0xff;
|
||||
gg = (*p2 >> 8 ) & 0xff;
|
||||
rr = (*p2 >> 16) & 0xff;
|
||||
aa = (*p2 >> 24) & 0xff;
|
||||
|
||||
tmp = rr + (((r - 127) * a) >> 7);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
tmp = gg + (((g - 127) * a) >> 7);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
tmp = bb + (((b - 127) * a) >> 7);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
tmp = a + aa;
|
||||
na = (tmp | ((tmp & 256) - ((tmp & 256) >> 8)));
|
||||
*p2 = (na << 24) | (nr << 16) |
|
||||
(ng << 8) | nb;
|
||||
}
|
||||
p1++;
|
||||
p2++;
|
||||
}
|
||||
|
@ -1363,11 +1399,11 @@ __imlib_ReCopyRGBAToRGBCmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jump
|
|||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + ((r - 127) << 1);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
tmp = gg + ((g - 127) << 1);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
tmp = bb + ((b - 127) << 1);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
*p2 = (*p2 & 0xff000000) | (nr << 16) | (ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
|
@ -1402,11 +1438,11 @@ __imlib_ReCopyRGBAToRGBACmod(DATA32 *src, int src_jump, DATA32 *dst, int dst_jum
|
|||
rr = (*p2 >> 16) & 0xff;
|
||||
|
||||
tmp = rr + ((r - 127) << 1);
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
nr = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
tmp = gg + ((g - 127) << 1);
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
ng = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
tmp = bb + ((b - 127) << 1);
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9));
|
||||
nb = (tmp | ((tmp & 256) - ((tmp & 256) >> 8))) & (~(tmp >> 9)) & 0xff;
|
||||
*p2 = (nr << 16) | (ng << 8) | nb;
|
||||
p1++;
|
||||
p2++;
|
||||
|
|
82
image.c
82
image.c
|
@ -1,7 +1,6 @@
|
|||
#include "common.h"
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
#include <dlfcn.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
|
@ -17,6 +16,83 @@ static ImlibImagePixmap *pixmaps = NULL;
|
|||
static ImlibLoader *loaders = NULL;
|
||||
static int cache_size = 4096 * 1024;
|
||||
|
||||
void
|
||||
__imlib_AttachTag(ImlibImage *im, char *key, int val, void *data,
|
||||
void (*destructor)(ImlibImage *im, void *data))
|
||||
{
|
||||
ImlibImageTag *t;
|
||||
|
||||
if (!key)
|
||||
return;
|
||||
|
||||
t = malloc(sizeof(ImlibImageTag));
|
||||
t->key = strdup(key);
|
||||
t->val = val;
|
||||
t->data = data;
|
||||
t->destructor = destructor;
|
||||
t->next = im->tags;
|
||||
im->tags = t;
|
||||
}
|
||||
|
||||
ImlibImageTag *
|
||||
__imlib_GetTag(ImlibImage *im, char *key)
|
||||
{
|
||||
ImlibImageTag *t;
|
||||
|
||||
t = im->tags;
|
||||
while (t)
|
||||
{
|
||||
if (!strcmp(t->key, key))
|
||||
return t;
|
||||
t = t->next;
|
||||
}
|
||||
}
|
||||
|
||||
ImlibImageTag *
|
||||
__imlib_RemoveTag(ImlibImage *im, char *key)
|
||||
{
|
||||
ImlibImageTag *t, *tt;
|
||||
|
||||
tt = NULL;
|
||||
t = im->tags;
|
||||
while (t)
|
||||
{
|
||||
if (!strcmp(t->key, key))
|
||||
{
|
||||
if (tt)
|
||||
tt->next = t->next;
|
||||
else
|
||||
im->tags = t->next;
|
||||
return t;
|
||||
}
|
||||
tt = t;
|
||||
t = t->next;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_FreeTag(ImlibImage *im, ImlibImageTag *t)
|
||||
{
|
||||
free(t->key);
|
||||
if (t->destructor)
|
||||
t->destructor(im, t->data);
|
||||
free(t);
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_FreeAllTags(ImlibImage *im)
|
||||
{
|
||||
ImlibImageTag *t, *tt;
|
||||
|
||||
t = im->tags;
|
||||
while (t)
|
||||
{
|
||||
tt = t;
|
||||
t = t->next;
|
||||
__imlib_FreeTag(im, tt);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_SetCacheSize(int size)
|
||||
{
|
||||
|
@ -43,12 +119,14 @@ __imlib_ProduceImage(void)
|
|||
im->flags = F_NONE;
|
||||
im->loader = NULL;
|
||||
im->next = NULL;
|
||||
im->tags = NULL;
|
||||
return im;
|
||||
}
|
||||
|
||||
void
|
||||
__imlib_ConsumeImage(ImlibImage *im)
|
||||
{
|
||||
__imlib_FreeAllTags(im);
|
||||
if (im->file)
|
||||
free(im->file);
|
||||
if ((IMAGE_FREE_DATA(im)) && (im->data))
|
||||
|
@ -469,7 +547,7 @@ __imlib_ConsumeLoader(ImlibLoader *l)
|
|||
if (l->file)
|
||||
free(l->file);
|
||||
if (l->handle)
|
||||
dlclose(l->handle);
|
||||
lt_dlclose(l->handle);
|
||||
if (l->formats)
|
||||
{
|
||||
int i;
|
||||
|
|
18
image.h
18
image.h
|
@ -7,6 +7,7 @@ typedef struct _imlibimage ImlibImage;
|
|||
typedef struct _imlibimagepixmap ImlibImagePixmap;
|
||||
typedef struct _imlibborder ImlibBorder;
|
||||
typedef struct _imlibloader ImlibLoader;
|
||||
typedef struct _imlibimagetag ImlibImageTag;
|
||||
|
||||
enum _load_error
|
||||
{
|
||||
|
@ -47,6 +48,15 @@ struct _imlibborder
|
|||
int left, right, top, bottom;
|
||||
};
|
||||
|
||||
struct _imlibimagetag
|
||||
{
|
||||
char *key;
|
||||
int val;
|
||||
void *data;
|
||||
void (*destructor)(ImlibImage *im, void *data);
|
||||
ImlibImageTag *next;
|
||||
};
|
||||
|
||||
struct _imlibimage
|
||||
{
|
||||
char *file;
|
||||
|
@ -59,6 +69,7 @@ struct _imlibimage
|
|||
ImlibLoader *loader;
|
||||
char *format;
|
||||
ImlibImage *next;
|
||||
ImlibImageTag *tags;
|
||||
};
|
||||
|
||||
struct _imlibimagepixmap
|
||||
|
@ -98,6 +109,13 @@ struct _imlibloader
|
|||
ImlibLoader *next;
|
||||
};
|
||||
|
||||
void __imlib_AttachTag(ImlibImage *im, char *key, int val, void *data,
|
||||
void (*destructor)(ImlibImage *im, void *data));
|
||||
ImlibImageTag *__imlib_GetTag(ImlibImage *im, char *key);
|
||||
ImlibImageTag *__imlib_RemoveTag(ImlibImage *im, char *key);
|
||||
void __imlib_FreeTag(ImlibImage *im, ImlibImageTag *t);
|
||||
void __imlib_FreeAllTags(ImlibImage *im);
|
||||
|
||||
void __imlib_SetCacheSize(int size);
|
||||
int __imlib_GetCacheSize(void);
|
||||
ImlibImage *__imlib_ProduceImage(void);
|
||||
|
|
Loading…
Reference in New Issue