From be7137db0792c5479069381e39d7c6bc1a605b14 Mon Sep 17 00:00:00 2001 From: falkTX Date: Mon, 25 Mar 2019 10:33:00 +0100 Subject: [PATCH] Scale inline displays on zoom Signed-off-by: falkTX --- source/frontend/patchcanvas/canvasbox.py | 16 +++++++++------- source/frontend/patchcanvas/scene.py | 18 ++++++++++++++---- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/source/frontend/patchcanvas/canvasbox.py b/source/frontend/patchcanvas/canvasbox.py index e512918c5..aa4c6f1cd 100644 --- a/source/frontend/patchcanvas/canvasbox.py +++ b/source/frontend/patchcanvas/canvasbox.py @@ -622,16 +622,18 @@ class CanvasBox(QGraphicsItem): # Draw plugin inline display if supported if self.m_plugin_id >= 0 and self.m_plugin_id <= MAX_PLUGIN_ID_ALLOWED and self.m_plugin_inline: - size = "%i:%i" % (self.p_width - self.p_width_in - self.p_width_out - 16, - self.p_height - canvas.theme.box_header_height) + inwidth = self.p_width - self.p_width_in - self.p_width_out - 16 + inheight = self.p_height - canvas.theme.box_header_height + scaling = canvas.scene.getScaleFactor() + size = "%i:%i" % (int(inwidth*scaling), int(inheight*scaling)) data = canvas.callback(ACTION_INLINE_DISPLAY, self.m_plugin_id, 0, size) if data is not None: image = QImage(data['data'], data['width'], data['height'], data['stride'], QImage.Format_ARGB32) - painter.drawImage(self.p_width_in + 7, - canvas.theme.box_header_height - + (self.p_height - canvas.theme.box_header_height) / 2 - - data['height'] / 2 - 1, - image) + srcx = self.p_width_in + 7 + srcy = int(canvas.theme.box_header_height + + (self.p_height - canvas.theme.box_header_height) / 2 + - data['height'] / 2 / scaling - 1) + painter.drawImage(QRectF(srcx, srcy, inwidth, inheight), image) # Draw pixmap header rect.setHeight(canvas.theme.box_header_height) diff --git a/source/frontend/patchcanvas/scene.py b/source/frontend/patchcanvas/scene.py index 42e7cc09e..c1a505418 100644 --- a/source/frontend/patchcanvas/scene.py +++ b/source/frontend/patchcanvas/scene.py @@ -70,6 +70,7 @@ class PatchScene(QGraphicsScene): self.m_mid_button_down = False self.m_pointer_border = QRectF(0.0, 0.0, 1.0, 1.0) self.m_scale_min = 0.1 + self.m_scale_max = 4.0 self.m_rubberband = RubberbandRect(self) self.m_rubberband_selection = False @@ -84,6 +85,9 @@ class PatchScene(QGraphicsScene): self.selectionChanged.connect(self.slot_selectionChanged) + def getScaleFactor(self): + return self.m_view.transform().m11() + def fixScaleFactor(self, transform=None): fix, set_view = False, False if not transform: @@ -92,10 +96,10 @@ class PatchScene(QGraphicsScene): transform = view.transform() scale = transform.m11() - if scale > 3.0: + if scale > self.m_scale_max: fix = True transform.reset() - transform.scale(3.0, 3.0) + transform.scale(self.m_scale_max, self.m_scale_max) elif scale < self.m_scale_min: fix = True transform.reset() @@ -156,8 +160,11 @@ class PatchScene(QGraphicsScene): def zoom_in(self): view = self.m_view transform = view.transform() - if transform.m11() < 3.0: + if transform.m11() < self.m_scale_max: transform.scale(1.2, 1.2) + if transform.m11() > self.m_scale_max: + transform.reset() + transform.scale(self.m_scale_max, self.m_scale_max) view.setTransform(transform) self.scaleChanged.emit(transform.m11()) @@ -166,6 +173,9 @@ class PatchScene(QGraphicsScene): transform = view.transform() if transform.m11() > self.m_scale_min: transform.scale(0.833333333333333, 0.833333333333333) + if transform.m11() < self.m_scale_min: + transform.reset() + transform.scale(self.m_scale_min, self.m_scale_min) view.setTransform(transform) self.scaleChanged.emit(transform.m11()) @@ -370,7 +380,7 @@ class PatchScene(QGraphicsScene): transform = self.m_view.transform() scale = transform.m11() - if (delta > 0 and scale < 3.0) or (delta < 0 and scale > self.m_scale_min): + if (delta > 0 and scale < self.m_scale_max) or (delta < 0 and scale > self.m_scale_min): factor = 1.41 ** (delta / 240.0) transform.scale(factor, factor) self.fixScaleFactor(transform)