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>
This commit is contained in:
parent
fbcb078513
commit
3768efef2b
@ -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