8000 Refactored making `FigureManager` a *figure* manager, plus added miss… · matplotlib/matplotlib@d4e8c83 · GitHub
[go: up one dir, main page]

Skip to content

Commit d4e8c83

Browse files
committed
Refactored making FigureManager a *figure* manager, plus added missing methods.
1 parent 798a62a commit d4e8c83

File tree

6 files changed

+45
-30
lines changed

6 files changed

+45
-30
lines changed

lib/matplotlib/backend_bases.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import warnings
3939
import time
4040
import io
41+
import weakref
4142

4243
import numpy as np
4344
import matplotlib.cbook as cbook
@@ -1691,7 +1692,7 @@ class FigureCanvasBase(object):
16911692
register_backend('tiff', 'matplotlib.backends.backend_agg',
16921693
'Tagged Image File Format')
16931694

1694-
def __init__(self, figure):
1695+
def __init__(self, figure, manager=None):
16951696
figure.set_canvas(self)
16961697
self.figure = figure
16971698
# a dictionary from event name to a dictionary that maps cid->func
@@ -1705,6 +1706,7 @@ def __init__(self, figure):
17051706
self.mouse_grabber = None # the axes currently grabbing mouse
17061707
self.toolbar = None # NavigationToolbar2 will set me
17071708
self._is_saving = False
1709+
self.manager = manager
17081710

17091711
def is_saving(self):
17101712
"""
@@ -2449,6 +2451,19 @@ def stop_event_loop_default(self):
24492451
"""
24502452
self._looping = False
24512453

2454+
def destroy(self):
2455+
pass
2456+
2457+
@property
2458+
def manager(self):
2459+
if self._manager is not None:
2460+
return self._manager()
2461+
2462+
@manager.setter
2463+
def manager(self, manager):
2464+
if manager is not None:
2465+
self._manager = weakref.ref(manager)
2466+
24522467

24532468
def key_press_handler(event, canvas, toolbar=None):
24542469
"""
@@ -2592,6 +2607,9 @@ def destroy(self):
25922607
def set_fullscreen(self, fullscreen):
25932608
pass
25942609

2610+
def set_default_size(self, w, h):
2611+
self.resize(w, h)
2612+
25952613
def resize(self, w, h):
25962614
""""For gui backends, resize the window (in pixels)."""
25972615
pass

lib/matplotlib/backend_managers.py

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,25 @@ def __init__(self, s, fm):
1515

1616

1717
class FigureManager(cbook.EventEmitter):
18-
def __init__(self, canvas, num):
18+
def __init__(self, figure, num):
1919
cbook.EventEmitter.__init__(self)
20-
self.canvas = canvas
21-
canvas.manager = self
2220
self.num = num
2321

24-
self.key_press_handler_id = self.canvas.mpl_connect('key_press_event',
25-
self.key_press)
26-
2722
self.mainloop = MainLoop()
2823
self.window = Window('Figure %d' % num)
2924
self.window.mpl_connect('window_destroy_event', self._destroy)
3025

26+
self.canvas = FigureCanvas(figure, self)
27+
28+
self.key_press_handler_id = self.canvas.mpl_connect('key_press_event',
29+
self.key_press)
30+
3131
w = int(self.canvas.figure.bbox.width)
3232
h = int(self.canvas.figure.bbox.height)
3333

3434
self.window.add_element_to_window(self.canvas, True, True, 0, True)
3535

36-
self.toolbar = self._get_toolbar(canvas)
36+
self.toolbar = self._get_toolbar()
3737
if self.toolbar is not None:
3838
h += self.window.add_element_to_window(self.toolbar,
3939
False, False, 0)
@@ -49,8 +49,6 @@ def notify_axes_change(fig):
4949
self.toolbar.update()
5050
self.canvas.figure.add_axobserver(notify_axes_change)
5151

52-
self.canvas.grab_focus()
53-
5452
def key_press(self, event):
5553
"""
5654
Implement the default mpl key bindings defined at
@@ -96,38 +94,37 @@ def set_window_title(self, title):
9694
"""
9795
self.window.set_window_title(title)
9896

99-
def show_popup(self, msg):
100-
"""
101-
Display message in a popup -- GUI only
102-
"""
103-
pass
104-
105-
def _get_toolbar(self, canvas):
97+
def _get_toolbar(self):
10698
# must be inited after the window, drawingArea and figure
10799
# attrs are set
108100
if rcParams['toolbar'] == 'toolbar2':
109-
toolbar = Toolbar2(canvas, self.window)
101+
toolbar = Toolbar2(self.canvas, self.window)
110102
else:
111103
toolbar = None
112104
return toolbar
113105

106+
def show_popup(self, msg):
107+
"""
108+
Display message in a popup -- GUI only
109+
"""
110+
pass
111+
114112

115113
def new_figure_manager(num, *args, **kwargs):
116114
"""
117115
Create a new figure manager instance
118116
"""
119117
show = kwargs.pop('show', None)
120-
if old_new_figure_manager is None:
118+
if old_new_figure_manager is None: # Test if we can use the new code
121119
FigureClass = kwargs.pop('FigureClass', Figure)
122120
thisFig = FigureClass(*args, **kwargs)
123121
manager = new_figure_manager_given_figure(num, thisFig)
124-
else: # TODO remove once Gcf removed from backends.
122+
else: # TODO remove once Gcf removed from backends. Default to old code.
125123
manager = old_new_figure_manager(num, *args, **kwargs)
126124
manager.mainloop = MainLoop
127125
return manager
128126

129127

130128
def new_figure_manager_given_figure(num, figure):
131-
canvas = FigureCanvas(figure)
132-
manager = FigureManager(canvas, num)
129+
manager = FigureManager(figure, num)
133130
return manager

lib/matplotlib/backends/backend_gtk3.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,9 +193,9 @@ class FigureCanvasGTK3 (Gtk.DrawingArea, FigureCanvasBase):
193193
Gdk.EventMask.POINTER_MOTION_HINT_MASK|
194194
Gdk.EventMask.SCROLL_MASK)
195195

196-
def __init__(self, figure):
196+
def __init__(self, figure, manager=None):
197197
if _debug: print('FigureCanvasGTK3.%s' % fn_name())
198-
FigureCanvasBase.__init__(self, figure)
198+
FigureCanvasBase.__init__(self, figure, manager)
199199
GObject.GObject.__init__(self)
200200

201201
self._idle_draw_id = 0

lib/matplotlib/backends/backend_gtk3agg.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121

2222
class FigureCanvasGTK3Agg(backend_gtk3.FigureCanvasGTK3,
2323
backend_agg.FigureCanvasAgg):
24-
def __init__(self, figure):
25-
backend_gtk3.FigureCanvasGTK3.__init__(self, figure)
24+
def __init__(self, figure, manager=None):
25+
backend_gtk3.FigureCanvasGTK3.__init__(self, figure, manager)
2626
self._bbox_queue = []
2727

2828
def _renderer_init(self):

lib/matplotlib/backends/backend_gtk3cairo.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ def set_context(self, ctx):
2222

2323
class FigureCanvasGTK3Cairo(backend_gtk3.FigureCanvasGTK3,
2424
backend_cairo.FigureCanvasCairo):
25-
def __init__(self, figure):
26-
backend_gtk3.FigureCanvasGTK3.__init__(self, figure)
25+
def __init__(self, figure, manager=None):
26+
backend_gtk3.FigureCanvasGTK3.__init__(self, figure, manager)
2727

2828
def _renderer_init(self):
2929
"""use cairo renderer"""

lib/matplotlib/figure.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1358,7 +1358,7 @@ def __setstate__(self, state):
13581358

13591359
if restore_to_pylab:
13601360
# lazy import to avoid circularity
1361-
# XXX clean on removal of Gcf from backends
1361+
# TODO clean on removal of Gcf from backends
13621362
import matplotlib.pyplot as plt
13631363
import matplotlib._pylab_helpers as pylab_helpers
13641364
import matplotlib.backend_managers as managers
@@ -1369,7 +1369,7 @@ def __setstate__(self, state):
13691369
self)
13701370
mgr.mainloop = plt._show
13711371
else:
1372-
mgr = managers.new_figure_manager_given_figure(num, self)
1372+
mgr = managers.FigureManager(self, num)
13731373

13741374
# XXX The following is a copy and paste from pyplot. Consider
13751375
# factoring to pylab_helpers

0 commit comments

Comments
 (0)
0