From c1f5741ac0cae4ddbfa6fd459e8a59a5b345dc22 Mon Sep 17 00:00:00 2001
From: "Jasper St. Pierre" <jstpierre@mecheye.net>
Date: Mon, 25 Nov 2013 15:27:48 -0500
Subject: [PATCH] cullable: Use relative actor coordinates for culling

This ensures that nested cullables work fine.
---
 src/compositor/clutter-utils.c       |  6 ++++--
 src/compositor/meta-cullable.c       |  6 ++++--
 src/compositor/meta-shaped-texture.c | 11 ++---------
 3 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/src/compositor/clutter-utils.c b/src/compositor/clutter-utils.c
index e090f66ce..6b2fb7328 100644
--- a/src/compositor/clutter-utils.c
+++ b/src/compositor/clutter-utils.c
@@ -93,8 +93,10 @@ meta_actor_vertices_are_untransformed (ClutterVertex *verts,
       v3x != v1x || v3y != v2y)
     return FALSE;
 
-  *x_origin = x;
-  *y_origin = y;
+  if (x_origin)
+    *x_origin = x;
+  if (y_origin)
+    *y_origin = y;
 
   return TRUE;
 }
diff --git a/src/compositor/meta-cullable.c b/src/compositor/meta-cullable.c
index 39481574b..5eb19026a 100644
--- a/src/compositor/meta-cullable.c
+++ b/src/compositor/meta-cullable.c
@@ -69,7 +69,7 @@ meta_cullable_cull_out_children (MetaCullable   *cullable,
   clutter_actor_iter_init (&iter, actor);
   while (clutter_actor_iter_prev (&iter, &child))
     {
-      int x, y;
+      float x, y;
 
       if (!CLUTTER_ACTOR_IS_VISIBLE (child))
         continue;
@@ -96,9 +96,11 @@ meta_cullable_cull_out_children (MetaCullable   *cullable,
       if (!META_IS_CULLABLE (child))
         continue;
 
-      if (!meta_actor_is_untransformed (child, &x, &y))
+      if (!meta_actor_is_untransformed (child, NULL, NULL))
         continue;
 
+      clutter_actor_get_position (child, &x, &y);
+
       /* Temporarily move to the coordinate system of the actor */
       cairo_region_translate (unobscured_region, - x, - y);
       cairo_region_translate (clip_region, - x, - y);
diff --git a/src/compositor/meta-shaped-texture.c b/src/compositor/meta-shaped-texture.c
index 12de417a0..fb2ad3a40 100644
--- a/src/compositor/meta-shaped-texture.c
+++ b/src/compositor/meta-shaped-texture.c
@@ -252,15 +252,8 @@ meta_shaped_texture_paint (ClutterActor *actor)
 
   filter = COGL_PIPELINE_FILTER_LINEAR;
 
-  if (!clutter_actor_is_in_clone_paint (actor))
-    {
-      int x_origin, y_origin;
-
-      if (meta_actor_is_untransformed (actor,
-                                       &x_origin,
-                                       &y_origin))
-        filter = COGL_PIPELINE_FILTER_NEAREST;
-    }
+  if (!clutter_actor_is_in_clone_paint (actor) && meta_actor_is_untransformed (actor, NULL, NULL))
+    filter = COGL_PIPELINE_FILTER_NEAREST;
 
   ctx = clutter_backend_get_cogl_context (clutter_get_default_backend ());
   fb = cogl_get_draw_framebuffer ();