From 255875d1b742bc282770956ca86591f1c4b7d516 Mon Sep 17 00:00:00 2001 From: vittoboa Date: Tue, 21 May 2024 20:37:43 +0200 Subject: [PATCH 1/4] Fix draggable legend disappearing when picking while use_blit=True --- lib/matplotlib/offsetbox.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/matplotlib/offsetbox.py b/lib/matplotlib/offsetbox.py index 32c5bafcde1d..cc0121e0a030 100644 --- a/lib/matplotlib/offsetbox.py +++ b/lib/matplotlib/offsetbox.py @@ -1486,11 +1486,13 @@ def on_motion(self, evt): self.canvas.draw() def on_pick(self, evt): - if self._check_still_parented() and evt.artist == self.ref_artist: - self.mouse_x = evt.mouseevent.x - self.mouse_y = evt.mouseevent.y - self.got_artist = True - if self._use_blit: + if self._check_still_parented(): + if evt.artist == self.ref_artist: + self.mouse_x = evt.mouseevent.x + self.mouse_y = evt.mouseevent.y + self.save_offset() + self.got_artist = True + if self.got_artist and self._use_blit: self.ref_artist.set_animated(True) self.canvas.draw() self.background = \ @@ -1498,7 +1500,6 @@ def on_pick(self, evt): self.ref_artist.draw( self.ref_artist.figure._get_renderer()) self.canvas.blit() - self.save_offset() def on_release(self, event): if self._check_still_parented() and self.got_artist: From 9c0327888824fa2152abd99b9a7dd7ae25a173a4 Mon Sep 17 00:00:00 2001 From: vittoboa Date: Wed, 22 May 2024 20:35:09 +0200 Subject: [PATCH 2/4] Add draw/blit to on_release of draggable lenged --- lib/matplotlib/offsetbox.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/matplotlib/offsetbox.py b/lib/matplotlib/offsetbox.py index cc0121e0a030..6c11e557a457 100644 --- a/lib/matplotlib/offsetbox.py +++ b/lib/matplotlib/offsetbox.py @@ -1506,6 +1506,9 @@ def on_release(self, event): self.finalize_offset() self.got_artist = False if self._use_blit: + self.ref_artist.draw( + self.ref_artist.figure._get_renderer()) + self.canvas.blit() self.ref_artist.set_animated(False) def _check_still_parented(self): From ee36329cbd40e75f2141e089efc4b8dacd26caf2 Mon Sep 17 00:00:00 2001 From: vittoboa Date: Wed, 22 May 2024 20:54:39 +0200 Subject: [PATCH 3/4] Restore background before draw/blit in on_release of draggable legend --- lib/matplotlib/offsetbox.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/matplotlib/offsetbox.py b/lib/matplotlib/offsetbox.py index 6c11e557a457..417806e4599d 100644 --- a/lib/matplotlib/offsetbox.py +++ b/lib/matplotlib/offsetbox.py @@ -1506,6 +1506,7 @@ def on_release(self, event): self.finalize_offset() self.got_artist = False if self._use_blit: + self.canvas.restore_region(self.background) self.ref_artist.draw( self.ref_artist.figure._get_renderer()) self.canvas.blit() From f1865148351d1db206c8367cdc7bed91a873f851 Mon Sep 17 00:00:00 2001 From: vittoboa <38300176+vittoboa@users.noreply.github.com> Date: Thu, 22 Aug 2024 20:24:04 +0200 Subject: [PATCH 4/4] Format drawing of draggable legend in on_release into a single line Co-authored-by: Elliott Sales de Andrade --- lib/matplotlib/offsetbox.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/matplotlib/offsetbox.py b/lib/matplotlib/offsetbox.py index 417806e4599d..194b950a8a30 100644 --- a/lib/matplotlib/offsetbox.py +++ b/lib/matplotlib/offsetbox.py @@ -1507,8 +1507,7 @@ def on_release(self, event): self.got_artist = False if self._use_blit: self.canvas.restore_region(self.background) - self.ref_artist.draw( - self.ref_artist.figure._get_renderer()) + self.ref_artist.draw(self.ref_artist.figure._get_renderer()) self.canvas.blit() self.ref_artist.set_animated(False)