| 266 | self._ok_btn.setEnabled(False) |
| 267 | |
| 268 | def _show_svg(self, svg_bytes: bytes) -> None: |
| 269 | from PySide6.QtSvg import QSvgRenderer |
| 270 | from PySide6.QtCore import QByteArray |
| 271 | renderer = QSvgRenderer(QByteArray(svg_bytes)) |
| 272 | if not renderer.isValid(): |
| 273 | self._preview_lbl.setText("(invalid SVG)") |
| 274 | return |
| 275 | vb = renderer.viewBoxF() |
| 276 | sw = vb.width() if vb.width() > 0 else renderer.defaultSize().width() |
| 277 | sh = vb.height() if vb.height() > 0 else renderer.defaultSize().height() |
| 278 | if sw <= 0 or sh <= 0: |
| 279 | self._preview_lbl.setText("(empty SVG)") |
| 280 | return |
| 281 | scale = min(self._PREVIEW_MAX_W / sw, self._PREVIEW_MAX_H / sh, 3.0) |
| 282 | pw, ph = max(1, int(sw * scale)), max(1, int(sh * scale)) |
| 283 | px = QPixmap(pw, ph) |
| 284 | px.fill(Qt.white) |
| 285 | p = QPainter(px) |
| 286 | renderer.render(p) |
| 287 | p.end() |
| 288 | self._preview_lbl.setPixmap(px) |
| 289 | |
| 290 | def _compute_natural_size(self, svg_bytes: bytes) -> None: |
| 291 | """Compute the baseline (100 %) width/height in scene units from SVG.""" |