summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Philippe Andre <jp.andre@samsung.com>2014-09-19 13:10:02 +0900
committerJean-Philippe Andre <jp.andre@samsung.com>2014-10-20 12:16:43 +0900
commit0799bb1f8db164e6bfa934bedd862ff1dd98fed4 (patch)
treec14ea285a81b3af93472f3a2e68b2ea5367e46b4
parent08f7073a98d41361c0b3d9ad88314500a6a10bb3 (diff)
downloadelementary-0799bb1f8db164e6bfa934bedd862ff1dd98fed4.tar.gz
GLView: Add support for client-side rotation
See recent changes in Evas GL for reference. This also introduces the EO function rotation_get() @feature
-rw-r--r--src/lib/elm_glview.c12
-rw-r--r--src/lib/elm_glview.eo22
-rw-r--r--src/lib/elm_glview_common.h15
3 files changed, 48 insertions, 1 deletions
diff --git a/src/lib/elm_glview.c b/src/lib/elm_glview.c
index 7d2a236f9..97e2dfcdf 100644
--- a/src/lib/elm_glview.c
+++ b/src/lib/elm_glview.c
@@ -355,6 +355,12 @@ _elm_glview_mode_set(Eo *obj, Elm_Glview_Data *sd, Elm_GLView_Mode mode)
if (mode & ELM_GLVIEW_CLIENT_SIDE_ROTATION)
sd->config->options_bits |= EVAS_GL_OPTIONS_CLIENT_SIDE_ROTATION;
+ // Check for Alpha Channel and enable it
+ if (mode & ELM_GLVIEW_ALPHA)
+ evas_object_image_alpha_set(wd->resize_obj, EINA_TRUE);
+ else
+ evas_object_image_alpha_set(wd->resize_obj, EINA_FALSE);
+
sd->mode = mode;
_glview_update_surface(obj);
@@ -466,6 +472,12 @@ _elm_glview_evas_gl_get(Eo *obj EINA_UNUSED, Elm_Glview_Data *sd)
return sd->evasgl;
}
+EOLIAN static int
+_elm_glview_rotation_get(Eo *obj EINA_UNUSED, Elm_Glview_Data *sd)
+{
+ return evas_gl_rotation_get(sd->evasgl);
+}
+
static void
_elm_glview_class_constructor(Eo_Class *klass)
{
diff --git a/src/lib/elm_glview.eo b/src/lib/elm_glview.eo
index cbd065379..839cb669a 100644
--- a/src/lib/elm_glview.eo
+++ b/src/lib/elm_glview.eo
@@ -176,9 +176,31 @@ class Elm_Glview (Elm_Widget)
@return The Evas_GL used by this GLView.
@ingroup GLView */
+ legacy: null;
return: Evas_GL *;
}
}
+ rotation {
+ get {
+ /*@
+ Get the current GL view's rotation when using direct rendering
+
+ @return A window rotation in degrees (0, 90, 180 or 270)
+
+ @note This rotation can be different from the device orientation. This
+ rotation value must be used in case of direct rendering and should be
+ taken into account by the application when setting the internal rotation
+ matrix for the view.
+
+ @see ELM_GLVIEW_CLIENT_SIDE_ROTATION
+
+ @since 1.12
+
+ @ingroup GLView */
+ legacy: null;
+ return: int;
+ }
+ }
}
implements {
class.constructor;
diff --git a/src/lib/elm_glview_common.h b/src/lib/elm_glview_common.h
index 7e6dc9663..6df9f61e1 100644
--- a/src/lib/elm_glview_common.h
+++ b/src/lib/elm_glview_common.h
@@ -1,8 +1,21 @@
typedef void (*Elm_GLView_Func_Cb)(Evas_Object *obj);
/**
- * Defines mode of GLView
+ * @brief Selects the target surface properties
*
+ * An OR combination of @c Elm_GLView_Mode values should be passed to
+ * @ref elm_glview_mode_set when setting up a GL widget. These flags will
+ * specify the properties of the rendering target surface; in particular,
+ * the mode can request the surface to support alpha, depth and stencil buffers.
+ *
+ * @note @c ELM_GLVIEW_CLIENT_SIDE_ROTATION is a special value that indicates
+ * to EFL that the application will handle the view rotation when the
+ * device is rotated. This is needed only when the application requests
+ * direct rendering. Please refer to @ref Evas_GL
+ * for more information about direct rendering.
+ *
+ * @see elm_glview_mode_set
+ * @see @ref elm_opengl_page
* @ingroup GLView
*/
typedef enum _Elm_GLView_Mode