Edje_Edit: image set API

list of sets (edje_edit_image_set_list_get)
renaming set (edje_edit_image_set_rename)
add new set (edje_edit_image_set_add)
set's id (edje_edit_image_set_id_get)
This commit is contained in:
Vitalii Vorobiov 2016-04-27 11:52:04 +03:00
parent 2f6bdde1dd
commit a9240d86a4
2 changed files with 172 additions and 0 deletions

View File

@ -5533,6 +5533,55 @@ EAPI const char *edje_edit_font_path_get(Evas_Object *obj, const char *alias);
EAPI Eina_Bool
edje_edit_image_set_exists(Evas_Object *obj, const char *image);
/** Get id of image set.
*
* @param obj Object being edited.
* @param name image set's name.
*
* @return The id of the given image name.
*
* @since 1.18
*/
EAPI int
edje_edit_image_set_id_get(Evas_Object *obj, const char *name);
/** Rename image set.
*
* @param obj Object being edited.
* @param set image set's name.
* @param new_set new name of image set.
*
* @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
*
* @since 1.18
*/
EAPI Eina_Bool
edje_edit_image_set_rename(Evas_Object *obj, const char *set, const char *new_set);
/** Get the list of all the image sets in the given edje.
* Use edje_edit_string_list_free() when you don't need the list anymore.
*
* @param obj Object being edited.
*
* @return A List containing all image sets names found in the edje file.
*
* @since 1.18
*/
EAPI Eina_List *
edje_edit_image_set_list_get(Evas_Object *obj);
/** Add new image set.
*
* @param obj Object being edited.
* @param name image set's name.
*
* @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
*
* @since 1.18
*/
EAPI Eina_Bool
edje_edit_image_set_add(Evas_Object *obj, const char *name);
//@}
/******************************************************************************/
/************************** IMAGES API ************************************/

View File

@ -286,6 +286,22 @@ _edje_image_id_find(Edje_Edit *eed, const char *image_name)
return -1;
}
static int
_edje_set_id_find(Edje_Edit *eed, const char *set_name)
{
unsigned int i;
if (!eed->base->file) return -1;
if (!eed->base->file->image_dir) return -1;
for (i = 0; i < eed->base->file->image_dir->sets_count; ++i)
if (eed->base->file->image_dir->sets[i].name
&& !strcmp(set_name, eed->base->file->image_dir->sets[i].name))
return i;
return -1;
}
static const char *
_edje_image_name_find(Edje_Edit *eed, int image_id)
{
@ -8429,6 +8445,113 @@ edje_edit_image_set_exists(Evas_Object *obj, const char *image)
return EINA_FALSE;
}
EAPI int
edje_edit_image_set_id_get(Evas_Object *obj, const char *image_name)
{
GET_EED_OR_RETURN(-1);
return _edje_set_id_find(eed, image_name);
}
EAPI Eina_Bool
edje_edit_image_set_rename(Evas_Object *obj, const char *set, const char *new_set)
{
Edje_Image_Directory_Set *de = NULL;
unsigned int i;
GET_ED_OR_RETURN(EINA_FALSE);
if (!new_set) return EINA_FALSE;
// Check if image set with name 'new_set' already exists
if (edje_edit_image_set_id_get(obj, new_set) >= 0)
return EINA_FALSE;
for (i = 0; i < ed->file->image_dir->sets_count; ++i)
{
de = ed->file->image_dir->sets + i;
if ((de->name) && (!strcmp(set, de->name)))
break;
}
if (i == ed->file->image_dir->sets_count) return EINA_FALSE;
de->name = (char *)new_set;
return EINA_TRUE;
}
EAPI Eina_List *
edje_edit_image_set_list_get(Evas_Object *obj)
{
Eina_List *sets = NULL;
unsigned int i;
GET_ED_OR_RETURN(NULL);
if (!ed->file) return NULL;
if (!ed->file->image_dir) return NULL;
for (i = 0; i < ed->file->image_dir->sets_count; ++i)
sets = eina_list_append(sets,
eina_stringshare_add(ed->file->image_dir->sets[i].name));
return sets;
}
EAPI Eina_Bool
edje_edit_image_set_add(Evas_Object *obj, const char *name)
{
Edje_Image_Directory_Set *de;
unsigned int i;
int free_id = -1;
GET_ED_OR_RETURN(EINA_FALSE);
if (!name) return EINA_FALSE;
if (!ed->file) return EINA_FALSE;
/* Create Image_Directory if not exist */
if (!ed->file->image_dir)
{
ed->file->image_dir = _alloc(sizeof(Edje_Image_Directory));
if (!ed->file->image_dir) return EINA_FALSE;
}
/* Loop trough image directory to find if image exist */
for (i = 0; i < ed->file->image_dir->sets_count; ++i)
{
de = ed->file->image_dir->sets + i;
if (!de->name)
free_id = i;
else if (!strcmp(name, de->name))
return EINA_FALSE;
}
if (free_id == -1)
{
Edje_Image_Directory_Set *tmp;
unsigned int count;
count = ed->file->image_dir->sets_count + 1;
tmp = realloc(ed->file->image_dir->sets,
sizeof (Edje_Image_Directory_Set) * count);
if (!tmp) return EINA_FALSE;
ed->file->image_dir->sets = tmp;
free_id = ed->file->image_dir->sets_count;
ed->file->image_dir->sets_count = count;
}
/* Set Image Entry */
de = ed->file->image_dir->sets + free_id;
de->name = (char *)name;
de->id = free_id;
de->entries = NULL;
return EINA_TRUE;
}
/****************/
/* IMAGES API */
/****************/