Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 819caa4

Browse filesBrowse files
committed
Hide some _SelectorWidget state internals.
For example, `eventrelease` is only set in the `release` handler, before calling the subclass's `_release`, and then immediately set to `None`. Within that time, it could be accessed from the `onselect` handler, but that's just the second argument passed to it anyway. So there's not really any use for `eventrelease` as a class attribute. The other two are similarly internal state tracking, and should not be modified externally.
1 parent 4d1cd5e commit 819caa4
Copy full SHA for 819caa4

File tree

Expand file treeCollapse file tree

2 files changed

+61
-47
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+61
-47
lines changed
+9Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Selector widget state internals
2+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3+
Several `~matplotlib.widgets.EllipseSelector`,
4+
`~matplotlib.widgets.RectangleSelector` and `~matplotlib.widgets.SpanSelector`
5+
class internals have been privatized and deprecated:
6+
7+
- ``eventpress``
8+
- ``eventrelease``
9+
- ``state``

‎lib/matplotlib/widgets.py

Copy file name to clipboardExpand all lines: lib/matplotlib/widgets.py
+52-47Lines changed: 52 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1789,11 +1789,15 @@ def __init__(self, ax, onselect, useblit=False, button=None,
17891789
self.validButtons = button
17901790

17911791
# will save the data (position at mouseclick)
1792-
self.eventpress = None
1792+
self._eventpress = None
17931793
# will save the data (pos. at mouserelease)
1794-
self.eventrelease = None
1794+
self._eventrelease = None
17951795
self._prev_event = None
1796-
self.state = set()
1796+
self._state = set()
1797+
1798+
eventpress = _api.deprecate_privatize_attribute("3.5")
1799+
eventrelease = _api.deprecate_privatize_attribute("3.5")
1800+
state = _api.deprecate_privatize_attribute("3.5")
17971801

17981802
def set_active(self, active):
17991803
super().set_active(active)
@@ -1846,14 +1850,14 @@ def ignore(self, event):
18461850
return True
18471851
# If no button was pressed yet ignore the event if it was out
18481852
# of the axes
1849-
if self.eventpress is None:
1853+
if self._eventpress is None:
18501854
return event.inaxes != self.ax
18511855
# If a button was pressed, check if the release-button is the same.
1852-
if event.button == self.eventpress.button:
1856+
if event.button == self._eventpress.button:
18531857
return False
18541858
# If a button was pressed, check if the release-button is the same.
18551859
return (event.inaxes != self.ax or
1856-
event.button != self.eventpress.button)
1860+
event.button != self._eventpress.button)
18571861

18581862
def update(self):
18591863
"""Draw using blit() or draw_idle(), depending on ``self.useblit``."""
@@ -1899,13 +1903,13 @@ def press(self, event):
18991903
"""Button press handler and validator."""
19001904
if not self.ignore(event):
19011905
event = self._clean_event(event)
1902-
self.eventpress = event
1906+
self._eventpress = event
19031907
self._prev_event = event
19041908
key = event.key or ''
19051909
key = key.replace('ctrl', 'control')
19061910
# move state is locked in on a button press
19071911
if key == self.state_modifier_keys['move']:
1908-
self.state.add('move')
1912+
self._state.add('move')
19091913
self._press(event)
19101914
return True
19111915
return False
@@ -1915,13 +1919,13 @@ def _press(self, event):
19151919

19161920
def release(self, event):
19171921
"""Button release event handler and validator."""
1918-
if not self.ignore(event) and self.eventpress:
1922+
if not self.ignore(event) and self._eventpress:
19191923
event = self._clean_event(event)
1920-
self.eventrelease = event
1924+
self._eventrelease = event
19211925
self._release(event)
1922-
self.eventpress = None
1923-
self.eventrelease = None
1924-
self.state.discard('move')
1926+
self._eventpress = None
1927+
self._eventrelease = None
1928+
self._state.discard('move')
19251929
return True
19261930
return False
19271931

@@ -1930,7 +1934,7 @@ def _release(self, event):
19301934

19311935
def onmove(self, event):
19321936
"""Cursor move event handler and validator."""
1933-
if not self.ignore(event) and self.eventpress:
1937+
if not self.ignore(event) and self._eventpress:
19341938
event = self._clean_event(event)
19351939
self._onmove(event)
19361940
return True
@@ -1959,7 +1963,7 @@ def on_key_press(self, event):
19591963
return
19601964
for (state, modifier) in self.state_modifier_keys.items():
19611965
if modifier in key:
1962-
self.state.add(state)
1966+
self._state.add(state)
19631967
self._on_key_press(event)
19641968

19651969
def _on_key_press(self, event):
@@ -1971,7 +1975,7 @@ def on_key_release(self, event):
19711975
key = event.key or ''
19721976
for (state, modifier) in self.state_modifier_keys.items():
19731977
if modifier in key:
1974-
self.state.discard(state)
1978+
self._state.discard(state)
19751979
self._on_key_release(event)
19761980

19771981
def _on_key_release(self, event):
@@ -2240,9 +2244,9 @@ def _onmove(self, event):
22402244

22412245
v = event.xdata if self.direction == 'horizontal' else event.ydata
22422246
if self.direction == 'horizontal':
2243-
vpress = self.eventpress.xdata
2247+
vpress = self._eventpress.xdata
22442248
else:
2245-
vpress = self.eventpress.ydata
2249+
vpress = self._eventpress.ydata
22462250

22472251
# move existing span
22482252
# When "dragging from anywhere", `self._active_handle` is set to 'C'
@@ -2290,7 +2294,7 @@ def _set_active_handle(self, event):
22902294

22912295
# Prioritise center handle over other handles
22922296
# Use 'C' to match the notation used in the RectangleSelector
2293-
if 'move' in self.state:
2297+
if 'move' in self._state:
22942298
self._active_handle = 'C'
22952299
elif e_dist > self.handle_grab_distance:
22962300
# Not close to any handles
@@ -2712,23 +2716,23 @@ def _release(self, event):
27122716

27132717
# update the eventpress and eventrelease with the resulting extents
27142718
x0, x1, y0, y1 = self.extents
2715-
self.eventpress.xdata = x0
2716-
self.eventpress.ydata = y0
2719+
self._eventpress.xdata = x0
2720+
self._eventpress.ydata = y0
27172721
xy0 = self.ax.transData.transform([x0, y0])
2718-
self.eventpress.x, self.eventpress.y = xy0
2722+
self._eventpress.x, self._eventpress.y = xy0
27192723

2720-
self.eventrelease.xdata = x1
2721-
self.eventrelease.ydata = y1
2724+
self._eventrelease.xdata = x1
2725+
self._eventrelease.ydata = y1
27222726
xy1 = self.ax.transData.transform([x1, y1])
2723-
self.eventrelease.x, self.eventrelease.y = xy1
2727+
self._eventrelease.x, self._eventrelease.y = xy1
27242728

27252729
# calculate dimensions of box or line
27262730
if self.spancoords == 'data':
2727-
spanx = abs(self.eventpress.xdata - self.eventrelease.xdata)
2728-
spany = abs(self.eventpress.ydata - self.eventrelease.ydata)
2731+
spanx = abs(self._eventpress.xdata - self._eventrelease.xdata)
2732+
spany = abs(self._eventpress.ydata - self._eventrelease.ydata)
27292733
elif self.spancoords == 'pixels':
2730-
spanx = abs(self.eventpress.x - self.eventrelease.x)
2731-
spany = abs(self.eventpress.y - self.eventrelease.y)
2734+
spanx = abs(self._eventpress.x - self._eventrelease.x)
2735+
spany = abs(self._eventpress.y - self._eventrelease.y)
27322736
else:
27332737
_api.check_in_list(['data', 'pixels'],
27342738
spancoords=self.spancoords)
@@ -2743,7 +2747,7 @@ def _release(self, event):
27432747
return
27442748

27452749
# call desired function
2746-
self.onselect(self.eventpress, self.eventrelease)
2750+
self.onselect(self._eventpress, self._eventrelease)
27472751
self.update()
27482752

27492753
return False
@@ -2759,26 +2763,26 @@ def _onmove(self, event):
27592763
y1 = event.ydata
27602764

27612765
# move existing shape
2762-
elif (('move' in self.state or self._active_handle == 'C' or
2766+
elif (('move' in self._state or self._active_handle == 'C' or
27632767
(self.drag_from_anywhere and self._contains(event))) and
27642768
self._extents_on_press is not None):
27652769
x0, x1, y0, y1 = self._extents_on_press
2766-
dx = event.xdata - self.eventpress.xdata
2767-
dy = event.ydata - self.eventpress.ydata
2770+
dx = event.xdata - self._eventpress.xdata
2771+
dy = event.ydata - self._eventpress.ydata
27682772
x0 += dx
27692773
x1 += dx
27702774
y0 += dy
27712775
y1 += dy
27722776

27732777
# new shape
27742778
else:
2775-
center = [self.eventpress.xdata, self.eventpress.ydata]
2776-
center_pix = [self.eventpress.x, self.eventpress.y]
2779+
center = [self._eventpress.xdata, self._eventpress.ydata]
2780+
center_pix = [self._eventpress.x, self._eventpress.y]
27772781
dx = (event.xdata - center[0]) / 2.
27782782
dy = (event.ydata - center[1]) / 2.
27792783

27802784
# square shape
2781-
if 'square' in self.state:
2785+
if 'square' in self._state:
27822786
dx_pix = abs(event.x - center_pix[0])
27832787
dy_pix = abs(event.y - center_pix[1])
27842788
if not dx_pix:
@@ -2790,7 +2794,7 @@ def _onmove(self, event):
27902794
dy *= maxd / (abs(dy_pix) + 1e-6)
27912795

27922796
# from center
2793-
if 'center' in self.state:
2797+
if 'center' in self._state:
27942798
dx *= 2
27952799
dy *= 2
27962800

@@ -2891,7 +2895,7 @@ def _set_active_handle(self, event):
28912895
e_idx, e_dist = self._edge_handles.closest(event.x, event.y)
28922896
m_idx, m_dist = self._center_handle.closest(event.x, event.y)
28932897

2894-
if 'move' in self.state:
2898+
if 'move' in self._state:
28952899
self._active_handle = 'C'
28962900
self._extents_on_press = self.extents
28972901
# Set active handle as closest handle, if mouse click is close enough.
@@ -3204,7 +3208,7 @@ def _remove_vertex(self, i):
32043208
def _press(self, event):
32053209
"""Button press event handler."""
32063210
# Check for selection of a tool handle.
3207-
if ((self._polygon_completed or 'move_vertex' in self.state)
3211+
if ((self._polygon_completed or 'move_vertex' in self._state)
32083212
and len(self._xs) > 0):
32093213
h_idx, h_dist = self._polygon_handles.closest(event.x, event.y)
32103214
if h_dist < self.vertex_select_radius:
@@ -3230,8 +3234,8 @@ def _release(self, event):
32303234

32313235
# Place new vertex.
32323236
elif (not self._polygon_completed
3233-
and 'move_all' not in self.state
3234-
and 'move_vertex' not in self.state):
3237+
and 'move_all' not in self._state
3238+
and 'move_vertex' not in self._state):
32353239
self._xs.insert(-1, event.xdata)
32363240
self._ys.insert(-1, event.ydata)
32373241

@@ -3243,7 +3247,7 @@ def onmove(self, event):
32433247
# Method overrides _SelectorWidget.onmove because the polygon selector
32443248
# needs to process the move callback even if there is no button press.
32453249
# _SelectorWidget.onmove include logic to ignore move event if
3246-
# eventpress is None.
3250+
# _eventpress is None.
32473251
if not self.ignore(event):
32483252
event = self._clean_event(event)
32493253
self._onmove(event)
@@ -3262,16 +3266,16 @@ def _onmove(self, event):
32623266
self._xs[-1], self._ys[-1] = event.xdata, event.ydata
32633267

32643268
# Move all vertices.
3265-
elif 'move_all' in self.state and self.eventpress:
3266-
dx = event.xdata - self.eventpress.xdata
3267-
dy = event.ydata - self.eventpress.ydata
3269+
elif 'move_all' in self._state and self._eventpress:
3270+
dx = event.xdata - self._eventpress.xdata
3271+
dy = event.ydata - self._eventpress.ydata
32683272
for k in range(len(self._xs)):
32693273
self._xs[k] = self._xs_at_press[k] + dx
32703274
self._ys[k] = self._ys_at_press[k] + dy
32713275

32723276
# Do nothing if completed or waiting for a move.
32733277
elif (self._polygon_completed
3274-
or 'move_vertex' in self.state or 'move_all' in self.state):
3278+
or 'move_vertex' in self._state or 'move_all' in self._state):
32753279
return
32763280

32773281
# Position pending vertex.
@@ -3293,7 +3297,8 @@ def _on_key_press(self, event):
32933297
# Remove the pending vertex if entering the 'move_vertex' or
32943298
# 'move_all' mode
32953299
if (not self._polygon_completed
3296-
and ('move_vertex' in self.state or 'move_all' in self.state)):
3300+
and ('move_vertex' in self._state or
3301+
'move_all' in self._state)):
32973302
self._xs, self._ys = self._xs[:-1], self._ys[:-1]
32983303
self._draw_polygon()
32993304

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.