33"""
44from __future__ import division
55
6- import os , sys
7- from matplotlib import verbose
8- from matplotlib .cbook import enumerate
6+ import os
97from matplotlib .figure import Figure
108
119from backend_agg import FigureCanvasAgg
1614from _gtkagg import agg_to_gtk_drawable
1715
1816
19- DEBUG = 0
17+ DEBUG = False
2018
2119
2220def new_figure_manager (num , * args , ** kwargs ):
@@ -28,26 +26,53 @@ def new_figure_manager(num, *args, **kwargs):
2826 canvas = FigureCanvasGTKAgg (thisFig )
2927 return FigureManagerGTK (canvas , num )
3028
29+
3130class FigureCanvasGTKAgg (FigureCanvasGTK , FigureCanvasAgg ):
3231
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+
3753
54+ def _render_figure (self , width , height ):
55+ """Render the figure to a gdk.Pixmap, used by expose_event().
3856 """
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+
4173 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 )
4775
48- def blit (self ):
49- if self .window is None : return
50- agg_to_gtk_drawable (self .window , self .renderer ._renderer )
5176
5277 def print_figure (self , filename , dpi = 150 ,
5378 facecolor = 'w' , edgecolor = 'w' ,
@@ -68,37 +93,3 @@ def print_figure(self, filename, dpi=150,
6893 error_msg_gtk ('Failed to save\n Error message: %s' % (msg ,), self )
6994
7095 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