8000 Merge pull request #22807 from anntzer/qd · matplotlib/matplotlib@1999228 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1999228

Browse files
authored
Merge pull request #22807 from anntzer/qd
Replace quiver dpi callback with reinit-on-dpi-changed.
2 parents 5937c68 + 952e0b1 commit 1999228

File tree

1 file changed

+12
-50
lines changed

1 file changed

+12
-50
lines changed

lib/matplotlib/quiver.py

Lines changed: 12 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
"""
1616

1717
import math
18-
import weakref
1918

2019
import numpy as np
2120
from numpy import ma
@@ -299,21 +298,6 @@ def __init__(self, Q, X, Y, U, label,
299298
self.color = color
300299
self.label = label
301300
self._labelsep_inches = labelsep
302-
self.labelsep = (self._labelsep_inches * Q.axes.figure.dpi)
303-
304-
# try to prevent closure over the real self
305-
weak_self = weakref.ref(self)
306-
307-
def on_dpi_change(fig):
308-
self_weakref = weak_self()
309-
if self_weakref is not None:
310-
self_weakref.labelsep = self_weakref._labelsep_inches * fig.dpi
311-
# simple brute force update works because _init is called at
312-
# the start of draw.
313-
self_weakref._initialized = False
314-
315-
self._cid = Q.axes.figure.callbacks.connect(
316-
'dpi_changed', on_dpi_change)
317301

318302
self.labelpos = labelpos
319303
self.labelcolor = labelcolor
@@ -329,18 +313,16 @@ def on_dpi_change(fig):
329313

330314
if self.labelcolor is not None:
331315
self.text.set_color(self.labelcolor)
332-
self._initialized = False
316+
self._dpi_at_last_init = None
333317
self.zorder = Q.zorder + 0.1
334318

335-
def remove(self):
336-
# docstring inherited
337-
self.Q.axes.figure.callbacks.disconnect(self._cid)
338-
self._cid = None
339-
super().remove() # pass the remove call up the stack
319+
@property
320+
def labelsep(self):
321+
return self._labelsep_inches * self.Q.axes.figure.dpi
340322

341323
def _init(self):
342-
if True: # not self._initialized:
343-
if not self.Q._initialized:
324+
if True: # self._dpi_at_last_init != self.axes.figure.dpi
325+
if self.Q._dpi_at_last_init != self.Q.axes.figure.dpi:
344326
self.Q._init()
345327
self._set_transform()
346328
with cbook._setattr_cm(self.Q, pivot=self.pivot[self.labelpos],
@@ -363,7 +345,7 @@ def _init(self):
363345
self.vector.set_color(self.color)
364346
self.vector.set_transform(self.Q.get_transform())
365347
self.vector.set_figure(self.get_figure())
366-
self._initialized = True
348+
self._dpi_at_last_init = self.Q.axes.figure.dpi
367349

368350
def _text_x(self, x):
369351
if self.labelpos == 'E':
@@ -534,26 +516,7 @@ def __init__(self, ax, *args,
534516
closed=False, **kwargs)
535517
self.polykw = kwargs
536518
self.set_UVC(U, V, C)
537-
self._initialized = False
538-
539-
weak_self = weakref.ref(self) # Prevent closure over the real self.
540-
541-
def on_dpi_change(fig):
542-
self_weakref = weak_self()
543-
if self_weakref is not None:
544-
# vertices depend on width, span which in turn depend on dpi
545-
self_weakref._new_UV = True
546-
# simple brute force update works because _init is called at
547-
# the start of draw.
548-
self_weakref._initialized = False
549-
550-
self._cid = ax.figure.callbacks.connect('dpi_changed', on_dpi_change)
551-
552-
def remove(self):
553-
# docstring inherited
554-
self.axes.figure.callbacks.disconnect(self._cid)
555-
self._cid = None
556-
super().remove() # pass the remove call up the stack
519+
self._dpi_at_last_init = None
557520

558521
def _init(self):
559522
"""
@@ -562,18 +525,19 @@ def _init(self):
562525
"""
563526
# It seems that there are not enough event notifications
564527
# available to have this work on an as-needed basis at present.
565-
if True: # not self._initialized:
528+
if True: # self._dpi_at_last_init != self.axes.figure.dpi
566529
trans = self._set_transform()
567530
self.span = trans.inverted().transform_bbox(self.axes.bbox).width
568531
if self.width is None:
569532
sn = np.clip(math.sqrt(self.N), 8, 25)
570533
self.width = 0.06 * self.span / sn
571534

572535
# _make_verts sets self.scale if not already specified
573-
if not self._initialized and self.scale is None:
536+
if (self._dpi_at_last_init != self.axes.figure.dpi
537+
and self.scale is None):
574538
self._make_verts(self.U, self.V, self.angles)
575539

576-
self._initialized = True
540+
self._dpi_at_last_init = self.axes.figure.dpi
577541

578542
def get_datalim(self, transData):
579543
trans = self.get_transform()
@@ -589,7 +553,6 @@ def draw(self, renderer):
589553
self._init()
590554
verts = self._make_verts(self.U, self.V, self.angles)
591555
self.set_verts(verts, closed=False)
592-
self._new_UV = False
593556
super().draw(renderer)
594557
self.stale = False
595558

@@ -618,7 +581,6 @@ def set_UVC(self, U, V, C=None):
618581
self.Umask = mask
619582
if C is not None:
620583
self.set_array(C)
621-
self._new_UV = True
622584
self.stale = True
623585

624586
def _dots_per_unit(self, units):

0 commit comments

Comments
 (0)
0