Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/edje

Dir     : e17/libs/edje/src/lib


Modified Files:
        Edje.h Makefile.am edje_calc.c edje_callbacks.c edje_data.c 
        edje_load.c edje_main.c edje_private.h edje_program.c 
        edje_smart.c edje_util.c 
Added Files:
        edje_text.c 


Log Message:


work has been done while i've been away. i just need to put this in cvs. many
fixem's have been fixed. text parts work fully now, ALONG with all their
respective effect modes, fits, alignments and "chopping". a few more api
calls have been added and cleaned up. you'll need to update eet too for this
to work.

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/Edje.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- Edje.h      26 Jun 2003 23:58:58 -0000      1.6
+++ Edje.h      7 Jul 2003 07:55:18 -0000       1.7
@@ -19,8 +19,14 @@
    void         edje_signal_callback_add(Evas_Object *o, const char *emission, const 
char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const 
char *source), void *data);
    void        *edje_signal_callback_del(Evas_Object *o, const char *emission, const 
char *source, void (*func) (void *data, Evas_Object *o, const char *emission, const 
char *source));
    void         edje_signal_emit(Evas_Object *o, const char *emission, const char 
*source);
-
-   void         edje_part_geometry_get(Evas_Object *o, char *part, double *x, double 
*y, double *w, double *h);
+   void         edje_play_set(Evas_Object *obj, int play);
+   int          edje_play_get(Evas_Object *obj);
+   void         edje_animation_set(Evas_Object *obj, int on);
+   int          edje_animation_get(Evas_Object *obj);
+   int          edje_part_exists(Evas_Object *obj, const char *part);
+   void         edje_part_geometry_get(Evas_Object *o, const char *part, double *x, 
double *y, double *w, double *h);
+   void         edje_part_text_set(Evas_Object *o, const char *part, const char 
*text);
+   const char  *edje_part_text_get(Evas_Object *obj, const char *part);
        
 #ifdef __cplusplus
 }
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/Makefile.am,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- Makefile.am 24 Jun 2003 02:33:04 -0000      1.3
+++ Makefile.am 7 Jul 2003 07:55:18 -0000       1.4
@@ -23,6 +23,7 @@
 edje_main.c \
 edje_program.c \
 edje_smart.c \
+edje_text.c \
 edje_util.c \
 edje_private.h
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_calc.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- edje_calc.c 28 Jun 2003 03:08:25 -0000      1.2
+++ edje_calc.c 7 Jul 2003 07:55:18 -0000       1.3
@@ -337,26 +337,20 @@
        size = chosen_desc->text.size;
        if (ep->text.text) text = ep->text.text;
        if (ep->text.font) font = ep->text.font;
-       if (ep->text.size) size = ep->text.size;
+       if (ep->text.size > 0) size = ep->text.size;
        evas_object_text_font_set(ep->object, font, size);
        if ((chosen_desc->text.min_x) || (chosen_desc->text.min_y))
          {
             evas_object_text_text_set(ep->object, text);
             evas_object_geometry_get(ep->object, NULL, NULL, &tw, &th);
             if (chosen_desc->text.min_x)
-              {
-                 minw = tw;
-                 /* FIXME: account for effect */
-                 /* for now just add 2 */
-                 minw += 2;
-              }
+              minw = tw +
+              _edje_text_styles[ep->part->effect].pad.l +
+              _edje_text_styles[ep->part->effect].pad.r;
             if (chosen_desc->text.min_y)
-              {
-                 minh = th;
-                 /* FIXME: account for effect */
-                 /* for now just add 2 */
-                 minw += 2;
-              }
+              minw = th + 
+              _edje_text_styles[ep->part->effect].pad.t +
+              _edje_text_styles[ep->part->effect].pad.b;
          }
      }
    /* adjust for min size */
@@ -507,7 +501,6 @@
      {
        _edje_part_recalc_single(ed, ep, ep->param2.description, chosen_desc, 
ep->param2.rel1_to, ep->param2.rel2_to, ep->param2.confine_to, &p2);
 
-       /* FIXME: pos isnt just linear - depends on tween method */
        pos = ep->description_pos;
        
        /* visible is special */
@@ -569,11 +562,13 @@
      {
        evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y);
        evas_object_resize(ep->object, p3.w, p3.h);
+       evas_object_color_set(ep->object, p3.color.r, p3.color.g, p3.color.b, 
p3.color.a);
+       if (p3.visible) evas_object_show(ep->object);
+       else evas_object_hide(ep->object);
      }
    else if (ep->part->type == EDJE_PART_TYPE_TEXT)
      {
-       /* FIXME: if text object calculate text now */
-       /* FIXME: set other colors */
+       _edje_text_recalc_apply(ed, ep, &p3, chosen_desc);
      }
    else if (ep->part->type == EDJE_PART_TYPE_IMAGE)
      {
@@ -610,10 +605,10 @@
 
        snprintf(buf, sizeof(buf), "images/%i", image_id);
        evas_object_image_file_set(ep->object, ed->file->path, buf);
+       evas_object_color_set(ep->object, p3.color.r, p3.color.g, p3.color.b, 
p3.color.a);
+       if (p3.visible) evas_object_show(ep->object);
+       else evas_object_hide(ep->object);
      }
-   if (p3.visible) evas_object_show(ep->object);
-   else evas_object_hide(ep->object);
-   evas_object_color_set(ep->object, p3.color.r, p3.color.g, p3.color.b, p3.color.a);
    
    ep->x = p3.x;
    ep->y = p3.y;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_callbacks.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- edje_callbacks.c    28 Jun 2003 04:20:41 -0000      1.4
+++ edje_callbacks.c    7 Jul 2003 07:55:18 -0000       1.5
@@ -41,7 +41,25 @@
    ed = data;
    rp = evas_object_data_get(obj, "real_part");
    if (!rp) return;
-   snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button);
+   if (ecore_event_current_type_get() == ECORE_X_EVENT_MOUSE_BUTTON_DOWN)
+     {
+       Ecore_X_Event_Mouse_Button_Down *evx;
+       
+       evx = ecore_event_current_event_get();
+       if (evx)
+         {
+            if (evx->triple_click)
+              snprintf(buf, sizeof(buf), "mouse,down,%i,triple", ev->button);
+            else if (evx->double_click)
+              snprintf(buf, sizeof(buf), "mouse,down,%i,double", ev->button);
+            else
+              snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button);
+         }
+       else
+         snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button);
+     }
+   else
+     snprintf(buf, sizeof(buf), "mouse,down,%i", ev->button);
    if (rp->clicked_button == 0)
      {
        rp->clicked_button = ev->button;
@@ -144,15 +162,18 @@
        ed = animl->data;
        _edje_freeze(ed);
        animl = evas_list_remove(animl, animl->data);
-       for (l = ed->actions; l; l = l->next)
-         newl = evas_list_append(newl, l->data);
-       while (newl)
+       if (!ed->paused)
          {
-            Edje_Running_Program *runp;
-            
-            runp = newl->data;
-            newl = evas_list_remove(newl, newl->data);
-            _edje_program_run_iterate(runp, t);
+            for (l = ed->actions; l; l = l->next)
+              newl = evas_list_append(newl, l->data);
+            while (newl)
+              {
+                 Edje_Running_Program *runp;
+                 
+                 runp = newl->data;
+                 newl = evas_list_remove(newl, newl->data);
+                 _edje_program_run_iterate(runp, t);
+              }
          }
        _edje_thaw(ed);
        _edje_unref(ed);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_data.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- edje_data.c 28 Jun 2003 04:20:41 -0000      1.4
+++ edje_data.c 7 Jul 2003 07:55:18 -0000       1.5
@@ -13,86 +13,61 @@
 Eet_Data_Descriptor *_edje_edd_edje_part_description = NULL;
 Eet_Data_Descriptor *_edje_edd_edje_part_image_id = NULL;
 
+#define NEWD(str, typ) \
+   eet_data_descriptor_new(str, sizeof(typ), \
+                             (void *(*) (void *))evas_list_next, \
+                             (void *(*) (void *, void *))evas_list_append, \
+                             (void *(*) (void *))evas_list_data, \
+                             (void *(*) (void *))evas_list_free, \
+                             (void  (*) (void *, int (*) (void *, const char *, void 
*, void *), void *))evas_hash_foreach, \
+                             (void *(*) (void *, const char *, void *))evas_hash_add, 
\
+                             (void  (*) (void *))evas_hash_free)
+
 void
 _edje_edd_setup(void)
 {
    /* image directory */
    _edje_edd_edje_image_directory_entry = 
-     eet_data_descriptor_new("Edje_Image_Directory_Entry",
-                            sizeof(Edje_Image_Directory_Entry),
-                            evas_list_next,
-                            evas_list_append,
-                            evas_list_data,
-                            evas_hash_foreach,
-                            evas_hash_add);
+    NEWD("Edje_Image_Directory_Entry", 
+        Edje_Image_Directory_Entry);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, 
Edje_Image_Directory_Entry, "entry", entry, EET_T_STRING);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, 
Edje_Image_Directory_Entry, "source_type", source_type, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, 
Edje_Image_Directory_Entry, "source_param", source_param, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_image_directory_entry, 
Edje_Image_Directory_Entry, "id", id, EET_T_INT);
    
    _edje_edd_edje_image_directory = 
-     eet_data_descriptor_new("Edje_Image_Directory", 
-                            sizeof(Edje_Image_Directory),
-                            evas_list_next,
-                            evas_list_append,
-                            evas_list_data,
-                            evas_hash_foreach,
-                            evas_hash_add);
+     NEWD("Edje_Image_Directory", 
+         Edje_Image_Directory);
    EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_image_directory, Edje_Image_Directory, 
"entries", entries, _edje_edd_edje_image_directory_entry);
 
    /* collection directory */
    _edje_edd_edje_part_collection_directory_entry = 
-     eet_data_descriptor_new("Edje_Part_Collection_Directory_Entry",
-                            sizeof(Edje_Part_Collection_Directory_Entry),
-                            evas_list_next,
-                            evas_list_append,
-                            evas_list_data,
-                            evas_hash_foreach,
-                            evas_hash_add);
+     NEWD("Edje_Part_Collection_Directory_Entry",
+         Edje_Part_Collection_Directory_Entry);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, 
Edje_Part_Collection_Directory_Entry, "entry", entry, EET_T_STRING);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection_directory_entry, 
Edje_Part_Collection_Directory_Entry, "id", id, EET_T_INT);
    
    _edje_edd_edje_part_collection_directory = 
-     eet_data_descriptor_new("Edje_Part_Collection_Directory",
-                            sizeof(Edje_Part_Collection_Directory),
-                            evas_list_next,
-                            evas_list_append,
-                            evas_list_data,
-                            evas_hash_foreach,
-                            evas_hash_add);
+     NEWD("Edje_Part_Collection_Directory",
+         Edje_Part_Collection_Directory);
    EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection_directory, 
Edje_Part_Collection_Directory, "entries", entries, 
_edje_edd_edje_part_collection_directory_entry);
    
    /* the main file directory */
    _edje_edd_edje_file = 
-     eet_data_descriptor_new("Edje_File", 
-                            sizeof(Edje_File),
-                            evas_list_next,
-                            evas_list_append,
-                            evas_list_data,
-                            evas_hash_foreach,
-                            evas_hash_add);
+     NEWD("Edje_File", 
+         Edje_File);
    EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "image_dir", 
image_dir, _edje_edd_edje_image_directory);
    EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "collection_dir", 
collection_dir, _edje_edd_edje_part_collection_directory);   
 
    /* parts & programs - loaded induvidually */
    _edje_edd_edje_program_target = 
-     eet_data_descriptor_new("Edje_Program_Target",
-                            sizeof(Edje_Program_Target),
-                            evas_list_next,
-                            evas_list_append,
-                            evas_list_data,
-                            evas_hash_foreach,
-                            evas_hash_add);
+     NEWD("Edje_Program_Target",
+         Edje_Program_Target);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program_target, Edje_Program_Target, 
"id", id, EET_T_INT);
    
    _edje_edd_edje_program = 
-     eet_data_descriptor_new("Edje_Program",
-                            sizeof(Edje_Program),
-                            evas_list_next,
-                            evas_list_append,
-                            evas_list_data,
-                            evas_hash_foreach,
-                            evas_hash_add);
+     NEWD("Edje_Program",
+         Edje_Program);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "id", id, 
EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "name", name, 
EET_T_STRING);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "signal", 
signal, EET_T_STRING);
@@ -109,23 +84,13 @@
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "after", 
after, EET_T_INT);
    
    _edje_edd_edje_part_image_id = 
-     eet_data_descriptor_new("Edje_Part_Image_Id",
-                            sizeof(Edje_Part_Image_Id),
-                            evas_list_next,
-                            evas_list_append,
-                            evas_list_data,
-                            evas_hash_foreach,
-                            evas_hash_add);
+     NEWD("Edje_Part_Image_Id",
+         Edje_Part_Image_Id);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_image_id, Edje_Part_Image_Id, 
"id", id, EET_T_INT);
    
    _edje_edd_edje_part_description = 
-     eet_data_descriptor_new("Edje_Part_Description",
-                            sizeof(Edje_Part_Description),
-                            evas_list_next,
-                            evas_list_append,
-                            evas_list_data,
-                            evas_hash_foreach,
-                            evas_hash_add);
+     NEWD("Edje_Part_Description",
+         Edje_Part_Description);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "state.name", state.name, EET_T_STRING);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "state.value", state.value, EET_T_DOUBLE);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "visible", visible, EET_T_CHAR);
@@ -186,7 +151,6 @@
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "text.text", text.text, EET_T_STRING);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "text.font", text.font, EET_T_STRING);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "text.size", text.size, EET_T_INT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "text.effect", text.effect, EET_T_CHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "text.fit_x", text.fit_x, EET_T_CHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "text.fit_y", text.fit_y, EET_T_CHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "text.min_x", text.min_x, EET_T_CHAR);
@@ -195,16 +159,12 @@
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, 
Edje_Part_Description, "text.align.y", text.align.y, EET_T_DOUBLE);
    
    _edje_edd_edje_part = 
-     eet_data_descriptor_new("Edje_Part",
-                            sizeof(Edje_Part),
-                            evas_list_next,
-                            evas_list_append,
-                            evas_list_data,
-                            evas_hash_foreach,
-                            evas_hash_add);
+     NEWD("Edje_Part",
+         Edje_Part);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "name", name, 
EET_T_STRING);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "id", id, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "type", type, 
EET_T_CHAR);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "effect", effect, 
EET_T_CHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "mouse_events", 
mouse_events, EET_T_CHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "clip_to_id", 
clip_to_id, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part, Edje_Part, "color_class", 
color_class, EET_T_STRING);
@@ -213,13 +173,8 @@
    EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part, Edje_Part, "other_desc", 
other_desc, _edje_edd_edje_part_description);
    
    _edje_edd_edje_part_collection  = 
-     eet_data_descriptor_new("Edje_Part_Collection", 
-                            sizeof(Edje_Part_Collection),
-                            evas_list_next,
-                            evas_list_append,
-                            evas_list_data,
-                            evas_hash_foreach,
-                            evas_hash_add);
+     NEWD("Edje_Part_Collection", 
+         Edje_Part_Collection);
    EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection, Edje_Part_Collection, 
"programs", programs, _edje_edd_edje_program);
    EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_part_collection, Edje_Part_Collection, 
"parts", parts, _edje_edd_edje_part);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "id", id, EET_T_INT);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_load.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- edje_load.c 28 Jun 2003 04:20:41 -0000      1.4
+++ edje_load.c 7 Jul 2003 07:55:18 -0000       1.5
@@ -35,8 +35,10 @@
             ep = l->data;
             rp = calloc(1, sizeof(Edje_Real_Part));
             if (!rp) return;
+            rp->part = ep;
             ed->parts = evas_list_append(ed->parts, rp);
             rp->param1.description =  ep->default_desc;
+            _edje_text_part_on_add(ed, rp);
             if (ep->type == EDJE_PART_TYPE_RECTANGLE)
               rp->object = evas_object_rectangle_add(ed->evas);
             else if (ep->type == EDJE_PART_TYPE_IMAGE)
@@ -76,7 +78,6 @@
               evas_object_pass_events_set(rp->object, 1);
             evas_object_clip_set(rp->object, ed->clipper);
             evas_object_show(rp->object);
-            rp->part = ep;
          }
        for (l = ed->parts; l; l = l->next)
          {
@@ -87,6 +88,7 @@
               rp->param1.rel1_to = evas_list_nth(ed->parts, 
rp->param1.description->rel1.id);
             if (rp->param1.description->rel2.id >= 0)
               rp->param1.rel2_to = evas_list_nth(ed->parts, 
rp->param1.description->rel2.id);
+            _edje_text_part_on_add_clippers(ed, rp);
             if (rp->part->clip_to_id >= 0)
               {
                  rp->clip_to = evas_list_nth(ed->parts, rp->part->clip_to_id);
@@ -207,9 +209,12 @@
             Edje_Real_Part *rp;
             
             rp = ed->parts->data;
+            _edje_text_part_on_del(ed, rp);
             evas_object_del(rp->object);
             if (rp->text.text) free(rp->text.text);
             if (rp->text.font) free(rp->text.font);
+            if (rp->text.cache.in_str) free(rp->text.cache.in_str);
+            if (rp->text.cache.out_str) free(rp->text.cache.out_str);       
             free(rp);
             ed->parts = evas_list_remove(ed->parts, ed->parts->data);
          }
@@ -245,7 +250,35 @@
 void
 _edje_file_free(Edje_File *edf)
 {
-   printf("FIXME: leak Edje_File!\n");
+   if (edf->path) free(edf->path);
+   if (edf->image_dir)
+     {
+       while (edf->image_dir->entries)
+         {
+            Edje_Image_Directory_Entry *ie;
+            
+            ie = edf->image_dir->entries->data;
+            edf->image_dir->entries = evas_list_remove(edf->image_dir->entries, ie);
+            if (ie->entry) free(ie->entry);
+            free(ie);
+         }
+       free(edf->image_dir);
+     }
+   if (edf->collection_dir)
+     {
+       while (edf->collection_dir->entries)
+         {
+            Edje_Part_Collection_Directory_Entry *ce;
+            
+            ce = edf->collection_dir->entries->data;
+            edf->collection_dir->entries = 
evas_list_remove(edf->collection_dir->entries, ce);
+            if (ce->entry) free(ce->entry);
+            free(ce);
+         }
+       free(edf->collection_dir);
+     }
+   if (edf->collection_hash) evas_hash_free(edf->collection_hash);
+   free(edf);
 }
 
 void
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_main.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -3 -r1.20 -r1.21
--- edje_main.c 26 Jun 2003 14:04:31 -0000      1.20
+++ edje_main.c 7 Jul 2003 07:55:18 -0000       1.21
@@ -9,6 +9,7 @@
    if (initted) return;
    initted = 1;
    _edje_edd_setup();
+   _edje_text_init();
 }
 
 Edje *
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_private.h,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -3 -r1.23 -r1.24
--- edje_private.h      28 Jun 2003 04:20:41 -0000      1.23
+++ edje_private.h      7 Jul 2003 07:55:18 -0000       1.24
@@ -5,41 +5,47 @@
 
 #include <Evas.h>
 #include <Ecore.h>
+#include <Ecore_X.h>
 #include <Eet.h>
 
 #include <math.h>
 #include <fnmatch.h>
 
 /* FIXME:
+ * 
  * free stuff - no more leaks
+ * 
  * dragables have to work
  * drag start/top signals etc.
  * drag needs to have signals with relative pos as arg.
  * drag vals should be 0.0 -> 1.0 if drag is confined. "rest" pos = 0.0.
  * query dragable for its relative pos value
- * text parts need to work
+ * 
  * text and color classes need to work
- * reduce linked list walking and list_nth calls
+ * 
  * 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
- * part queries for geometry etc.
- * need to be able to "pause" edjes from API
- * need to be able to force anim times to 0.0 from API to turn off animation
+ * 
  * need to detect relative part loops
  * need to detect clip_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)
- * ? somehow handle double click?
  * ? add numeric params to conditions for progs (ranges etc.)
- * ? containering for multiple children? (hbox, vbox, table, wrapping list)
-*/
+ */
 
   
 /* HOW THIS ALL WORKS:
@@ -103,12 +109,15 @@
 #define EDJE_PART_TYPE_IMAGE     3
 #define EDJE_PART_TYPE_LAST      4
 
-#define EDJE_TEXT_EFFECT_NONE           0
-#define EDJE_TEXT_EFFECT_PLAIN          1
-#define EDJE_TEXT_EFFECT_OUTLINE        2
-#define EDJE_TEXT_EFFECT_SHADOW         3
-#define EDJE_TEXT_EFFECT_OUTLINE_SHADOW 4
-#define EDJE_TEXT_EFFECT_LAST           5
+#define EDJE_TEXT_EFFECT_NONE                0
+#define EDJE_TEXT_EFFECT_PLAIN               1
+#define EDJE_TEXT_EFFECT_OUTLINE             2
+#define EDJE_TEXT_EFFECT_SOFT_OUTLINE        3
+#define EDJE_TEXT_EFFECT_SHADOW              4
+#define EDJE_TEXT_EFFECT_SOFT_SHADOW         5
+#define EDJE_TEXT_EFFECT_OUTLINE_SHADOW      6
+#define EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW 7
+#define EDJE_TEXT_EFFECT_LAST                8
 
 #define EDJE_ACTION_TYPE_NONE        0
 #define EDJE_ACTION_TYPE_STATE_SET   1
@@ -218,6 +227,7 @@
    char                  *name; /* the name if any of the part */
    int                    id; /* its id number */
    unsigned char          type; /* what type (image, rect, text) */
+   unsigned char          effect; /* 0 = plain... */
    unsigned char          mouse_events; /* it will affect/respond to mouse events */
    int                    clip_to_id; /* the part id to clip this one to */   
    char                  *color_class; /* how to modify the color */
@@ -307,7 +317,6 @@
       
       int            size; /* 0 = use user set size */
       
-      unsigned char  effect; /* 0 = plain... */
       unsigned char  fit_x; /* resize font size down to fit in x dir */
       unsigned char  fit_y; /* resize font size down to fit in y dir */
       unsigned char  min_x; /* if text size should be part min size */
@@ -334,6 +343,7 @@
 typedef struct _Edje_Calc_Params Edje_Calc_Params;
 typedef struct _Edje_Emission Edje_Emission;
 typedef struct _Edje_Pending_Program Edje_Pending_Program;
+typedef struct _Ejde_Text_Style Ejde_Text_Style;
 
 struct _Edje
 {
@@ -342,12 +352,15 @@
    
    int                   layer;
    double                x, y, w, h;
-   unsigned char         dirty : 1;
-   unsigned char         recalc : 1;
-   unsigned char         walking_callbacks : 1;
-   unsigned char         delete_callbacks : 1;
-   unsigned char         just_added_callbacks : 1;
-   unsigned char         have_objects : 1;
+   unsigned short        dirty : 1;
+   unsigned short        recalc : 1;
+   unsigned short        walking_callbacks : 1;
+   unsigned short        delete_callbacks : 1;
+   unsigned short        just_added_callbacks : 1;
+   unsigned short        have_objects : 1;
+   unsigned short        paused : 1;
+   unsigned short        no_anim : 1;
+   double                paused_at;
    Evas                 *evas; /* the evas this edje belongs to */
    Evas_Object          *obj; /* the smart object */
    Evas_Object          *clipper; /* a big rect to clip this edje to */
@@ -364,7 +377,11 @@
 struct _Edje_Real_Part
 {
    int                       x, y, w, h;
+   struct {
+      int                    x, y;
+   } offset;
    Evas_Object              *object;
+   Evas_List                *extra_objects;
    unsigned char             calculated : 1;
    unsigned char             dirty      : 1;
    unsigned char             still_in   : 1;
@@ -377,6 +394,13 @@
       char                  *text;
       char                  *font;
       int                    size;
+      struct {
+        double              in_w, in_h;
+        int                 in_size;
+        char               *in_str;
+        char               *out_str;
+        int                 out_size;
+      } cache;
    } text;
    double                    description_pos;
    struct {
@@ -437,6 +461,22 @@
    Ecore_Timer  *timer;
 };
 
+struct _Ejde_Text_Style
+{
+   struct {
+      unsigned char x, y;
+   } offset;
+   struct {
+      unsigned char l, r, t, b;
+   } pad;
+   int num;
+   struct {
+      unsigned char color; /* 0 = color, 1, 2 = color2, color3 */
+      char          x, y; /* offset */
+      unsigned char alpha;
+   } members[32];
+};
+
 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);
@@ -469,6 +509,12 @@
 void  _edje_program_run(Edje *ed, Edje_Program *pr, int force);
 void  _edje_emit(Edje *ed, char *sig, char *src);
 
+void  _edje_text_init(void);
+void  _edje_text_part_on_add(Edje *ed, Edje_Real_Part *ep);
+void  _edje_text_part_on_add_clippers(Edje *ed, Edje_Real_Part *ep);
+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);
@@ -487,8 +533,9 @@
 extern Eet_Data_Descriptor *_edje_edd_edje_part_description;
 extern Eet_Data_Descriptor *_edje_edd_edje_part_image_id;
 
-extern int          _edje_anim_count;
-extern Ecore_Timer *_edje_timer;
-extern Evas_List   *_edje_animators;
+extern int              _edje_anim_count;
+extern Ecore_Timer     *_edje_timer;
+extern Evas_List       *_edje_animators;
+extern Ejde_Text_Style  _edje_text_styles[EDJE_TEXT_EFFECT_LAST];
 
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_program.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- edje_program.c      28 Jun 2003 04:20:41 -0000      1.5
+++ edje_program.c      7 Jul 2003 07:55:18 -0000       1.6
@@ -98,6 +98,95 @@
    _edje_emit(ed, (char *)emission, (char *)source);
 }
 
+void
+edje_play_set(Evas_Object *obj, int play)
+{
+   Edje *ed;
+   double t;
+   Evas_List *l;
+   
+   ed = _edje_fetch(obj);
+   if (!ed) return;
+   if (play)
+     {
+       if (!ed->paused) return;
+       ed->paused = 0;
+       t = ecore_time_get() - ed->paused_at;
+       for (l = ed->actions; l; l = l->next)
+         {
+            Edje_Running_Program *runp;
+            
+            runp = l->data;
+            runp->start_time += t;
+         }
+     }
+   else
+     {
+       if (ed->paused) return;
+       ed->paused = 1;
+       ed->paused_at = ecore_time_get();
+     }
+}
+
+int 
+edje_play_get(Evas_Object *obj)
+{
+   Edje *ed;
+
+   ed = _edje_fetch(obj);
+   if (!ed) return 0;
+   if (ed->paused) return 0;
+   return 1;
+}
+
+void
+edje_animation_set(Evas_Object *obj, int on)
+{
+   Edje *ed;
+   Evas_List *l;
+   
+   ed = _edje_fetch(obj);
+   if (!ed) return;   
+   ed->no_anim = !on;
+   _edje_freeze(ed);
+   if (!on)
+     {
+       Evas_List *newl = NULL;
+       
+       for (l = ed->actions; l; l = l->next)
+         newl = evas_list_append(newl, l->data);
+       while (newl)
+         {
+            Edje_Running_Program *runp;
+            
+            runp = newl->data;
+            newl = evas_list_remove(newl, newl->data);
+            _edje_program_run_iterate(runp, runp->start_time + 
runp->program->tween.time);
+         }
+     }
+   else
+     {
+       _edje_emit(ed, "load", "");     
+       if (evas_object_visible_get(obj))
+         {
+            evas_object_hide(obj);
+            evas_object_show(obj);
+         }
+     }
+   _edje_thaw(ed);
+}
+
+int
+edje_animation_get(Evas_Object *obj)
+{
+   Edje *ed;
+   
+   ed = _edje_fetch(obj);
+   if (!ed) return 0;
+   if (ed->no_anim) return 0;
+   return 1;
+}
+
 /* Private Routines */
 
 int
@@ -244,7 +333,7 @@
    _edje_emit(ed, "program,start", pr->name);
    if (pr->action == EDJE_ACTION_TYPE_STATE_SET)
      {
-       if (pr->tween.time > 0.0)
+       if ((pr->tween.time > 0.0) && (!ed->no_anim))
          {
             Edje_Running_Program *runp;
             
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_smart.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- edje_smart.c        26 Jun 2003 14:04:31 -0000      1.2
+++ edje_smart.c        7 Jul 2003 07:55:18 -0000       1.3
@@ -85,6 +85,18 @@
        Edje_Real_Part *ep;
        
        ep = l->data;
+       if (ep->extra_objects)
+         {
+            Evas_List *el;
+            
+            for (el = ep->extra_objects; el; el = el->next)
+              {
+                 Evas_Object *o;
+                 
+                 o = el->data;
+                 evas_object_layer_set(o, ed->layer);
+              }
+         }
        evas_object_layer_set(ep->object, ed->layer);
      }
    snprintf(buf, sizeof(buf), "layer,set,%i", layer);
@@ -104,6 +116,18 @@
        Edje_Real_Part *ep;
        
        ep = l->data;
+       if (ep->extra_objects)
+         {
+            Evas_List *el;
+            
+            for (el = ep->extra_objects; el; el = el->next)
+              {
+                 Evas_Object *o;
+                 
+                 o = el->data;
+                 evas_object_raise(o);
+              }
+         }
        evas_object_raise(ep->object);
      }
    _edje_emit(ed, "raise", "");
@@ -123,6 +147,18 @@
        
        ep = l->data;
        evas_object_lower(ep->object);
+       if (ep->extra_objects)
+         {
+            Evas_List *el;
+            
+            for (el = ep->extra_objects; el; el = el->next)
+              {
+                 Evas_Object *o;
+                 
+                 o = el->data;
+                 evas_object_lower(o);
+              }
+         }
      }
    _edje_emit(ed, "lower", "");
 }
@@ -141,6 +177,18 @@
        
        ep = l->data;
        evas_object_stack_above(ep->object, above);
+       if (ep->extra_objects)
+         {
+            Evas_List *el;
+            
+            for (el = evas_list_last(ep->extra_objects); el; el = el->prev)
+              {
+                 Evas_Object *o;
+                 
+                 o = el->data;
+                 evas_object_stack_above(o, above);
+              }
+         }
      }
    _edje_emit(ed, "stack_above", "");
 }
@@ -158,6 +206,18 @@
        Edje_Real_Part *ep;
        
        ep = l->data;
+       if (ep->extra_objects)
+         {
+            Evas_List *el;
+            
+            for (el = ep->extra_objects; el; el = el->next)
+              {
+                 Evas_Object *o;
+                 
+                 o = el->data;
+                 evas_object_stack_below(o, below);
+              }
+         }
        evas_object_stack_below(ep->object, below);
      }
    _edje_emit(ed, "stack_below", "");
@@ -180,9 +240,25 @@
    for (l = ed->parts; l; l = l->next)
      {
        Edje_Real_Part *ep;
+       double ox, oy;
        
        ep = l->data;
-       evas_object_move(ep->object, ed->x + ep->x, ed->y + ep->y);
+       evas_object_geometry_get(ep->object, &ox, &oy, NULL, NULL);
+       evas_object_move(ep->object, ed->x + ep->x + ep->offset.x, ed->y + ep->y 
+ep->offset.y);
+       if (ep->extra_objects)
+         {
+            Evas_List *el;
+            
+            for (el = ep->extra_objects; el; el = el->next)
+              {
+                 Evas_Object *o;
+                 double oox, ooy;
+                 
+                 o = el->data;
+                 evas_object_geometry_get(o, &oox, &ooy, NULL, NULL);
+                 evas_object_move(o, ed->x + ep->x + ep->offset.x + (oox - ox), ed->y 
+ ep->y + ep->offset.y + (ooy - oy));
+              }
+         }
      }
    _edje_emit(ed, "move", "");
 }
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_util.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- edje_util.c 26 Jun 2003 23:58:58 -0000      1.4
+++ edje_util.c 7 Jul 2003 07:55:18 -0000       1.5
@@ -1,13 +1,31 @@
 #include "Edje.h"
 #include "edje_private.h"
 
+int
+edje_part_exists(Evas_Object *obj, const char *part)
+{
+   Evas_List *l;
+   Edje *ed;
+
+   ed = _edje_fetch(obj);   
+   if ((!ed) || (!part)) return 0;
+   for (l = ed->parts; l; l = l->next)
+     {
+       Edje_Real_Part *rp;
+       
+       rp = l->data;   
+       if (!strcmp(rp->part->name, part)) return 1;
+     }
+   return 0;
+}
+
 void
-edje_part_geometry_get(Evas_Object *o, char *part, double *x, double *y, double *w, 
double *h )
+edje_part_geometry_get(Evas_Object *obj, const char *part, double *x, double *y, 
double *w, double *h )
 {
    Evas_List *l;
    Edje *ed;
 
-   ed = _edje_fetch(o);   
+   ed = _edje_fetch(obj);
    if ((!ed) || (!part))
      {
        if (x) *x = 0;
@@ -34,6 +52,64 @@
    if (y) *y = 0;
    if (w) *w = 0;
    if (h) *h = 0;
+}
+
+void
+edje_part_text_set(Evas_Object *obj, const char *part, const char *text)
+{
+   Evas_List *l;
+   Edje *ed;
+
+   ed = _edje_fetch(obj);   
+   if ((!ed) || (!part)) return;
+   for (l = ed->parts; l; l = l->next)
+     {
+       Edje_Real_Part *rp;
+       
+       rp = l->data;   
+       if (!strcmp(rp->part->name, part))
+         {
+            if (rp->part->type == EDJE_PART_TYPE_TEXT)
+              {
+                 if (((rp->text.text) && (text)) ||
+                     ((!rp->text.text) && (!text)))
+                   return;
+                 if ((rp->text.text) && (text) && 
+                     (!strcmp(rp->text.text, text)))
+                   return;
+                 if (rp->text.text) free(rp->text.text);
+                 rp->text.text = strdup(text);
+                 ed->dirty = 1;
+                 rp->dirty = 1;
+                 _edje_recalc(ed);
+              }
+            return;
+         }
+     }
+}
+
+const char *
+edje_part_text_get(Evas_Object *obj, const char *part)
+{
+   Evas_List *l;
+   Edje *ed;
+
+   ed = _edje_fetch(obj);   
+   if ((!ed) || (!part)) return NULL;
+   for (l = ed->parts; l; l = l->next)
+     {
+       Edje_Real_Part *rp;
+       
+       rp = l->data;   
+       if (!strcmp(rp->part->name, part))
+         {
+            if (rp->part->type == EDJE_PART_TYPE_TEXT)
+              return evas_object_text_text_get(rp->object);
+            else
+              return NULL;
+         }
+     }
+   return NULL;
 }
 
 Edje *




-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100006ave/direct;at.asp_061203_01/01
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to