summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorperepelits.m <perepelits.m@samsung.com>2016-05-17 05:21:39 -0700
committerCedric Bail <cedric@osg.samsung.com>2016-05-17 05:21:45 -0700
commitd200d483efb61de222129165d9fc1e56a7404167 (patch)
tree0e82785cfdce6f80ae4865592d7a80bb5b5932d4
parenta5216d4f7939efbd6ecdc001c8b984e391c0b32d (diff)
downloadefl-d200d483efb61de222129165d9fc1e56a7404167.tar.gz
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 <cedric@osg.samsung.com>
-rw-r--r--src/bin/edje/edje_cc_handlers.c54
-rw-r--r--src/lib/edje/edje_calc.c15
-rw-r--r--src/lib/edje/edje_data.c4
-rw-r--r--src/lib/edje/edje_load.c14
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 f0ac0569a3..a4b85cd81c 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 0a8a8a27e4..44fa75aa88 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 327f63e7f3..c229f6acfd 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 af9e7cefed..047e5de9f4 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;
}