Enlightenment CVS committal

Author  : rbdpngn
Project : e17
Module  : libs/edje

Dir     : e17/libs/edje/src/lib


Modified Files:
        Edje.h edje_calc.c edje_load.c edje_private.h edje_text.c 
        edje_util.c 


Log Message:
Global text and color class manipulation. Settings on individual edje's will
override the global values.

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/Edje.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- Edje.h      20 Oct 2003 06:10:09 -0000      1.22
+++ Edje.h      4 Nov 2003 06:15:18 -0000       1.23
@@ -29,6 +29,9 @@
    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);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_calc.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -3 -r1.21 -r1.22
--- edje_calc.c 31 Oct 2003 05:07:39 -0000      1.21
+++ edje_calc.c 4 Nov 2003 06:15:19 -0000       1.22
@@ -418,8 +418,11 @@
             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;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_load.c,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -3 -r1.31 -r1.32
--- edje_load.c 31 Oct 2003 05:07:39 -0000      1.31
+++ edje_load.c 4 Nov 2003 06:15:19 -0000       1.32
@@ -40,8 +40,17 @@
          {
             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 @@
                                            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)
               {
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_private.h,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -3 -r1.49 -r1.50
--- edje_private.h      31 Oct 2003 05:07:39 -0000      1.49
+++ edje_private.h      4 Nov 2003 06:15:19 -0000       1.50
@@ -586,7 +586,12 @@
     
 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);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_text.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- edje_text.c 31 Oct 2003 05:07:39 -0000      1.8
+++ edje_text.c 4 Nov 2003 06:15:19 -0000       1.9
@@ -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 @@
 _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 @@
        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 @@
 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 @@
        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_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;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_util.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -3 -r1.27 -r1.28
--- edje_util.c 30 Oct 2003 04:45:18 -0000      1.27
+++ edje_util.c 4 Nov 2003 06:15:19 -0000       1.28
@@ -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)
 {
@@ -60,6 +66,75 @@
 }
 
 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)
 {
    Edje *ed;
@@ -106,6 +181,7 @@
          }
      }
    cc = malloc(sizeof(Edje_Color_Class));
+   if (!cc) return;
    cc->name = strdup(color_class);
    if (!cc->name)
      {
@@ -130,6 +206,65 @@
 }
 
 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)
 {
    Edje *ed;
@@ -161,6 +296,7 @@
          }
      }
    tc = malloc(sizeof(Edje_Text_Class));
+   if (!tc) return;
    tc->name = strdup(text_class);
    if (!tc->name)
      {
@@ -876,7 +1012,7 @@
 {
    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 @@
        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 @@
 {
    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 @@
        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 *




-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive?  Does it
help you create better code?   SHARE THE LOVE, and help us help
YOU!  Click Here: http://sourceforge.net/donate/
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to