@@ -67,36 +67,47 @@ def paintEvent( self, e ):
6767 shown onscreen.
6868 """
6969
70- FigureCanvasQT .paintEvent ( self , e )
70+ # FigureCanvasQT.paintEvent( self, e )
7171 if DEBUG : print 'FigureCanvasQtAgg.paintEvent: ' , \
7272 self .get_width_height ()
7373
7474 p = QtGui .QPainter ( self )
75- FigureCanvasAgg .draw ( self )
7675
7776 # only replot data when needed
78- if ( self .replot ):
79- stringBuffer = str ( self .buffer_rgba (0 ,0 ) )
80-
81-
82- # matplotlib is in rgba byte order.
83- # qImage wants to put the bytes into argb format and
84- # is in a 4 byte unsigned int. little endian system is LSB first
85- # and expects the bytes in reverse order (bgra).
86- if ( QtCore .QSysInfo .ByteOrder == QtCore .QSysInfo .LittleEndian ):
87- stringBuffer = self .renderer ._renderer .tostring_bgra ()
88- else :
89- stringBuffer = self .renderer ._renderer .tostring_argb ()
90- qImage = QtGui .QImage ( stringBuffer , self .renderer .width ,
91- self .renderer .height ,
92- QtGui .QImage .Format_ARGB32 )
77+ if type (self .replot ) is bool : # might be a bbox for blitting
78+ if ( self .replot ):
79+ #stringBuffer = str( self.buffer_rgba(0,0) )
80+ FigureCanvasAgg .draw ( self )
81+
82+ # matplotlib is in rgba byte order.
83+ # qImage wants to put the bytes into argb format and
84+ # is in a 4 byte unsigned int. little endian system is LSB first
85+ # and expects the bytes in reverse order (bgra).
86+ if ( QtCore .QSysInfo .ByteOrder == QtCore .QSysInfo .LittleEndian ):
87+ stringBuffer = self .renderer ._renderer .tostring_bgra ()
88+ else :
89+ stringBuffer = self .renderer ._renderer .tostring_argb ()
90+ qImage = QtGui .QImage ( stringBuffer , self .renderer .width ,
91+ self .renderer .height ,
92+ QtGui .QImage .Format_ARGB32 )
93+ self .pixmap = self .pixmap .fromImage ( qImage )
94+ p .drawPixmap ( QtCore .QPoint ( 0 , 0 ), self .pixmap )
95+
96+ # draw the zoom rectangle to the QPainter
97+ if ( self .drawRect ):
98+ p .setPen ( QtGui .QPen ( QtCore .Qt .black , 1 , QtCore .Qt .DotLine ) )
99+ p .drawRect ( self .rect [0 ], self .rect [1 ], self .rect [2 ], self .rect [3 ] )
100+
101+ # we are blitting here
102+ else :
103+ bbox = self .replot
104+ w , h = int (bbox .width ()), int (bbox .height ())
105+ l , t = bbox .ll ().x ().get (), bbox .ur ().y ().get ()
106+ reg = self .copy_from_bbox (bbox )
107+ stringBuffer = reg .to_string ()
108+ qImage = QtGui .QImage (stringBuffer , w , h , QtGui .QImage .Format_ARGB32 )
93109 self .pixmap = self .pixmap .fromImage ( qImage )
94- p .drawPixmap ( QtCore .QPoint ( 0 , 0 ), self .pixmap )
95-
96- # draw the zoom rectangle to the QPainter
97- if ( self .drawRect ):
98- p .setPen ( QtGui .QPen ( QtCore .Qt .black , 1 , QtCore .Qt .DotLine ) )
99- p .drawRect ( self .rect [0 ], self .rect [1 ], self .rect [2 ], self .rect [3 ] )
110+ p .drawPixmap (QtCore .QPoint (l , self .renderer .height - t ), self .pixmap )
100111
101112 p .end ()
102113 self .replot = False
@@ -109,7 +120,17 @@ def draw( self ):
109120
110121 if DEBUG : print "FigureCanvasQtAgg.draw"
111122 self .replot = True
112- self .repaint ( )
123+ self .update ( )
124+
125+ def blit (self , bbox = None ):
126+ """
127+ Blit the region in bbox
128+ """
129+
130+ self .replot = bbox
131+ w , h = int (bbox .width ()), int (bbox .height ())
132+ l , t = bbox .ll ().x ().get (), bbox .ur ().y ().get ()
133+ self .update (l , self .renderer .height - t , w , h )
113134
114135 def print_figure ( self , filename , dpi = 150 , facecolor = 'w' , edgecolor = 'w' ,
115136 orientation = 'portrait' , ** kwargs ):
0 commit comments