diff options
author | perepelits.m <perepelits.m@samsung.com> | 2016-05-17 05:21:39 -0700 |
---|---|---|
committer | Cedric Bail <cedric@osg.samsung.com> | 2016-05-17 05:21:45 -0700 |
commit | d200d483efb61de222129165d9fc1e56a7404167 (patch) | |
tree | 0e82785cfdce6f80ae4865592d7a80bb5b5932d4 | |
parent | a5216d4f7939efbd6ecdc001c8b984e391c0b32d (diff) | |
download | efl-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.c | 54 | ||||
-rw-r--r-- | src/lib/edje/edje_calc.c | 15 | ||||
-rw-r--r-- | src/lib/edje/edje_data.c | 4 | ||||
-rw-r--r-- | 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 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; } |