Skip to content

Commit 70939fe

Browse files
committed
split backend_gtkcairo.py into Gcf dependent and independent
parts.
1 parent b099ddd commit 70939fe

File tree

2 files changed

+109
-70
lines changed

2 files changed

+109
-70
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
"""
2+
GTK+ Matplotlib interface using cairo (not GDK) drawing operations.
3+
Author: Steve Chaplin
4+
"""
5+
from __future__ import (absolute_import, division, print_function,
6+
unicode_literals)
7+
8+
import six
9+
10+
import gtk
11+
if gtk.pygtk_version < (2, 7, 0):
12+
import cairo.gtk
13+
14+
from matplotlib.backends import backend_cairo
15+
from ._backend_gtk import (FigureCanvasGTK,
16+
FigureManagerGTK,
17+
NavigationToolbar2GTK,
18+
fn_name
19+
)
20+
21+
import matplotlib
22+
from matplotlib.figure import Figure
23+
24+
backend_version = 'PyGTK(%d.%d.%d) ' % gtk.pygtk_version + \
25+
'Pycairo(%s)' % backend_cairo.backend_version
26+
27+
28+
_debug = False
29+
#_debug = True
30+
31+
32+
def new_figure_manager(num, *args, **kwargs):
33+
"""
34+
Create a new figure manager instance
35+
"""
36+
if _debug:
37+
print('backend_gtkcairo.%s()' % fn_name())
38+
FigureClass = kwargs.pop('FigureClass', Figure)
39+
thisFig = FigureClass(*args, **kwargs)
40+
return new_figure_manager_given_figure(num, thisFig)
41+
42+
43+
def new_figure_manager_given_figure(num, figure):
44+
"""
45+
Create a new figure manager instance for the given figure.
46+
"""
47+
canvas = FigureCanvasGTKCairo(figure)
48+
return FigureManagerGTK(canvas, num)
49+
50+
51+
class RendererGTKCairo (backend_cairo.RendererCairo):
52+
if gtk.pygtk_version >= (2, 7, 0):
53+
def set_pixmap(self, pixmap):
54+
self.gc.ctx = pixmap.cairo_create()
55+
else:
56+
def set_pixmap(self, pixmap):
57+
self.gc.ctx = cairo.gtk.gdk_cairo_create(pixmap)
58+
59+
60+
class FigureCanvasGTKCairo(backend_cairo.FigureCanvasCairo, FigureCanvasGTK):
61+
filetypes = FigureCanvasGTK.filetypes.copy()
62+
filetypes.update(backend_cairo.FigureCanvasCairo.filetypes)
63+
64+
def _renderer_init(self):
65+
"""Override to use cairo (rather than GDK) renderer"""
66+
if _debug:
67+
print('%s.%s()' % (self.__class__.__name__, fn_name()))
68+
self._renderer = RendererGTKCairo(self.figure.dpi)
69+
70+
71+
class NavigationToolbar2GTKCairo(NavigationToolbar2GTK):
72+
def _get_canvas(self, fig):
73+
return FigureCanvasGTKCairo(fig)
74+
75+
76+
class FigureManagerGTKCairo(FigureManagerGTK):
77+
def _get_toolbar(self, canvas):
78+
# must be inited after the window, drawingArea and figure
79+
# attrs are set
80+
if matplotlib.rcParams['toolbar'] == 'toolbar2':
81+
toolbar = NavigationToolbar2GTKCairo(canvas, self.window)
82+
else:
83+
toolbar = None
84+
return toolbar
85+
86+
87+
FigureCanvas = FigureCanvasGTKCairo
88+
FigureManager = FigureManagerGTKCairo

lib/matplotlib/backends/backend_gtkcairo.py

+21-70
Original file line numberDiff line numberDiff line change
@@ -6,76 +6,27 @@
66
unicode_literals)
77

88
import six
9-
10-
import gtk
11-
if gtk.pygtk_version < (2, 7, 0):
12-
import cairo.gtk
13-
14-
from matplotlib.backends import backend_cairo
15-
from matplotlib.backends.backend_gtk import *
16-
17-
backend_version = 'PyGTK(%d.%d.%d) ' % gtk.pygtk_version + \
18-
'Pycairo(%s)' % backend_cairo.backend_version
19-
20-
21-
_debug = False
22-
#_debug = True
23-
24-
25-
def new_figure_manager(num, *args, **kwargs):
26-
"""
27-
Create a new figure manager instance
28-
"""
29-
if _debug:
30-
print('backend_gtkcairo.%s()' % fn_name())
31-
FigureClass = kwargs.pop('FigureClass', Figure)
32-
thisFig = FigureClass(*args, **kwargs)
33-
return new_figure_manager_given_figure(num, thisFig)
34-
35-
36-
def new_figure_manager_given_figure(num, figure):
37-
"""
38-
Create a new figure manager instance for the given figure.
39-
"""
40-
canvas = FigureCanvasGTKCairo(figure)
41-
return FigureManagerGTK(canvas, num)
42-
43-
44-
class RendererGTKCairo (backend_cairo.RendererCairo):
45-
if gtk.pygtk_version >= (2, 7, 0):
46-
def set_pixmap(self, pixmap):
47-
self.gc.ctx = pixmap.cairo_create()
48-
else:
49-
def set_pixmap(self, pixmap):
50-
self.gc.ctx = cairo.gtk.gdk_cairo_create(pixmap)
51-
52-
53-
class FigureCanvasGTKCairo(backend_cairo.FigureCanvasCairo, FigureCanvasGTK):
54-
filetypes = FigureCanvasGTK.filetypes.copy()
55-
filetypes.update(backend_cairo.FigureCanvasCairo.filetypes)
56-
57-
def _renderer_init(self):
58-
"""Override to use cairo (rather than GDK) renderer"""
59-
if _debug:
60-
print('%s.%s()' % (self.__class__.__name__, _fn_name()))
61-
self._renderer = RendererGTKCairo(self.figure.dpi)
62-
63-
64-
class FigureManagerGTKCairo(FigureManagerGTK):
65-
def _get_toolbar(self, canvas):
66-
# must be inited after the window, drawingArea and figure
67-
# attrs are set
68-
if matplotlib.rcParams['toolbar'] == 'toolbar2':
69-
toolbar = NavigationToolbar2GTKCairo(canvas, self.window)
70-
else:
71-
toolbar = None
72-
return toolbar
73-
74-
75-
class NavigationToolbar2Cairo(NavigationToolbar2GTK):
76-
def _get_canvas(self, fig):
77-
return FigureCanvasGTKCairo(fig)
78-
9+
from matplotlib._pylab_helpers import Gcf
10+
11+
# import the gcg contaminated parts
12+
from .backend_gtk import (show,
13+
draw_if_interactive,
14+
_gtk_cleanup,
15+
key_press_handler)
16+
17+
from ._backend_gtkcairo import (gtk,
18+
new_figure_manager,
19+
new_figure_manager_given_figure,
20+
RendererGTKCairo,
21+
FigureCanvasGTKCairo,
22+
FigureManagerGTKCairo,
23+
NavigationToolbar2GTKCairo,
24+
backend_version)
7925

8026
FigureCanvas = FigureCanvasGTKCairo
8127
FigureManager = FigureManagerGTKCairo
28+
29+
# set the call backs
30+
FigureManager._key_press_handler = staticmethod(key_press_handler)
31+
FigureManager._destroy_callback = staticmethod(Gcf.destroy)
32+
FigureManager._gtk_cleanup = staticmethod(_gtk_cleanup)

0 commit comments

Comments
 (0)