forked from enlightenment/efl
Global text and color class manipulation. Settings on individual edje's will
override the global values. SVN revision: 7795
This commit is contained in:
parent
9a54b4ad5a
commit
17678212d6
|
@ -177,11 +177,13 @@ collections {
|
|||
offset, -64, -1;
|
||||
to, "logo";
|
||||
}
|
||||
color_class, "fg";
|
||||
color, 255 255 255 255;
|
||||
// color2, 0 0 255 255;
|
||||
color3, 0 0 0 32;
|
||||
text {
|
||||
text, "This is a longer test string";
|
||||
text_class, "plainjane";
|
||||
font, "Vera";
|
||||
size, 6;
|
||||
// fit, 0 1;
|
||||
|
|
|
@ -232,10 +232,17 @@ bg_key_down(void *data, Evas * e, Evas_Object * obj, void *event_info)
|
|||
else if (!strcmp(ev->keyname, "Right"))
|
||||
edje_object_part_text_set(de->edje, "text", "You pressed \"U\". Nice one stenchie!");
|
||||
else if (!strcmp(ev->keyname, "F1"))
|
||||
edje_object_color_class_set(de->edje, "bg",
|
||||
255, 255, 255, 255,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0);
|
||||
{
|
||||
edje_object_color_class_set(de->edje, "bg",
|
||||
255, 255, 255, 255,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0);
|
||||
edje_color_class_set("fg",
|
||||
0, 0, 0, 255,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0);
|
||||
edje_text_class_set("plainjane", "Vera", 10);
|
||||
}
|
||||
else if (!strcmp(ev->keyname, "F2"))
|
||||
edje_object_color_class_set(de->edje, "bg",
|
||||
255, 200, 120, 255,
|
||||
|
|
|
@ -29,6 +29,9 @@ extern "C" {
|
|||
Evas_List *edje_file_collection_list (const char *file);
|
||||
void edje_file_collection_list_free (Evas_List *lst);
|
||||
char *edje_file_data_get (const char *file, const char *key);
|
||||
|
||||
void edje_color_class_set(const char *color_class, int r, int g, int b, int a, int r2, int g2, int b2, int a2, int r3, int g3, int b3, int a3);
|
||||
void edje_text_class_set(const char *text_class, const char *font, Evas_Font_Size size);
|
||||
|
||||
void edje_extern_object_min_size_set (Evas_Object *obj, Evas_Coord minw, Evas_Coord minh);
|
||||
void edje_extern_object_max_size_set (Evas_Object *obj, Evas_Coord maxw, Evas_Coord maxh);
|
||||
|
|
|
@ -418,8 +418,11 @@ _edje_part_recalc_single(Edje *ed,
|
|||
Edje_Text_Class *tc;
|
||||
|
||||
tc = _edje_text_class_find(ed, chosen_desc->text.text_class);
|
||||
if (tc->font) font = tc->font;
|
||||
if (tc->size > 0) size = tc->size;
|
||||
if (tc)
|
||||
{
|
||||
if (tc->font) font = tc->font;
|
||||
if (tc->size > 0) size = tc->size;
|
||||
}
|
||||
}
|
||||
|
||||
if (ep->text.text) text = ep->text.text;
|
||||
|
|
|
@ -40,8 +40,17 @@ edje_object_file_set(Evas_Object *obj, const char *file, const char *part)
|
|||
{
|
||||
Edje_Part *ep;
|
||||
Evas_List *hist = NULL;
|
||||
|
||||
|
||||
/* Register any color classes in this parts descriptions. */
|
||||
ep = l->data;
|
||||
if ((ep->default_desc) && (ep->default_desc->color_class)) _edje_color_class_member_add(ed, ep->default_desc->color_class);
|
||||
for (hist = ep->other_desc; hist; hist = hist->next)
|
||||
{
|
||||
Edje_Part_Description *desc;
|
||||
|
||||
desc = hist->data;
|
||||
if (desc->color_class) _edje_color_class_member_add(ed, desc->color_class);
|
||||
}
|
||||
hist = evas_list_append(hist, ep);
|
||||
while (ep->dragable.confine_id >= 0)
|
||||
{
|
||||
|
@ -459,6 +468,7 @@ _edje_file_del(Edje *ed)
|
|||
EVAS_CALLBACK_MOUSE_WHEEL,
|
||||
_edje_mouse_wheel_cb);
|
||||
_edje_text_part_on_del(ed, rp);
|
||||
_edje_color_class_on_del(ed, rp);
|
||||
evas_object_del(rp->object);
|
||||
if (rp->swallowed_object)
|
||||
{
|
||||
|
|
|
@ -586,7 +586,12 @@ void _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *pa
|
|||
|
||||
Edje_Real_Part *_edje_real_part_get(Edje *ed, char *part);
|
||||
Edje_Color_Class *_edje_color_class_find(Edje *ed, char *color_class);
|
||||
void _edje_color_class_member_add(Edje *ed, char *color_class);
|
||||
void _edje_color_class_member_del(Edje *ed, char *color_class);
|
||||
void _edje_color_class_on_del(Edje *ed, Edje_Real_Part *rp);
|
||||
Edje_Text_Class *_edje_text_class_find(Edje *ed, char *text_class);
|
||||
void _edje_text_class_member_add(Edje *ed, char *text_class);
|
||||
void _edje_text_class_member_del(Edje *ed, char *text_class);
|
||||
Edje *_edje_fetch(Evas_Object *obj);
|
||||
int _edje_glob_match(char *str, char *glob);
|
||||
int _edje_freeze(Edje *ed);
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#include "Edje.h"
|
||||
#include "edje_private.h"
|
||||
|
||||
static Evas_Hash *_edje_text_class_hash = NULL;
|
||||
|
||||
Edje_Text_Style _edje_text_styles[EDJE_TEXT_EFFECT_LAST];
|
||||
|
||||
void
|
||||
|
@ -175,6 +177,8 @@ void
|
|||
_edje_text_part_on_add(Edje *ed, Edje_Real_Part *ep)
|
||||
{
|
||||
int i;
|
||||
Evas_List *tmp;
|
||||
Edje_Part *pt = ep->part;
|
||||
|
||||
if (ep->part->type != EDJE_PART_TYPE_TEXT) return;
|
||||
if (ep->part->effect >= EDJE_TEXT_EFFECT_LAST) return;
|
||||
|
@ -188,6 +192,16 @@ _edje_text_part_on_add(Edje *ed, Edje_Real_Part *ep)
|
|||
evas_object_clip_set(o, ed->clipper);
|
||||
evas_object_show(o);
|
||||
ep->extra_objects = evas_list_append(ep->extra_objects, o);
|
||||
|
||||
}
|
||||
|
||||
if ((pt->default_desc) && (pt->default_desc->text.text_class)) _edje_text_class_member_add(ed, pt->default_desc->text.text_class);
|
||||
for (tmp = pt->other_desc; tmp; tmp = tmp->next)
|
||||
{
|
||||
Edje_Part_Description *desc;
|
||||
|
||||
desc = tmp->data;
|
||||
if ((desc) && (desc->text.text_class)) _edje_text_class_member_add(ed, desc->text.text_class);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -217,6 +231,9 @@ _edje_text_part_on_add_clippers(Edje *ed, Edje_Real_Part *ep)
|
|||
void
|
||||
_edje_text_part_on_del(Edje *ed, Edje_Real_Part *ep)
|
||||
{
|
||||
Evas_List *tmp;
|
||||
Edje_Part *pt = ep->part;
|
||||
|
||||
while (ep->extra_objects)
|
||||
{
|
||||
Evas_Object *o;
|
||||
|
@ -225,8 +242,16 @@ _edje_text_part_on_del(Edje *ed, Edje_Real_Part *ep)
|
|||
ep->extra_objects = evas_list_remove(ep->extra_objects, o);
|
||||
evas_object_del(o);
|
||||
}
|
||||
|
||||
if ((pt->default_desc) && (pt->default_desc->text.text_class)) _edje_text_class_member_del(ed, pt->default_desc->text.text_class);
|
||||
for (tmp = pt->other_desc; tmp; tmp = tmp->next)
|
||||
{
|
||||
Edje_Part_Description *desc;
|
||||
|
||||
desc = tmp->data;
|
||||
if (desc->text.text_class) _edje_text_class_member_del(ed, desc->text.text_class);
|
||||
}
|
||||
return;
|
||||
ed = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -250,8 +275,11 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
|
|||
Edje_Text_Class *tc;
|
||||
|
||||
tc = _edje_text_class_find(ed, chosen_desc->text.text_class);
|
||||
if (tc->font) font = tc->font;
|
||||
if (tc->size > 0) size = tc->size;
|
||||
if (tc)
|
||||
{
|
||||
if (tc->font) font = tc->font;
|
||||
if (tc->size > 0) size = tc->size;
|
||||
}
|
||||
}
|
||||
|
||||
if (ep->text.text) text = ep->text.text;
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
#include "Edje.h"
|
||||
#include "edje_private.h"
|
||||
|
||||
Evas_Hash *_edje_color_class_hash = NULL;
|
||||
Evas_Hash *_edje_color_class_member_hash = NULL;
|
||||
|
||||
Evas_Hash *_edje_text_class_hash = NULL;
|
||||
Evas_Hash *_edje_text_class_member_hash = NULL;
|
||||
|
||||
void
|
||||
edje_freeze(void)
|
||||
{
|
||||
|
@ -59,6 +65,75 @@ edje_object_thaw(Evas_Object *obj)
|
|||
return _edje_thaw(ed);
|
||||
}
|
||||
|
||||
void
|
||||
edje_color_class_set(const char *color_class, int r, int g, int b, int a, int r2, int g2, int b2, int a2, int r3, int g3, int b3, int a3)
|
||||
{
|
||||
Evas_List *members;
|
||||
Edje_Color_Class *cc;
|
||||
|
||||
if (!color_class) return;
|
||||
|
||||
cc = evas_hash_find(_edje_color_class_hash, color_class);
|
||||
if (!cc)
|
||||
{
|
||||
cc = malloc(sizeof(Edje_Color_Class));
|
||||
if (!cc) return;
|
||||
cc->name = strdup(color_class);
|
||||
if (!cc->name)
|
||||
{
|
||||
free(cc);
|
||||
return;
|
||||
}
|
||||
_edje_color_class_hash = evas_hash_add(_edje_color_class_hash, color_class, cc);
|
||||
if (evas_hash_alloc_error())
|
||||
{
|
||||
free(cc->name);
|
||||
free(cc);
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (r < 0) r = 0;
|
||||
if (r > 255) r = 255;
|
||||
if (g < 0) g = 0;
|
||||
if (g > 255) g = 255;
|
||||
if (b < 0) b = 0;
|
||||
if (b > 255) b = 255;
|
||||
if (a < 0) a = 0;
|
||||
if (a > 255) a = 255;
|
||||
if ((cc->r == r) && (cc->g == g) &&
|
||||
(cc->b == b) && (cc->a == a) &&
|
||||
(cc->r2 == r2) && (cc->g2 == g2) &&
|
||||
(cc->b2 == b2) && (cc->a2 == a2) &&
|
||||
(cc->r3 == r3) && (cc->g3 == g3) &&
|
||||
(cc->b3 == b3) && (cc->a3 == a3))
|
||||
return;
|
||||
cc->r = r;
|
||||
cc->g = g;
|
||||
cc->b = b;
|
||||
cc->a = a;
|
||||
cc->r2 = r2;
|
||||
cc->g2 = g2;
|
||||
cc->b2 = b2;
|
||||
cc->a2 = a2;
|
||||
cc->r3 = r3;
|
||||
cc->g3 = g3;
|
||||
cc->b3 = b3;
|
||||
cc->a3 = a3;
|
||||
|
||||
members = evas_hash_find(_edje_color_class_member_hash, color_class);
|
||||
while (members)
|
||||
{
|
||||
Edje *ed;
|
||||
|
||||
ed = members->data;
|
||||
ed->dirty = 1;
|
||||
_edje_recalc(ed);
|
||||
members = members->next;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
edje_object_color_class_set(Evas_Object *obj, const char *color_class, int r, int g, int b, int a, int r2, int g2, int b2, int a2, int r3, int g3, int b3, int a3)
|
||||
{
|
||||
|
@ -106,6 +181,7 @@ edje_object_color_class_set(Evas_Object *obj, const char *color_class, int r, in
|
|||
}
|
||||
}
|
||||
cc = malloc(sizeof(Edje_Color_Class));
|
||||
if (!cc) return;
|
||||
cc->name = strdup(color_class);
|
||||
if (!cc->name)
|
||||
{
|
||||
|
@ -129,6 +205,65 @@ edje_object_color_class_set(Evas_Object *obj, const char *color_class, int r, in
|
|||
_edje_recalc(ed);
|
||||
}
|
||||
|
||||
void
|
||||
edje_text_class_set(const char *text_class, const char *font, Evas_Font_Size size)
|
||||
{
|
||||
Evas_List *members;
|
||||
Edje_Text_Class *tc;
|
||||
|
||||
if (!text_class) return;
|
||||
|
||||
if (size < 0) size = 0;
|
||||
if (!font) font = "";
|
||||
|
||||
tc = evas_hash_find(_edje_text_class_hash, text_class);
|
||||
if (!tc)
|
||||
{
|
||||
tc = calloc(1, sizeof(Edje_Text_Class));
|
||||
if (!tc) return;
|
||||
tc->name = strdup(text_class);
|
||||
if (!tc->name)
|
||||
{
|
||||
free(tc);
|
||||
return;
|
||||
}
|
||||
_edje_text_class_hash = evas_hash_add(_edje_text_class_hash, text_class, tc);
|
||||
if (evas_hash_alloc_error())
|
||||
{
|
||||
free(tc->name);
|
||||
free(tc);
|
||||
return;
|
||||
}
|
||||
|
||||
tc->font = strdup(font);
|
||||
tc->size = size;
|
||||
return;
|
||||
}
|
||||
|
||||
if ((tc->size == size) && (!strcmp(tc->font, font)))
|
||||
return;
|
||||
free(tc->font);
|
||||
tc->font = strdup(font);
|
||||
if (!tc->font)
|
||||
{
|
||||
_edje_text_class_hash = evas_hash_del(_edje_text_class_hash, text_class, tc);
|
||||
free(tc);
|
||||
return;
|
||||
}
|
||||
tc->size = size;
|
||||
|
||||
members = evas_hash_find(_edje_text_class_member_hash, text_class);
|
||||
while (members)
|
||||
{
|
||||
Edje *ed;
|
||||
|
||||
ed = members->data;
|
||||
ed->dirty = 1;
|
||||
_edje_recalc(ed);
|
||||
members = members->next;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
edje_object_text_class_set(Evas_Object *obj, const char *text_class, const char *font, Evas_Font_Size size)
|
||||
{
|
||||
|
@ -161,6 +296,7 @@ edje_object_text_class_set(Evas_Object *obj, const char *text_class, const char
|
|||
}
|
||||
}
|
||||
tc = malloc(sizeof(Edje_Text_Class));
|
||||
if (!tc) return;
|
||||
tc->name = strdup(text_class);
|
||||
if (!tc->name)
|
||||
{
|
||||
|
@ -876,7 +1012,7 @@ _edje_color_class_find(Edje *ed, char *color_class)
|
|||
{
|
||||
Evas_List *l;
|
||||
|
||||
if (!color_class) return NULL;
|
||||
if ((!ed) || (!color_class)) return;
|
||||
for (l = ed->color_classes; l; l = l->next)
|
||||
{
|
||||
Edje_Color_Class *cc;
|
||||
|
@ -884,7 +1020,50 @@ _edje_color_class_find(Edje *ed, char *color_class)
|
|||
cc = l->data;
|
||||
if (!strcmp(color_class, cc->name)) return cc;
|
||||
}
|
||||
return NULL;
|
||||
return evas_hash_find(_edje_color_class_hash, color_class);
|
||||
}
|
||||
|
||||
void
|
||||
_edje_color_class_member_add(Edje *ed, char *color_class)
|
||||
{
|
||||
Evas_List *members;
|
||||
|
||||
if ((!ed) || (!color_class)) return;
|
||||
members = evas_hash_find(_edje_color_class_member_hash, color_class);
|
||||
if (members) _edje_color_class_member_hash = evas_hash_del(_edje_color_class_member_hash, color_class, members);
|
||||
|
||||
members = evas_list_prepend(members, ed);
|
||||
_edje_color_class_member_hash = evas_hash_add(_edje_color_class_member_hash, color_class, members);
|
||||
}
|
||||
|
||||
void
|
||||
_edje_color_class_member_del(Edje *ed, char *color_class)
|
||||
{
|
||||
Evas_List *members, *tmp = NULL;
|
||||
|
||||
if ((!ed) || (!color_class)) return;
|
||||
members = evas_hash_find(_edje_color_class_member_hash, color_class);
|
||||
if (!members) return;
|
||||
|
||||
_edje_color_class_member_hash = evas_hash_del(_edje_color_class_member_hash, color_class, members);
|
||||
members = evas_list_remove(members, ed);
|
||||
if (members) _edje_color_class_member_hash = evas_hash_add(_edje_color_class_member_hash, color_class, members);
|
||||
}
|
||||
|
||||
void
|
||||
_edje_color_class_on_del(Edje *ed, Edje_Real_Part *rp)
|
||||
{
|
||||
Evas_List *tmp;
|
||||
Edje_Part *ep = rp->part;
|
||||
|
||||
if ((ep->default_desc) && (ep->default_desc->color_class)) _edje_color_class_member_del(ed, ep->default_desc->color_class);
|
||||
for (tmp = ep->other_desc; tmp; tmp = tmp->next)
|
||||
{
|
||||
Edje_Part_Description *desc;
|
||||
|
||||
desc = tmp->data;
|
||||
if (desc->color_class) _edje_color_class_member_del(ed, desc->color_class);
|
||||
}
|
||||
}
|
||||
|
||||
Edje_Text_Class *
|
||||
|
@ -892,7 +1071,7 @@ _edje_text_class_find(Edje *ed, char *text_class)
|
|||
{
|
||||
Evas_List *l;
|
||||
|
||||
if (!text_class) return NULL;
|
||||
if ((!ed) || (!text_class)) return;
|
||||
for (l = ed->text_classes; l; l = l->next)
|
||||
{
|
||||
Edje_Text_Class *tc;
|
||||
|
@ -900,7 +1079,34 @@ _edje_text_class_find(Edje *ed, char *text_class)
|
|||
tc = l->data;
|
||||
if (!strcmp(text_class, tc->name)) return tc;
|
||||
}
|
||||
return NULL;
|
||||
return evas_hash_find(_edje_text_class_hash, text_class);
|
||||
}
|
||||
|
||||
void
|
||||
_edje_text_class_member_add(Edje *ed, char *text_class)
|
||||
{
|
||||
Evas_List *members;
|
||||
|
||||
if ((!ed) || (!text_class)) return;
|
||||
members = evas_hash_find(_edje_text_class_member_hash, text_class);
|
||||
if (members) _edje_text_class_member_hash = evas_hash_del(_edje_text_class_member_hash, text_class, members);
|
||||
|
||||
members = evas_list_prepend(members, ed);
|
||||
_edje_text_class_member_hash = evas_hash_add(_edje_text_class_member_hash, text_class, members);
|
||||
}
|
||||
|
||||
void
|
||||
_edje_text_class_member_del(Edje *ed, char *text_class)
|
||||
{
|
||||
Evas_List *members, *tmp = NULL;
|
||||
|
||||
if ((!ed) || (!text_class)) return;
|
||||
members = evas_hash_find(_edje_text_class_member_hash, text_class);
|
||||
if (!members) return;
|
||||
|
||||
_edje_text_class_member_hash = evas_hash_del(_edje_text_class_member_hash, text_class, members);
|
||||
members = evas_list_remove(members, ed);
|
||||
if (members) _edje_text_class_member_hash = evas_hash_add(_edje_text_class_member_hash, text_class, members);
|
||||
}
|
||||
|
||||
Edje *
|
||||
|
|
Loading…
Reference in New Issue