[clutter/wip/garnacho/egl-emulated-screen-rotation: 6/6] egl: Wrap ClutterStageCoglView into ClutterEglOutput



commit cf58ac32eab104a1b09f4876e5b4273399a8d2ee
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed Feb 10 14:39:44 2016 +0100

    egl: Wrap ClutterStageCoglView into ClutterEglOutput
    
    The cogl implementation is hidden from view, we only expose this
    on egl.

 clutter/egl/clutter-egl.h             |   28 +++++++++++++
 clutter/egl/clutter-stage-eglnative.c |   68 +++++++++++++++++++++++++++++++++
 2 files changed, 96 insertions(+), 0 deletions(-)
---
diff --git a/clutter/egl/clutter-egl.h b/clutter/egl/clutter-egl.h
index 83b0213..17603be 100644
--- a/clutter/egl/clutter-egl.h
+++ b/clutter/egl/clutter-egl.h
@@ -97,6 +97,34 @@ void            clutter_egl_freeze_master_clock (void);
 CLUTTER_AVAILABLE_IN_1_20
 void            clutter_egl_thaw_master_clock   (void);
 
+typedef enum {
+  CLUTTER_EGL_OUTPUT_TRANSFORM_0,
+  CLUTTER_EGL_OUTPUT_TRANSFORM_90,
+  CLUTTER_EGL_OUTPUT_TRANSFORM_180,
+  CLUTTER_EGL_OUTPUT_TRANSFORM_270,
+  CLUTTER_EGL_OUTPUT_TRANSFORM_FLIPPED_0,
+  CLUTTER_EGL_OUTPUT_TRANSFORM_FLIPPED_90,
+  CLUTTER_EGL_OUTPUT_TRANSFORM_FLIPPED_180,
+  CLUTTER_EGL_OUTPUT_TRANSFORM_FLIPPED_270,
+} ClutterEglOutputTransform;
+
+typedef struct _ClutterEglOutput ClutterEglOutput;
+typedef struct _ClutterEglOutputClass ClutterEglOutputClass;
+
+CLUTTER_AVAILABLE_IN_1_26
+ClutterEglOutput * clutter_egl_stage_add_output    (ClutterStage     *stage);
+
+CLUTTER_AVAILABLE_IN_1_26
+ClutterEglOutput * clutter_egl_stage_remove_output (ClutterStage     *stage,
+                                                    ClutterEglOutput *output);
+
+CLUTTER_AVAILABLE_IN_1_26
+void clutter_egl_output_set_rect      (ClutterEglOutput              *output,
+                                       const cairo_rectangle_int_t   *rect);
+CLUTTER_AVAILABLE_IN_1_26
+void clutter_egl_output_set_transform (ClutterEglOutput              *output,
+                                       ClutterEglOutputTransform      transform);
+
 G_END_DECLS
 
 #endif /* __CLUTTER_EGL_H__ */
diff --git a/clutter/egl/clutter-stage-eglnative.c b/clutter/egl/clutter-stage-eglnative.c
index d7484bb..1bb1838 100644
--- a/clutter/egl/clutter-stage-eglnative.c
+++ b/clutter/egl/clutter-stage-eglnative.c
@@ -31,6 +31,7 @@
 #include "clutter-stage-window.h"
 #include "clutter-stage-private.h"
 #include "clutter-stage-eglnative.h"
+#include "clutter-egl.h"
 #include <cogl/cogl.h>
 
 static ClutterStageWindowIface *clutter_stage_window_parent_iface = NULL;
@@ -68,3 +69,70 @@ clutter_stage_window_iface_init (ClutterStageWindowIface *iface)
 
   iface->can_clip_redraws = clutter_stage_eglnative_can_clip_redraws;
 }
+
+struct _ClutterEglOutput
+{
+  ClutterStageCoglView parent_instance;
+};
+
+struct _ClutterEglOutputClass
+{
+  ClutterStageCoglViewClass parent_instance;
+};
+
+G_DEFINE_TYPE (ClutterEglOutput, clutter_egl_output,
+               CLUTTER_TYPE_STAGE_COGL_VIEW)
+
+static void
+clutter_egl_output_init (ClutterEglOutput *output)
+{
+}
+
+static void
+clutter_egl_output_class_init (ClutterEglOutputClass *klass)
+{
+}
+
+ClutterEglOutput *
+clutter_egl_stage_add_output (ClutterStage *stage)
+{
+  ClutterStageWindow *stage_window;
+  ClutterStageCogl *stage_cogl;
+  ClutterEglOutput *output;
+
+  stage_window = _clutter_stage_get_window (stage);
+  stage_cogl = CLUTTER_STAGE_COGL (stage_window);
+
+  output = g_object_new (clutter_egl_output_get_type (), NULL);
+  clutter_stage_cogl_add_view (stage_cogl, CLUTTER_STAGE_COGL_VIEW (output));
+  return output;
+}
+
+ClutterEglOutput *
+clutter_egl_stage_remove_output (ClutterStage     *stage,
+                                 ClutterEglOutput *output)
+{
+  ClutterStageWindow *stage_window;
+  ClutterStageCogl *stage_cogl;
+
+  stage_window = _clutter_stage_get_window (stage);
+  stage_cogl = CLUTTER_STAGE_COGL (stage_window);
+
+  output = g_object_new (clutter_egl_output_get_type (), NULL);
+  clutter_stage_cogl_add_view (stage_cogl, CLUTTER_STAGE_COGL_VIEW (output));
+}
+
+void
+clutter_egl_output_set_rect (ClutterEglOutput            *output,
+                             const cairo_rectangle_int_t *rect)
+{
+  clutter_stage_cogl_view_set_rect (CLUTTER_STAGE_COGL_VIEW (output), rect);
+}
+
+void
+clutter_egl_output_set_transform (ClutterEglOutput          *output,
+                                  ClutterEglOutputTransform  transform)
+{
+  clutter_stage_cogl_view_set_transform (CLUTTER_STAGE_COGL_VIEW (output),
+                                         transform);
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]