Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ce7c2ac

Browse files
committed
split backend_gktagg.py in to two parts
_backend_gtkagg.py has no dependence on `Gcf`, backend_gtkagg.py depends on `Gcf` and maintains reverse compatibility.
1 parent 87781c5 commit ce7c2ac

File tree

2 files changed

+147
-118
lines changed

2 files changed

+147
-118
lines changed
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
"""
2+
Render to gtk from agg
3+
"""
4+
from __future__ import (absolute_import, division, print_function,
5+
unicode_literals)
6+
7+
import six
8+
9+
import os
10+
11+
import matplotlib
12+
from matplotlib.figure import Figure
13+
from matplotlib.backends.backend_agg import FigureCanvasAgg
14+
from ._backend_gtk import (gtk,
15+
FigureManagerGTK, FigureCanvasGTK,
16+
error_msg_gtk, PIXELS_PER_INCH,
17+
backend_version,
18+
NavigationToolbar2GTK)
19+
from matplotlib.backends._gtkagg import agg_to_gtk_drawable
20+
21+
22+
DEBUG = False
23+
24+
25+
class NavigationToolbar2GTKAgg(NavigationToolbar2GTK):
26+
def _get_canvas(self, fig):
27+
return FigureCanvasGTKAgg(fig)
28+
29+
30+
class FigureManagerGTKAgg(FigureManagerGTK):
31+
def _get_toolbar(self, canvas):
32+
# must be inited after the window, drawingArea and figure
33+
# attrs are set
34+
if matplotlib.rcParams['toolbar'] == 'toolbar2':
35+
toolbar = NavigationToolbar2GTKAgg(canvas, self.window)
36+
else:
37+
toolbar = None
38+
return toolbar
39+
40+
41+
def new_figure_manager(num, *args, **kwargs):
42+
"""
43+
Create a new figure manager instance
44+
"""
45+
if DEBUG:
46+
print('backend_gtkagg.new_figure_manager')
47+
FigureClass = kwargs.pop('FigureClass', Figure)
48+
thisFig = FigureClass(*args, **kwargs)
49+
return new_figure_manager_given_figure(num, thisFig)
50+
51+
52+
def new_figure_manager_given_figure(num, figure):
53+
"""
54+
Create a new figure manager instance for the given figure.
55+
"""
56+
canvas = FigureCanvasGTKAgg(figure)
57+
return FigureManagerGTKAgg(canvas, num)
58+
if DEBUG:
59+
print('backend_gtkagg.new_figure_manager done')
60+
61+
62+
class FigureCanvasGTKAgg(FigureCanvasGTK, FigureCanvasAgg):
63+
filetypes = FigureCanvasGTK.filetypes.copy()
64+
filetypes.update(FigureCanvasAgg.filetypes)
65+
66+
def configure_event(self, widget, event=None):
67+
if DEBUG:
68+
print('FigureCanvasGTKAgg.configure_event')
69+
if widget.window is None:
70+
return
71+
try:
72+
del self.renderer
73+
except AttributeError:
74+
pass
75+
w, h = widget.window.get_size()
76+
if w == 1 or h == 1:
77+
return # empty fig
78+
79+
# compute desired figure size in inches
80+
dpival = self.figure.dpi
81+
winch = w/dpival
82+
hinch = h/dpival
83+
self.figure.set_size_inches(winch, hinch)
84+
self._need_redraw = True
85+
self.resize_event()
86+
if DEBUG:
87+
print('FigureCanvasGTKAgg.configure_event end')
88+
return True
89+
90+
def _render_figure(self, pixmap, width, height):
91+
if DEBUG:
92+
print('FigureCanvasGTKAgg.render_figure')
93+
FigureCanvasAgg.draw(self)
94+
if DEBUG:
95+
print('FigureCanvasGTKAgg.render_figure pixmap', pixmap)
96+
#agg_to_gtk_drawable(pixmap, self.renderer._renderer, None)
97+
98+
buf = self.buffer_rgba()
99+
ren = self.get_renderer()
100+
w = int(ren.width)
101+
h = int(ren.height)
102+
103+
pixbuf = gtk.gdk.pixbuf_new_from_data(
104+
buf, gtk.gdk.COLORSPACE_RGB, True, 8, w, h, w*4)
105+
pixmap.draw_pixbuf(pixmap.new_gc(), pixbuf, 0, 0, 0, 0, w, h,
106+
gtk.gdk.RGB_DITHER_NONE, 0, 0)
107+
if DEBUG:
108+
print('FigureCanvasGTKAgg.render_figure done')
109+
110+
def blit(self, bbox=None):
111+
if DEBUG:
112+
print('FigureCanvasGTKAgg.blit', self._pixmap)
113+
agg_to_gtk_drawable(self._pixmap, self.renderer._renderer, bbox)
114+
115+
x, y, w, h = self.allocation
116+
117+
self.window.draw_drawable(self.style.fg_gc[self.state], self._pixmap,
118+
0, 0, 0, 0, w, h)
119+
if DEBUG:
120+
print('FigureCanvasGTKAgg.done')
121+
122+
def print_png(self, filename, *args, **kwargs):
123+
# Do this so we can save the resolution of figure in the PNG file
124+
agg = self.switch_backends(FigureCanvasAgg)
125+
return agg.print_png(filename, *args, **kwargs)
126+
127+
128+
FigureCanvas = FigureCanvasGTKAgg
129+
FigureManager = FigureManagerGTKAgg

lib/matplotlib/backends/backend_gtkagg.py

Lines changed: 18 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -3,128 +3,28 @@
33
"""
44
from __future__ import (absolute_import, division, print_function,
55
unicode_literals)
6-
76
import six
87

9-
import os
10-
11-
import matplotlib
12-
from matplotlib.figure import Figure
13-
from matplotlib.backends.backend_agg import FigureCanvasAgg
14-
from matplotlib.backends.backend_gtk import (gtk,
15-
FigureManagerGTK, FigureCanvasGTK,
16-
show, draw_if_interactive,
17-
error_msg_gtk, PIXELS_PER_INCH,
18-
backend_version,
19-
NavigationToolbar2GTK)
20-
from matplotlib.backends._gtkagg import agg_to_gtk_drawable
21-
22-
23-
DEBUG = False
24-
25-
26-
class NavigationToolbar2GTKAgg(NavigationToolbar2GTK):
27-
def _get_canvas(self, fig):
28-
return FigureCanvasGTKAgg(fig)
29-
30-
31-
class FigureManagerGTKAgg(FigureManagerGTK):
32-
def _get_toolbar(self, canvas):
33-
# must be inited after the window, drawingArea and figure
34-
# attrs are set
35-
if matplotlib.rcParams['toolbar'] == 'toolbar2':
36-
toolbar = NavigationToolbar2GTKAgg(canvas, self.window)
37-
else:
38-
toolbar = None
39-
return toolbar
40-
41-
42-
def new_figure_manager(num, *args, **kwargs):
43-
"""
44-
Create a new figure manager instance
45-
"""
46-
if DEBUG:
47-
print('backend_gtkagg.new_figure_manager')
48-
FigureClass = kwargs.pop('FigureClass', Figure)
49-
thisFig = FigureClass(*args, **kwargs)
50-
return new_figure_manager_given_figure(num, thisFig)
51-
52-
53-
def new_figure_manager_given_figure(num, figure):
54-
"""
55-
Create a new figure manager instance for the given figure.
56-
"""
57-
canvas = FigureCanvasGTKAgg(figure)
58-
return FigureManagerGTKAgg(canvas, num)
59-
if DEBUG:
60-
print('backend_gtkagg.new_figure_manager done')
8+
from matplotlib._pylab_helpers import Gcf
9+
# import the Gcf free parts
10+
from ._backend_gtkagg import (gtk,
11+
FigureCanvasGTKAgg,
12+
FigureManagerGTKAgg,
13+
NavigationToolbar2GTKAgg,
14+
new_figure_manager,
15+
new_figure_manager_given_figure)
6116

62-
63-
class FigureCanvasGTKAgg(FigureCanvasGTK, FigureCanvasAgg):
64-
filetypes = FigureCanvasGTK.filetypes.copy()
65-
filetypes.update(FigureCanvasAgg.filetypes)
66-
67-
def configure_event(self, widget, event=None):
68-
if DEBUG:
69-
print('FigureCanvasGTKAgg.configure_event')
70-
if widget.window is None:
71-
return
72-
try:
73-
del self.renderer
74-
except AttributeError:
75-
pass
76-
w, h = widget.window.get_size()
77-
if w == 1 or h == 1:
78-
return # empty fig
79-
80-
# compute desired figure size in inches
81-
dpival = self.figure.dpi
82-
winch = w/dpival
83-
hinch = h/dpival
84-
self.figure.set_size_inches(winch, hinch)
85-
self._need_redraw = True
86-
self.resize_event()
87-
if DEBUG:
88-
print('FigureCanvasGTKAgg.configure_event end')
89-
return True
90-
91-
def _render_figure(self, pixmap, width, height):
92-
if DEBUG:
93-
print('FigureCanvasGTKAgg.render_figure')
94-
FigureCanvasAgg.draw(self)
95-
if DEBUG:
96-
print('FigureCanvasGTKAgg.render_figure pixmap', pixmap)
97-
#agg_to_gtk_drawable(pixmap, self.renderer._renderer, None)
98-
99-
buf = self.buffer_rgba()
100-
ren = self.get_renderer()
101-
w = int(ren.width)
102-
h = int(ren.height)
103-
104-
pixbuf = gtk.gdk.pixbuf_new_from_data(
105-
buf, gtk.gdk.COLORSPACE_RGB, True, 8, w, h, w*4)
106-
pixmap.draw_pixbuf(pixmap.new_gc(), pixbuf, 0, 0, 0, 0, w, h,
107-
gtk.gdk.RGB_DITHER_NONE, 0, 0)
108-
if DEBUG:
109-
print('FigureCanvasGTKAgg.render_figure done')
110-
111-
def blit(self, bbox=None):
112-
if DEBUG:
113-
print('FigureCanvasGTKAgg.blit', self._pixmap)
114-
agg_to_gtk_drawable(self._pixmap, self.renderer._renderer, bbox)
115-
116-
x, y, w, h = self.allocation
117-
118-
self.window.draw_drawable(self.style.fg_gc[self.state], self._pixmap,
119-
0, 0, 0, 0, w, h)
120-
if DEBUG:
121-
print('FigureCanvasGTKAgg.done')
122-
123-
def print_png(self, filename, *args, **kwargs):
124-
# Do this so we can save the resolution of figure in the PNG file
125-
agg = self.switch_backends(FigureCanvasAgg)
126-
return agg.print_png(filename, *args, **kwargs)
17+
# import the gcg contaminated parts
18+
from .backend_gtk import (show,
19+
draw_if_interactive,
20+
_gtk_cleanup,
21+
key_press_handler)
12722

12823

12924
FigureCanvas = FigureCanvasGTKAgg
13025
FigureManager = FigureManagerGTKAgg
26+
27+
# set the call backs
28+
FigureManager._key_press_handler = staticmethod(key_press_handler)
29+
FigureManager._destroy_callback = staticmethod(Gcf.destroy)
30+
FigureManager._gtk_cleanup = staticmethod(_gtk_cleanup)

0 commit comments

Comments
 (0)