3
3
"""
4
4
from __future__ import division
5
5
6
- import os , sys
7
- from matplotlib import verbose
8
- from matplotlib .cbook import enumerate
6
+ import os
9
7
from matplotlib .figure import Figure
10
8
11
9
from backend_agg import FigureCanvasAgg
16
14
from _gtkagg import agg_to_gtk_drawable
17
15
18
16
19
- DEBUG = 0
17
+ DEBUG = False
20
18
21
19
22
20
def new_figure_manager (num , * args , ** kwargs ):
@@ -28,26 +26,53 @@ def new_figure_manager(num, *args, **kwargs):
28
26
canvas = FigureCanvasGTKAgg (thisFig )
29
27
return FigureManagerGTK (canvas , num )
30
28
29
+
31
30
class FigureCanvasGTKAgg (FigureCanvasGTK , FigureCanvasAgg ):
32
31
33
- def draw (self ):
34
- """
35
- Draw to the Agg backend and then copy the image to the
36
- gtk.gdk.drawable.
32
+ def configure_event (self , widget , event = None ):
33
+ if DEBUG : print 'FigureCanvasGTKAgg.configure_event'
34
+ if widget .window is None :
35
+ return
36
+ try :
37
+ del self .renderer
38
+ except AttributeError :
39
+ pass
40
+ w ,h = widget .window .get_size ()
41
+ if w == 1 or h == 1 : return # empty fig
42
+
43
+ # compute desired figure size in inches
44
+ dpival = self .figure .dpi .get ()
45
+ winch = w / dpival
46
+ hinch = h / dpival
47
+ self .figure .set_figsize_inches (winch , hinch )
48
+ self ._draw_pixmap = True
49
+
50
+ if DEBUG : print 'FigureCanvasGTKAgg.configure_event end'
51
+ return True
52
+
37
53
54
+ def _render_figure (self , width , height ):
55
+ """Render the figure to a gdk.Pixmap, used by expose_event().
38
56
"""
39
- if DEBUG : print 'FigureCanvasGTKAgg.draw'
40
-
57
+ if DEBUG : print 'FigureCanvasGTKAgg._render_figure'
58
+ create_pixmap = False
59
+ if width > self ._pixmap_width :
60
+ # increase the pixmap in 10%+ (rather than 1 pixel) steps
61
+ self ._pixmap_width = max (int (self ._pixmap_width * 1.1 ), width )
62
+ create_pixmap = True
63
+
64
+ if height > self ._pixmap_height :
65
+ self ._pixmap_height = max (int (self ._pixmap_height * 1.1 ), height )
66
+ create_pixmap = True
67
+
68
+ if create_pixmap :
69
+ if DEBUG : print 'FigureCanvasGTK._render_figure new pixmap'
70
+ self ._pixmap = gtk .gdk .Pixmap (self .window , self ._pixmap_width ,
71
+ self ._pixmap_height )
72
+
41
73
FigureCanvasAgg .draw (self )
42
- if self .window is None :
43
- return
44
- else :
45
- self .blit ()
46
-
74
+ agg_to_gtk_drawable (self ._pixmap , self .renderer ._renderer )
47
75
48
- def blit (self ):
49
- if self .window is None : return
50
- agg_to_gtk_drawable (self .window , self .renderer ._renderer )
51
76
52
77
def print_figure (self , filename , dpi = 150 ,
53
78
facecolor = 'w' , edgecolor = 'w' ,
@@ -68,37 +93,3 @@ def print_figure(self, filename, dpi=150,
68
93
error_msg_gtk ('Failed to save\n Error message: %s' % (msg ,), self )
69
94
70
95
self .figure .set_canvas (self )
71
-
72
-
73
- def configure_event (self , widget , event = None ):
74
- if DEBUG : print 'FigureCanvasGTKAgg.configure_event'
75
- if widget .window is None : return
76
- try : del self .renderer
77
- except AttributeError : pass
78
- w ,h = widget .window .get_size ()
79
- if w == 1 or h == 1 : return # empty fig
80
-
81
- # compute desired figure size in inches
82
- dpival = self .figure .dpi .get ()
83
- winch = w / dpival
84
- hinch = h / dpival
85
-
86
- self .figure .set_figsize_inches (winch , hinch )
87
-
88
- return gtk .TRUE
89
-
90
- def expose_event (self , widget , event ):
91
- if DEBUG : print 'FigureCanvasGTKAgg.expose_event'
92
- if widget .window is None : return
93
-
94
- def callback (w ):
95
- if hasattr (self , 'renderer' ): self .blit ()
96
- else : self .draw ()
97
- self ._idleID = 0
98
- return gtk .FALSE
99
-
100
- if self ._idleID == 0 :
101
- self ._idleID = gtk .idle_add (callback , self )
102
-
103
-
104
- return gtk .TRUE
0 commit comments