[gnome-shell] st-shadow: Fix offset shadow offscreen rendering
- From: Lionel Landwerlin <llandwerlin src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] st-shadow: Fix offset shadow offscreen rendering
- Date: Wed, 8 May 2013 15:16:04 +0000 (UTC)
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]