QGraphicsSvgItem whose local origin matches SVG coordinate (0,0). boundingRect() returns viewBoxF() so the origin equals the SVG's (0,0). paint() calls renderer.render() directly because the C++ vtable does not dispatch to the Python override of boundingRect().
| 434 | |
| 435 | |
| 436 | class _ViewBoxSvgItem(QGraphicsSvgItem): |
| 437 | """ |
| 438 | QGraphicsSvgItem whose local origin matches SVG coordinate (0,0). |
| 439 | |
| 440 | boundingRect() returns viewBoxF() so the origin equals the SVG's (0,0). |
| 441 | paint() calls renderer.render() directly because the C++ vtable does not |
| 442 | dispatch to the Python override of boundingRect(). |
| 443 | """ |
| 444 | |
| 445 | def __init__(self, svg_bytes: bytes): |
| 446 | super().__init__() |
| 447 | self._renderer = QSvgRenderer(QByteArray(_apply_symbol_colors(svg_bytes))) |
| 448 | self.setSharedRenderer(self._renderer) |
| 449 | |
| 450 | def boundingRect(self): |
| 451 | return self._renderer.viewBoxF() |
| 452 | |
| 453 | def paint(self, painter, option, widget=None): |
| 454 | painter.setRenderHint(QPainter.Antialiasing) |
| 455 | self._renderer.render(painter, self._renderer.viewBoxF()) |
| 456 | |
| 457 | |
| 458 | def make_ghost(svg_bytes: bytes) -> _ViewBoxSvgItem: |