Global text and color class manipulation. Settings on individual edje's will

override the global values.


SVN revision: 7795
This commit is contained in:
rbdpngn 2003-11-04 06:15:19 +00:00 committed by rbdpngn
parent 9a54b4ad5a
commit 17678212d6
8 changed files with 278 additions and 14 deletions

View File

@ -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;

View File

@ -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,

View File

@ -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);

View File

@ -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;

View File

@ -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)
{

View File

@ -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);

View File

@ -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;

View File

@ -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 *