[clutter] paint-volume: Add a union method for boxes



commit 6a09bf5b52c97668d280357b03720956f83ad79a
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Mon Feb 13 22:40:19 2012 +0000

    paint-volume: Add a union method for boxes
    
    Creating PaintVolume instances is not possible, and it's not recommended
    anyway. It is, though, necessary to union paint volumes, especially with
    2D boxes, in some cases.
    
    Clutter should provide a simple convenience function that allows
    unioning volumes to boxes in a moderately efficient way.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=670021

 clutter/clutter-paint-volume.c             |   36 ++++++++++++++++++++++++++++
 clutter/clutter-types.h                    |    2 +
 clutter/clutter.symbols                    |    1 +
 doc/reference/clutter/clutter-sections.txt |    1 +
 4 files changed, 40 insertions(+), 0 deletions(-)
---
diff --git a/clutter/clutter-paint-volume.c b/clutter/clutter-paint-volume.c
index 419b281..725be79 100644
--- a/clutter/clutter-paint-volume.c
+++ b/clutter/clutter-paint-volume.c
@@ -640,6 +640,42 @@ done:
   pv->is_complete = FALSE;
 }
 
+/**
+ * clutter_paint_volume_union_box:
+ * @pv: a #ClutterPaintVolume
+ * @box: a #ClutterActorBox to union to @pv
+ *
+ * Unions the 2D region represented by @box to a #ClutterPaintVolume.
+ *
+ * This function is similar to clutter_paint_volume_union(), but it is
+ * specific for 2D regions.
+ *
+ * Since: 1.10
+ */
+void
+clutter_paint_volume_union_box (ClutterPaintVolume    *pv,
+                                const ClutterActorBox *box)
+{
+  ClutterPaintVolume volume;
+  ClutterVertex origin;
+
+  g_return_if_fail (pv != NULL);
+  g_return_if_fail (box != NULL);
+
+  _clutter_paint_volume_init_static (&volume, pv->actor);
+
+  origin.x = box->x1;
+  origin.y = box->y1;
+  origin.z = 0.f;
+  clutter_paint_volume_set_origin (&volume, &origin);
+  clutter_paint_volume_set_width (&volume, box->x2 - box->x1);
+  clutter_paint_volume_set_height (&volume, box->y2 - box->y1);
+
+  clutter_paint_volume_union (pv, &volume);
+
+  clutter_paint_volume_free (&volume);
+}
+
 /* The paint_volume setters only update vertices 0, 1, 3 and
  * 4 since the others can be drived from them.
  *
diff --git a/clutter/clutter-types.h b/clutter/clutter-types.h
index ecd0d16..0ec28af 100644
--- a/clutter/clutter-types.h
+++ b/clutter/clutter-types.h
@@ -279,6 +279,8 @@ void                clutter_paint_volume_set_depth           (ClutterPaintVolume
 gfloat              clutter_paint_volume_get_depth           (const ClutterPaintVolume *pv);
 void                clutter_paint_volume_union               (ClutterPaintVolume       *pv,
                                                               const ClutterPaintVolume *another_pv);
+void                clutter_paint_volume_union_box           (ClutterPaintVolume       *pv,
+                                                              const ClutterActorBox    *box);
 
 gboolean            clutter_paint_volume_set_from_allocation (ClutterPaintVolume       *pv,
                                                               ClutterActor             *actor);
diff --git a/clutter/clutter.symbols b/clutter/clutter.symbols
index 8728071..56c896b 100644
--- a/clutter/clutter.symbols
+++ b/clutter/clutter.symbols
@@ -900,6 +900,7 @@ clutter_paint_volume_set_from_allocation
 clutter_paint_volume_set_height
 clutter_paint_volume_set_origin
 clutter_paint_volume_set_width
+clutter_paint_volume_union_box
 clutter_paint_volume_union
 clutter_param_color_get_type
 clutter_param_fixed_get_type
diff --git a/doc/reference/clutter/clutter-sections.txt b/doc/reference/clutter/clutter-sections.txt
index 0b44a41..59f92e9 100644
--- a/doc/reference/clutter/clutter-sections.txt
+++ b/doc/reference/clutter/clutter-sections.txt
@@ -547,6 +547,7 @@ clutter_paint_volume_set_depth
 clutter_paint_volume_get_depth
 clutter_paint_volume_set_from_allocation
 clutter_paint_volume_union
+clutter_paint_volume_union_box
 
 <SUBSECTION Standard>
 CLUTTER_TYPE_GEOMETRY



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