[gnome-shell] st-shadow: Fix offset shadow offscreen rendering



commit d6fe008b2c334f8f7b48b28b87982c06035243e0
Author: Lionel Landwerlin <llandwerlin gmail com>
Date:   Tue May 7 23:35:27 2013 +0100

    st-shadow: Fix offset shadow offscreen rendering
    
    The shadows are currently rendered by painting the actor we want to
    apply shadow on, in an offscreen buffer. The problem is that when this
    actor has an allocation padding (ie allocation that isn't at 0x0
    relatively to its parent), this padding is added within the offscreen
    buffer and as a result the shadow rendering is truncated because the
    offscreen buffer size is the size of the allocation box, not the
    allocation box + padding.
    
    This patch reposition the actor at 0x0 with rendering it by changing
    the initial transformation matrix when rendering the actor offscreen.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=698301

 src/st/st-icon.c    |    5 -----
 src/st/st-label.c   |    4 ----
 src/st/st-private.c |    1 +
 src/st/st-shadow.c  |    5 -----
 4 files changed, 1 insertions(+), 14 deletions(-)
---
diff --git a/src/st/st-icon.c b/src/st/st-icon.c
index 3fec7e2..fac474a 100644
--- a/src/st/st-icon.c
+++ b/src/st/st-icon.c
@@ -249,11 +249,6 @@ st_icon_paint (ClutterActor *actor)
           clutter_actor_get_allocation_box (priv->icon_texture, &allocation);
           clutter_actor_box_get_size (&allocation, &width, &height);
 
-          allocation.x1 = (width - priv->shadow_width) / 2;
-          allocation.y1 = (height - priv->shadow_height) / 2;
-          allocation.x2 = allocation.x1 + priv->shadow_width;
-          allocation.y2 = allocation.y1 + priv->shadow_height;
-
           _st_paint_shadow_with_opacity (priv->shadow_spec,
                                          priv->shadow_material,
                                          &allocation,
diff --git a/src/st/st-label.c b/src/st/st-label.c
index 4954d49..9833b83 100644
--- a/src/st/st-label.c
+++ b/src/st/st-label.c
@@ -218,10 +218,6 @@ st_label_paint (ClutterActor *actor)
       clutter_actor_get_allocation_box (priv->label, &allocation);
       clutter_actor_box_get_size (&allocation, &width, &height);
 
-      allocation.x1 = allocation.y1 = 0;
-      allocation.x2 = width;
-      allocation.y2 = height;
-
       if (priv->text_shadow_material == COGL_INVALID_HANDLE ||
           width != priv->shadow_width ||
           height != priv->shadow_height)
diff --git a/src/st/st-private.c b/src/st/st-private.c
index 793202b..45e9096 100644
--- a/src/st/st-private.c
+++ b/src/st/st-private.c
@@ -511,6 +511,7 @@ _st_create_shadow_material_from_actor (StShadow     *shadow_spec,
       cogl_color_set_from_4ub (&clear_color, 0, 0, 0, 0);
       cogl_push_framebuffer (offscreen);
       cogl_clear (&clear_color, COGL_BUFFER_BIT_COLOR);
+      cogl_translate (-box.x1, -box.y1, 0);
       cogl_ortho (0, width, height, 0, 0, 1.0);
       clutter_actor_paint (actor);
       cogl_pop_framebuffer ();
diff --git a/src/st/st-shadow.c b/src/st/st-shadow.c
index df1787f..4a2ff00 100644
--- a/src/st/st-shadow.c
+++ b/src/st/st-shadow.c
@@ -292,11 +292,6 @@ st_shadow_helper_paint (StShadowHelper  *helper,
 
   clutter_actor_box_get_size (actor_box, &width, &height);
 
-  allocation.x1 = (width - helper->width) / 2;
-  allocation.y1 = (height - helper->height) / 2;
-  allocation.x2 = allocation.x1 + helper->width;
-  allocation.y2 = allocation.y1 + helper->height;
-
   _st_paint_shadow_with_opacity (helper->shadow,
                                  helper->material,
                                  &allocation,


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