Revision: 8922
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8922&view=rev
Author: efiring
Date: 2011-01-17 07:13:37 +0000 (Mon, 17 Jan 2011)
Log Message:
-----------
backend_qt4agg: eliminate duplicate call to FigureCanvasAgg.draw()
The basic problem is that the most efficient way to eliminate the
duplication appears to be to do the Agg drawing in the paintEvent,
not in draw(); but then a draw() followed by copy_from_bbox may
result in a copy being made before the Agg draw has occurred.
The solution here is to do that drawing inside copy_from_bbox
when necessary.
Side note: it seems that by using the update() method, the
qt4agg draw() is acting more like draw_idle() than like the draw()
methods in the other interactive backends.
Modified Paths:
--------------
trunk/matplotlib/lib/matplotlib/backends/backend_qt4agg.py
Modified: trunk/matplotlib/lib/matplotlib/backends/backend_qt4agg.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/backends/backend_qt4agg.py 2011-01-16 01:09:08 UTC (rev 8921)
+++ trunk/matplotlib/lib/matplotlib/backends/backend_qt4agg.py 2011-01-17 07:13:37 UTC (rev 8922)
@@ -110,7 +110,7 @@
w = int(r) - int(l)
h = int(t) - int(b)
t = int(b) + h
- reg = self.copy_from_bbox(bbox)
+ reg = FigureCanvasAgg.copy_from_bbox(self, bbox)
stringBuffer = reg.to_string_argb()
qImage = QtGui.QImage(stringBuffer, w, h, QtGui.QImage.Format_ARGB32)
pixmap = QtGui.QPixmap.fromImage(qImage)
@@ -127,7 +127,6 @@
if DEBUG: print "FigureCanvasQtAgg.draw", self
self.replot = True
- FigureCanvasAgg.draw(self)
self.update()
def blit(self, bbox=None):
@@ -140,6 +139,16 @@
t = b + h
self.repaint(l, self.renderer.height-t, w, h)
+ def copy_from_bbox(self, *args):
+ """
+ If a draw() has been called but the update() has not
+ occurred, draw into the agg canvas before copying.
+ """
+ if self.replot:
+ FigureCanvasAgg.draw(self)
+ self.replot = False
+ return FigureCanvasAgg.copy_from_bbox(self, *args)
+
def print_figure(self, *args, **kwargs):
FigureCanvasAgg.print_figure(self, *args, **kwargs)
self.draw()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|