8000 Make figure.py backend-agnostic · matplotlib/matplotlib@8bd1d57 · GitHub
[go: up one dir, main page]

Skip to content

Commit 8bd1d57

Browse files
committed
Make figure.py backend-agnostic
figure.py now uses pylab_setup() to probe for the backend module to set up the figure canvas.
1 parent 700b26b commit 8bd1d57

26 files changed

+51
-47
lines changed

lib/matplotlib/backends/backend_agg.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -515,3 +515,5 @@ def print_to_buffer(self):
515515
(int(renderer.width), int(renderer.height)))
516516
renderer.dpi = original_dpi
517517
return result
518+
519+
FigureCanvas = FigureCanvasAgg

lib/matplotlib/backends/backend_cairo.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,3 +512,5 @@ def _save (self, fo, format, **kwargs):
512512

513513
ctx.show_page()
514514
surface.finish()
515+
516+
FigureCanvas = FigureCanvasCairo

lib/matplotlib/backends/backend_cocoaagg.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def stop_event_loop(self):
8989
FigureCanvasBase.stop_event_loop_default(self)
9090
stop_event_loop.__doc__=FigureCanvasBase.stop_event_loop_default.__doc__
9191

92-
92+
FigureCanvas = FigureCanvasCocoaAgg
9393

9494
NibClassBuilder.extractClasses('Matplotlib.nib', mplBundle)
9595

lib/matplotlib/backends/backend_emf.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -727,6 +727,8 @@ def print_emf(self, filename, dpi=300, **kwargs):
727727
def get_default_filetype(self):
728728
return 'emf'
729729

730+
FigureCanvas = FigureCanvasEMF
731+
730732
class FigureManagerEMF(FigureManagerBase):
731733
"""
732734
Wrap everything up into a window for the pylab interface

lib/matplotlib/backends/backend_fltkagg.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ def stop_event_loop(self):
231231
FigureCanvasBase.stop_event_loop_default(self)
232232
stop_event_loop.__doc__=FigureCanvasBase.stop_event_loop_default.__doc__
233233

234+
FigureCanvas = FigureCanvasFltkAgg
235+
234236
def destroy_figure(ptr, figman):
235237
figman.window.hide()
236238
Fltk.Fl.wait(0) # This is needed to make the last figure vanish.

lib/matplotlib/backends/backend_gdk.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ def new_figure_manager_given_figure(num, figure):
434434
return manager
435435

436436

437-
class FigureCanvasGDK (FigureCanvasBase):
437+
class FigureCanvasGDK(FigureCanvasBase):
438438
def __init__(self, figure):
439439
FigureCanvasBase.__init__(self, figure)
440440

@@ -472,3 +472,5 @@ def _print_image(self, filename, format, *args, **kwargs):
472472
0, 0, 0, 0, width, height)
473473

474474
pixbuf.save(filename, format)
475+
476+
FigureCanvas = FigureCanvasGDK

lib/matplotlib/backends/backend_gtk.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ def _on_timer(self):
144144
return False
145145

146146

147-
class FigureCanvasGTK (gtk.DrawingArea, FigureCanvasBase):
147+
class FigureCanvasGTK(gtk.DrawingArea, FigureCanvasBase):
148148
keyvald = {65507 : 'control',
149149
65505 : 'shift',
150150
65513 : 'alt',
@@ -519,6 +519,8 @@ def stop_event_loop(self):
519519
FigureCanvasBase.stop_event_loop_default(self)
520520
stop_event_loop.__doc__=FigureCanvasBase.stop_event_loop_default.__doc__
521521

522+
FigureCanvas = FigureCanvasGTK
523+
522524
class FigureManagerGTK(FigureManagerBase):
523525
"""
524526
Public attributes

lib/matplotlib/backends/backend_gtk3.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def _on_timer(self):
9898
self._timer = None
9999
return False
100100

101-
class FigureCanvasGTK3 (Gtk.DrawingArea, FigureCanvasBase):
101+
class FigureCanvasGTK3(Gtk.DrawingArea, FigureCanvasBase):
102102
keyvald = {65507 : 'control',
103103
65505 : 'shift',
104104
65513 : 'alt',

lib/matplotlib/backends/backend_gtk3agg.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ def print_png(self, filename, *args, **kwargs):
6767
agg = self.switch_backends(backend_agg.FigureCanvasAgg)
6868
return agg.print_png(filename, *args, **kwargs)
6969

70+
FigureCanvas = FigureCanvasGTK3Agg
7071

7172
class FigureManagerGTK3Agg(backend_gtk3.FigureManagerGTK3):
7273
pass

lib/matplotlib/backends/backend_gtk3cairo.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ def on_draw_event(self, widget, ctx):
3434

3535
return False # finish event propagation?
3636

37+
FigureCanvas = FigureCanvasGTK3Cairo
3738

3839
class FigureManagerGTK3Cairo(backend_gtk3.FigureManagerGTK3):
3940
pass

lib/matplotlib/backends/backend_gtkagg.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ def _get_toolbar(self, canvas):
3333
toolbar = None
3434
return toolbar
3535

36+
FigureCanvas = FigureManagerGTKAgg
3637

3738
def new_figure_manager(num, *args, **kwargs):
3839
"""

lib/matplotlib/backends/backend_gtkcairo.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ def _renderer_init(self):
5555
if < F42D span class=pl-s1>_debug: print('%s.%s()' % (self.__class__.__name__, _fn_name()))
5656
self._renderer = RendererGTKCairo (self.figure.dpi)
5757

58+
FigureCanvas = FigureCanvasGTKCairo
5859

5960
class FigureManagerGTKCairo(FigureManagerGTK):
6061
def _get_toolbar(self, canvas):

lib/matplotlib/backends/backend_macosx.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,6 @@ class TimerMac(_macosx.Timer, TimerBase):
268268
'''
269269
# completely implemented at the C-level (in _macosx.Timer)
270270

271-
272271
class FigureCanvasMac(_macosx.FigureCanvas, FigureCanvasBase):
273272
"""
274273
The canvas the figure renders into. Calls the draw and print fig
@@ -353,6 +352,8 @@ def new_timer(self, *args, **kwargs):
353352
return TimerMac(*args, **kwargs)
354353

355354

355+
FigureCanvas = FigureCanvasMac
356+
356357
class FigureManagerMac(_macosx.FigureManager, FigureManagerBase):
357358
"""
358359
Wrap everything up into a window for the pylab interface

lib/matplotlib/backends/backend_pdf.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2299,6 +2299,8 @@ def print_pdf(self, filename, **kwargs):
22992299
else: # we opened the file above; now finish it off
23002300
file.close()
23012301

2302+
FigureCanvas = FigureCanvasPdf
2303+
23022304
class FigureManagerPdf(FigureManagerBase):
23032305
pass
23042306

lib/matplotlib/backends/backend_pgf.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -838,6 +838,8 @@ def _render_texts_pgf(self, fh):
838838
def get_renderer(self):
839839
return RendererPgf(self.figure, None)
840840

841+
FigureCanvas = FigureCanvasPgf
842+
841843
class FigureManagerPgf(FigureManagerBase):
842844
def __init__(self, *args):
843845
FigureManagerBase.__init__(self, *args)

lib/matplotlib/backends/backend_ps.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1357,6 +1357,8 @@ def write(self, *kl, **kwargs):
13571357
shutil.move(tmpfile, outfile)
13581358
os.chmod(outfile, mode)
13591359

1360+
FigureCanvas = FigureCanvasPS
1361+
13601362
def convert_psfrags(tmpfile, psfrags, font_preamble, custom_preamble,
13611363
paperWidth, paperHeight, orientation):
13621364
"""

lib/matplotlib/backends/backend_qt.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,8 @@ def stop_event_loop(self):
203203
FigureCanvasBase.stop_event_loop_default(self)
204204
stop_event_loop.__doc__=FigureCanvasBase.stop_event_loop_default.__doc__
205205

206+
FigureCanvas = FigureCanvasQT
207+
206208
class FigureManagerQT( FigureManagerBase ):
207209
"""
208210
Public attributes

lib/matplotlib/backends/backend_qt4.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,8 @@ def idle_draw(*args):
377377
self._idle = True
378378
if d: QtCore.QTimer.singleShot(0, idle_draw)
379379

380+
FigureCanvas = FigureCanvasQT
381+
380382
class FigureManagerQT( FigureManagerBase ):
381383
"""
382384
Public attributes

lib/matplotlib/backends/backend_qt4agg.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,5 @@ def blit(self, bbox=None):
145145
def print_figure(self, *args, **kwargs):
146146
FigureCanvasAgg.print_figure(self, *args, **kwargs)
147147
self.draw()
148+
149+
FigureCanvas = FigureCanvasQTAgg

lib/matplotlib/backends/backend_qtagg.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,3 +156,5 @@ def blit(self, bbox=None):
156156
def print_figure(self, *args, **kwargs):
157157
FigureCanvasAgg.print_figure(self, *args, **kwargs)
158158
self.draw()
159+
160+
FigureCanvas = FigureCanvasQTAgg

lib/matplotlib/backends/backend_svg.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,6 +1143,8 @@ def _print_svg(self, filename, svgwriter, fh_to_close=None, **kwargs):
11431143
def get_default_filetype(self):
11441144
return 'svg'
11451145

1146+
FigureCanvas = FigureCanvasSVG
1147+
11461148
class FigureManagerSVG(FigureManagerBase):
11471149
pass
11481150

lib/matplotlib/backends/backend_template.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,8 @@ def print_foo(self, filename, *args, **kwargs):
245245
def get_default_filetype(self):
246246
return 'foo'
247247

248+
FigureCanvas = FigureCanvasTemplate
249+
248250
class FigureManagerTemplate(FigureManagerBase):
249251
"""
250252
Wrap everything up into a window for the pylab interface

lib/matplotlib/backends/backend_tkagg.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,8 @@ def stop_event_loop(self):
505505
FigureCanvasBase.stop_event_loop_default(self)
506506
stop_event_loop.__doc__=FigureCanvasBase.stop_event_loop_default.__doc__
507507

508+
FigureCanvas = FigureCanvasTkAgg
509+
508510
class FigureManagerTkAgg(FigureManagerBase):
509511
"""
510512
Public attributes

lib/matplotlib/backends/backend_wx.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1400,6 +1400,7 @@ def _onEnter(self, evt):
14001400
"""Mouse has entered the window."""
14011401
FigureCanvasBase.enter_notify_event(self, guiEvent = evt)
14021402

1403+
FigureCanvas = FigureCanvasWx
14031404

14041405
########################################################################
14051406
#

lib/matplotlib/backends/backend_wxagg.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ def print_figure(self, filename, *args, **kwargs):
105105
if self._isDrawn:
106106
self.draw()
107107

108+
FigureCanvas = FigureCanvasWxAgg
109+
108110
class NavigationToolbar2WxAgg(NavigationToolbar2Wx):
109111
def get_canvas(self, frame, fig):
110112
return FigureCanvasWxAgg(frame, -1, fig)

lib/matplotlib/figure.py

Lines changed: 6 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ def __init__(self,
318318
self.patch.set_aa(False)
319319

320320
self._hold = rcParams['axes.hold']
321-
self.canvas = self._current_figure_canvas()
321+
self.canvas = self._setup_canvas()
322322

323323
if subplotpars is None:
324324
subplotpars = SubplotParams()
@@ -330,47 +330,11 @@ def __init__(self,
330330
self.clf()
331331
self._cachedRenderer = None
332332

333-
def _current_figure_canvas(self):
334-
b = rcParams['backend'].lower()
335-
if b == 'agg':
336-
from backends.backend_agg import FigureCanvasAgg as FigureCanvas
337-
elif b == 'cairo':
338-
from backends.backend_cairo import FigureCanvasCairo as FigureCanvas
339-
elif b == 'cocoaag':
340-
from backends.backend_cocoaagg import FigureCanvasCocoaAgg as FigureCanvas
341-
elif b == 'fltkagg':
342-
from backends.backend_fltkagg import FigureCanvasFltkAgg as FigureCanvas
343-
elif b == 'gdk':
344-
from backends.backend_gdk import FigureCanvasGDK as FigureCanvas
345-
elif b == 'gtk':
346-
from backends.backend_gtk import FigureCanvasGTK as FigureCanvas
347-
elif b == 'gtkagg':
348-
from backends.backend_gtkagg import FigureCanvasGTKAgg as FigureCanvas
349-
elif b == 'gtkcairo':
350-
from backends.backend_gtkcairo import FigureCanvasGTKCairo as FigureCanvas
351-
elif b == 'macosx':
352-
from backends.backend_macosx import FigureCanvasMac as FigureCanvas
353-
elif b == 'pdf':
354-
from backends.backend_pdf import FigureCanvasPdf as FigureCanvas
355-
elif b == 'ps':
356-
from backends.backend_ps import FigureCanvasPS as FigureCanvas
357-
elif b == 'qtagg':
358-
from backends.backend_qtagg import FigureCanvasQTAgg as FigureCanvas
359-
elif b == 'qt4agg':
360-
from backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
361-
elif b == 'svg':
362-
from backends.backend_svg import FigureCanvasSVG as FigureCanvas
363-
elif b == 'template':
364-
from backends.backend_template import FigureCanvasTemplate as FigureCanvas
365-
elif b == 'tkagg':
366-
from backends.backend_tkagg import FigureCanvasTkAgg as FigureCanvas
367-
elif b == 'wx':
368-
from backends.backend_wx import FigureCanvasWx as FigureCanvas
369-
elif b == 'wxagg':
370-
from backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
371-
else:
372-
return None
373-
return FigureCanvas(self)
333+
def _setup_canvas(self):
334+
# TODO: docstring
335+
import matplotlib.backends as mbackends
336+
backend_mod = mbackends.pylab_setup()[0]
337+
return backend_mod.FigureCanvas(self)
374338

375339
def _get_axes(self):
376340
return self._axstack.as_list()

0 commit comments

Comments
 (0)
0