backend_wxagg.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import wx
  2. from .backend_agg import FigureCanvasAgg
  3. from .backend_wx import _BackendWx, _FigureCanvasWxBase
  4. from .backend_wx import ( # noqa: F401 # pylint: disable=W0611
  5. NavigationToolbar2Wx as NavigationToolbar2WxAgg)
  6. class FigureCanvasWxAgg(FigureCanvasAgg, _FigureCanvasWxBase):
  7. def draw(self, drawDC=None):
  8. """
  9. Render the figure using agg.
  10. """
  11. FigureCanvasAgg.draw(self)
  12. self.bitmap = self._create_bitmap()
  13. self._isDrawn = True
  14. self.gui_repaint(drawDC=drawDC)
  15. def blit(self, bbox=None):
  16. # docstring inherited
  17. bitmap = self._create_bitmap()
  18. if bbox is None:
  19. self.bitmap = bitmap
  20. else:
  21. srcDC = wx.MemoryDC(bitmap)
  22. destDC = wx.MemoryDC(self.bitmap)
  23. x = int(bbox.x0)
  24. y = int(self.bitmap.GetHeight() - bbox.y1)
  25. destDC.Blit(x, y, int(bbox.width), int(bbox.height), srcDC, x, y)
  26. destDC.SelectObject(wx.NullBitmap)
  27. srcDC.SelectObject(wx.NullBitmap)
  28. self.gui_repaint()
  29. def _create_bitmap(self):
  30. """Create a wx.Bitmap from the renderer RGBA buffer"""
  31. rgba = self.get_renderer().buffer_rgba()
  32. h, w, _ = rgba.shape
  33. bitmap = wx.Bitmap.FromBufferRGBA(w, h, rgba)
  34. bitmap.SetScaleFactor(self.GetDPIScaleFactor())
  35. return bitmap
  36. @_BackendWx.export
  37. class _BackendWxAgg(_BackendWx):
  38. FigureCanvas = FigureCanvasWxAgg