mirror of
https://github.com/rbreu/beeref.git
synced 2026-03-11 08:54:28 +00:00
Export scene: Fix scale/margins when scene has been scaled/moved (#83)
This commit is contained in:
parent
6f6afa3d8c
commit
310ca140e0
2 changed files with 20 additions and 13 deletions
|
|
@ -36,13 +36,15 @@ class SceneToPixmapExporter:
|
|||
# Selection outlines/handles will be rendered to the exported
|
||||
# image, so deselect first. (Alternatively, pass an attribute
|
||||
# to paint functions to not paint them?)
|
||||
rect = scene.itemsBoundingRect()
|
||||
rect = self.scene.itemsBoundingRect()
|
||||
logger.trace(f'Items bounding rect: {rect}')
|
||||
size = QtCore.QSize(int(rect.width()), int(rect.height()))
|
||||
logger.trace(f'Export size without margins: {size}')
|
||||
self.margin = max(size.width(), size.height()) * 0.03
|
||||
self.default_size = size.grownBy(
|
||||
QtCore.QMargins(*([int(self.margin)] * 4)))
|
||||
logger.debug(f'Default export size: {self.default_size}')
|
||||
logger.debug(f'Default export margin: {self.margin}')
|
||||
logger.debug(f'Default export size with margins: {self.default_size}')
|
||||
|
||||
def render_to_image(self, size):
|
||||
logger.debug(f'Final export size: {size}')
|
||||
|
|
@ -52,12 +54,15 @@ class SceneToPixmapExporter:
|
|||
image = QtGui.QImage(size, QtGui.QImage.Format.Format_RGB32)
|
||||
image.fill(QtGui.QColor(*constants.COLORS['Scene:Canvas']))
|
||||
painter = QtGui.QPainter(image)
|
||||
painter.setViewport(QtCore.QRect(
|
||||
int(margin),
|
||||
int(margin),
|
||||
int(size.width() - 2 * margin),
|
||||
int(size.height() - 2 * margin)))
|
||||
self.scene.render(painter)
|
||||
target_rect = QtCore.QRectF(
|
||||
margin,
|
||||
margin,
|
||||
size.width() - 2 * margin,
|
||||
size.height() - 2 * margin)
|
||||
logger.trace(f'Final export target_rect: {target_rect}')
|
||||
self.scene.render(painter,
|
||||
source=self.scene.itemsBoundingRect(),
|
||||
target=target_rect)
|
||||
painter.end()
|
||||
return image
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import os
|
||||
import stat
|
||||
from unittest.mock import patch
|
||||
from unittest.mock import patch, ANY
|
||||
import pytest
|
||||
|
||||
from PyQt6 import QtGui, QtCore
|
||||
|
|
@ -46,8 +46,8 @@ def test_scene_to_pixmap_exporter_default_size_and_margin_when_selection(view):
|
|||
assert exporter.default_size == QtCore.QSize(318, 118)
|
||||
|
||||
|
||||
@patch('PyQt6.QtGui.QPainter.setViewport')
|
||||
def test_scene_to_pixmap_exporter_render_sets_margins(set_mock, view):
|
||||
@patch('beeref.scene.BeeGraphicsScene.render')
|
||||
def test_scene_to_pixmap_exporter_render_sets_margins(render_mock, view):
|
||||
item = BeePixmapItem(
|
||||
QtGui.QImage(1000, 1200, QtGui.QImage.Format.Format_RGB32))
|
||||
view.scene.addItem(item)
|
||||
|
|
@ -56,8 +56,10 @@ def test_scene_to_pixmap_exporter_render_sets_margins(set_mock, view):
|
|||
assert exporter.default_size == QtCore.QSize(1072, 1272)
|
||||
exporter.render_to_image(QtCore.QSize(536, 636))
|
||||
|
||||
set_mock.assert_called_once_with(
|
||||
QtCore.QRect(18, 18, 500, 600))
|
||||
render_mock.assert_called_once_with(
|
||||
ANY,
|
||||
source=QtCore.QRectF(0, 0, 1000, 1200),
|
||||
target=QtCore.QRectF(18, 18, 500, 600))
|
||||
|
||||
|
||||
def test_scene_to_pixmap_exporter_render_renders_scene(view):
|
||||
|
|
|
|||
Loading…
Reference in a new issue