forked from 170010011/fr
32 lines
1.0 KiB
Python
32 lines
1.0 KiB
Python
import sys
|
|
|
|
import numpy as np
|
|
|
|
from . import _backend_tk
|
|
from .backend_cairo import cairo, FigureCanvasCairo, RendererCairo
|
|
from ._backend_tk import _BackendTk, FigureCanvasTk
|
|
|
|
|
|
class FigureCanvasTkCairo(FigureCanvasCairo, FigureCanvasTk):
|
|
def __init__(self, *args, **kwargs):
|
|
super(FigureCanvasTkCairo, self).__init__(*args, **kwargs)
|
|
self._renderer = RendererCairo(self.figure.dpi)
|
|
|
|
def draw(self):
|
|
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)
|
|
buf = np.reshape(surface.get_data(), (height, width, 4))
|
|
_backend_tk.blit(
|
|
self._tkphoto, buf,
|
|
(2, 1, 0, 3) if sys.byteorder == "little" else (1, 2, 3, 0))
|
|
self._master.update_idletasks()
|
|
|
|
|
|
@_BackendTk.export
|
|
class _BackendTkCairo(_BackendTk):
|
|
FigureCanvas = FigureCanvasTkCairo
|