clutter: Fix offscreen-effect painting of clones
`ClutterOffscreenEffect` had been getting the wrong bounding box in the
case of clones and descendents of clones, causing visibly incorrect
clipping. This was due to `clutter_actor_get_paint_box` only ever being
given the source actor during a paint (which is correct) and not the clone.
Even if we weren't painting a clone but an offscreened descendent of a
clone (like in gnome-shell's desktop zoom), we would get the wrong result.
Fortunately we don't need to know the actual clone/actor being painted so
don't need to call the problematic `clutter_actor_get_paint_box` at all.
The solution is to only keep untransformed rendering in the FBO and leave
the correct transformation for later. The correct clone/actor's
transformation is already set for us as the current cogl modelview matrix
by `clutter_actor_paint`.
Bonus optimization: This all means we don't need to keep `last_matrix_drawn`
or force a full repaint every time some part of the transformation changes.
Because the FBO contents are no longer affected by transformations. As it
should be. In other words, offscreen-effected actors can now move around
on screen without themselves being repainted.
Special thanks to Mai Lavelle for identifying the cause of the problem.
Fixes:
https://bugzilla.gnome.org/show_bug.cgi?id=789050,
https://bugzilla.gnome.org/show_bug.cgi?id=659523#c9,
https://gitlab.gnome.org/GNOME/mutter/issues/196,
https://gitlab.gnome.org/GNOME/mutter/issues/282,
https://gitlab.gnome.org/GNOME/gnome-shell/issues/387,
https://launchpad.net/bugs/
1767648,
https://launchpad.net/bugs/
1779615
Origin: https://gitlab.gnome.org/vanvugt/mutter/commit/
9a466f289318050bde065bc8878947cb2691bc98
Bug-Ubuntu: https://launchpad.net/bugs/
1767648, https://launchpad.net/bugs/
1779615
Applied-Upstream: 3.31.90
Gbp-Pq: Name clutter-Fix-offscreen-effect-painting-of-clones.patch
clutter: Avoid rounding compensation when invalidating 2D actors
This allows the redraw clip to be more constrained, so MetaCullable doesn't
end up rendering portions of window shadows, frame and background when a
window invalidates (part of) its contents.
https://bugzilla.gnome.org/show_bug.cgi?id=782344
Origin: https://gitlab.gnome.org/GNOME/mutter/commit/
a7df459416d
Bug-Ubuntu: https://launchpad.net/bugs/
1767648
Bug-GNOME: https://bugzilla.gnome.org/show_bug.cgi?id=782344
Applied-Upstream: 3.30.3
Gbp-Pq: Name clutter-Avoid-rounding-compensation-when-invalidating-2D-.patch
theme: use gtk_render_icon_suface to paint button icon
This will properly take care of the icon transformations
and of the shadow.
Fixes #100
Bug: https://gitlab.gnome.org/GNOME/mutter/issues/100
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/mutter/+bug/
1764558
Forwarded: yes, https://gitlab.gnome.org/GNOME/mutter/merge_requests/62
Gbp-Pq: Name theme-use-gtk_render_icon_suface-to-paint-button-icon.patch
mutter (3.30.2-5) unstable; urgency=medium
* d/p/clutter-Avoid-rounding-compensation-when-invalidating-2D-.patch,
d/p/clutter-Fix-offscreen-effect-painting-of-clones.patch:
- Fix offscreen-effect painting of clones in zoom mode (LP: #
1767648,
LP: #
1779615)
* d/p/cogl-auto-texture-Avoid-a-double-free-crash.patch,
d/p/clutter-offscreen-effect-Disable-if-no-texture.patch:
- Fix crash in dual monitor setup and gdm activation (LP: #
1790525,
LP: #
1795774)
[dgit import unpatched mutter 3.30.2-5]