static void st_color_class_color3(void);
static void st_color_class_desc(void);
+static void ob_text_class(void);
+static void st_text_class_name(void);
+static void st_text_class_font(void);
+static void st_text_class_size(void);
+
static void ob_size_class(void);
static void st_size_class_name(void);
static void st_size_class_min(void);
{PREFIX"color_classes.color_class.description", st_color_class_desc}, /* dup */ \
{PREFIX"color_classes.color_class.desc", st_color_class_desc}, /* dup */
+#define TEXT_CLASS_STATEMENTS(PREFIX) \
+ {PREFIX"text_classes.text_class.name", st_text_class_name}, /* dup */ \
+ {PREFIX"text_classes.text_class.font", st_text_class_font}, /* dup */ \
+ {PREFIX"text_classes.text_class.size", st_text_class_size}, /* dup */
+
#define SIZE_CLASS_STATEMENTS(PREFIX) \
{PREFIX"size_classes.size_class.name", st_size_class_name}, /* dup */ \
{PREFIX"size_classes.size_class.min", st_size_class_min}, /* dup */ \
{"externals.external", st_externals_external},
IMAGE_STATEMENTS("")
FONT_STYLE_CC_STATEMENTS("")
+ TEXT_CLASS_STATEMENTS("")
SIZE_CLASS_STATEMENTS("")
{"data.item", st_data_item},
{"data.file", st_data_file},
IMAGE_SET_STATEMENTS("collections")
{"collections.font", st_fonts_font}, /* dup */
FONT_STYLE_CC_STATEMENTS("collections.")
+ TEXT_CLASS_STATEMENTS("collections.")
SIZE_CLASS_STATEMENTS("collections.")
{"collections.base_scale", st_collections_base_scale},
{"collections.translation.file.locale", st_collections_group_translation_file_locale},
{"collections.group.models.model", st_models_model},
{"collections.group.font", st_fonts_font}, /* dup */
FONT_STYLE_CC_STATEMENTS("collections.group.")
+ TEXT_CLASS_STATEMENTS("collections.group.")
SIZE_CLASS_STATEMENTS("collections.group.")
{"collections.group.parts.alias", st_collections_group_parts_alias },
IMAGE_SET_STATEMENTS("collections.group.parts")
IMAGE_STATEMENTS("collections.group.parts.")
{"collections.group.parts.font", st_fonts_font}, /* dup */
FONT_STYLE_CC_STATEMENTS("collections.group.parts.")
+ TEXT_CLASS_STATEMENTS("collections.group.parts.")
SIZE_CLASS_STATEMENTS("collections.group.parts.")
{"collections.group.parts.target_group", st_collections_group_target_group}, /* dup */
{"collections.group.parts.part.name", st_collections_group_parts_part_name},
IMAGE_STATEMENTS("collections.group.parts.part.")
{"collections.group.parts.part.font", st_fonts_font}, /* dup */
FONT_STYLE_CC_STATEMENTS("collections.group.parts.part.")
+ TEXT_CLASS_STATEMENTS("collections.group.parts.part.")
SIZE_CLASS_STATEMENTS("collections.group.parts.part.")
{"collections.group.parts.part.box.items.item.type", st_collections_group_parts_part_box_items_item_type},
{"collections.group.parts.part.box.items.item.name", st_collections_group_parts_part_box_items_item_name},
IMAGE_STATEMENTS("collections.group.parts.part.description.")
{"collections.group.parts.part.description.font", st_fonts_font}, /* dup */
FONT_STYLE_CC_STATEMENTS("collections.group.parts.part.description.")
+ TEXT_CLASS_STATEMENTS("collections.group.parts.part.description.")
SIZE_CLASS_STATEMENTS("collections.group.parts.part.description.")
#ifdef HAVE_EPHYSICS
{"collections.group.physics.world.gravity", st_collections_group_physics_world_gravity},
{"styles.style", ob_styles_style},
{"color_classes", NULL},
{"color_classes.color_class", ob_color_class},
+ {"text_classes", NULL},
+ {"text_classes.text_class", ob_text_class},
{"size_classes", NULL},
{"size_classes.size_class", ob_size_class},
{"spectra", NULL},
{"collections.styles.style", ob_styles_style}, /* dup */
{"collections.color_classes", NULL}, /* dup */
{"collections.color_classes.color_class", ob_color_class}, /* dup */
+ {"collections.text_classes", NULL},
+ {"collections.text_classes.text_class", ob_text_class}, /* dup */
{"collections.size_classes", NULL}, /* dup */
{"collections.size_classes.size_class", ob_size_class}, /* dup */
{"collections.sounds", NULL},
{"collections.group.styles.style", ob_styles_style}, /* dup */
{"collections.group.color_classes", NULL}, /* dup */
{"collections.group.color_classes.color_class", ob_color_class}, /* dup */
+ {"collections.group.text_classes", NULL},
+ {"collections.group.text_classes.text_class", ob_text_class}, /* dup */
{"collections.group.size_classes", NULL}, /* dup */
{"collections.group.size_classes.size_class", ob_size_class}, /* dup */
{"collections.group.filters", NULL},
{"collections.group.parts.styles.style", ob_styles_style}, /* dup */
{"collections.group.parts.color_classes", NULL}, /* dup */
{"collections.group.parts.color_classes.color_class", ob_color_class}, /* dup */
+ {"collections.group.parts.text_classes", NULL},
+ {"collections.group.parts.text_classes.text_class", ob_text_class}, /* dup */
{"collections.group.parts.size_classes", NULL}, /* dup */
{"collections.group.parts.size_classes.size_class", ob_size_class}, /* dup */
{"collections.group.parts.part", ob_collections_group_parts_part},
{"collections.group.parts.part.styles.style", ob_styles_style}, /* dup */
{"collections.group.parts.part.color_classes", NULL}, /* dup */
{"collections.group.parts.part.color_classes.color_class", ob_color_class}, /* dup */
+ {"collections.group.parts.part.text_classes", NULL},
+ {"collections.group.parts.part.text_classes.text_class", ob_text_class}, /* dup */
{"collections.group.parts.part.size_classes", NULL}, /* dup */
{"collections.group.parts.part.size_classes.size_class", ob_size_class}, /* dup */
{"collections.group.parts.part.box", NULL},
{"collections.group.parts.part.description.params", NULL},
{"collections.group.parts.part.description.color_classes", NULL}, /* dup */
{"collections.group.parts.part.description.color_classes.color_class", ob_color_class}, /* dup */
+ {"collections.group.parts.part.description.text_classes", NULL}, /* dup */
+ {"collections.group.parts.part.description.text_classes.text_class", ob_text_class}, /* dup */
{"collections.group.parts.part.description.size_classes", NULL}, /* dup */
{"collections.group.parts.part.description.size_classes.size_class", ob_size_class}, /* dup */
#ifdef HAVE_EPHYSICS
stl->tags = eina_list_append(stl->tags, tag);
}
+/** @edcsubsection{toplevel_text_classes,
+ * Text Classes} */
+
+/**
+ @page edcref
+ @block
+ text_classes
+ @context
+ text_classes {
+ text_class {
+ name: "text_class name";
+ font: "font name";
+ size: SIZE";
+ }
+ ..
+ }
+ @description
+ The "text_classes" block contains a list of one or more "text_class"
+ blocks. Each "text_class" allows the designer to name an arbitrary
+ group of font and size to be used in the theme, the application can
+ use that name to alter the font and its size at runtime.
+ @endblock
+*/
+static void
+ob_text_class(void)
+{
+ Edje_Text_Class *tc;
+
+ tc = mem_alloc(SZ(Edje_Text_Class));
+ edje_file->text_classes = eina_list_append(edje_file->text_classes, tc);
+
+ tc->font = "";
+ tc->size = 0;
+}
+
+static void
+_text_class_name(char *name)
+{
+ Edje_Text_Class *tc, *ttc;
+ Eina_List *l;
+
+ tc = eina_list_data_get(eina_list_last(edje_file->text_classes));
+ tc->name = name;
+ EINA_LIST_FOREACH(edje_file->text_classes, l, ttc)
+ {
+ if ((tc != ttc) && (!strcmp(tc->name, ttc->name)))
+ {
+ ERR("parse error %s:%i. There is already a text class named \"%s\"",
+ file_in, line - 1, tc->name);
+ exit(-1);
+ }
+ }
+}
+
+/**
+ @page edcref
+
+ @property
+ name
+ @parameters
+ [text class name]
+ @effect
+ Sets the name for the text class, used as reference by both the theme
+ and the application.
+ @endproperty
+*/
+static void
+st_text_class_name(void)
+{
+ Edje_Text_Class *tc, *ttc;
+ Eina_List *l;
+
+ tc = eina_list_data_get(eina_list_last(edje_file->text_classes));
+ tc->name = parse_str(0);
+ EINA_LIST_FOREACH(edje_file->text_classes, l, ttc)
+ {
+ if ((tc != ttc) && (!strcmp(tc->name, ttc->name)))
+ {
+ ERR("parse error %s:%i. There is already a text class named \"%s\"",
+ file_in, line - 1, tc->name);
+ exit(-1);
+ }
+ }
+}
+
+/**
+ @page edcref
+
+ @property
+ font
+ @parameters
+ [font name]
+ @effect
+ Sets the font family for the text class.
+ @endproperty
+*/
+static void
+st_text_class_font(void)
+{
+ Edje_Text_Class *tc;
+
+ check_arg_count(1);
+
+ tc = eina_list_data_get(eina_list_last(edje_file->text_classes));
+ tc->font = parse_str(0);
+}
+
+/**
+ @page edcref
+
+ @property
+ size
+ @parameters
+ [font size in points (pt)]
+ @effect
+ Sets the font size for the text class.
+ @endproperty
+*/
+static void
+st_text_class_size(void)
+{
+ Edje_Text_Class *tc;
+
+ check_arg_count(1);
+
+ tc = eina_list_data_get(eina_list_last(edje_file->text_classes));
+ tc->size = parse_int_range(0, 0, 255);
+}
+
/** @edcsubsection{toplevel_size_classes,
* Size Classes} */
stack_pop_quick(EINA_FALSE, EINA_FALSE);
return EINA_TRUE;
}
+ if (edje_file->text_classes && (!strcmp(last, "text_class")))
+ {
+ if (!had_quote) return EINA_FALSE;
+ _text_class_name(token);
+ stack_pop_quick(EINA_FALSE, EINA_FALSE);
+ return EINA_TRUE;
+ }
if (edje_file->size_classes && (!strcmp(last, "size_class")))
{
if (!had_quote) return EINA_FALSE;
edf->styles = oedf->styles;
edf->color_classes = oedf->color_classes;
+ edf->text_classes = oedf->text_classes;
edf->size_classes = oedf->size_classes;
edf->version = EDJE_FILE_VERSION;
edf->feature_ver = oedf->feature_ver;
Eina_List *data;
Eina_List *styles;
Eina_List *color_classes;
+ Eina_List *text_classes;
Eina_List *size_classes;
const char *compiler;
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_old_edje_file, Old_Edje_File, "data", data, _edje_edd_old_edje_data);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_old_edje_file, Old_Edje_File, "styles", styles, _edje_edd_old_edje_style);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_old_edje_file, Old_Edje_File, "color_classes", color_classes, _edje_edd_old_edje_color_class);
+ EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_old_edje_file, Old_Edje_File, "text_classes", text_classes, _edje_edd_old_edje_text_class);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_old_edje_file, Old_Edje_File, "size_classes", size_classes, _edje_edd_old_edje_size_class);
/* parts & programs - loaded induvidually */
EAPI Eina_List *edje_text_class_list (void);
/**
+ * @brief Iterate over all active classes of an application.
+ *
+ * @return an iterator of Edje_Text_Class of the currently active text class
+ *
+ * This function only iterates over the Edje_Text_Class in use by
+ * an application.
+ *
+ * @since 1.17
+ *
+ */
+EAPI Eina_Iterator *edje_text_class_active_iterator_new(void);
+
+/**
+ * @brief Iterate over all text classes provided by an Edje file.
+ *
+ * @return an iterator of Edje_Text_Class provided by the Edje file.
+ *
+ * @since 1.17
+ *
+ */
+EAPI Eina_Iterator *edje_mmap_text_class_iterator_new(Eina_File *f);
+
+/**
* @}
*/
EAPI void edje_object_color_class_del (Evas_Object *obj, const char *color_class);
/**
+ * @brief Delete the object text class.
+ *
+ * @param obj The edje object's reference.
+ * @param text_class The text class to be deleted.
+ *
+ * This function deletes any values at the object level for the
+ * specified object and text class.
+ * @note Deleting the text class will revert it to the values
+ * defined by edje_text_class_set() or the text class
+ * defined in the theme file.
+ *
+ * @since 1.17
+ *
+ */
+EAPI void edje_object_text_class_del (Evas_Object *obj, const char *text_class);
+
+/**
* @brief Delete the object size class.
*
* @param obj The edje object's reference.
_edje_file_open(const Eina_File *f, int *error_ret, time_t mtime)
{
Edje_Color_Class *cc;
+ Edje_Text_Class *tc;
Edje_Size_Class *sc;
Edje_File *edf;
Eina_List *l;
if (cc->name)
eina_hash_direct_add(edf->color_hash, cc->name, cc);
+ edf->text_hash = eina_hash_string_small_new(NULL);
+ EINA_LIST_FOREACH(edf->text_classes, l, tc)
+ if (tc->name)
+ eina_hash_direct_add(edf->text_hash, tc->name, tc);
+
edf->size_hash = eina_hash_string_small_new(NULL);
EINA_LIST_FOREACH(edf->size_classes, l, sc)
if (sc->name)
edf->oef = oedf;
edf->styles = oedf->styles;
edf->color_classes = oedf->color_classes;
+ edf->text_classes = oedf->text_classes;
edf->size_classes = oedf->size_classes;
edf->version = oedf->version;
edf->feature_ver = oedf->feature_ver;
Eina_List *data; /**< list of Edje_Data */
Eina_List *styles; /**< list of Edje_Style */
Eina_List *color_classes; /**< list of Edje_Color_Class */
+ Eina_List *text_classes; /**< list of Edje_Text_Class */
Eina_List *size_classes; /**< list of Edje_Size_Class */
const char *compiler; /**< compiler name */
Eet_Data_Descriptor *_edje_edd_edje_style = NULL;
Eet_Data_Descriptor *_edje_edd_edje_style_tag = NULL;
Eet_Data_Descriptor *_edje_edd_edje_color_class = NULL;
+Eet_Data_Descriptor *_edje_edd_edje_text_class = NULL;
Eet_Data_Descriptor *_edje_edd_edje_size_class = NULL;
Eet_Data_Descriptor *_edje_edd_edje_external_directory = NULL;
Eet_Data_Descriptor *_edje_edd_edje_external_directory_entry = NULL;
FREED(_edje_edd_edje_style);
FREED(_edje_edd_edje_style_tag);
FREED(_edje_edd_edje_color_class);
+ FREED(_edje_edd_edje_text_class);
FREED(_edje_edd_edje_size_class);
FREED(_edje_edd_edje_external_directory);
FREED(_edje_edd_edje_external_directory_entry);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "a3", a3, EET_T_UCHAR);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "desc", desc, EET_T_STRING);
+ EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Text_Class);
+ _edje_edd_edje_text_class =
+ eet_data_descriptor_file_new(&eddc);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_text_class, Edje_Text_Class, "name", name, EET_T_STRING);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_text_class, Edje_Text_Class, "font", font, EET_T_STRING);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_text_class, Edje_Text_Class, "size", size, EET_T_INT);
+
EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Size_Class);
_edje_edd_edje_size_class =
eet_data_descriptor_file_new(&eddc);
EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "vibration_dir", vibration_dir, _edje_edd_edje_vibration_directory);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_file, Edje_File, "styles", styles, _edje_edd_edje_style);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_file, Edje_File, "color_classes", color_classes, _edje_edd_edje_color_class);
+ EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_file, Edje_File, "text_classes", text_classes, _edje_edd_edje_text_class);
EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_file, Edje_File, "size_classes", size_classes, _edje_edd_edje_size_class);
EET_DATA_DESCRIPTOR_ADD_HASH(_edje_edd_edje_file, Edje_File, "data", data, _edje_edd_edje_string);
EET_DATA_DESCRIPTOR_ADD_HASH(_edje_edd_edje_file, Edje_File, "fonts", fonts, _edje_edd_edje_font_directory_entry);
_edje_file_free(Edje_File *edf)
{
Edje_Color_Class *ecc;
+ Edje_Text_Class *etc;
Edje_Size_Class *esc;
#define HASH_FREE(Hash) \
free(ecc);
}
+ eina_hash_free(edf->text_hash);
+ EINA_LIST_FREE(edf->text_classes, etc)
+ {
+ if (edf->free_strings)
+ {
+ if (etc->name) eina_stringshare_del(etc->name);
+ if (etc->font) eina_stringshare_del(etc->font);
+ }
+ free(etc);
+ }
+
eina_hash_free(edf->size_hash);
EINA_LIST_FREE(edf->size_classes, esc)
{
{
Edje_Running_Program *runp;
Edje_Pending_Program *pp;
- Edje_Text_Class *tc;
Edje_Text_Insert_Filter_Callback *cb;
if (ed->processing_messages)
EINA_LIST_FREE(ed->pending_actions, pp)
free(pp);
eina_hash_free(ed->color_classes);
- EINA_LIST_FREE(ed->text_classes, tc)
- {
- if (tc->name) eina_stringshare_del(tc->name);
- if (tc->font) eina_stringshare_del(tc->font);
- free(tc);
- }
+ eina_hash_free(ed->text_classes);
eina_hash_free(ed->size_classes);
EINA_LIST_FREE(ed->text_insert_filter_callbacks, cb)
{
Eina_List *color_classes;
Eina_Hash *color_hash;
+ Eina_List *text_classes;
+ Eina_Hash *text_hash;
+
Eina_List *size_classes;
Eina_Hash *size_hash;
Eina_List *actions; /* currently running actions */
Eina_List *pending_actions;
Eina_Hash *color_classes;
- Eina_List *text_classes;
+ Eina_Hash *text_classes;
Eina_Hash *size_classes;
/* variable pool for Edje Embryo scripts */
Edje_Var_Pool *var_pool;
}
static void
+_edje_text_class_free(void *data)
+{
+ Edje_Text_Class *tc = data;
+
+ if (tc->name) eina_stringshare_del(tc->name);
+ if (tc->font) eina_stringshare_del(tc->font);
+ free(tc);
+}
+
+static void
_edje_size_class_free(void *data)
{
Edje_Size_Class *sc = data;
ed->references = 1;
ed->user_defined = NULL;
ed->color_classes = eina_hash_string_small_new(_edje_color_class_free);
+ ed->text_classes = eina_hash_string_small_new(_edje_text_class_free);
ed->size_classes = eina_hash_string_small_new(_edje_size_class_free);
evas_object_geometry_get(obj, &(ed->x), &(ed->y), &(ed->w), &(ed->h));
return fdata.list;
}
+typedef struct _Edje_Active_Text_Class_Iterator Edje_Active_Text_Class_Iterator;
+struct _Edje_Active_Text_Class_Iterator
+{
+ Eina_Iterator iterator;
+ Edje_Text_Class tc;
+ Eina_Iterator *classes;
+};
+
+static Eina_Bool
+_edje_text_class_active_iterator_next(Eina_Iterator *it, void **data)
+{
+ Edje_Active_Text_Class_Iterator *et = (void *)it;
+ Eina_Hash_Tuple *tuple = NULL;
+ Edje_Refcount *er = NULL;
+ Eina_Iterator *ith;
+ Edje_Text_Class *tc;
+ Eina_Bool r = EINA_FALSE;
+
+ if (!eina_iterator_next(et->classes, (void **)&tuple)) return EINA_FALSE;
+ if (!tuple) return EINA_FALSE;
+
+ ith = eina_hash_iterator_data_new(tuple->data);
+ if (!eina_iterator_next(ith, (void **)&er)) goto on_error;
+
+ /*
+ We actually need to ask on an object to get the correct value.
+ It is being assumed that the size key are the same for all object here.
+ This can some times not be the case, but for now we should be fine.
+ */
+ tc = _edje_text_class_find(er->ed, tuple->key);
+ if (!tc) goto on_error;
+ et->tc = *tc;
+
+ *data = &et->tc;
+ r = EINA_TRUE;
+
+ on_error:
+ eina_iterator_free(ith);
+ return r;
+}
+
+static void *
+_edje_text_class_active_iterator_container(Eina_Iterator *it EINA_UNUSED)
+{
+ return NULL;
+}
+
+static void
+_edje_text_class_active_iterator_free(Eina_Iterator *it)
+{
+ Edje_Active_Text_Class_Iterator *et = (void *)it;
+
+ eina_iterator_free(et->classes);
+ EINA_MAGIC_SET(&et->iterator, 0);
+ free(et);
+}
+
+EAPI Eina_Iterator *
+edje_text_class_active_iterator_new(void)
+{
+ Edje_Active_Text_Class_Iterator *it;
+
+ if (!_edje_text_class_member_hash) return NULL;
+ it = calloc(1, sizeof (Edje_Active_Text_Class_Iterator));
+ if (!it) return NULL;
+
+ EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
+ it->classes = eina_hash_iterator_tuple_new(_edje_text_class_member_hash);
+
+ it->iterator.version = EINA_ITERATOR_VERSION;
+ it->iterator.next = _edje_text_class_active_iterator_next;
+ it->iterator.get_container = _edje_text_class_active_iterator_container;
+ it->iterator.free = _edje_text_class_active_iterator_free;
+
+ return &it->iterator;
+}
+
static Eina_Bool
_edje_text_class_list_foreach(const Eina_Hash *hash EINA_UNUSED, const void *key, void *data EINA_UNUSED, void *fdata)
{
EOLIAN Eina_Bool
_edje_object_text_class_set(Eo *obj EINA_UNUSED, Edje *ed, const char *text_class, const char *font, Evas_Font_Size size)
{
- Eina_List *l;
Edje_Text_Class *tc = NULL;
unsigned int i;
if ((!ed) || (!text_class)) return EINA_FALSE;
+ tc = eina_hash_find(ed->text_classes, text_class);
+
/* for each text_class in the edje */
- EINA_LIST_FOREACH(ed->text_classes, l, tc)
+ if (tc)
{
if ((tc->name) && (!strcmp(tc->name, text_class)))
{
/* Update new text class properties */
eina_stringshare_replace(&tc->font, font);
tc->size = size;
- break;
}
}
tc->font = eina_stringshare_add(font);
tc->size = size;
/* Add to edje's text class list */
- ed->text_classes = eina_list_append(ed->text_classes, tc);
+ eina_hash_direct_add(ed->text_classes, tc->name, tc);
}
for (i = 0; i < ed->table_parts_size; i++)
return EINA_TRUE;
}
+EAPI void
+edje_object_text_class_del(Evas_Object *obj, const char *text_class)
+{
+ Edje *ed;
+ Edje_Text_Class *tc = NULL;
+ unsigned int i;
+
+ ed = _edje_fetch(obj);
+
+ if ((!ed) || (!text_class)) return;
+
+ eina_hash_del(ed->text_classes, text_class, tc);
+
+ for (i = 0; i < ed->table_parts_size; i++)
+ {
+ Edje_Real_Part *rp;
+
+ rp = ed->table_parts[i];
+ if ((rp->part->type == EDJE_PART_TYPE_GROUP) &&
+ ((rp->type == EDJE_RP_TYPE_SWALLOW) &&
+ (rp->typedata.swallow)) &&
+ (rp->typedata.swallow->swallowed_object))
+ edje_object_text_class_del(rp->typedata.swallow->swallowed_object, text_class);
+ }
+
+ ed->dirty = EINA_TRUE;
+ ed->recalc_call = EINA_TRUE;
+#ifdef EDJE_CALC_CACHE
+ ed->text_part_change = EINA_TRUE;
+#endif
+ _edje_textblock_styles_cache_free(ed, text_class);
+ _edje_textblock_style_all_update(ed);
+ _edje_recalc(ed);
+}
+
+typedef struct _Edje_File_Text_Class_Iterator Edje_File_Text_Class_Iterator;
+struct _Edje_File_Text_Class_Iterator
+{
+ Edje_Active_Text_Class_Iterator it;
+
+ Edje_File *edf;
+};
+
+static Eina_Bool
+_edje_mmap_text_class_iterator_next(Eina_Iterator *it, void **data)
+{
+ Edje_File_Text_Class_Iterator *et = (void *)it;
+ Eina_Hash_Tuple *tuple = NULL;
+ Edje_Text_Class *tc = NULL;
+
+ if (!eina_iterator_next(et->it.classes, (void **)&tuple)) return EINA_FALSE;
+ if (!tuple) return EINA_FALSE;
+
+ tc = tuple->data;
+
+ et->it.tc = *tc;
+
+ *data = &et->it.tc;
+ return EINA_TRUE;
+}
+
+static void *
+_edje_mmap_text_class_iterator_container(Eina_Iterator *it)
+{
+ Edje_File_Text_Class_Iterator *et = (void *)it;
+
+ return et->edf->f;
+}
+
+static void
+_edje_mmap_text_class_iterator_free(Eina_Iterator *it)
+{
+ Edje_File_Text_Class_Iterator *et = (void *)it;
+
+ eina_iterator_free(et->it.classes);
+ _edje_cache_file_unref(et->edf);
+ EINA_MAGIC_SET(&et->it.iterator, 0);
+ free(et);
+}
+
+EAPI Eina_Iterator *
+edje_mmap_text_class_iterator_new(Eina_File *f)
+{
+ Edje_File_Text_Class_Iterator *it;
+ Edje_File *edf;
+ int error_ret;
+
+ edf = _edje_cache_file_coll_open(f, NULL, &error_ret, NULL, NULL);
+ if (!edf) return NULL;
+
+ it = calloc(1, sizeof (Edje_File_Text_Class_Iterator));
+ if (!it) goto on_error;
+
+ EINA_MAGIC_SET(&it->it.iterator, EINA_MAGIC_ITERATOR);
+ it->edf = edf;
+ it->it.classes = eina_hash_iterator_tuple_new(edf->text_hash);
+
+ it->it.iterator.version = EINA_ITERATOR_VERSION;
+ it->it.iterator.next = _edje_mmap_text_class_iterator_next;
+ it->it.iterator.get_container = _edje_mmap_text_class_iterator_container;
+ it->it.iterator.free = _edje_mmap_text_class_iterator_free;
+
+ return &it->it.iterator;
+
+on_error:
+ _edje_cache_file_unref(edf);
+ return NULL;
+}
+
EAPI Eina_Bool
edje_size_class_set(const char *size_class, Evas_Coord minw, Evas_Coord minh, Evas_Coord maxw, Evas_Coord maxh)
{
Edje_Text_Class *
_edje_text_class_find(Edje *ed, const char *text_class)
{
- Eina_List *l;
Edje_Text_Class *tc;
if ((!ed) || (!text_class)) return NULL;
- EINA_LIST_FOREACH(ed->text_classes, l, tc)
- if ((tc->name) && (!strcmp(text_class, tc->name))) return tc;
- return eina_hash_find(_edje_text_class_hash, text_class);
+
+ /* first look through the object scope */
+ tc = eina_hash_find(ed->text_classes, text_class);
+ if (tc) return tc;
+
+ /* next look through the global scope */
+ tc = eina_hash_find(_edje_text_class_hash, text_class);
+ if (tc) return tc;
+
+ /* finally, look through the file scope */
+ tc = eina_hash_find(ed->file->text_hash, text_class);
+ if (tc) return tc;
+
+ return NULL;
}
void