cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=d200d483efb61de222129165d9fc1e56a7404167

commit d200d483efb61de222129165d9fc1e56a7404167
Author: perepelits.m <perepelit...@samsung.com>
Date:   Tue May 17 05:21:39 2016 -0700

    edje: attaching viewport of camera to the image part
    
    Summary:
    According to D3710 new field "camera" in edc was added for IMAGE parts.
    It is the name of the CAMERA part to set its viewport as a source of image 
if no image name is given.
    
    Reviewers: raster, Hermet, cedric
    
    Reviewed By: cedric
    
    Subscribers: jpeg, artem.popov
    
    Differential Revision: https://phab.enlightenment.org/D3777
    
    Signed-off-by: Cedric Bail <ced...@osg.samsung.com>
---
 src/bin/edje/edje_cc_handlers.c | 54 +++++++++++++++++++++++------------------
 src/lib/edje/edje_calc.c        | 15 ++++++++++++
 src/lib/edje/edje_data.c        |  4 +--
 src/lib/edje/edje_load.c        | 14 ++++++++++-
 4 files changed, 60 insertions(+), 27 deletions(-)

diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c
index f0ac056..a4b85cd 100644
--- a/src/bin/edje/edje_cc_handlers.c
+++ b/src/bin/edje/edje_cc_handlers.c
@@ -247,7 +247,6 @@ static void st_collections_base_scale(void);
 
 static void ob_collections_group(void);
 static void st_collections_group_name(void);
-static void st_collections_group_scene_size(void);
 static void st_collections_group_inherit_only(void);
 static void st_collections_group_inherit(void);
 static void st_collections_group_program_source(void);
@@ -258,6 +257,7 @@ static void st_collections_group_script_recursion(void);
 static void st_collections_group_alias(void);
 static void st_collections_group_min(void);
 static void st_collections_group_max(void);
+static void st_collections_group_scene_size(void);
 static void st_collections_group_broadcast_signal(void);
 static void st_collections_group_data_item(void);
 static void st_collections_group_orientation(void);
@@ -705,7 +705,6 @@ New_Statement_Handler statement_handlers[] =
      {"collections.group.vibrations.sample.name", 
st_collections_group_vibration_sample_name}, /* dup */
      {"collections.group.vibrations.sample.source", 
st_collections_group_vibration_sample_source}, /* dup */
      {"collections.group.name", st_collections_group_name},
-     {"collections.group.scene_size", st_collections_group_scene_size},
      {"collections.group.program_source", st_collections_group_program_source},
      {"collections.group.inherit", st_collections_group_inherit},
      {"collections.group.inherit_only", st_collections_group_inherit_only},
@@ -717,6 +716,7 @@ New_Statement_Handler statement_handlers[] =
      {"collections.group.alias", st_collections_group_alias},
      {"collections.group.min", st_collections_group_min},
      {"collections.group.max", st_collections_group_max},
+     {"collections.group.scene_size", st_collections_group_scene_size},
      {"collections.group.broadcast_signal", 
st_collections_group_broadcast_signal},
      {"collections.group.orientation", st_collections_group_orientation},
      {"collections.group.mouse_events", st_collections_group_mouse_events},
@@ -3961,6 +3961,9 @@ ob_collections_group(void)
    pcp = (Edje_Part_Collection_Parser *)pc;
    pcp->default_mouse_events = 1;
 
+   pc->scene_size.width = 0;
+   pc->scene_size.height = 0;
+
 #ifdef HAVE_EPHYSICS
    pc->physics.world.gravity.x = 0;
    pc->physics.world.gravity.y = 294;
@@ -4033,28 +4036,6 @@ st_collections_group_name(void)
    _group_name(parse_str(0));
 }
 
-/**
-    @page edcref
-    @property
-        scene_size
-    @parameters
-        [scene size]
-    @effect
-        Height and width of scene
-    @endproperty
-*/
-static void
-st_collections_group_scene_size(void)
-{
-   Edje_Part_Collection *current_pc;
-
-   check_arg_count(2);
-
-   current_pc = eina_list_data_get(eina_list_last(edje_collections));
-   current_pc->scene_size.width = parse_float(0);
-   current_pc->scene_size.height = parse_float(1);
-}
-
 typedef struct _Edje_List_Foreach_Data Edje_List_Foreach_Data;
 struct _Edje_List_Foreach_Data
 {
@@ -4692,6 +4673,28 @@ st_collections_group_max(void)
 }
 
 /**
+    @page edcref
+    @property
+        scne_size
+    @parameters
+        [width] [height]
+    @effect
+        Size of scene.
+    @endproperty
+*/
+static void
+st_collections_group_scene_size(void)
+{
+   Edje_Part_Collection *pc;
+
+   check_arg_count(2);
+
+   pc = eina_list_data_get(eina_list_last(edje_collections));
+   pc->scene_size.width = parse_float(0);
+   pc->scene_size.height = parse_float(1);
+}
+
+/**
    @page edcref
    @property
        broadcast_signal
@@ -6037,6 +6040,9 @@ st_collections_group_parts_part_type(void)
                      "TABLE", EDJE_PART_TYPE_TABLE,
                      "EXTERNAL", EDJE_PART_TYPE_EXTERNAL,
                      "PROXY", EDJE_PART_TYPE_PROXY,
+                     "MESH_NODE", EDJE_PART_TYPE_MESH_NODE,
+                     "LIGHT", EDJE_PART_TYPE_LIGHT,
+                     "CAMERA", EDJE_PART_TYPE_CAMERA,
                      "SPACER", EDJE_PART_TYPE_SPACER,
                      "SNAPSHOT", EDJE_PART_TYPE_SNAPSHOT,
                      NULL);
diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c
index 0a8a8a2..44fa75a 100644
--- a/src/lib/edje/edje_calc.c
+++ b/src/lib/edje/edje_calc.c
@@ -4658,10 +4658,25 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
              break;
            case EDJE_PART_TYPE_CAMERA:
              {
+                Evas_Object *viewport;
                 Evas_Canvas3D_Camera *camera = NULL;
                 Edje_Part_Description_Camera *pd_camera;
 
+                efl_gfx_size_set(ep->object, pf->req.w, pf->req.h);
+
                 pd_camera = (Edje_Part_Description_Camera*) 
ep->chosen_description;
+
+                efl_gfx_position_set(ep->object, ed->x + pf->final.x, ed->y + 
pf->final.y),
+                efl_gfx_size_set(ep->object, pf->final.w, pf->final.h);
+
+                viewport = evas_object_image_source_get(ep->object);
+
+                efl_gfx_size_set(viewport, pf->req.w, pf->req.h);
+
+                evas_object_image_source_visible_set(ep->object, EINA_FALSE);
+                evas_object_image_source_events_set(ep->object, EINA_TRUE);
+                evas_object_show(ep->object);
+
                 camera = evas_canvas3d_node_camera_get(ep->node);
 
                 evas_canvas3d_camera_projection_perspective_set(camera, 
pd_camera->camera.camera.fovy, pd_camera->camera.camera.aspect, 
pd_camera->camera.camera.frustum_near, pd_camera->camera.camera.frustum_far);
diff --git a/src/lib/edje/edje_data.c b/src/lib/edje/edje_data.c
index 327f63e..c229f6a 100644
--- a/src/lib/edje/edje_data.c
+++ b/src/lib/edje/edje_data.c
@@ -1349,6 +1349,8 @@ _edje_edd_init(void)
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "id", id, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_HASH_STRING(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "alias", alias);
    EET_DATA_DESCRIPTOR_ADD_HASH_STRING(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "aliased", aliased);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "scene_size.width", scene_size.width, EDJE_T_FLOAT);
+   EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "scene_size.height", scene_size.height, EDJE_T_FLOAT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "prop.min.w", prop.min.w, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "prop.min.h", prop.min.h, EET_T_INT);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "prop.max.w", prop.max.w, EET_T_INT);
@@ -1367,8 +1369,6 @@ _edje_edd_init(void)
 #endif
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "physics_enabled", physics_enabled, EET_T_UCHAR);
    EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "script_recursion", script_recursion, EET_T_UCHAR);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "scene_size.width", scene_size.width, EDJE_T_FLOAT);
-   EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_collection, 
Edje_Part_Collection, "scene_size.height", scene_size.height, EDJE_T_FLOAT);
 }
 
 EAPI void
diff --git a/src/lib/edje/edje_load.c b/src/lib/edje/edje_load.c
index af9e7ce..047e5de 100644
--- a/src/lib/edje/edje_load.c
+++ b/src/lib/edje/edje_load.c
@@ -470,6 +470,13 @@ _edje_programs_patterns_clean(Edje_Part_Collection *edc)
    edc->patterns.programs.u.programs.globing = NULL;
 }
 
+void
+_evas_object_viewport_del(void *data, Evas *_evas EINA_UNUSED, Evas_Object *eo 
EINA_UNUSED, void   *event_info EINA_UNUSED)
+{
+   Eo* viewport = (Eo*) data;
+   evas_object_del(viewport);
+}
+
 #ifdef HAVE_EPHYSICS
 static void
 _edje_physics_world_update_cb(void *data, EPhysics_World *world EINA_UNUSED, 
void *event_info EINA_UNUSED)
@@ -850,7 +857,12 @@ _edje_object_file_set_internal(Evas_Object *obj, const 
Eina_File *file, const ch
                           evas_canvas3d_node_camera_set(rp->node, camera);
 
                           rp->object = 
evas_object_image_filled_add(ed->base->evas);
-                          evas_object_resize(rp->object, 
ed->collection->scene_size.width, ed->collection->scene_size.height);
+
+                          Eo* viewport = 
evas_object_image_filled_add(ed->base->evas);
+                          evas_object_image_source_set(rp->object, viewport);
+                          evas_object_show(viewport);
+                          evas_object_event_callback_add(rp->object, 
EVAS_CALLBACK_DEL, _evas_object_viewport_del, viewport);
+
                           break;
                        }
 

-- 


Reply via email to