diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2016-02-10 14:39:44 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2016-02-10 14:39:44 +0100 |
commit | cf58ac32eab104a1b09f4876e5b4273399a8d2ee (patch) | |
tree | 945ad52258e1883a9c7b4ffd7f590fc5b4314b6b | |
parent | 05f3de9a0826ac5a32a9a01d171eb2745438822a (diff) | |
download | clutter-wip/garnacho/egl-emulated-screen-rotation.tar.gz |
egl: Wrap ClutterStageCoglView into ClutterEglOutputwip/garnacho/egl-emulated-screen-rotation
The cogl implementation is hidden from view, we only expose this
on egl.
-rw-r--r-- | clutter/egl/clutter-egl.h | 28 | ||||
-rw-r--r-- | 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 83b021343..17603be33 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 d7484bb96..1bb18386d 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); +} |