forked from enlightenment/efl
edje: add edje_color_class_active_iterator_new()
This function make it possible to get a list of active Edje_Color_Class in an application. Think about Enlightenment color class configuration, but can now be done on any application dynamically. @feature
This commit is contained in:
parent
09f304a33c
commit
5906569f7f
|
@ -1260,6 +1260,16 @@ EAPI void edje_color_class_del (const char *color_class);
|
|||
*/
|
||||
EAPI Eina_List *edje_color_class_list (void);
|
||||
|
||||
/**
|
||||
* @brief Iterate over all the active class of an application.
|
||||
*
|
||||
* @return Return an iterator of Edje_Color_Class of the currently active color class
|
||||
*
|
||||
* This function only iterate over the Edje_Color_Class in use by
|
||||
* an application.
|
||||
*/
|
||||
EAPI Eina_Iterator *edje_color_class_active_iterator_new(void);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
|
|
@ -653,6 +653,104 @@ edje_color_class_list(void)
|
|||
return fdata.list;
|
||||
}
|
||||
|
||||
typedef struct _Edje_Active_Color_Class_Iterator Edje_Active_Color_Class_Iterator;
|
||||
struct _Edje_Active_Color_Class_Iterator
|
||||
{
|
||||
Eina_Iterator iterator;
|
||||
|
||||
Edje_Color_Class cc;
|
||||
|
||||
Eina_Iterator *classes;
|
||||
};
|
||||
|
||||
static Eina_Bool
|
||||
_edje_color_class_active_iterator_next(Eina_Iterator *it, void **data)
|
||||
{
|
||||
Edje_Active_Color_Class_Iterator *et = (void*) it;
|
||||
Eina_Hash_Tuple *tuple = NULL;
|
||||
Edje_Refcount *er = NULL;
|
||||
Eina_Iterator *ith;
|
||||
Edje_Color_Class *cc;
|
||||
int r, g, b, a;
|
||||
int r2, g2, b2, a2;
|
||||
int r3, g3, b3, a3;
|
||||
|
||||
if (!eina_iterator_next(et->classes, (void**) &tuple)) return EINA_FALSE;
|
||||
if (!tuple) return EINA_FALSE;
|
||||
|
||||
if (!edje_color_class_get(tuple->key,
|
||||
&r, &g, &b, &a,
|
||||
&r2, &g2, &b2, &a2,
|
||||
&r3, &g3, &b3, &a3))
|
||||
return EINA_FALSE;
|
||||
|
||||
/*
|
||||
Any of the Edje object referenced should have a file with a valid
|
||||
description for this color class. Let's bet on that for now.
|
||||
*/
|
||||
ith = eina_hash_iterator_data_new(tuple->data);
|
||||
if (!eina_iterator_next(ith, (void**) &er)) return EINA_FALSE;
|
||||
cc = eina_hash_find(er->ed->file->color_hash, tuple->key);
|
||||
if (!cc) return EINA_FALSE;
|
||||
|
||||
/*
|
||||
Now set the value of a fake color class with current value as set
|
||||
and description from edc.
|
||||
*/
|
||||
et->cc.name = tuple->key;
|
||||
et->cc.desc = cc->desc;
|
||||
et->cc.r = r;
|
||||
et->cc.g = g;
|
||||
et->cc.b = b;
|
||||
et->cc.a = a;
|
||||
et->cc.r2 = r2;
|
||||
et->cc.g2 = g2;
|
||||
et->cc.b2 = b2;
|
||||
et->cc.a2 = a2;
|
||||
et->cc.r3 = r3;
|
||||
et->cc.g3 = g3;
|
||||
et->cc.b3 = b3;
|
||||
et->cc.a3 = a3;
|
||||
|
||||
*data = &et->cc;
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static void *
|
||||
_edje_color_class_active_iterator_container(Eina_Iterator *it EINA_UNUSED)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
_edje_color_class_active_iterator_free(Eina_Iterator *it)
|
||||
{
|
||||
Edje_Active_Color_Class_Iterator *et = (void*) it;
|
||||
|
||||
eina_iterator_free(et->classes);
|
||||
EINA_MAGIC_SET(&et->iterator, 0);
|
||||
free(et);
|
||||
}
|
||||
|
||||
EAPI Eina_Iterator *
|
||||
edje_color_class_active_iterator_new(void)
|
||||
{
|
||||
Edje_Active_Color_Class_Iterator *it;
|
||||
|
||||
it = calloc(1, sizeof (Edje_Active_Color_Class_Iterator));
|
||||
if (!it) return NULL;
|
||||
|
||||
EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
|
||||
it->classes = eina_hash_iterator_tuple_new(_edje_color_class_member_hash);
|
||||
|
||||
it->iterator.version = EINA_ITERATOR_VERSION;
|
||||
it->iterator.next = _edje_color_class_active_iterator_next;
|
||||
it->iterator.get_container = _edje_color_class_active_iterator_container;
|
||||
it->iterator.free = _edje_color_class_active_iterator_free;
|
||||
|
||||
return &it->iterator;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_edje_color_class_list_foreach(const Eina_Hash *hash EINA_UNUSED, const void *key, void *data EINA_UNUSED, void *fdata)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue