Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/edje

Dir     : e17/libs/edje/src/lib


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


Log Message:


tect & colorclasses - in theory, work. must test!

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/Edje.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- Edje.h      10 Jul 2003 13:34:04 -0000      1.9
+++ Edje.h      13 Jul 2003 02:06:46 -0000      1.10
@@ -25,11 +25,10 @@
    void         edje_object_part_geometry_get   (Evas_Object *o, const char *part, 
double *x, double *y, double *w, double *h);
    void         edje_object_part_text_set       (Evas_Object *o, const char *part, 
const char *text);
    const char  *edje_object_part_text_get       (Evas_Object *o, const char *part);
-
-#if 0
-   void         edje_object_color_class_set     (Evas_Object *o, const char 
*color_class, int r, int g, int b, int a);
+   int          edje_object_freeze              (Evas_Object *o);
+   int          edje_object_thaw                (Evas_Object *o);
+   void         edje_object_color_class_set     (Evas_Object *o, 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_object_text_class_set      (Evas_Object *o, const char 
*text_class, const char *font, double size);
-#endif
    
 #ifdef __cplusplus
 }
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_calc.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- edje_calc.c 7 Jul 2003 07:55:18 -0000       1.3
+++ edje_calc.c 13 Jul 2003 02:06:46 -0000      1.4
@@ -35,7 +35,6 @@
    ep->description_pos = npos;
    
    ed->dirty = 1;
-   ep->dirty = 1;
 }
 
 void
@@ -161,7 +160,6 @@
      }
    
    ed->dirty = 1;
-   ep->dirty = 1;
 }
 
 void
@@ -335,6 +333,16 @@
        text = chosen_desc->text.text;
        font = chosen_desc->text.font;
        size = chosen_desc->text.size;
+       
+       if ((ep->part->text_class) && (strlen(ep->part->text_class) > 0))
+         {
+            Ejde_Text_Class *tc;
+            
+            tc = _edje_text_class_find(ed, ep->part->text_class);
+            if (tc->font) font = tc->font;
+            if (tc->size > 0) size = tc->size;
+         }
+       
        if (ep->text.text) text = ep->text.text;
        if (ep->text.font) font = ep->text.font;
        if (ep->text.size > 0) size = ep->text.size;
@@ -558,6 +566,29 @@
      }
    else
      p3 = p1;
+   
+   if ((ep->part->color_class) && (strlen(ep->part->color_class) > 0))
+     {
+       Ejde_Color_Class *cc;
+       
+       cc = _edje_color_class_find(ed, ep->part->color_class);
+       if (cc)
+         {
+            p3.color.r = (((int)cc->r + 1) * p3.color.r) >> 8;
+            p3.color.g = (((int)cc->g + 1) * p3.color.g) >> 8;
+            p3.color.b = (((int)cc->b + 1) * p3.color.b) >> 8;
+            p3.color.a = (((int)cc->a + 1) * p3.color.a) >> 8;
+            p3.color2.r = (((int)cc->r2 + 1) * p3.color2.r) >> 8;
+            p3.color2.g = (((int)cc->g2 + 1) * p3.color2.g) >> 8;
+            p3.color2.b = (((int)cc->b2 + 1) * p3.color2.b) >> 8;
+            p3.color2.a = (((int)cc->a2 + 1) * p3.color2.a) >> 8;
+            p3.color3.r = (((int)cc->r3 + 1) * p3.color3.r) >> 8;
+            p3.color3.g = (((int)cc->g3 + 1) * p3.color3.g) >> 8;
+            p3.color3.b = (((int)cc->b3 + 1) * p3.color3.b) >> 8;
+            p3.color3.a = (((int)cc->a3 + 1) * p3.color3.a) >> 8;
+         }
+     }
+   
    if (ep->part->type == EDJE_PART_TYPE_RECTANGLE)
      {
        evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y);
@@ -616,5 +647,4 @@
    ep->h = p3.h;
    
    ep->calculated = 1;
-   ep->dirty = 0;
 }
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_main.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -3 -r1.21 -r1.22
--- edje_main.c 7 Jul 2003 07:55:18 -0000       1.21
+++ edje_main.c 13 Jul 2003 02:06:46 -0000      1.22
@@ -48,6 +48,25 @@
        free(escb->source);
        free(escb);
      }
+   while (ed->color_classes)
+     {
+       Ejde_Color_Class *cc;
+       
+       cc = ed->color_classes->data;
+       ed->color_classes = evas_list_remove(ed->color_classes, cc);
+       if (cc->name) free(cc->name);
+       free(cc);
+     }
+   while (ed->text_classes)
+     {
+       Ejde_Text_Class *tc;
+       
+       tc = ed->text_classes->data;
+       ed->text_classes = evas_list_remove(ed->text_classes, tc);
+       if (tc->name) free(tc->name);
+       if (tc->font) free(tc->font);
+       free(tc);
+     }
    free(ed);
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_private.h,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -3 -r1.26 -r1.27
--- edje_private.h      10 Jul 2003 13:34:04 -0000      1.26
+++ edje_private.h      13 Jul 2003 02:06:46 -0000      1.27
@@ -25,14 +25,12 @@
  * drag vals should be 0.0 -> 1.0 if drag is confined. "rest" pos = 0.0.
  * query dragable for its relative pos value
  * 
- * text and color classes need to work
+ * real part size and "before min/max limit" sizes need to be stored per part
+ * need to be able to calculate min & max size of a whole edje
  * 
  * named parts need to be able to be "replaced" with new evas objects
  * part replacement with object callbacks should be possible
  * 
- * real part size and "before min/max limit" sizes need to be stored per part
- * need to be able to calculate min & max size of a whole edje
- * 
  * need to be able to list collections in an eet file
  * 
  * externally sourced images need to be supported in edje_cc and edje
@@ -42,54 +40,12 @@
  * need to detect clip_to part loops
  * need to detect confine_to part loops
  * 
- * edje_cc should be able to force lossy, lossless, min and max quality and 
compression of encoded images
- * edje_cc needs to prune out unused images
- * edje_cc might need an option for limiting number of tween images
- * 
- * audit edje for corrupt/bad input files
- * 
  * ? reduce linked list walking and list_nth calls
  * ? add containering (hbox, vbox, table, wrapping multi-line hbox & vbox)
  * ? add numeric params to conditions for progs (ranges etc.)
  * ? key/value pair config values per colelction and per edje file
  */
 
-  
-/* HOW THIS ALL WORKS:
- * -------------------
- * 
- * A part file contains:
- * a list of images stored
- * the images
- * a list of part collections
- * the part collections
- * 
- * A part collection contains:
- * a list of programs
- * a list of actions
- * a list of parts
- * 
- * when a signal is emitted and matches the conditionals of a program a
- * specific action is started. that action may affect one or more parts in
- * a part collection and may operate over a period of time. it may also
- * spawn another action when it is done (able to loop!) over a period of
- * time. A part is set into a certain state and the calculated outputs of the
- * staret and end state are mixed based on the kind of tweening and time. a
- * tween time of 0.0 = do it right away. an image_id list for tweening is
- * also able ot be provided and shoudl be run through over time during the
- * tween to the new state.
- * 
- * the signals that can be emitted are:
- * "mouse,down"
- * "mouse,up"
- * "mouse,in"
- * "mouse,out"
- * "mouse,move"
- * "drag,start"
- * "drag"
- * "drag,stop"
- */
-
 typedef struct _Edje_File                            Edje_File;
 typedef struct _Edje_Image_Directory                 Edje_Image_Directory;
 typedef struct _Edje_Image_Directory_Entry           Edje_Image_Directory_Entry;
@@ -351,6 +307,8 @@
 typedef struct _Edje_Emission Edje_Emission;
 typedef struct _Edje_Pending_Program Edje_Pending_Program;
 typedef struct _Ejde_Text_Style Ejde_Text_Style;
+typedef struct _Ejde_Color_Class Ejde_Color_Class;
+typedef struct _Ejde_Text_Class Ejde_Text_Class;
 
 struct _Edje
 {
@@ -377,6 +335,8 @@
    Evas_List            *actions; /* currently running actions */   
    Evas_List            *callbacks;
    Evas_List            *pending_actions;
+   Evas_List            *color_classes;
+   Evas_List            *text_classes;
    int                   freeze;
    int                   references;
 };
@@ -390,7 +350,6 @@
    Evas_Object              *object;
    Evas_List                *extra_objects;
    unsigned char             calculated : 1;
-   unsigned char             dirty      : 1;
    unsigned char             still_in   : 1;
    int                       clicked_button;
    Edje_Part                *part;
@@ -484,6 +443,21 @@
    } members[32];
 };
 
+struct _Ejde_Color_Class
+{
+   char          *name;
+   unsigned char  r, g, b, a;
+   unsigned char  r2, g2, b2, a2;
+   unsigned char  r3, g3, b3, a3;
+};
+
+struct _Ejde_Text_Class
+{
+   char   *name;
+   char   *font;
+   double  size;
+};
+
 void  _edje_part_pos_set(Edje *ed, Edje_Real_Part *ep, int mode, double pos);
 void  _edje_part_description_apply(Edje *ed, Edje_Real_Part *ep, char  *d1, double 
v1, char *d2, double v2);
 void  _edje_recalc(Edje *ed);
@@ -522,10 +496,12 @@
 void  _edje_text_part_on_del(Edje *ed, Edje_Real_Part *ep);
 void  _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *params, 
Edje_Part_Description *chosen_desc);
     
-Edje *_edje_fetch(Evas_Object *obj);
-int   _edje_glob_match(char *str, char *glob);
-int   _edje_freeze(Edje *ed);
-int   _edje_thaw(Edje *ed);
+Ejde_Color_Class *_edje_color_class_find(Edje *ed, char *color_class);
+Ejde_Text_Class  *_edje_text_class_find(Edje *ed, char *text_class);
+Edje             *_edje_fetch(Evas_Object *obj);
+int               _edje_glob_match(char *str, char *glob);
+int               _edje_freeze(Edje *ed);
+int               _edje_thaw(Edje *ed);
 
 
 extern Eet_Data_Descriptor *_edje_edd_edje_file;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_text.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- edje_text.c 7 Jul 2003 07:55:18 -0000       1.1
+++ edje_text.c 13 Jul 2003 02:06:46 -0000      1.2
@@ -238,10 +238,20 @@
    double  tw, th;
    double  ox, oy, sw, sh;
    char    *buf = NULL;
-   
+
    text = chosen_desc->text.text;
    font = chosen_desc->text.font;
    size = chosen_desc->text.size;
+   
+   if ((ep->part->text_class) && (strlen(ep->part->text_class) > 0))
+     {
+       Ejde_Text_Class *tc;
+       
+       tc = _edje_text_class_find(ed, ep->part->text_class);
+       if (tc->font) font = tc->font;
+       if (tc->size > 0) size = tc->size;
+     }
+   
    if (ep->text.text) text = ep->text.text;
    if (ep->text.font) font = ep->text.font;
    if (ep->text.size > 0) size = ep->text.size;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_util.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- edje_util.c 11 Jul 2003 01:13:56 -0000      1.7
+++ edje_util.c 13 Jul 2003 02:06:46 -0000      1.8
@@ -79,7 +79,6 @@
                  if (rp->text.text) free(rp->text.text);
                  rp->text.text = strdup(text);
                  ed->dirty = 1;
-                 rp->dirty = 1;
                  _edje_recalc(ed);
               }
             return;
@@ -107,6 +106,174 @@
             else
               return NULL;
          }
+     }
+   return NULL;
+}
+
+int
+edje_object_freeze(Evas_Object *obj)
+{
+   Edje *ed;
+
+   ed = _edje_fetch(obj);
+   if (!ed) return 0;
+   return _edje_freeze(ed);
+}
+
+int
+edje_object_thaw(Evas_Object *obj)
+{
+   Edje *ed;
+
+   ed = _edje_fetch(obj);
+   if (!ed) return 0;
+   return _edje_thaw(ed);
+}
+
+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;
+   Evas_List *l;
+   Ejde_Color_Class *cc;
+
+   ed = _edje_fetch(obj);
+   if ((!ed) || (!color_class)) 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;
+   for (l = ed->color_classes; l; l = l->next)
+     {
+       cc = l->data;
+       if (!strcmp(cc->name, color_class))
+         {
+            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;
+            ed->dirty = 1;
+            _edje_recalc(ed);
+            return;
+         }
+     }
+   cc = malloc(sizeof(Ejde_Color_Class));
+   cc->name = strdup(color_class);
+   if (!cc->name)
+     {
+       free(cc);
+       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;
+   ed->color_classes = evas_list_append(ed->color_classes, cc);
+   ed->dirty = 1;
+   _edje_recalc(ed);
+}
+
+void
+edje_object_text_class_set(Evas_Object *obj, const char *text_class, const char 
*font, double size)
+{
+   Edje *ed;
+   Evas_List *l;
+   Ejde_Text_Class *tc;
+
+   ed = _edje_fetch(obj);
+   if ((!ed) || (!text_class)) return;
+   if (size < 0.0) size = 0.0;
+   for (l = ed->text_classes; l; l = l->next)
+     {
+       tc = l->data;
+       if (!strcmp(tc->name, text_class))
+         {
+            if ((tc->font) && (font) && 
+                (!strcmp(tc->font, font)) &&
+                (tc->size == size))
+              return;
+            if ((!tc->font) && (!font) && 
+                (tc->size == size))
+              return;
+            if (tc->font) free(tc->font);
+            if (font) tc->font = strdup(font);
+            else tc->font = NULL;
+            tc->size = size;
+            ed->dirty = 1;
+            _edje_recalc(ed);
+            return;
+         }
+     }
+   tc = malloc(sizeof(Ejde_Text_Class));
+   tc->name = strdup(text_class);
+   if (!tc->name)
+     {
+       free(tc);
+       return;
+     }
+   if (font) tc->font = strdup(font);
+   else tc->font = NULL;
+   tc->size = size;
+   ed->text_classes = evas_list_append(ed->text_classes, tc);
+   ed->dirty = 1;
+   _edje_recalc(ed);
+}
+
+Ejde_Color_Class *
+_edje_color_class_find(Edje *ed, char *color_class)
+{
+   Evas_List *l;
+   
+   if (!color_class) return NULL;
+   for (l = ed->color_classes; l; l = l->next)
+     {
+       Ejde_Color_Class *cc;
+       
+       cc = l->data;
+       if (!strcmp(color_class, cc->name)) return cc;
+     }
+   return NULL;
+}
+
+Ejde_Text_Class *
+_edje_text_class_find(Edje *ed, char *text_class)
+{
+   Evas_List *l;
+   
+   if (!text_class) return NULL;
+   for (l = ed->text_classes; l; l = l->next)
+     {
+       Ejde_Text_Class *tc;
+       
+       tc = l->data;
+       if (!strcmp(text_class, tc->name)) return tc;
      }
    return NULL;
 }




-------------------------------------------------------
This SF.Net email sponsored by: Parasoft
Error proof Web apps, automate testing & more.
Download & eval WebKing and get a free book.
www.parasoft.com/bulletproofapps1
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to