Here I attached diff files of my changes, compared to matplotlib-0.91.2 release.

Gregor Thalhammer
--- Kopie von backend_wx.py     Mon Mar 31 10:28:22 2008
+++ backend_wx.py       Sun Apr  6 10:23:09 2008
@@ -752,11 +752,14 @@
         self._isRealized = False
         self._isConfigured = False
         self._printQued = []
+        self._need_rerender = True
 
         if wx.VERSION_STRING >= '2.5':
             # Event handlers 2.5
             self.Bind(wx.EVT_SIZE, self._onSize)
             self.Bind(wx.EVT_PAINT, self._onPaint)
+            #self.Bind(wx.EVT_ERASE_BACKGROUND, self._onEraseBackground)
+            #self.Bind(wx.EVT_IDLE, self._onIdle)
             self.Bind(wx.EVT_KEY_DOWN, self._onKeyDown)
             self.Bind(wx.EVT_KEY_UP, self._onKeyUp)
             self.Bind(wx.EVT_RIGHT_DOWN, self._onRightButtonDown)
@@ -952,7 +955,8 @@
         self.renderer = RendererWx(self.bitmap, self.figure.dpi)
         self.figure.draw(self.renderer)
         if repaint:
-            self.gui_repaint()
+            self.Refresh()
+            #gui_repaint()
 
     def _get_imagesave_wildcards(self):
         'return the wildcard string for the filesave dialog'
@@ -1067,7 +1071,8 @@
             self.print_figure(fname, dpi, facecolor, edgecolor)
         self._printQued = []
 
-
+    def _onEraseBackground(self, evt):
+        pass
 
     def _onPaint(self, evt):
         """
@@ -1078,12 +1083,22 @@
         if not self._isRealized:
             self.realize()
 
-        # Render to the bitmap
-        #self.draw(repaint=False)
+        #only recreate bitmap if needed
+        if self._need_rerender:
+            self.draw(repaint=False)
+            self._need_rerender = False
+
+        #repaint only damaged parts of window
+        dc = wx.PaintDC(self)
+        source = wx.MemoryDC(self.bitmap)
+        box = self.UpdateRegion.Box
+        dc.Blit(box.X, box.Y, box.Width, box.Height,
+                source,
+                box.X, box.Y)
+        source.SelectObject(wx.NullBitmap) #needed?
 
-        # Update the display using a PaintDC
-        self.gui_repaint(drawDC=wx.PaintDC(self))
-        evt.Skip()
+    def _onIdle(self, evt):
+        print "OnIdle"
 
     def _onSize(self, evt):
         """
--- Kopie von backend_wxagg.py  Fri Jan 11 21:39:09 2008
+++ backend_wxagg.py    Sun Apr  6 11:24:27 2008
@@ -58,42 +58,28 @@
         Render the figure using agg.
         """
         DEBUG_MSG("draw()", 1, self)
+        
         FigureCanvasAgg.draw(self)
 
         self.bitmap = _convert_agg_to_wx_bitmap(self.get_renderer(), None)
         if repaint:
-            self.gui_repaint()
+            self.Refresh(eraseBackground = False)
+            self.Update()
 
     def blit(self, bbox=None):
-        """
-        Transfer the region of the agg buffer defined by bbox to the display.
-        If bbox is None, the entire buffer is transferred.
-        """
+        self.bitmap = _convert_agg_to_wx_bitmap(self.get_renderer(), None)
+        
         if bbox is None:
-            self.bitmap = _convert_agg_to_wx_bitmap(self.get_renderer(), None)
-            self.gui_repaint()
-            return
-
-        l, b, w, h = bbox.get_bounds()
-        r = l + w
-        t = b + h
-        x = int(l)
-        y = int(self.bitmap.GetHeight() - t)
-
-        srcBmp = _convert_agg_to_wx_bitmap(self.get_renderer(), None)
-        srcDC = wx.MemoryDC()
-        srcDC.SelectObject(srcBmp)
-
-        destDC = wx.MemoryDC()
-        destDC.SelectObject(self.bitmap)
-
-        destDC.BeginDrawing()
-        destDC.Blit(x, y, int(w), int(h), srcDC, x, y)
-        destDC.EndDrawing()
-
-        destDC.SelectObject(wx.NullBitmap)
-        srcDC.SelectObject(wx.NullBitmap)
-        self.gui_repaint()
+            self.Refresh(eraseBackground = False)
+        else:
+            l, b, w, h = bbox.get_bounds()
+            x = int(l)
+            y = int(self.bitmap.GetHeight() - (b+h))
+            w = int(w)
+            h = int(h)
+            self.RefreshRect(wx.Rect(x, y, w, h),
+                             eraseBackground = False)
+        self.Update() #needed?
 
     filetypes = FigureCanvasAgg.filetypes
         
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Register now and save $200. Hurry, offer ends at 11:59 p.m., 
Monday, April 7! Use priority code J8TLD2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to