GLView: Add support for client-side rotation
authorJean-Philippe Andre <jp.andre@samsung.com>
Fri, 19 Sep 2014 04:10:02 +0000 (13:10 +0900)
committerJean-Philippe Andre <jp.andre@samsung.com>
Mon, 20 Oct 2014 03:16:43 +0000 (12:16 +0900)
See recent changes in Evas GL for reference.

This also introduces the EO function rotation_get()

@feature

src/lib/elm_glview.c
src/lib/elm_glview.eo
src/lib/elm_glview_common.h

index 7d2a236f975dc9d3b2f52b3edb2b71a809858e39..97e2dfcdfe7da62b31f72ba5785ad4576940da8e 100644 (file)
@@ -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)
 {
index cbd065379bf60493a751abd3a76fcf5ba010fad4..839cb669ae133850ab78b056b48267b4e9118b99 100644 (file)
@@ -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;
index 7e6dc96630f3b7f60f4075fa4cc3b39fe397e48e..6df9f61e18076ad46b3047838817f147763b542f 100644 (file)
@@ -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