mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 15:40:41 -05:00
clutter/offscreen-effect: Consider paint volumes at negative coordinates
When basing the offscreen texture position off the paint volume, the
code was assuming that the paint volume was always starting at 0,0 but
this is not the case if child widgets are placed at negative coordinates
or the widget itself is transformed. This could cause such widgets that
have been flattened and therefore rendered to an offscreen texture to
appear cut off in the top/left.
Related: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4561
Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1923
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2031>
(cherry picked from commit 3768efef2b
)
This commit is contained in:
parent
fd826632e8
commit
c33ca49dfc
@ -336,17 +336,23 @@ clutter_offscreen_effect_pre_paint (ClutterEffect *effect,
|
|||||||
_clutter_paint_volume_copy_static (volume, &mutable_volume);
|
_clutter_paint_volume_copy_static (volume, &mutable_volume);
|
||||||
_clutter_paint_volume_get_bounding_box (&mutable_volume, &raw_box);
|
_clutter_paint_volume_get_bounding_box (&mutable_volume, &raw_box);
|
||||||
clutter_paint_volume_free (&mutable_volume);
|
clutter_paint_volume_free (&mutable_volume);
|
||||||
|
|
||||||
|
box = raw_box;
|
||||||
|
_clutter_actor_box_enlarge_for_effects (&box);
|
||||||
|
|
||||||
|
priv->fbo_offset_x = box.x1;
|
||||||
|
priv->fbo_offset_y = box.y1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
clutter_actor_get_allocation_box (priv->actor, &raw_box);
|
clutter_actor_get_allocation_box (priv->actor, &raw_box);
|
||||||
}
|
|
||||||
|
|
||||||
box = raw_box;
|
box = raw_box;
|
||||||
_clutter_actor_box_enlarge_for_effects (&box);
|
_clutter_actor_box_enlarge_for_effects (&box);
|
||||||
|
|
||||||
priv->fbo_offset_x = box.x1 - raw_box.x1;
|
priv->fbo_offset_x = box.x1 - raw_box.x1;
|
||||||
priv->fbo_offset_y = box.y1 - raw_box.y1;
|
priv->fbo_offset_y = box.y1 - raw_box.y1;
|
||||||
|
}
|
||||||
|
|
||||||
clutter_actor_box_scale (&box, ceiled_resource_scale);
|
clutter_actor_box_scale (&box, ceiled_resource_scale);
|
||||||
clutter_actor_box_get_size (&box, &target_width, &target_height);
|
clutter_actor_box_get_size (&box, &target_width, &target_height);
|
||||||
|
Loading…
Reference in New Issue
Block a user