forked from old/legacy-imlib2
image.c: Move image tag functions to separate file
This commit is contained in:
parent
0c7464f0db
commit
02e85ee069
|
@ -45,6 +45,7 @@ grad.c \
|
||||||
grad.h \
|
grad.h \
|
||||||
image.c \
|
image.c \
|
||||||
image.h \
|
image.h \
|
||||||
|
image_tags.c \
|
||||||
line.c \
|
line.c \
|
||||||
modules.c \
|
modules.c \
|
||||||
polygon.c \
|
polygon.c \
|
||||||
|
|
|
@ -73,102 +73,6 @@ __imlib_ReplaceData(ImlibImage * im, unsigned int *new_data)
|
||||||
im->data_memory_func = NULL;
|
im->data_memory_func = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* attach a string key'd data and/or int value to an image that cna be */
|
|
||||||
/* looked up later by its string key */
|
|
||||||
__EXPORT__ void
|
|
||||||
__imlib_AttachTag(ImlibImage * im, const char *key, int val, void *data,
|
|
||||||
ImlibDataDestructorFunction destructor)
|
|
||||||
{
|
|
||||||
ImlibImageTag *t;
|
|
||||||
|
|
||||||
/* no string key? abort */
|
|
||||||
if (!key)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* if a tag of that name already exists - remove it and free it */
|
|
||||||
if ((t = __imlib_RemoveTag(im, key)))
|
|
||||||
__imlib_FreeTag(im, t);
|
|
||||||
/* allocate the struct */
|
|
||||||
t = malloc(sizeof(ImlibImageTag));
|
|
||||||
/* fill it int */
|
|
||||||
t->key = strdup(key);
|
|
||||||
t->val = val;
|
|
||||||
t->data = data;
|
|
||||||
t->destructor = destructor;
|
|
||||||
t->next = im->tags;
|
|
||||||
/* prepend it to the list of tags */
|
|
||||||
im->tags = t;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* look up a tage by its key on the image it was attached to */
|
|
||||||
__EXPORT__ ImlibImageTag *
|
|
||||||
__imlib_GetTag(ImlibImage * im, const char *key)
|
|
||||||
{
|
|
||||||
ImlibImageTag *t;
|
|
||||||
|
|
||||||
t = im->tags;
|
|
||||||
while (t)
|
|
||||||
{
|
|
||||||
if (!strcmp(t->key, key))
|
|
||||||
return t;
|
|
||||||
t = t->next;
|
|
||||||
}
|
|
||||||
/* no tag found - return NULL */
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* remove a tag by looking it up by its key and removing it from */
|
|
||||||
/* the list of keys */
|
|
||||||
ImlibImageTag *
|
|
||||||
__imlib_RemoveTag(ImlibImage * im, const 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;
|
|
||||||
}
|
|
||||||
/* no tag found - NULL */
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* free the data struct for the tag and if a destructor function was */
|
|
||||||
/* provided call it on the data member */
|
|
||||||
void
|
|
||||||
__imlib_FreeTag(ImlibImage * im, ImlibImageTag * t)
|
|
||||||
{
|
|
||||||
free(t->key);
|
|
||||||
if (t->destructor)
|
|
||||||
t->destructor(im, t->data);
|
|
||||||
free(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* free all the tags attached to an image */
|
|
||||||
void
|
|
||||||
__imlib_FreeAllTags(ImlibImage * im)
|
|
||||||
{
|
|
||||||
ImlibImageTag *t, *tt;
|
|
||||||
|
|
||||||
t = im->tags;
|
|
||||||
while (t)
|
|
||||||
{
|
|
||||||
tt = t;
|
|
||||||
t = t->next;
|
|
||||||
__imlib_FreeTag(im, tt);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* create an image data struct and fill it in */
|
/* create an image data struct and fill it in */
|
||||||
static ImlibImage *
|
static ImlibImage *
|
||||||
__imlib_ProduceImage(void)
|
__imlib_ProduceImage(void)
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "image.h"
|
||||||
|
|
||||||
|
/* attach a string key'd data and/or int value to an image that cna be */
|
||||||
|
/* looked up later by its string key */
|
||||||
|
__EXPORT__ void
|
||||||
|
__imlib_AttachTag(ImlibImage * im, const char *key, int val, void *data,
|
||||||
|
ImlibDataDestructorFunction destructor)
|
||||||
|
{
|
||||||
|
ImlibImageTag *t;
|
||||||
|
|
||||||
|
/* no string key? abort */
|
||||||
|
if (!key)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* if a tag of that name already exists - remove it and free it */
|
||||||
|
if ((t = __imlib_RemoveTag(im, key)))
|
||||||
|
__imlib_FreeTag(im, t);
|
||||||
|
/* allocate the struct */
|
||||||
|
t = malloc(sizeof(ImlibImageTag));
|
||||||
|
/* fill it int */
|
||||||
|
t->key = strdup(key);
|
||||||
|
t->val = val;
|
||||||
|
t->data = data;
|
||||||
|
t->destructor = destructor;
|
||||||
|
t->next = im->tags;
|
||||||
|
/* prepend it to the list of tags */
|
||||||
|
im->tags = t;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* look up a tage by its key on the image it was attached to */
|
||||||
|
__EXPORT__ ImlibImageTag *
|
||||||
|
__imlib_GetTag(ImlibImage * im, const char *key)
|
||||||
|
{
|
||||||
|
ImlibImageTag *t;
|
||||||
|
|
||||||
|
t = im->tags;
|
||||||
|
while (t)
|
||||||
|
{
|
||||||
|
if (!strcmp(t->key, key))
|
||||||
|
return t;
|
||||||
|
t = t->next;
|
||||||
|
}
|
||||||
|
/* no tag found - return NULL */
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remove a tag by looking it up by its key and removing it from */
|
||||||
|
/* the list of keys */
|
||||||
|
ImlibImageTag *
|
||||||
|
__imlib_RemoveTag(ImlibImage * im, const 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;
|
||||||
|
}
|
||||||
|
/* no tag found - NULL */
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* free the data struct for the tag and if a destructor function was */
|
||||||
|
/* provided call it on the data member */
|
||||||
|
void
|
||||||
|
__imlib_FreeTag(ImlibImage * im, ImlibImageTag * t)
|
||||||
|
{
|
||||||
|
free(t->key);
|
||||||
|
if (t->destructor)
|
||||||
|
t->destructor(im, t->data);
|
||||||
|
free(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* free all the tags attached to an image */
|
||||||
|
void
|
||||||
|
__imlib_FreeAllTags(ImlibImage * im)
|
||||||
|
{
|
||||||
|
ImlibImageTag *t, *tt;
|
||||||
|
|
||||||
|
t = im->tags;
|
||||||
|
while (t)
|
||||||
|
{
|
||||||
|
tt = t;
|
||||||
|
t = t->next;
|
||||||
|
__imlib_FreeTag(im, tt);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue