Browse Source

Scale inline displays on zoom

Signed-off-by: falkTX <falktx@falktx.com>
tags/v2.1-rc1
falkTX 6 years ago
parent
commit
be7137db07
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
2 changed files with 23 additions and 11 deletions
  1. +9
    -7
      source/frontend/patchcanvas/canvasbox.py
  2. +14
    -4
      source/frontend/patchcanvas/scene.py

+ 9
- 7
source/frontend/patchcanvas/canvasbox.py View File

@@ -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)


+ 14
- 4
source/frontend/patchcanvas/scene.py View File

@@ -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)


Loading…
Cancel
Save