From e84269431666461256e33ebf1a8ee23b1904721e Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Tue, 7 May 2013 23:35:27 +0100 Subject: [PATCH] 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 insertion(+), 14 deletions(-) diff --git a/src/st/st-icon.c b/src/st/st-icon.c index b29744b64..9d52727c8 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 4954d4937..9833b8337 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 793202b78..45e909624 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 df1787f99..4a2ff001d 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,