Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/edje

Dir     : e17/libs/edje/src/lib


Modified Files:
        Makefile.am edje_data.c edje_embryo.c edje_load.c 
        edje_message_queue.c edje_private.h edje_smart.c 
Added Files:
        edje_script_only.c 


Log Message:


start some serious work on script_only edje objects - for efficiency sake i'm
having an almost parallel codepath for script_only objects - they dont get to
use the older edje api calls for part defined objects. they will have a new
set of calls specifically for them. it's partly done - very little available
now, but will expand. lots of fixme's.

===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/Makefile.am,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -3 -r1.41 -r1.42
--- Makefile.am 12 Mar 2008 16:32:35 -0000      1.41
+++ Makefile.am 30 May 2008 11:20:49 -0000      1.42
@@ -38,7 +38,8 @@
 edje_cache.c \
 edje_match.c \
 edje_textblock_styles.c \
-edje_edit.c
+edje_edit.c \
+edje_script_only.c
 
 libedje_la_LIBADD       = -lm @EDJE_LIBS@
 libedje_la_DEPENDENCIES = $(top_builddir)/config.h
===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/edje_data.c,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -3 -r1.44 -r1.45
--- edje_data.c 29 May 2008 02:00:04 -0000      1.44
+++ edje_data.c 30 May 2008 11:20:49 -0000      1.45
@@ -387,5 +387,5 @@
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "prop.max.w", prop.max.w, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "prop.max.h", prop.max.h, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "id", id, EET_T_INT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "script_only", id, EET_T_UCHAR);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "script_only", script_only, EET_T_UCHAR);
 }
===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/edje_embryo.c,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -3 -r1.62 -r1.63
--- edje_embryo.c       19 May 2008 04:38:40 -0000      1.62
+++ edje_embryo.c       30 May 2008 11:20:49 -0000      1.63
@@ -182,54 +182,6 @@
  *
  */
 
-#define CHKPARAM(n) if (params[0] != (sizeof(Embryo_Cell) * (n))) return 0;
-#define GETSTR(str, par) { \
-   Embryo_Cell *___cptr; \
-   int ___l; \
-   str = NULL; \
-   if ((___cptr = embryo_data_address_get(ep, (par)))) { \
-   ___l = embryo_data_string_length_get(ep, ___cptr); \
-   if (((str) = alloca(___l + 1))) \
-   embryo_data_string_get(ep, ___cptr, (str));}}
-#define GETSTREVAS(str, par) { \
-   if ((str)) { \
-       if ((par) && (!strcmp((par), (str)))) return 0; \
-       if ((par)) evas_stringshare_del((par)); \
-       (par) = (char *)evas_stringshare_add((str)); } \
-   else (par) = NULL; }
-#define GETFLOAT(val, par) { \
-   float *___cptr; \
-   if ((___cptr = (float *)embryo_data_address_get(ep, (par)))) { \
-   val = *___cptr;}}
-#define GETINT(val, par) { \
-   int *___cptr; \
-   if ((___cptr = (int *)embryo_data_address_get(ep, (par)))) { \
-   val = *___cptr;}}
-#define SETSTR(str, par) { \
-   Embryo_Cell *___cptr; \
-   if ((___cptr = embryo_data_address_get(ep, (par)))) { \
-   embryo_data_string_set(ep, str, ___cptr);}}
-#define SETSTRALLOCATE(s) { \
-   if (s) { \
-       if (strlen((s)) < params[4]) { \
-           SETSTR((s), params[3]); } \
-       else { \
-            char *ss; \
-            ss = alloca(strlen((s)) + 1); \
-            strcpy(ss, (s)); \
-            ss[params[4] - 2] = 0; \
-            SETSTR(ss, params[3]); }} \
-   else \
-      SETSTR("", params[3]);}
-#define SETFLOAT(val, par) { \
-   float *___cptr; \
-   if ((___cptr = (float *)embryo_data_address_get(ep, (par)))) { \
-   *___cptr = (float)val;}}
-#define SETINT(val, par) { \
-   int *___cptr; \
-   if ((___cptr = (int *)embryo_data_address_get(ep, (par)))) { \
-   *___cptr = (int)val;}}
-
 /* get_int(id) */
 static Embryo_Cell
 _edje_embryo_fn_get_int(Embryo_Program *ep, Embryo_Cell *params)
===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/edje_load.c,v
retrieving revision 1.124
retrieving revision 1.125
diff -u -3 -r1.124 -r1.125
--- edje_load.c 10 Apr 2008 08:58:19 -0000      1.124
+++ edje_load.c 30 May 2008 11:20:49 -0000      1.125
@@ -248,6 +248,7 @@
 
    old_swallows = _edje_swallows_collect(ed);
 
+   if (_edje_script_only(ed)) _edje_script_only_shutdown(ed);
    _edje_file_del(ed);
 
    if (ed->path) evas_stringshare_del(ed->path);
@@ -256,318 +257,324 @@
    ed->part = evas_stringshare_add(part);
 
    ed->load_error = EDJE_LOAD_ERROR_NONE;
-   _edje_file_add(ed);
+  _edje_file_add(ed);
 
    _edje_textblock_styles_add(ed);
    _edje_textblock_style_all_update(ed);
 
    if (ed->collection)
      {
-       Evas_List *l;
-       int i;
-       int errors = 0;
-
-       /* colorclass stuff */
-       for (l = ed->collection->parts; (l && ! errors); l = l->next)
-         {
-            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);
-              }
-         }
-       /* build real parts */
-       for (n = 0, l = ed->collection->parts; l; l = l->next, n++)
+       printf("%s %s = %i\n", file, part, ed->collection->script_only);
+       if (ed->collection->script_only)
+         _edje_script_only_init(ed);
+       else
          {
-            Edje_Part *ep;
-            Edje_Real_Part *rp;
-
-            ep = l->data;
-            rp = calloc(1, sizeof(Edje_Real_Part));
-            if (!rp)
-              {
-                 ed->load_error = EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
-                 return 0;
-              }
-            rp->edje = ed;
-            _edje_ref(rp->edje);
-            rp->part = ep;
-            parts = evas_list_append(parts, rp);
-            rp->param1.description = ep->default_desc;
-            rp->chosen_description = rp->param1.description;
-            if (!rp->param1.description)
-               printf("EDJE ERROR: no default part description!\n");
-            if (ep->type == EDJE_PART_TYPE_RECTANGLE)
-              rp->object = evas_object_rectangle_add(ed->evas);
-            else if (ep->type == EDJE_PART_TYPE_IMAGE)
-              rp->object = evas_object_image_add(ed->evas);
-            else if (ep->type == EDJE_PART_TYPE_TEXT)
-              {
-                 _edje_text_part_on_add(ed, rp);
-                 rp->object = evas_object_text_add(ed->evas);
-                 evas_object_text_font_source_set(rp->object, ed->path);
-              }
-            else if (ep->type == EDJE_PART_TYPE_SWALLOW || ep->type == 
EDJE_PART_TYPE_GROUP)
-              {
-                 rp->object = evas_object_rectangle_add(ed->evas);
-                 evas_object_color_set(rp->object, 0, 0, 0, 0);
-                 evas_object_pass_events_set(rp->object, 1);
-                 evas_object_pointer_mode_set(rp->object, 
EVAS_OBJECT_POINTER_MODE_NOGRAB);
-              }
-            else if (ep->type == EDJE_PART_TYPE_TEXTBLOCK)
-              rp->object = evas_object_textblock_add(ed->evas);
-            else if (ep->type == EDJE_PART_TYPE_GRADIENT)
-              rp->object = evas_object_gradient_add(ed->evas);
-            else
-               printf("EDJE ERROR: wrong part type %i!\n", ep->type);
-            if (rp->object)
-              {
-                 evas_object_smart_member_add(rp->object, ed->obj);
-                 evas_object_layer_set(rp->object, 
evas_object_layer_get(ed->obj));
-                 if (ep->type != EDJE_PART_TYPE_SWALLOW && ep->type != 
EDJE_PART_TYPE_GROUP)
+            Evas_List *l;
+            int i;
+            int errors = 0;
+
+            /* colorclass stuff */
+            for (l = ed->collection->parts; (l && ! errors); l = l->next)
+              {
+                 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)
                    {
-                      if (ep->mouse_events)
-                        {
-                           _edje_callbacks_add(rp->object, ed, rp);
-                           if (ep->repeat_events)
-                             evas_object_repeat_events_set(rp->object, 1);
-
-                           if (ep->pointer_mode != 
EVAS_OBJECT_POINTER_MODE_AUTOGRAB)
-                             evas_object_pointer_mode_set(rp->object, 
ep->pointer_mode);
-                        }
-                      else
-                        {
-                           evas_object_pass_events_set(rp->object, 1);
-                           evas_object_pointer_mode_set(rp->object, 
EVAS_OBJECT_POINTER_MODE_NOGRAB);
-                        }
-                      if (ep->precise_is_inside)
-                        evas_object_precise_is_inside_set(rp->object, 1);
+                      Edje_Part_Description *desc;
+                      
+                      desc = hist->data;
+                      if (desc->color_class)
+                        _edje_color_class_member_add(ed, desc->color_class);
                    }
-                 if (rp->part->clip_to_id < 0)
-                   evas_object_clip_set(rp->object, ed->clipper);
-              }
-            rp->drag.step.x = ep->dragable.step_x;
-            rp->drag.step.y = ep->dragable.step_y;
-            rp->gradient_id = -1;
-         }
-       if (n > 0)
-         {
-            Edje_Real_Part *rp;
-            ed->table_parts = malloc(sizeof(Edje_Real_Part *) * n);
-            ed->table_parts_size = n;
-            /* FIXME: check malloc return */
-            n = 0;
-            for (l = parts; l; l = l->next)
-              {
-                 rp = l->data;
-                 ed->table_parts[n] = rp;
-                 n++;
               }
-            evas_list_free(parts);
-            for (i = 0; i < ed->table_parts_size; i++)
+            /* build real parts */
+            for (n = 0, l = ed->collection->parts; l; l = l->next, n++)
               {
-                 rp = ed->table_parts[i];
-                 if (rp->param1.description->rel1.id_x >= 0)
-                   rp->param1.rel1_to_x = 
ed->table_parts[rp->param1.description->rel1.id_x % ed->table_parts_size];
-                 if (rp->param1.description->rel1.id_y >= 0)
-                   rp->param1.rel1_to_y = 
ed->table_parts[rp->param1.description->rel1.id_y % ed->table_parts_size];
-                 if (rp->param1.description->rel2.id_x >= 0)
-                   rp->param1.rel2_to_x = 
ed->table_parts[rp->param1.description->rel2.id_x % ed->table_parts_size];
-                 if (rp->param1.description->rel2.id_y >= 0)
-                   rp->param1.rel2_to_y = 
ed->table_parts[rp->param1.description->rel2.id_y % ed->table_parts_size];
-                 _edje_text_part_on_add_clippers(ed, rp);
-                 if (rp->part->clip_to_id >= 0)
+                 Edje_Part *ep;
+                 Edje_Real_Part *rp;
+                 
+                 ep = l->data;
+                 rp = calloc(1, sizeof(Edje_Real_Part));
+                 if (!rp)
+                   {
+                      ed->load_error = 
EDJE_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
+                      return 0;
+                   }
+                 rp->edje = ed;
+                 _edje_ref(rp->edje);
+                 rp->part = ep;
+                 parts = evas_list_append(parts, rp);
+                 rp->param1.description = ep->default_desc;
+                 rp->chosen_description = rp->param1.description;
+                 if (!rp->param1.description)
+                   printf("EDJE ERROR: no default part description!\n");
+                 if (ep->type == EDJE_PART_TYPE_RECTANGLE)
+                   rp->object = evas_object_rectangle_add(ed->evas);
+                 else if (ep->type == EDJE_PART_TYPE_IMAGE)
+                   rp->object = evas_object_image_add(ed->evas);
+                 else if (ep->type == EDJE_PART_TYPE_TEXT)
                    {
-                      rp->clip_to = ed->table_parts[rp->part->clip_to_id % 
ed->table_parts_size];
-                      if (rp->clip_to)
+                      _edje_text_part_on_add(ed, rp);
+                      rp->object = evas_object_text_add(ed->evas);
+                      evas_object_text_font_source_set(rp->object, ed->path);
+                   }
+                 else if (ep->type == EDJE_PART_TYPE_SWALLOW || ep->type == 
EDJE_PART_TYPE_GROUP)
+                   {
+                      rp->object = evas_object_rectangle_add(ed->evas);
+                      evas_object_color_set(rp->object, 0, 0, 0, 0);
+                      evas_object_pass_events_set(rp->object, 1);
+                      evas_object_pointer_mode_set(rp->object, 
EVAS_OBJECT_POINTER_MODE_NOGRAB);
+                   }
+                 else if (ep->type == EDJE_PART_TYPE_TEXTBLOCK)
+                   rp->object = evas_object_textblock_add(ed->evas);
+                 else if (ep->type == EDJE_PART_TYPE_GRADIENT)
+                   rp->object = evas_object_gradient_add(ed->evas);
+                 else
+                   printf("EDJE ERROR: wrong part type %i!\n", ep->type);
+                 if (rp->object)
+                   {
+                      evas_object_smart_member_add(rp->object, ed->obj);
+//                    evas_object_layer_set(rp->object, 
evas_object_layer_get(ed->obj));
+                      if (ep->type != EDJE_PART_TYPE_SWALLOW && ep->type != 
EDJE_PART_TYPE_GROUP)
                         {
-                           evas_object_pass_events_set(rp->clip_to->object, 1);
-                           evas_object_pointer_mode_set(rp->clip_to->object, 
EVAS_OBJECT_POINTER_MODE_NOGRAB);
-                           evas_object_clip_set(rp->object, 
rp->clip_to->object);
+                           if (ep->mouse_events)
+                             {
+                                _edje_callbacks_add(rp->object, ed, rp);
+                                if (ep->repeat_events)
+                                  evas_object_repeat_events_set(rp->object, 1);
+                                
+                                if (ep->pointer_mode != 
EVAS_OBJECT_POINTER_MODE_AUTOGRAB)
+                                  evas_object_pointer_mode_set(rp->object, 
ep->pointer_mode);
+                             }
+                           else
+                             {
+                                evas_object_pass_events_set(rp->object, 1);
+                                evas_object_pointer_mode_set(rp->object, 
EVAS_OBJECT_POINTER_MODE_NOGRAB);
+                             }
+                           if (ep->precise_is_inside)
+                             evas_object_precise_is_inside_set(rp->object, 1);
                         }
+                      if (rp->part->clip_to_id < 0)
+                        evas_object_clip_set(rp->object, ed->clipper);
                    }
-                 if (rp->part->dragable.confine_id >= 0)
-                   rp->confine_to = 
ed->table_parts[rp->part->dragable.confine_id % ed->table_parts_size];
-
-                 /* replay events for dragable */
-                 if (rp->part->dragable.events_id >= 0)
+                 rp->drag.step.x = ep->dragable.step_x;
+                 rp->drag.step.y = ep->dragable.step_y;
+                 rp->gradient_id = -1;
+              }
+            if (n > 0)
+              {
+                 Edje_Real_Part *rp;
+                 ed->table_parts = malloc(sizeof(Edje_Real_Part *) * n);
+                 ed->table_parts_size = n;
+                 /* FIXME: check malloc return */
+                 n = 0;
+                 for (l = parts; l; l = l->next)
                    {
-                      rp->events_to =
-                         ed->table_parts[rp->part->dragable.events_id % 
ed->table_parts_size];
-                      /* events_to may be used only with dragable */
-                      if (!rp->events_to->part->dragable.x &&
-                          !rp->events_to->part->dragable.y)
-                        rp->events_to = NULL;
+                      rp = l->data;
+                      ed->table_parts[n] = rp;
+                      n++;
                    }
-
-                 rp->swallow_params.min.w = 0;
-                 rp->swallow_params.min.w = 0;
-                 rp->swallow_params.max.w = -1;
-                 rp->swallow_params.max.h = -1;
-
-                 if (ed->file->feature_ver < 1)
+                 evas_list_free(parts);
+                 for (i = 0; i < ed->table_parts_size; i++)
                    {
-                      rp->param1.description->text.id_source = -1;
-                      rp->param1.description->text.id_text_source = -1;
+                      rp = ed->table_parts[i];
+                      if (rp->param1.description->rel1.id_x >= 0)
+                        rp->param1.rel1_to_x = 
ed->table_parts[rp->param1.description->rel1.id_x % ed->table_parts_size];
+                      if (rp->param1.description->rel1.id_y >= 0)
+                        rp->param1.rel1_to_y = 
ed->table_parts[rp->param1.description->rel1.id_y % ed->table_parts_size];
+                      if (rp->param1.description->rel2.id_x >= 0)
+                        rp->param1.rel2_to_x = 
ed->table_parts[rp->param1.description->rel2.id_x % ed->table_parts_size];
+                      if (rp->param1.description->rel2.id_y >= 0)
+                        rp->param1.rel2_to_y = 
ed->table_parts[rp->param1.description->rel2.id_y % ed->table_parts_size];
+                      _edje_text_part_on_add_clippers(ed, rp);
+                      if (rp->part->clip_to_id >= 0)
+                        {
+                           rp->clip_to = ed->table_parts[rp->part->clip_to_id 
% ed->table_parts_size];
+                           if (rp->clip_to)
+                             {
+                                
evas_object_pass_events_set(rp->clip_to->object, 1);
+                                
evas_object_pointer_mode_set(rp->clip_to->object, 
EVAS_OBJECT_POINTER_MODE_NOGRAB);
+                                evas_object_clip_set(rp->object, 
rp->clip_to->object);
+                             }
+                        }
+                      if (rp->part->dragable.confine_id >= 0)
+                        rp->confine_to = 
ed->table_parts[rp->part->dragable.confine_id % ed->table_parts_size];
+                      
+                      /* replay events for dragable */
+                      if (rp->part->dragable.events_id >= 0)
+                        {
+                           rp->events_to =
+                             ed->table_parts[rp->part->dragable.events_id % 
ed->table_parts_size];
+                           /* events_to may be used only with dragable */
+                           if (!rp->events_to->part->dragable.x &&
+                               !rp->events_to->part->dragable.y)
+                             rp->events_to = NULL;
+                        }
+                      
+                      rp->swallow_params.min.w = 0;
+                      rp->swallow_params.min.w = 0;
+                      rp->swallow_params.max.w = -1;
+                      rp->swallow_params.max.h = -1;
+                      
+                      if (ed->file->feature_ver < 1)
+                        {
+                           rp->param1.description->text.id_source = -1;
+                           rp->param1.description->text.id_text_source = -1;
+                        }
+                      if (rp->param1.description->text.id_source >= 0)
+                        rp->text.source = 
ed->table_parts[rp->param1.description->text.id_source % ed->table_parts_size];
+                      if (rp->param1.description->text.id_text_source >= 0)
+                        rp->text.text_source = 
ed->table_parts[rp->param1.description->text.id_text_source % 
ed->table_parts_size];
                    }
-                 if (rp->param1.description->text.id_source >= 0)
-                   rp->text.source = 
ed->table_parts[rp->param1.description->text.id_source % ed->table_parts_size];
-                 if (rp->param1.description->text.id_text_source >= 0)
-                   rp->text.text_source = 
ed->table_parts[rp->param1.description->text.id_text_source % 
ed->table_parts_size];
-              }
-         }
-
-       _edje_programs_patterns_init(ed);
-
-       n = evas_list_count(ed->collection->programs);
-       if (n > 0)
-         {
-            /* FIXME: keeping a table AND a list is just bad - nuke list */
-            ed->table_programs = malloc(sizeof(Edje_Program *) * n);
-            ed->table_programs_size = n;
-            /* FIXME: check malloc return */
-            n = 0;
-            for (l = ed->collection->programs; l; l = l->next)
-              {
-                 Edje_Program *pr;
-
-                 pr = l->data;
-                 ed->table_programs[n] = pr;
-                 n++;
               }
-         }
-       _edje_ref(ed);
-       _edje_block(ed);
-       _edje_freeze(ed);
-       if (ed->collection->script) _edje_embryo_script_init(ed);
-       _edje_var_init(ed);
-       for (i = 0; i < ed->table_parts_size; i++)
-         {
-            Edje_Real_Part *rp;
-
-            rp = ed->table_parts[i];
-            evas_object_show(rp->object);
-            if (_edje_block_break(ed)) break;
-            if (rp->part->dragable.x < 0) rp->drag.val.x = 1.0;
-            if (rp->part->dragable.y < 0) rp->drag.val.x = 1.0;
-            _edje_dragable_pos_set(ed, rp, rp->drag.val.x, rp->drag.val.y);
-         }
-       ed->dirty = 1;
-       if ((evas_object_clipees_get(ed->clipper)) &&
-           (evas_object_visible_get(obj)))
-         evas_object_show(ed->clipper);
-
-       /* instantiate 'internal swallows' */
-       for (i = 0; i < ed->table_parts_size; i++)
-         {
-            Edje_Real_Part *rp;
-
-            rp = ed->table_parts[i];
-            if (rp->part->type != EDJE_PART_TYPE_GROUP) continue;
-            if (rp->part->source)
-              {
-                 Evas_List *l;
-                 Evas_Object *child_obj;
-                 Edje *child_ed;
-                 const char *group_path_entry = 
evas_stringshare_add(rp->part->source);
-                 if (!group_path)
+            
+            _edje_programs_patterns_init(ed);
+            
+            n = evas_list_count(ed->collection->programs);
+            if (n > 0)
+              {
+                 /* FIXME: keeping a table AND a list is just bad - nuke list 
*/
+                 ed->table_programs = malloc(sizeof(Edje_Program *) * n);
+                 ed->table_programs_size = n;
+                 /* FIXME: check malloc return */
+                 n = 0;
+                 for (l = ed->collection->programs; l; l = l->next)
                    {
-                      group_path = evas_list_append(NULL, 
evas_stringshare_add(part));
-                      group_path_started = 1;
+                      Edje_Program *pr;
+                      
+                      pr = l->data;
+                      ed->table_programs[n] = pr;
+                      n++;
                    }
-                 /* make sure that this group isn't already in the tree of 
parents */
-                 for (l = group_path; l; l = l->next)
+              }
+            _edje_ref(ed);
+            _edje_block(ed);
+            _edje_freeze(ed);
+            if (ed->collection->script) _edje_embryo_script_init(ed);
+            _edje_var_init(ed);
+            for (i = 0; i < ed->table_parts_size; i++)
+              {
+                 Edje_Real_Part *rp;
+                 
+                 rp = ed->table_parts[i];
+                 evas_object_show(rp->object);
+                 if (_edje_block_break(ed)) break;
+                 if (rp->part->dragable.x < 0) rp->drag.val.x = 1.0;
+                 if (rp->part->dragable.y < 0) rp->drag.val.x = 1.0;
+                 _edje_dragable_pos_set(ed, rp, rp->drag.val.x, 
rp->drag.val.y);
+              }
+            ed->dirty = 1;
+            if ((evas_object_clipees_get(ed->clipper)) &&
+                (evas_object_visible_get(obj)))
+              evas_object_show(ed->clipper);
+            
+            /* instantiate 'internal swallows' */
+            for (i = 0; i < ed->table_parts_size; i++)
+              {
+                 Edje_Real_Part *rp;
+                 
+                 rp = ed->table_parts[i];
+                 if (rp->part->type != EDJE_PART_TYPE_GROUP) continue;
+                 if (rp->part->source)
                    {
-                      if (l->data == group_path_entry)
+                      Evas_List *l;
+                      Evas_Object *child_obj;
+                      Edje *child_ed;
+                      const char *group_path_entry = 
evas_stringshare_add(rp->part->source);
+                      if (!group_path)
+                        {
+                           group_path = evas_list_append(NULL, 
evas_stringshare_add(part));
+                           group_path_started = 1;
+                        }
+                      /* make sure that this group isn't already in the tree 
of parents */
+                      for (l = group_path; l; l = l->next)
+                        {
+                           if (l->data == group_path_entry)
+                             {
+                                _edje_thaw(ed);
+                                _edje_unblock(ed);
+                                _edje_unref(ed);
+                                _edje_file_del(ed);
+                                evas_stringshare_del(group_path_entry);
+                                if (group_path_started)
+                                  {
+                                     evas_stringshare_del(group_path->data);
+                                     evas_list_free(group_path);
+                                  }
+                                ed->load_error = 
EDJE_LOAD_ERROR_RECURSIVE_REFERENCE;
+                                return 0;
+                             }
+                        }
+                      
+                      child_obj = edje_object_add(ed->evas);
+                      group_path = evas_list_append(group_path, 
group_path_entry);
+                      if (!_edje_object_file_set_internal(child_obj, file, 
rp->part->source, group_path))
                         {
                            _edje_thaw(ed);
                            _edje_unblock(ed);
                            _edje_unref(ed);
                            _edje_file_del(ed);
-                           evas_stringshare_del(group_path_entry);
+                           
                            if (group_path_started)
                              {
-                                evas_stringshare_del(group_path->data);
-                                evas_list_free(group_path);
+                                while (group_path)
+                                  {
+                                     evas_stringshare_del(group_path->data);
+                                     group_path = 
evas_list_remove_list(group_path, group_path);
+                                  }
                              }
-                           ed->load_error = 
EDJE_LOAD_ERROR_RECURSIVE_REFERENCE;
+                           ed->load_error = 
edje_object_load_error_get(child_obj);
                            return 0;
                         }
+                      child_ed = _edje_fetch(child_obj);
+                      child_ed->parent = evas_stringshare_add(rp->part->name);
+                      
+                      group_path = evas_list_remove(group_path, 
group_path_entry);
+                      evas_stringshare_del(group_path_entry);
+                      
+                      edje_object_signal_callback_add(child_obj, "*", "*", 
_cb_signal_repeat, obj);
+                      _edje_real_part_swallow(rp, child_obj);
                    }
-
-                 child_obj = edje_object_add(ed->evas);
-                 group_path = evas_list_append(group_path, group_path_entry);
-                 if (!_edje_object_file_set_internal(child_obj, file, 
rp->part->source, group_path))
-                   {
-                      _edje_thaw(ed);
-                      _edje_unblock(ed);
-                      _edje_unref(ed);
-                      _edje_file_del(ed);
-
-                      if (group_path_started)
-                        {
-                           while (group_path)
-                             {
-                                evas_stringshare_del(group_path->data);
-                                group_path = evas_list_remove_list(group_path, 
group_path);
-                             }
-                        }
-                      ed->load_error = edje_object_load_error_get(child_obj);
-                      return 0;
-                   }
-                 child_ed = _edje_fetch(child_obj);
-                 child_ed->parent = evas_stringshare_add(rp->part->name);
-
-                 group_path = evas_list_remove(group_path, group_path_entry);
-                 evas_stringshare_del(group_path_entry);
-
-                 edje_object_signal_callback_add(child_obj, "*", "*", 
_cb_signal_repeat, obj);
-                 _edje_real_part_swallow(rp, child_obj);
               }
-         }
-
-       if (group_path_started)
-         {
-            while (group_path)
+            
+            if (group_path_started)
               {
-                 evas_stringshare_del(group_path->data);
-                 group_path = evas_list_remove_list(group_path, group_path);
+                 while (group_path)
+                   {
+                      evas_stringshare_del(group_path->data);
+                      group_path = evas_list_remove_list(group_path, 
group_path);
+                   }
               }
-         }
-
-       /* reswallow any swallows that existed before setting the file */
-       if (old_swallows)
-         {
-            while (old_swallows)
+            
+            /* reswallow any swallows that existed before setting the file */
+            if (old_swallows)
               {
-                 const char *name;
-                 Evas_Object *swallow;
-
-                 name = old_swallows->data;
-                 old_swallows = evas_list_remove_list(old_swallows, 
old_swallows);
-
-                 swallow = old_swallows->data;
-                 old_swallows = evas_list_remove_list(old_swallows, 
old_swallows);
-
-                 edje_object_part_swallow(obj, name, swallow);
-                 evas_stringshare_del(name);
+                 while (old_swallows)
+                   {
+                      const char *name;
+                      Evas_Object *swallow;
+                      
+                      name = old_swallows->data;
+                      old_swallows = evas_list_remove_list(old_swallows, 
old_swallows);
+                      
+                      swallow = old_swallows->data;
+                      old_swallows = evas_list_remove_list(old_swallows, 
old_swallows);
+                      
+                      edje_object_part_swallow(obj, name, swallow);
+                      evas_stringshare_del(name);
+                   }
               }
+            
+            _edje_recalc(ed);
+            _edje_thaw(ed);
+            _edje_unblock(ed);
+            _edje_unref(ed);
          }
-
-       _edje_recalc(ed);
-       _edje_thaw(ed);
-       _edje_unblock(ed);
-       _edje_unref(ed);
        ed->load_error = EDJE_LOAD_ERROR_NONE;
        _edje_emit(ed, "load", NULL);
        return 1;
===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/edje_message_queue.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -3 -r1.33 -r1.34
--- edje_message_queue.c        1 Mar 2008 04:59:38 -0000       1.33
+++ edje_message_queue.c        30 May 2008 11:20:49 -0000      1.34
@@ -420,34 +420,10 @@
 }
 
 void
-_edje_message_process(Edje_Message *em)
+_edje_message_parameters_push(Edje_Message *em)
 {
-   Embryo_Function fn;
-   void *pdata;
    int i;
-
-   /* signals are only handled one way */
-   if (em->type == EDJE_MESSAGE_SIGNAL)
-     {
-       _edje_emit_handle(em->edje,
-                         ((Edje_Message_Signal *)em->msg)->sig,
-                         ((Edje_Message_Signal *)em->msg)->src);
-       return;
-     }
-   /* if this has been queued up for the app then just call the callback */
-   if (em->queue == EDJE_QUEUE_APP)
-     {
-       if (em->edje->message.func)
-         em->edje->message.func(em->edje->message.data, em->edje->obj,
-                                em->type, em->id, em->msg);
-       return;
-     }
-   /* now this message is destined for the script message handler fn */
-   if (!((em->edje->collection) && (em->edje->collection->script))) return;
-   fn = embryo_program_function_find(em->edje->collection->script, "message");
-   if (fn == EMBRYO_FUNCTION_NONE) return;
-   /* reset the engine */
-   _edje_embryo_script_reset(em->edje);
+   
    /* these params ALWAYS go on */
    /* first param is the message type - always */
    embryo_parameter_cell_push(em->edje->collection->script,
@@ -556,6 +532,44 @@
       default:
        break;
      }
+}
+
+void
+_edje_message_process(Edje_Message *em)
+{
+   Embryo_Function fn;
+   void *pdata;
+
+   /* signals are only handled one way */
+   if (em->type == EDJE_MESSAGE_SIGNAL)
+     {
+       _edje_emit_handle(em->edje,
+                         ((Edje_Message_Signal *)em->msg)->sig,
+                         ((Edje_Message_Signal *)em->msg)->src);
+       return;
+     }
+   /* if this has been queued up for the app then just call the callback */
+   if (em->queue == EDJE_QUEUE_APP)
+     {
+       if (em->edje->message.func)
+         em->edje->message.func(em->edje->message.data, em->edje->obj,
+                                em->type, em->id, em->msg);
+       return;
+     }
+   /* now this message is destined for the script message handler fn */
+   if (!((em->edje->collection) && (em->edje->collection->script))) return;
+   if (_edje_script_only(em->edje))
+     {
+       _edje_script_only_message(em->edje, em);
+       return;
+     }
+   fn = embryo_program_function_find(em->edje->collection->script, "message");
+   if (fn == EMBRYO_FUNCTION_NONE) return;
+   /* reset the engine */
+   _edje_embryo_script_reset(em->edje);
+   
+   _edje_message_parameters_push(em);
+   
    embryo_program_vm_push(em->edje->collection->script);
    _edje_embryo_globals_init(em->edje);
    pdata = embryo_program_data_get(em->edje->collection->script);
===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/edje_private.h,v
retrieving revision 1.148
retrieving revision 1.149
diff -u -3 -r1.148 -r1.149
--- edje_private.h      29 May 2008 02:00:04 -0000      1.148
+++ edje_private.h      30 May 2008 11:20:49 -0000      1.149
@@ -647,6 +647,7 @@
    /* for faster lookups to avoid nth list walks */
    Edje_Real_Part      **table_parts;
    Edje_Program        **table_programs;
+   void                 *script_only_data;
    int                   table_programs_size;
    int                   table_parts_size;
 
@@ -1147,6 +1148,7 @@
 Edje_Message *_edje_message_new             (Edje *ed, Edje_Queue queue, 
Edje_Message_Type type, int id);
 void          _edje_message_free            (Edje_Message *em);
 void          _edje_message_send            (Edje *ed, Edje_Queue queue, 
Edje_Message_Type type, int id, void *emsg);
+void          _edje_message_parameters_push (Edje_Message *em);
 void          _edje_message_process         (Edje_Message *em);
 void          _edje_message_queue_process   (void);
 void          _edje_message_queue_clear     (void);
@@ -1165,4 +1167,61 @@
 
 void _edje_embryo_globals_init(Edje *ed);
 
+#define CHKPARAM(n) if (params[0] != (sizeof(Embryo_Cell) * (n))) return -1;
+#define GETSTR(str, par) { \
+   Embryo_Cell *___cptr; \
+   int ___l; \
+   str = NULL; \
+   if ((___cptr = embryo_data_address_get(ep, (par)))) { \
+      ___l = embryo_data_string_length_get(ep, ___cptr); \
+      if (((str) = alloca(___l + 1))) \
+       embryo_data_string_get(ep, ___cptr, (str)); } }
+#define GETSTREVAS(str, par) { \
+   if ((str)) { \
+      if ((par) && (!strcmp((par), (str)))) return 0; \
+      if ((par)) evas_stringshare_del((par)); \
+      (par) = (char *)evas_stringshare_add((str)); } \
+   else (par) = NULL; }
+#define GETFLOAT(val, par) { \
+   float *___cptr; \
+   if ((___cptr = (float *)embryo_data_address_get(ep, (par)))) { \
+      val = *___cptr; } }
+#define GETINT(val, par) { \
+   int *___cptr; \
+   if ((___cptr = (int *)embryo_data_address_get(ep, (par)))) { \
+      val = *___cptr; } }
+#define SETSTR(str, par) { \
+   Embryo_Cell *___cptr; \
+   if ((___cptr = embryo_data_address_get(ep, (par)))) { \
+      embryo_data_string_set(ep, str, ___cptr); } }
+#define SETSTRALLOCATE(s) { \
+   if (s) { \
+      if (strlen((s)) < params[4]) { \
+        SETSTR((s), params[3]); } \
+      else { \
+        char *ss; \
+        ss = alloca(strlen((s)) + 1); \
+        strcpy(ss, (s)); \
+        ss[params[4] - 2] = 0; \
+        SETSTR(ss, params[3]); } } \
+   else \
+     SETSTR("", params[3]); }
+#define SETFLOAT(val, par) { \
+   float *___cptr; \
+   if ((___cptr = (float *)embryo_data_address_get(ep, (par)))) { \
+      *___cptr = (float)val; } }
+#define SETINT(val, par) { \
+   int *___cptr; \
+   if ((___cptr = (int *)embryo_data_address_get(ep, (par)))) { \
+      *___cptr = (int)val; } }
+
+int _edje_script_only(Edje *ed);
+void _edje_script_only_init(Edje *ed);
+void _edje_script_only_shutdown(Edje *ed);
+void _edje_script_only_show(Edje *ed);
+void _edje_script_only_hide(Edje *ed);
+void _edje_script_only_move(Edje *ed);
+void _edje_script_only_resize(Edje *ed);
+void _edje_script_only_message(Edje *ed, Edje_Message *em);
+    
 #endif
===================================================================
RCS file: /cvs/e/e17/libs/edje/src/lib/edje_smart.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -3 -r1.33 -r1.34
--- edje_smart.c        5 Oct 2007 04:53:17 -0000       1.33
+++ edje_smart.c        30 May 2008 11:20:49 -0000      1.34
@@ -88,6 +88,7 @@
    _edje_clean_objects(ed);
    _edje_edjes = evas_list_remove(_edje_edjes, obj);
    evas_object_smart_data_set(obj, NULL);
+   if (_edje_script_only(ed)) _edje_script_only_shutdown(ed);
    _edje_file_del(ed);
    _edje_unref(ed);
 }
@@ -105,6 +106,12 @@
    ed->y = y;
 //   evas_object_move(ed->clipper, ed->x, ed->y);
 
+   if (_edje_script_only(ed))
+     {
+       _edje_script_only_move(ed);
+       return;
+     }
+   
    for (i = 0; i < ed->table_parts_size; i++)
      {
        Edje_Real_Part *ep;
@@ -146,6 +153,11 @@
    if ((w == ed->w) && (h == ed->h)) return;
    ed->w = w;
    ed->h = h;
+   if (_edje_script_only(ed))
+     {
+       _edje_script_only_resize(ed);
+       return;
+     }
 //   evas_object_resize(ed->clipper, ed->w, ed->h);
    ed->dirty = 1;
    _edje_recalc(ed);
@@ -162,6 +174,11 @@
    if (evas_object_visible_get(ed->clipper)) return;
    if ((ed->collection) && (evas_object_clipees_get(ed->clipper)))
      evas_object_show(ed->clipper);
+   if (_edje_script_only(ed))
+     {  
+       _edje_script_only_show(ed);
+       return;
+     }
    _edje_emit(ed, "show", NULL);
 }
 
@@ -175,6 +192,11 @@
    if (!evas_object_visible_get(ed->clipper)) return;
    if ((ed->collection) && (evas_object_clipees_get(ed->clipper)))
      evas_object_hide(ed->clipper);
+   if (_edje_script_only(ed))
+     {  
+       _edje_script_only_hide(ed);
+       return;
+     }
    _edje_emit(ed, "hide", NULL);
 }
 



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to