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
This commit is contained in:
parent
d920da6624
commit
d6fe008b2c
@ -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,
|
||||
|
@ -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)
|
||||
|
@ -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 ();
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user