edje: creation of scene in edje-3d

Summary: Creation of scene and root node in edje-3d with all 3D-parts of edje object. Add some new methods to edje_util.c

Reviewers: raster, Hermet, jpeg, cedric

Reviewed By: cedric

Subscribers: artem.popov

Differential Revision: https://phab.enlightenment.org/D3963

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
perepelits.m 2016-06-09 10:05:21 -07:00 committed by Cedric BAIL
parent 9b949508e3
commit 32f5bc113e
2 changed files with 66 additions and 0 deletions

View File

@ -2338,6 +2338,18 @@ EAPI Eina_Bool edje_audio_channel_mute_get(Edje_Channel channel);
* @since 1.10
*/
EAPI const char *edje_object_part_object_name_get(const Evas_Object *obj);
/**
* Create scene and root node which contains all 3D parts of edje object
* @param obj An edje part object
* @param root node to collect all 3D parts
* @param scene
* @return scene and root node which contains all 3D parts of edje object
* @note If this function returns @c EINA_FALSE, @p the scene or the root
* node wasn't made
* @since 1.18
*/
EAPI Eina_Bool edje_3d_object_add(Evas_Object *obj, Eo **root_node, Eo *scene);
/**
* @}
*/

View File

@ -2475,3 +2475,57 @@ _edje_dupe_vector_data(Edje *ed, int svg_id, double width, double height,
data->h = vector->h;
}
EAPI Eina_Bool
edje_3d_object_add(Evas_Object *obj, Eo **root_node, Eo *scene)
{
/* Use default value for state. */
unsigned int i;
Edje *ed;
Edje_Real_Part *rp;
ed = _edje_fetch(obj);
if (!ed)
{
ERR("Cannot get edje from object");
return EINA_FALSE;
}
if (*root_node == NULL)
*root_node = eo_add(EVAS_CANVAS3D_NODE_CLASS, ed->base->evas,
evas_canvas3d_node_constructor(eo_self, EVAS_CANVAS3D_NODE_TYPE_NODE));
if (scene == NULL)
scene = eo_add(EVAS_CANVAS3D_SCENE_CLASS, ed->base->evas);
if ((*root_node == NULL) || (scene == NULL))
{
ERR("Cannot create scene and root node");
return EINA_FALSE;
}
for (i = 0; i < ed->table_parts_size; i++)
{
rp = ed->table_parts[i];
if (rp->node)
{
evas_canvas3d_node_member_add(*root_node, rp->node);
}
if ((rp->part->type == EDJE_PART_TYPE_CAMERA))
{
Evas_Object *viewport;
evas_canvas3d_scene_camera_node_set(scene, rp->node);
evas_canvas3d_scene_root_node_set(scene, *root_node);
evas_canvas3d_scene_size_set(scene, ed->collection->scene_size.width, ed->collection->scene_size.height);
evas_canvas3d_scene_background_color_set(scene, 0, 0 ,0 ,0);
viewport = evas_object_image_source_get(rp->object);
efl_canvas_scene3d_set(viewport, scene);
}
}
return EINA_TRUE;
}