From 3d357b48e211734979ef7be5052a02e869d18755 Mon Sep 17 00:00:00 2001 From: raster Date: Sat, 3 Dec 2011 14:21:58 +0000 Subject: [PATCH] evas_gl support back after evas 1.1 out. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@65842 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/bin/Makefile.am | 6 +- src/bin/test.c | 10 +-- src/lib/Elementary.h.in | 189 +++++++++++++++++++++++++++++++++++++++++++++++- src/lib/Makefile.am | 4 +- 4 files changed, 194 insertions(+), 15 deletions(-) diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 734beca..db1d353 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -64,6 +64,8 @@ test_gengrid.c \ test_genlist.c \ test_gesture_layer.c \ test_gesture_layer2.c \ +test_glview_simple.c \ +test_glview.c \ test_grid.c \ test_hover.c \ test_hoversel.c \ @@ -108,10 +110,6 @@ test_web.c \ test_win_inline.c \ test_win_state.c -## disabled for efl 1.1 -#test_glview_simple.c -#test_glview.c - if HAVE_EIO elementary_test_SOURCES += test_eio.c endif diff --git a/src/bin/test.c b/src/bin/test.c index 367d934..ba779b6 100644 --- a/src/bin/test.c +++ b/src/bin/test.c @@ -142,9 +142,8 @@ void test_segment_control(void *data, Evas_Object *obj, void *event_info); void test_store(void *data, Evas_Object *obj, void *event_info); void test_win_inline(void *data, Evas_Object *obj, void *event_info); void test_grid(void *data, Evas_Object *obj, void *event_info); -//// disabled for efl 1.1 -//void test_glview_simple(void *data, Evas_Object *obj, void *event_info); -//void test_glview(void *data, Evas_Object *obj, void *event_info); +void test_glview_simple(void *data, Evas_Object *obj, void *event_info); +void test_glview(void *data, Evas_Object *obj, void *event_info); void test_3d(void *data, Evas_Object *obj, void *event_info); void test_naviframe(void *data, Evas_Object *obj, void *event_info); void test_factory(void *data, Evas_Object *obj, void *event_info); @@ -397,9 +396,8 @@ add_tests: ADD_TEST(NULL, "General", "Scaling 2", test_scaling2); //------------------------------// -//// disabled for efl 1.1 -// ADD_TEST(NULL, "3D", "GLViewSimple", test_glview_simple); -// ADD_TEST(NULL, "3D", "GLView", test_glview); + ADD_TEST(NULL, "3D", "GLViewSimple", test_glview_simple); + ADD_TEST(NULL, "3D", "GLView", test_glview); ADD_TEST(NULL, "3D", "Evas Map 3D", test_3d); //------------------------------// diff --git a/src/lib/Elementary.h.in b/src/lib/Elementary.h.in index c9cf85f..a437aab 100644 --- a/src/lib/Elementary.h.in +++ b/src/lib/Elementary.h.in @@ -369,8 +369,7 @@ contact with the developers and maintainers. #include #include #include -// disabled - evas 1.1 won't have this. -//#include +#include #include #include #include @@ -5834,6 +5833,192 @@ extern "C" { * @} */ + /* glview */ + typedef void (*Elm_GLView_Func_Cb)(Evas_Object *obj); + + typedef enum _Elm_GLView_Mode + { + ELM_GLVIEW_ALPHA = 1, + ELM_GLVIEW_DEPTH = 2, + ELM_GLVIEW_STENCIL = 4 + } Elm_GLView_Mode; + + /** + * Defines a policy for the glview resizing. + * + * @note Default is ELM_GLVIEW_RESIZE_POLICY_RECREATE + */ + typedef enum _Elm_GLView_Resize_Policy + { + ELM_GLVIEW_RESIZE_POLICY_RECREATE = 1, /**< Resize the internal surface along with the image */ + ELM_GLVIEW_RESIZE_POLICY_SCALE = 2 /**< Only reize the internal image and not the surface */ + } Elm_GLView_Resize_Policy; + + typedef enum _Elm_GLView_Render_Policy + { + ELM_GLVIEW_RENDER_POLICY_ON_DEMAND = 1, /**< Render only when there is a need for redrawing */ + ELM_GLVIEW_RENDER_POLICY_ALWAYS = 2 /**< Render always even when it is not visible */ + } Elm_GLView_Render_Policy; + + /** + * @defgroup GLView + * + * A simple GLView widget that allows GL rendering. + * + * Signals that you can add callbacks for are: + * + * @{ + */ + + /** + * Add a new glview to the parent + * + * @param parent The parent object + * @return The new object or NULL if it cannot be created + * + * @ingroup GLView + */ + EAPI Evas_Object *elm_glview_add(Evas_Object *parent) EINA_ARG_NONNULL(1); + + /** + * Sets the size of the glview + * + * @param obj The glview object + * @param width width of the glview object + * @param height height of the glview object + * + * @ingroup GLView + */ + EAPI void elm_glview_size_set(Evas_Object *obj, Evas_Coord width, Evas_Coord height) EINA_ARG_NONNULL(1); + + /** + * Gets the size of the glview. + * + * @param obj The glview object + * @param width width of the glview object + * @param height height of the glview object + * + * Note that this function returns the actual image size of the + * glview. This means that when the scale policy is set to + * ELM_GLVIEW_RESIZE_POLICY_SCALE, it'll return the non-scaled + * size. + * + * @ingroup GLView + */ + EAPI void elm_glview_size_get(const Evas_Object *obj, Evas_Coord *width, Evas_Coord *height) EINA_ARG_NONNULL(1); + + /** + * Gets the gl api struct for gl rendering + * + * @param obj The glview object + * @return The api object or NULL if it cannot be created + * + * @ingroup GLView + */ + EAPI Evas_GL_API *elm_glview_gl_api_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); + + /** + * Set the mode of the GLView. Supports Three simple modes. + * + * @param obj The glview object + * @param mode The mode Options OR'ed enabling Alpha, Depth, Stencil. + * @return True if set properly. + * + * @ingroup GLView + */ + EAPI Eina_Bool elm_glview_mode_set(Evas_Object *obj, Elm_GLView_Mode mode) EINA_ARG_NONNULL(1); + + /** + * Set the resize policy for the glview object. + * + * @param obj The glview object. + * @param policy The scaling policy. + * + * By default, the resize policy is set to + * ELM_GLVIEW_RESIZE_POLICY_RECREATE. When resize is called it + * destroys the previous surface and recreates the newly specified + * size. If the policy is set to ELM_GLVIEW_RESIZE_POLICY_SCALE, + * however, glview only scales the image object and not the underlying + * GL Surface. + * + * @ingroup GLView + */ + EAPI Eina_Bool elm_glview_resize_policy_set(Evas_Object *obj, Elm_GLView_Resize_Policy policy) EINA_ARG_NONNULL(1); + + /** + * Set the render policy for the glview object. + * + * @param obj The glview object. + * @param policy The render policy. + * + * By default, the render policy is set to + * ELM_GLVIEW_RENDER_POLICY_ON_DEMAND. This policy is set such + * that during the render loop, glview is only redrawn if it needs + * to be redrawn. (i.e. When it is visible) If the policy is set to + * ELM_GLVIEWW_RENDER_POLICY_ALWAYS, it redraws regardless of + * whether it is visible/need redrawing or not. + * + * @ingroup GLView + */ + EAPI Eina_Bool elm_glview_render_policy_set(Evas_Object *obj, Elm_GLView_Render_Policy policy) EINA_ARG_NONNULL(1); + + /** + * Set the init function that runs once in the main loop. + * + * @param obj The glview object. + * @param func The init function to be registered. + * + * The registered init function gets called once during the render loop. + * + * @ingroup GLView + */ + EAPI void elm_glview_init_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func) EINA_ARG_NONNULL(1); + + /** + * Set the render function that runs in the main loop. + * + * @param obj The glview object. + * @param func The delete function to be registered. + * + * The registered del function gets called when GLView object is deleted. + * + * @ingroup GLView + */ + EAPI void elm_glview_del_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func) EINA_ARG_NONNULL(1); + + /** + * Set the resize function that gets called when resize happens. + * + * @param obj The glview object. + * @param func The resize function to be registered. + * + * @ingroup GLView + */ + EAPI void elm_glview_resize_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func) EINA_ARG_NONNULL(1); + + /** + * Set the render function that runs in the main loop. + * + * @param obj The glview object. + * @param func The render function to be registered. + * + * @ingroup GLView + */ + EAPI void elm_glview_render_func_set(Evas_Object *obj, Elm_GLView_Func_Cb func) EINA_ARG_NONNULL(1); + + /** + * Notifies that there has been changes in the GLView. + * + * @param obj The glview object. + * + * @ingroup GLView + */ + EAPI void elm_glview_changed_set(Evas_Object *obj) EINA_ARG_NONNULL(1); + + /** + * @} + */ + /* box */ /** * @defgroup Box Box diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am index 31343ea..faf7c24 100644 --- a/src/lib/Makefile.am +++ b/src/lib/Makefile.am @@ -79,6 +79,7 @@ elm_genlist.h \ elm_gengrid.c \ elm_genlist.c \ elm_gesture_layer.c \ +elm_glview.c \ elm_grid.c \ elm_hover.c \ elm_icon.c \ @@ -131,9 +132,6 @@ els_scroller.h \ els_tooltip.c \ elu_ews_wm.c -## disabled for efl 1.1 -#elm_glview.c - libelementary_la_CFLAGS = libelementary_la_LIBADD = \ @my_libs@ \ -- 2.7.4