summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@linux.intel.com>2011-10-31 11:53:45 +0000
committerEmmanuele Bassi <ebassi@linux.intel.com>2011-12-12 17:29:58 +0000
commitf0a246cdc6f3ca35d409b82297d2a99c5e8c7b32 (patch)
tree87d36928d1d6866c62d2f528a57deba9f729a212
parentc3639fd798ddd195075a2edf1e37825deb5f5aa2 (diff)
downloadclutter-f0a246cdc6f3ca35d409b82297d2a99c5e8c7b32.tar.gz
actor: Add queue_redraw_with_clip()
Add a public version of the clipped queue redraw, using a 2D clip. This allows implementing actors with trackable 2D clipped regions, like the ClutterX11TexturePixmap, outside of Clutter itself. https://bugzilla.gnome.org/show_bug.cgi?id=660997
-rw-r--r--clutter/clutter-actor.c47
-rw-r--r--clutter/clutter-actor.h2
-rw-r--r--clutter/clutter-types.h2
3 files changed, 49 insertions, 2 deletions
diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c
index 3c2040681..1f7a25909 100644
--- a/clutter/clutter-actor.c
+++ b/clutter/clutter-actor.c
@@ -5696,8 +5696,8 @@ clutter_actor_queue_redraw (ClutterActor *self)
NULL /* effect */);
}
-/*
- * clutter_actor_queue_redraw_with_clip:
+/*< private >
+ * _clutter_actor_queue_redraw_with_clip:
* @self: A #ClutterActor
* @flags: A mask of #ClutterRedrawFlags controlling the behaviour of
* this queue redraw.
@@ -5771,6 +5771,49 @@ _clutter_actor_queue_only_relayout (ClutterActor *self)
}
/**
+ * clutter_actor_queue_redraw_with_clip:
+ * @self: a #ClutterActor
+ * @clip: (allow-none): a rectangular clip region, or %NULL
+ *
+ * Queues a redraw on @self limited to a specific, actor-relative
+ * rectangular area.
+ *
+ * If @clip is %NULL this function is equivalent to
+ * clutter_actor_queue_redraw().
+ *
+ * Since: 1.10
+ */
+void
+clutter_actor_queue_redraw_with_clip (ClutterActor *self,
+ const cairo_rectangle_int_t *clip)
+{
+ ClutterPaintVolume volume;
+ ClutterVertex origin;
+
+ g_return_if_fail (CLUTTER_IS_ACTOR (self));
+
+ if (clip == NULL)
+ {
+ clutter_actor_queue_redraw (self);
+ return;
+ }
+
+ _clutter_paint_volume_init_static (&volume, self);
+
+ origin.x = clip->x;
+ origin.y = clip->y;
+ origin.z = 0.0f;
+
+ clutter_paint_volume_set_origin (&volume, &origin);
+ clutter_paint_volume_set_width (&volume, clip->width);
+ clutter_paint_volume_set_height (&volume, clip->height);
+
+ _clutter_actor_queue_redraw_full (self, 0, &volume, NULL);
+
+ clutter_paint_volume_free (&volume);
+}
+
+/**
* clutter_actor_queue_relayout:
* @self: A #ClutterActor
*
diff --git a/clutter/clutter-actor.h b/clutter/clutter-actor.h
index 7adabf4ae..7bd2f0d97 100644
--- a/clutter/clutter-actor.h
+++ b/clutter/clutter-actor.h
@@ -280,6 +280,8 @@ void clutter_actor_unmap (ClutterActor
void clutter_actor_paint (ClutterActor *self);
void clutter_actor_continue_paint (ClutterActor *self);
void clutter_actor_queue_redraw (ClutterActor *self);
+void clutter_actor_queue_redraw_with_clip (ClutterActor *self,
+ const cairo_rectangle_int_t *clip);
void clutter_actor_queue_relayout (ClutterActor *self);
void clutter_actor_destroy (ClutterActor *self);
diff --git a/clutter/clutter-types.h b/clutter/clutter-types.h
index 69665c076..7d5b513fa 100644
--- a/clutter/clutter-types.h
+++ b/clutter/clutter-types.h
@@ -28,6 +28,8 @@
#ifndef __CLUTTER_TYPES_H__
#define __CLUTTER_TYPES_H__
+#include <cairo.h>
+
#include <clutter/clutter-enums.h>
G_BEGIN_DECLS