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



commit e84269431666461256e33ebf1a8ee23b1904721e
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 b29744b..9d52727 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]