[clutter] Remove internal usage of ClutterGeometry in StageWindow
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter] Remove internal usage of ClutterGeometry in StageWindow
- Date: Mon, 26 Sep 2011 11:16:32 +0000 (UTC)
commit 1776ac8ed50d2cdae34a53d6fa41a1761d6b907f
Author: Emmanuele Bassi <ebassi linux intel com>
Date: Tue Aug 16 16:01:22 2011 +0100
Remove internal usage of ClutterGeometry in StageWindow
The ClutterGeometry type is a poor substitute of cairo_rectangle_int_t,
with unsigned integers for width and height to complicate matters.
Let's remove the internal usage of ClutterGeometry and switch to the
rectangle type from Cairo.
https://bugzilla.gnome.org/show_bug.cgi?id=656663
clutter/clutter-private.h | 4 ++
clutter/clutter-stage-private.h | 6 ++-
clutter/clutter-stage-window.c | 16 +++---
clutter/clutter-stage-window.h | 26 +++++-----
clutter/clutter-stage.c | 74 ++++++++++++++++++-------------
clutter/clutter-util.c | 30 ++++++++++++
clutter/cogl/clutter-stage-cogl.c | 29 +++++-------
clutter/cogl/clutter-stage-cogl.h | 3 +-
clutter/osx/clutter-stage-osx.c | 4 +-
clutter/wayland/clutter-stage-wayland.c | 64 ++++++++++----------------
clutter/wayland/clutter-stage-wayland.h | 6 +-
clutter/win32/clutter-stage-win32.c | 12 +++---
clutter/x11/clutter-stage-x11.c | 4 +-
13 files changed, 154 insertions(+), 124 deletions(-)
---
diff --git a/clutter/clutter-private.h b/clutter/clutter-private.h
index 556d268..eff0b31 100644
--- a/clutter/clutter-private.h
+++ b/clutter/clutter-private.h
@@ -235,6 +235,10 @@ void _clutter_util_fully_transform_vertices (const CoglMatrix *modelview,
ClutterVertex *vertices_out,
int n_vertices);
+void _clutter_util_rectangle_union (const cairo_rectangle_int_t *src1,
+ const cairo_rectangle_int_t *src2,
+ cairo_rectangle_int_t *dest);
+
typedef struct _ClutterPlane
{
CoglVector3 v0;
diff --git a/clutter/clutter-stage-private.h b/clutter/clutter-stage-private.h
index 9911f38..a4f9ef5 100644
--- a/clutter/clutter-stage-private.h
+++ b/clutter/clutter-stage-private.h
@@ -35,8 +35,10 @@ typedef struct _ClutterStageQueueRedrawEntry ClutterStageQueueRedrawEntry;
/* stage */
ClutterStageWindow *_clutter_stage_get_default_window (void);
-void _clutter_stage_do_paint (ClutterStage *stage,
- const ClutterGeometry *clip);
+
+void _clutter_stage_do_paint (ClutterStage *stage,
+ const cairo_rectangle_int_t *clip);
+
void _clutter_stage_set_window (ClutterStage *stage,
ClutterStageWindow *stage_window);
ClutterStageWindow *_clutter_stage_get_window (ClutterStage *stage);
diff --git a/clutter/clutter-stage-window.c b/clutter/clutter-stage-window.c
index 04cf786..1b61a1d 100644
--- a/clutter/clutter-stage-window.c
+++ b/clutter/clutter-stage-window.c
@@ -95,8 +95,8 @@ _clutter_stage_window_resize (ClutterStageWindow *window,
}
void
-_clutter_stage_window_get_geometry (ClutterStageWindow *window,
- ClutterGeometry *geometry)
+_clutter_stage_window_get_geometry (ClutterStageWindow *window,
+ cairo_rectangle_int_t *geometry)
{
CLUTTER_STAGE_WINDOW_GET_IFACE (window)->get_geometry (window, geometry);
}
@@ -119,15 +119,15 @@ _clutter_stage_window_get_pending_swaps (ClutterStageWindow *window)
}
void
-_clutter_stage_window_add_redraw_clip (ClutterStageWindow *window,
- ClutterGeometry *stage_clip)
+_clutter_stage_window_add_redraw_clip (ClutterStageWindow *window,
+ cairo_rectangle_int_t *stage_clip)
{
ClutterStageWindowIface *iface;
g_return_if_fail (CLUTTER_IS_STAGE_WINDOW (window));
iface = CLUTTER_STAGE_WINDOW_GET_IFACE (window);
- if (iface->add_redraw_clip)
+ if (iface->add_redraw_clip != NULL)
iface->add_redraw_clip (window, stage_clip);
}
@@ -147,7 +147,7 @@ _clutter_stage_window_has_redraw_clips (ClutterStageWindow *window)
g_return_val_if_fail (CLUTTER_IS_STAGE_WINDOW (window), FALSE);
iface = CLUTTER_STAGE_WINDOW_GET_IFACE (window);
- if (iface->has_redraw_clips)
+ if (iface->has_redraw_clips != NULL)
return iface->has_redraw_clips (window);
return FALSE;
@@ -169,7 +169,7 @@ _clutter_stage_window_ignoring_redraw_clips (ClutterStageWindow *window)
g_return_val_if_fail (CLUTTER_IS_STAGE_WINDOW (window), FALSE);
iface = CLUTTER_STAGE_WINDOW_GET_IFACE (window);
- if (iface->ignoring_redraw_clips)
+ if (iface->ignoring_redraw_clips != NULL)
return iface->ignoring_redraw_clips (window);
return TRUE;
@@ -184,7 +184,7 @@ _clutter_stage_window_get_redraw_clip_bounds (ClutterStageWindow *window,
g_return_val_if_fail (CLUTTER_IS_STAGE_WINDOW (window), FALSE);
iface = CLUTTER_STAGE_WINDOW_GET_IFACE (window);
- if (iface->get_redraw_clip_bounds)
+ if (iface->get_redraw_clip_bounds != NULL)
return iface->get_redraw_clip_bounds (window, stage_clip);
return FALSE;
diff --git a/clutter/clutter-stage-window.h b/clutter/clutter-stage-window.h
index de84e31..8fa0ddf 100644
--- a/clutter/clutter-stage-window.h
+++ b/clutter/clutter-stage-window.h
@@ -57,15 +57,15 @@ struct _ClutterStageWindowIface
gint width,
gint height);
void (* get_geometry) (ClutterStageWindow *stage_window,
- ClutterGeometry *geometry);
+ cairo_rectangle_int_t *geometry);
int (* get_pending_swaps) (ClutterStageWindow *stage_window);
- void (* add_redraw_clip) (ClutterStageWindow *stage_window,
- ClutterGeometry *stage_rectangle);
- gboolean (* has_redraw_clips) (ClutterStageWindow *stage_window);
- gboolean (* ignoring_redraw_clips) (ClutterStageWindow *stage_window);
- gboolean (* get_redraw_clip_bounds) (ClutterStageWindow *stage_window,
+ void (* add_redraw_clip) (ClutterStageWindow *stage_window,
+ cairo_rectangle_int_t *stage_rectangle);
+ gboolean (* has_redraw_clips) (ClutterStageWindow *stage_window);
+ gboolean (* ignoring_redraw_clips) (ClutterStageWindow *stage_window);
+ gboolean (* get_redraw_clip_bounds) (ClutterStageWindow *stage_window,
cairo_rectangle_int_t *clip);
@@ -101,18 +101,18 @@ void _clutter_stage_window_resize (ClutterStageWin
gint width,
gint height);
void _clutter_stage_window_get_geometry (ClutterStageWindow *window,
- ClutterGeometry *geometry);
+ cairo_rectangle_int_t *geometry);
int _clutter_stage_window_get_pending_swaps (ClutterStageWindow *window);
-void _clutter_stage_window_add_redraw_clip (ClutterStageWindow *window,
- ClutterGeometry *stage_clip);
-gboolean _clutter_stage_window_has_redraw_clips (ClutterStageWindow *window);
-gboolean _clutter_stage_window_ignoring_redraw_clips (ClutterStageWindow *window);
-gboolean _clutter_stage_window_get_redraw_clip_bounds (ClutterStageWindow *window,
+void _clutter_stage_window_add_redraw_clip (ClutterStageWindow *window,
+ cairo_rectangle_int_t *stage_clip);
+gboolean _clutter_stage_window_has_redraw_clips (ClutterStageWindow *window);
+gboolean _clutter_stage_window_ignoring_redraw_clips (ClutterStageWindow *window);
+gboolean _clutter_stage_window_get_redraw_clip_bounds (ClutterStageWindow *window,
cairo_rectangle_int_t *clip);
void _clutter_stage_window_set_accept_focus (ClutterStageWindow *window,
- gboolean accept_focus);
+ gboolean accept_focus);
void _clutter_stage_window_redraw (ClutterStageWindow *window);
diff --git a/clutter/clutter-stage.c b/clutter/clutter-stage.c
index e8471bb..416ca4f 100644
--- a/clutter/clutter-stage.c
+++ b/clutter/clutter-stage.c
@@ -225,7 +225,7 @@ clutter_stage_get_preferred_width (ClutterActor *self,
gfloat *natural_width_p)
{
ClutterStagePrivate *priv = CLUTTER_STAGE (self)->priv;
- ClutterGeometry geom = { 0, };
+ cairo_rectangle_int_t geom;
if (priv->impl == NULL)
return;
@@ -246,7 +246,7 @@ clutter_stage_get_preferred_height (ClutterActor *self,
gfloat *natural_height_p)
{
ClutterStagePrivate *priv = CLUTTER_STAGE (self)->priv;
- ClutterGeometry geom = { 0, };
+ cairo_rectangle_int_t geom;
if (priv->impl == NULL)
return;
@@ -287,25 +287,32 @@ clutter_stage_allocate (ClutterActor *self,
ClutterAllocationFlags flags)
{
ClutterStagePrivate *priv = CLUTTER_STAGE (self)->priv;
- ClutterGeometry prev_geom;
- ClutterGeometry geom = { 0, };
+ ClutterGeometry prev_geom, geom;
+ cairo_rectangle_int_t window_size;
gboolean origin_changed;
gint width, height;
- origin_changed = (flags & CLUTTER_ABSOLUTE_ORIGIN_CHANGED) ? TRUE : FALSE;
+ origin_changed = (flags & CLUTTER_ABSOLUTE_ORIGIN_CHANGED)
+ ? TRUE
+ : FALSE;
if (priv->impl == NULL)
return;
+ /* our old allocation */
clutter_actor_get_allocation_geometry (self, &prev_geom);
+ /* the current allocation */
width = clutter_actor_box_get_width (box);
height = clutter_actor_box_get_height (box);
- _clutter_stage_window_get_geometry (priv->impl, &geom);
- /* if the stage is fixed size (for instance, it's using a frame-buffer)
+ /* the current Stage implementation size */
+ _clutter_stage_window_get_geometry (priv->impl, &window_size);
+
+ /* if the stage is fixed size (for instance, it's using a EGL framebuffer)
* then we simply ignore any allocation request and override the
- * allocation chain.
+ * allocation chain - because we cannot forcibly change the size of the
+ * stage window.
*/
if ((!clutter_feature_available (CLUTTER_FEATURE_STAGE_STATIC)))
{
@@ -347,8 +354,11 @@ clutter_stage_allocate (ClutterActor *self,
priv->min_size_changed = FALSE;
}
- if ((geom.width != width) || (geom.height != height))
- _clutter_stage_window_resize (priv->impl, width, height);
+ if (window_size.width != width ||
+ window_size.height != height)
+ {
+ _clutter_stage_window_resize (priv->impl, width, height);
+ }
}
}
else
@@ -356,10 +366,11 @@ clutter_stage_allocate (ClutterActor *self,
ClutterActorBox override = { 0, };
ClutterActorClass *klass;
+ /* override the passed allocation */
override.x1 = 0;
override.y1 = 0;
- override.x2 = geom.width;
- override.y2 = geom.height;
+ override.x2 = window_size.width;
+ override.y2 = window_size.height;
CLUTTER_NOTE (LAYOUT,
"Overrigin original allocation of %dx%d "
@@ -378,19 +389,26 @@ clutter_stage_allocate (ClutterActor *self,
* Clutter need to manually keep it informed of the current window
* size. We do this after the allocation above so that the stage
* window has a chance to update the window size based on the
- * allocation. */
- _clutter_stage_window_get_geometry (priv->impl, &geom);
- cogl_onscreen_clutter_backend_set_size (geom.width, geom.height);
+ * allocation.
+ */
+ _clutter_stage_window_get_geometry (priv->impl, &window_size);
+ cogl_onscreen_clutter_backend_set_size (window_size.width,
+ window_size.height);
+ /* reset the viewport if the allocation effectively changed */
clutter_actor_get_allocation_geometry (self, &geom);
- if (geom.width != prev_geom.width || geom.height != prev_geom.height)
+ if (geom.width != prev_geom.width ||
+ geom.height != prev_geom.height)
{
_clutter_stage_set_viewport (CLUTTER_STAGE (self),
- 0, 0, geom.width, geom.height);
+ 0, 0,
+ geom.width,
+ geom.height);
/* Note: we don't assume that set_viewport will queue a full redraw
* since it may bail-out early if something preemptively set the
- * viewport before the stage was really allocated its new size. */
+ * viewport before the stage was really allocated its new size.
+ */
queue_full_redraw (CLUTTER_STAGE (self));
}
}
@@ -525,11 +543,12 @@ _clutter_stage_update_active_framebuffer (ClutterStage *stage)
* be able to cull them.
*/
void
-_clutter_stage_do_paint (ClutterStage *stage, const ClutterGeometry *clip)
+_clutter_stage_do_paint (ClutterStage *stage,
+ const cairo_rectangle_int_t *clip)
{
ClutterStagePrivate *priv = stage->priv;
float clip_poly[8];
- ClutterGeometry geom;
+ cairo_rectangle_int_t geom;
_clutter_stage_window_get_geometry (priv->impl, &geom);
@@ -761,7 +780,7 @@ static void
clutter_stage_real_fullscreen (ClutterStage *stage)
{
ClutterStagePrivate *priv = stage->priv;
- ClutterGeometry geom;
+ cairo_rectangle_int_t geom;
ClutterActorBox box;
/* we need to force an allocation here because the size
@@ -1114,11 +1133,10 @@ clutter_stage_real_queue_redraw (ClutterActor *actor,
{
ClutterStage *stage = CLUTTER_STAGE (actor);
ClutterStageWindow *stage_window;
- ClutterGeometry stage_clip;
ClutterPaintVolume *redraw_clip;
ClutterActorBox bounding_box;
ClutterActorBox intersection_box;
- ClutterGeometry geom;
+ cairo_rectangle_int_t geom, stage_clip;
if (CLUTTER_ACTOR_IN_DESTRUCTION (actor))
return;
@@ -1219,14 +1237,8 @@ clutter_stage_get_redraw_clip_bounds (ClutterStage *stage,
if (!_clutter_stage_window_get_redraw_clip_bounds (priv->impl, clip))
{
- ClutterGeometry geometry;
-
/* Set clip to the full extents of the stage */
- _clutter_stage_window_get_geometry (priv->impl, &geometry);
- clip->x = 0;
- clip->y = 0;
- clip->width = geometry.width;
- clip->height = geometry.height;
+ _clutter_stage_window_get_geometry (priv->impl, clip);
}
}
@@ -2026,7 +2038,7 @@ clutter_stage_init (ClutterStage *self)
{
ClutterStagePrivate *priv;
ClutterBackend *backend;
- ClutterGeometry geom;
+ cairo_rectangle_int_t geom;
/* a stage is a top-level object */
CLUTTER_SET_PRIVATE_FLAGS (self, CLUTTER_IS_TOPLEVEL);
diff --git a/clutter/clutter-util.c b/clutter/clutter-util.c
index 46e88d2..6b94d3f 100644
--- a/clutter/clutter-util.c
+++ b/clutter/clutter-util.c
@@ -148,3 +148,33 @@ _clutter_util_fully_transform_vertices (const CoglMatrix *modelview,
}
}
+/*< private >
+ * _clutter_util_rectangle_union:
+ * @src1: first rectangle to union
+ * @src2: second rectangle to union
+ * @dest: (out): return location for the unioned rectangle
+ *
+ * Calculates the union of two rectangles.
+ *
+ * The union of rectangles @src1 and @src2 is the smallest rectangle which
+ * includes both @src1 and @src2 within it.
+ *
+ * It is allowed for @dest to be the same as either @src1 or @src2.
+ *
+ * This function should really be in Cairo.
+ */
+void
+_clutter_util_rectangle_union (const cairo_rectangle_int_t *src1,
+ const cairo_rectangle_int_t *src2,
+ cairo_rectangle_int_t *dest)
+{
+ int dest_x, dest_y;
+
+ dest_x = MIN (src1->x, src2->x);
+ dest_y = MIN (src1->y, src2->y);
+
+ dest->width = MAX (src1->x + src1->width, src2->x + src2->width) - dest_x;
+ dest->height = MAX (src1->y + src1->height, src2->y + src2->height) - dest_y;
+ dest->x = dest_x;
+ dest->y = dest_y;
+}
diff --git a/clutter/cogl/clutter-stage-cogl.c b/clutter/cogl/clutter-stage-cogl.c
index abb68b7..0acec4b 100644
--- a/clutter/cogl/clutter-stage-cogl.c
+++ b/clutter/cogl/clutter-stage-cogl.c
@@ -205,8 +205,8 @@ clutter_stage_cogl_hide (ClutterStageWindow *stage_window)
}
static void
-clutter_stage_cogl_get_geometry (ClutterStageWindow *stage_window,
- ClutterGeometry *geometry)
+clutter_stage_cogl_get_geometry (ClutterStageWindow *stage_window,
+ cairo_rectangle_int_t *geometry)
{
ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window);
@@ -288,8 +288,8 @@ clutter_stage_cogl_ignoring_redraw_clips (ClutterStageWindow *stage_window)
* buffer.
*/
static void
-clutter_stage_cogl_add_redraw_clip (ClutterStageWindow *stage_window,
- ClutterGeometry *stage_clip)
+clutter_stage_cogl_add_redraw_clip (ClutterStageWindow *stage_window,
+ cairo_rectangle_int_t *stage_clip)
{
ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window);
@@ -313,32 +313,27 @@ clutter_stage_cogl_add_redraw_clip (ClutterStageWindow *stage_window,
if (!stage_cogl->initialized_redraw_clip)
{
- stage_cogl->bounding_redraw_clip.x = stage_clip->x;
- stage_cogl->bounding_redraw_clip.y = stage_clip->y;
- stage_cogl->bounding_redraw_clip.width = stage_clip->width;
- stage_cogl->bounding_redraw_clip.height = stage_clip->height;
+ stage_cogl->bounding_redraw_clip = *stage_clip;
}
else if (stage_cogl->bounding_redraw_clip.width > 0)
{
- clutter_geometry_union (&stage_cogl->bounding_redraw_clip, stage_clip,
- &stage_cogl->bounding_redraw_clip);
+ _clutter_util_rectangle_union (&stage_cogl->bounding_redraw_clip,
+ stage_clip,
+ &stage_cogl->bounding_redraw_clip);
}
stage_cogl->initialized_redraw_clip = TRUE;
}
static gboolean
-clutter_stage_cogl_get_redraw_clip_bounds (ClutterStageWindow *stage_window,
+clutter_stage_cogl_get_redraw_clip_bounds (ClutterStageWindow *stage_window,
cairo_rectangle_int_t *stage_clip)
{
ClutterStageCogl *stage_cogl = CLUTTER_STAGE_COGL (stage_window);
if (stage_cogl->using_clipped_redraw)
{
- stage_clip->x = stage_cogl->bounding_redraw_clip.x;
- stage_clip->y = stage_cogl->bounding_redraw_clip.y;
- stage_clip->width = stage_cogl->bounding_redraw_clip.width;
- stage_clip->height = stage_cogl->bounding_redraw_clip.height;
+ *stage_clip = stage_cogl->bounding_redraw_clip;
return TRUE;
}
@@ -457,7 +452,7 @@ clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
G_UNLIKELY ((clutter_paint_debug_flags & CLUTTER_DEBUG_REDRAWS)))
{
static CoglMaterial *outline = NULL;
- ClutterGeometry *clip = &stage_cogl->bounding_redraw_clip;
+ cairo_rectangle_int_t *clip = &stage_cogl->bounding_redraw_clip;
ClutterActor *actor = CLUTTER_ACTOR (wrapper);
CoglHandle vbo;
float x_1 = clip->x;
@@ -504,7 +499,7 @@ clutter_stage_cogl_redraw (ClutterStageWindow *stage_window)
/* push on the screen */
if (use_clipped_redraw)
{
- ClutterGeometry *clip = &stage_cogl->bounding_redraw_clip;
+ cairo_rectangle_int_t *clip = &stage_cogl->bounding_redraw_clip;
int copy_area[4];
/* XXX: It seems there will be a race here in that the stage
diff --git a/clutter/cogl/clutter-stage-cogl.h b/clutter/cogl/clutter-stage-cogl.h
index 891eeb8..73bfb06 100644
--- a/clutter/cogl/clutter-stage-cogl.h
+++ b/clutter/cogl/clutter-stage-cogl.h
@@ -6,6 +6,7 @@
#endif
#include <glib-object.h>
+#include <cairo.h>
#include <clutter/clutter-stage.h>
#ifdef COGL_HAS_X11_SUPPORT
@@ -57,7 +58,7 @@ struct _ClutterStageCogl
* junk frames to start with. */
unsigned long frame_count;
- ClutterGeometry bounding_redraw_clip;
+ cairo_rectangle_int_t bounding_redraw_clip;
guint initialized_redraw_clip : 1;
diff --git a/clutter/osx/clutter-stage-osx.c b/clutter/osx/clutter-stage-osx.c
index e8db937..ecea147 100644
--- a/clutter/osx/clutter-stage-osx.c
+++ b/clutter/osx/clutter-stage-osx.c
@@ -434,8 +434,8 @@ clutter_stage_osx_hide (ClutterStageWindow *stage_window)
}
static void
-clutter_stage_osx_get_geometry (ClutterStageWindow *stage_window,
- ClutterGeometry *geometry)
+clutter_stage_osx_get_geometry (ClutterStageWindow *stage_window,
+ cairo_rectangle_int_t *geometry)
{
ClutterBackend *backend = clutter_get_default_backend ();
ClutterStageOSX *self = CLUTTER_STAGE_OSX (stage_window);
diff --git a/clutter/wayland/clutter-stage-wayland.c b/clutter/wayland/clutter-stage-wayland.c
index c691dde..4276851 100644
--- a/clutter/wayland/clutter-stage-wayland.c
+++ b/clutter/wayland/clutter-stage-wayland.c
@@ -91,7 +91,7 @@ get_visual (struct wl_display *display, CoglPixelFormat format)
}
static ClutterStageWaylandWaylandBuffer *
wayland_create_shm_buffer (ClutterBackendWayland *backend_wayland,
- ClutterGeometry *geom)
+ cairo_rectangle_int_t *geom)
{
ClutterStageWaylandWaylandBufferSHM *buffer;
struct wl_visual *visual;
@@ -105,9 +105,9 @@ wayland_create_shm_buffer (ClutterBackendWayland *backend_wayland,
buffer->buffer.type = BUFFER_TYPE_SHM;
- tex = cogl_texture_new_with_size ((unsigned int)geom->width,
- (unsigned int)geom->height,
- flags, format);
+ tex = cogl_texture_new_with_size ((unsigned int) geom->width,
+ (unsigned int) geom->height,
+ flags, format);
buffer->format = format;
buffer->stride = cogl_texture_get_rowstride(tex);
buffer->size = cogl_texture_get_data(tex, format, buffer->stride, NULL);
@@ -134,7 +134,7 @@ wayland_create_shm_buffer (ClutterBackendWayland *backend_wayland,
static ClutterStageWaylandWaylandBuffer *
wayland_create_drm_buffer (ClutterBackendWayland *backend_wayland,
- ClutterGeometry *geom)
+ cairo_rectangle_int_t *geom)
{
EGLDisplay edpy = clutter_wayland_get_egl_display ();
struct wl_visual *visual;
@@ -181,7 +181,7 @@ wayland_create_drm_buffer (ClutterBackendWayland *backend_wayland,
}
static ClutterStageWaylandWaylandBuffer *
-wayland_create_buffer (ClutterGeometry *geom)
+wayland_create_buffer (cairo_rectangle_int_t *geom)
{
ClutterBackend *backend = clutter_get_default_backend ();
ClutterBackendWayland *backend_wayland = CLUTTER_BACKEND_WAYLAND (backend);
@@ -346,13 +346,14 @@ clutter_stage_wayland_hide (ClutterStageWindow *stage_window)
}
static void
-clutter_stage_wayland_get_geometry (ClutterStageWindow *stage_window,
- ClutterGeometry *geometry)
+clutter_stage_wayland_get_geometry (ClutterStageWindow *stage_window,
+ cairo_rectangle_int_t *geometry)
{
- ClutterStageWayland *stage_wayland = CLUTTER_STAGE_WAYLAND (stage_window);
-
- if (geometry)
+ if (geometry != NULL)
{
+ ClutterStageWayland *stage_wayland =
+ CLUTTER_STAGE_WAYLAND (stage_window);
+
*geometry = stage_wayland->allocation;
}
}
@@ -363,7 +364,6 @@ clutter_stage_wayland_resize (ClutterStageWindow *stage_window,
gint height)
{
ClutterStageWayland *stage_wayland = CLUTTER_STAGE_WAYLAND (stage_window);
- cairo_rectangle_int_t rect;
fprintf (stderr, "resize %dx%d\n", width, height);
@@ -371,11 +371,8 @@ clutter_stage_wayland_resize (ClutterStageWindow *stage_window,
stage_wayland->pending_allocation.height = height;
/* FIXME: Shouldn't the stage repaint everything when it gets resized? */
- rect.x = stage_wayland->pending_allocation.x;
- rect.y = stage_wayland->pending_allocation.y;
- rect.width = stage_wayland->pending_allocation.width;
- rect.height = stage_wayland->pending_allocation.height;
- cairo_region_union_rectangle (stage_wayland->repaint_region, &rect);
+ cairo_region_union_rectangle (stage_wayland->repaint_region,
+ &stage_wayland->pending_allocation);
}
#define CAIRO_REGION_FULL ((cairo_region_t *) 1)
@@ -393,26 +390,16 @@ clutter_stage_wayland_ignoring_redraw_clips (ClutterStageWindow *stage_window)
}
static void
-clutter_stage_wayland_add_redraw_clip (ClutterStageWindow *stage_window,
- ClutterGeometry *stage_clip)
+clutter_stage_wayland_add_redraw_clip (ClutterStageWindow *stage_window,
+ cairo_rectangle_int_t *stage_clip)
{
ClutterStageWayland *stage_wayland = CLUTTER_STAGE_WAYLAND (stage_window);
cairo_rectangle_int_t rect;
if (stage_clip == NULL)
- {
- rect.x = stage_wayland->allocation.x;
- rect.y = stage_wayland->allocation.y;
- rect.width = stage_wayland->allocation.width;
- rect.height = stage_wayland->allocation.height;
- }
+ rect = stage_wayland->allocation;
else
- {
- rect.x = stage_clip->x;
- rect.y = stage_clip->y;
- rect.width = stage_clip->width;
- rect.height = stage_clip->height;
- }
+ rect = stage_clip;
if (stage_wayland->repaint_region == NULL)
stage_wayland->repaint_region = cairo_region_create_rectangle (&rect);
@@ -606,7 +593,6 @@ void
_clutter_stage_wayland_repaint_region (ClutterStageWayland *stage_wayland,
ClutterStage *stage)
{
- ClutterGeometry geom;
cairo_rectangle_int_t rect;
int i, count;
@@ -615,13 +601,11 @@ _clutter_stage_wayland_repaint_region (ClutterStageWayland *stage_wayland,
{
cairo_region_get_rectangle (stage_wayland->repaint_region, i, &rect);
- cogl_clip_push_window_rectangle (rect.x - 1, rect.y - 1,
- rect.width + 2, rect.height + 2);
+ cogl_clip_push_window_rectangle (rect.x - 1,
+ rect.y - 1,
+ rect.width + 2,
+ rect.height + 2);
- geom.x = rect.x;
- geom.y = rect.y;
- geom.width = rect.width;
- geom.height = rect.height;
/* FIXME: We should pass geom in as second arg, but some actors
* cull themselves a little to much. Disable for now.*/
_clutter_stage_do_paint (stage, NULL);
@@ -637,8 +621,10 @@ _clutter_stage_wayland_redraw (ClutterStageWayland *stage_wayland,
stage_wayland->allocation = stage_wayland->pending_allocation;
if (!stage_wayland->back_buffer)
+ {
stage_wayland->back_buffer =
- wayland_create_buffer (&stage_wayland->allocation);
+ wayland_create_buffer (&stage_wayland->allocation);
+ }
cogl_set_framebuffer (stage_wayland->back_buffer->offscreen);
_clutter_stage_maybe_setup_viewport (stage_wayland->wrapper);
diff --git a/clutter/wayland/clutter-stage-wayland.h b/clutter/wayland/clutter-stage-wayland.h
index 156a75e..e92134b 100644
--- a/clutter/wayland/clutter-stage-wayland.h
+++ b/clutter/wayland/clutter-stage-wayland.h
@@ -89,9 +89,9 @@ struct _ClutterStageWayland
/* back pointer to the backend */
ClutterBackendWayland *backend;
- ClutterGeometry allocation;
- ClutterGeometry save_allocation;
- ClutterGeometry pending_allocation;
+ cairo_rectangle_int_t allocation;
+ cairo_rectangle_int_t save_allocation;
+ cairo_rectangle_int_t pending_allocation;
struct wl_surface *wayland_surface;
int pending_swaps;
diff --git a/clutter/win32/clutter-stage-win32.c b/clutter/win32/clutter-stage-win32.c
index 9ed74ed..a309d25 100644
--- a/clutter/win32/clutter-stage-win32.c
+++ b/clutter/win32/clutter-stage-win32.c
@@ -79,17 +79,17 @@ clutter_stage_win32_hide (ClutterStageWindow *stage_window)
}
static void
-clutter_stage_win32_get_geometry (ClutterStageWindow *stage_window,
- ClutterGeometry *geometry)
+clutter_stage_win32_get_geometry (ClutterStageWindow *stage_window,
+ cairo_rectangle_int_t *geometry)
{
ClutterStageWin32 *stage_win32 = CLUTTER_STAGE_WIN32 (stage_window);
if ((stage_win32->state & CLUTTER_STAGE_STATE_FULLSCREEN))
{
- geometry->width = (stage_win32->fullscreen_rect.right
- - stage_win32->fullscreen_rect.left);
- geometry->height = (stage_win32->fullscreen_rect.bottom
- - stage_win32->fullscreen_rect.top);
+ geometry->width = stage_win32->fullscreen_rect.right
+ - stage_win32->fullscreen_rect.left;
+ geometry->height = stage_win32->fullscreen_rect.bottom
+ - stage_win32->fullscreen_rect.top;
return;
}
diff --git a/clutter/x11/clutter-stage-x11.c b/clutter/x11/clutter-stage-x11.c
index ab877b9..410afd7 100644
--- a/clutter/x11/clutter-stage-x11.c
+++ b/clutter/x11/clutter-stage-x11.c
@@ -193,8 +193,8 @@ clutter_stage_x11_set_wm_protocols (ClutterStageX11 *stage_x11)
}
static void
-clutter_stage_x11_get_geometry (ClutterStageWindow *stage_window,
- ClutterGeometry *geometry)
+clutter_stage_x11_get_geometry (ClutterStageWindow *stage_window,
+ cairo_rectangle_int_t *geometry)
{
ClutterStageX11 *stage_x11 = CLUTTER_STAGE_X11 (stage_window);
ClutterBackendX11 *backend_x11 = stage_x11->backend;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]