48 lines
1.8 KiB
Python
48 lines
1.8 KiB
Python
import wx.lib.wxcairo as wxcairo
|
|
|
|
from .backend_cairo import cairo, FigureCanvasCairo, RendererCairo
|
|
from .backend_wx import (
|
|
_BackendWx, _FigureCanvasWxBase, FigureFrameWx,
|
|
NavigationToolbar2Wx as NavigationToolbar2WxCairo)
|
|
|
|
|
|
class FigureFrameWxCairo(FigureFrameWx):
|
|
def get_canvas(self, fig):
|
|
return FigureCanvasWxCairo(self, -1, fig)
|
|
|
|
|
|
class FigureCanvasWxCairo(_FigureCanvasWxBase, FigureCanvasCairo):
|
|
"""
|
|
The FigureCanvas contains the figure and does event handling.
|
|
|
|
In the wxPython backend, it is derived from wxPanel, and (usually) lives
|
|
inside a frame instantiated by a FigureManagerWx. The parent window
|
|
probably implements a wxSizer to control the displayed control size - but
|
|
we give a hint as to our preferred minimum size.
|
|
"""
|
|
|
|
def __init__(self, parent, id, figure):
|
|
# _FigureCanvasWxBase should be fixed to have the same signature as
|
|
# every other FigureCanvas and use cooperative inheritance, but in the
|
|
# meantime the following will make do.
|
|
_FigureCanvasWxBase.__init__(self, parent, id, figure)
|
|
FigureCanvasCairo.__init__(self, figure)
|
|
self._renderer = RendererCairo(self.figure.dpi)
|
|
|
|
def draw(self, drawDC=None):
|
|
width = int(self.figure.bbox.width)
|
|
height = int(self.figure.bbox.height)
|
|
surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
|
|
self._renderer.set_ctx_from_surface(surface)
|
|
self._renderer.set_width_height(width, height)
|
|
self.figure.draw(self._renderer)
|
|
self.bitmap = wxcairo.BitmapFromImageSurface(surface)
|
|
self._isDrawn = True
|
|
self.gui_repaint(drawDC=drawDC, origin='WXCairo')
|
|
|
|
|
|
@_BackendWx.export
|
|
class _BackendWxCairo(_BackendWx):
|
|
FigureCanvas = FigureCanvasWxCairo
|
|
_frame_class = FigureFrameWxCairo
|