| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- import numpy as np
- from .. import cbook
- from . import backend_agg, backend_gtk4
- from .backend_gtk4 import GLib, Gtk, _BackendGTK4
- import cairo # Presence of cairo is already checked by _backend_gtk.
- class FigureCanvasGTK4Agg(backend_agg.FigureCanvasAgg,
- backend_gtk4.FigureCanvasGTK4):
- def on_draw_event(self, widget, ctx):
- if self._idle_draw_id:
- GLib.source_remove(self._idle_draw_id)
- self._idle_draw_id = 0
- self.draw()
- scale = self.device_pixel_ratio
- allocation = self.get_allocation()
- Gtk.render_background(
- self.get_style_context(), ctx,
- allocation.x, allocation.y,
- allocation.width, allocation.height)
- buf = cbook._unmultiplied_rgba8888_to_premultiplied_argb32(
- np.asarray(self.get_renderer().buffer_rgba()))
- height, width, _ = buf.shape
- image = cairo.ImageSurface.create_for_data(
- buf.ravel().data, cairo.FORMAT_ARGB32, width, height)
- image.set_device_scale(scale, scale)
- ctx.set_source_surface(image, 0, 0)
- ctx.paint()
- return False
- @_BackendGTK4.export
- class _BackendGTK4Agg(_BackendGTK4):
- FigureCanvas = FigureCanvasGTK4Agg
|