You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
import ctypes
 | 
						|
 | 
						|
from .backend_cairo import cairo, FigureCanvasCairo
 | 
						|
from .backend_qt import _BackendQT, FigureCanvasQT
 | 
						|
from .qt_compat import QT_API, QtCore, QtGui
 | 
						|
 | 
						|
 | 
						|
class FigureCanvasQTCairo(FigureCanvasCairo, FigureCanvasQT):
 | 
						|
    def draw(self):
 | 
						|
        if hasattr(self._renderer.gc, "ctx"):
 | 
						|
            self._renderer.dpi = self.figure.dpi
 | 
						|
            self.figure.draw(self._renderer)
 | 
						|
        super().draw()
 | 
						|
 | 
						|
    def paintEvent(self, event):
 | 
						|
        width = int(self.device_pixel_ratio * self.width())
 | 
						|
        height = int(self.device_pixel_ratio * self.height())
 | 
						|
        if (width, height) != self._renderer.get_canvas_width_height():
 | 
						|
            surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height)
 | 
						|
            self._renderer.set_context(cairo.Context(surface))
 | 
						|
            self._renderer.dpi = self.figure.dpi
 | 
						|
            self.figure.draw(self._renderer)
 | 
						|
        buf = self._renderer.gc.ctx.get_target().get_data()
 | 
						|
        if QT_API == "PyQt6":
 | 
						|
            from PyQt6 import sip
 | 
						|
            ptr = int(sip.voidptr(buf))
 | 
						|
        else:
 | 
						|
            ptr = buf
 | 
						|
        qimage = QtGui.QImage(
 | 
						|
            ptr, width, height,
 | 
						|
            QtGui.QImage.Format.Format_ARGB32_Premultiplied)
 | 
						|
        # Adjust the buf reference count to work around a memory leak bug in
 | 
						|
        # QImage under PySide.
 | 
						|
        if QT_API == "PySide2" and QtCore.__version_info__ < (5, 12):
 | 
						|
            ctypes.c_long.from_address(id(buf)).value = 1
 | 
						|
        qimage.setDevicePixelRatio(self.device_pixel_ratio)
 | 
						|
        painter = QtGui.QPainter(self)
 | 
						|
        painter.eraseRect(event.rect())
 | 
						|
        painter.drawImage(0, 0, qimage)
 | 
						|
        self._draw_rect_callback(painter)
 | 
						|
        painter.end()
 | 
						|
 | 
						|
 | 
						|
@_BackendQT.export
 | 
						|
class _BackendQTCairo(_BackendQT):
 | 
						|
    FigureCanvas = FigureCanvasQTCairo
 |