Browse Source

Add experimental setting for inline displays, disabled by default

Signed-off-by: falkTX <falktx@falktx.com>
tags/v2.1-rc1
falkTX 6 years ago
parent
commit
a0f7944e39
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
7 changed files with 68 additions and 25 deletions
  1. +7
    -0
      resources/ui/carla_settings.ui
  2. +5
    -3
      source/frontend/carla_host.py
  3. +6
    -0
      source/frontend/carla_settings.py
  4. +2
    -0
      source/frontend/carla_shared.py
  5. +4
    -1
      source/frontend/patchcanvas/__init__.py
  6. +40
    -17
      source/frontend/patchcanvas/canvasbox.py
  7. +4
    -4
      source/frontend/patchcanvas/patchcanvas.py

+ 7
- 0
resources/ui/carla_settings.ui View File

@@ -2460,6 +2460,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QCheckBox" name="cb_canvas_inline_displays">
<property name="text">
<string>Render Ardour-style &quot;Inline Displays&quot;</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>


+ 5
- 3
source/frontend/carla_host.py View File

@@ -1337,13 +1337,14 @@ class HostWindow(QMainWindow):
pOptions.auto_select_items = self.fSavedSettings[CARLA_KEY_CANVAS_AUTO_SELECT_ITEMS] pOptions.auto_select_items = self.fSavedSettings[CARLA_KEY_CANVAS_AUTO_SELECT_ITEMS]
pOptions.use_bezier_lines = self.fSavedSettings[CARLA_KEY_CANVAS_USE_BEZIER_LINES] pOptions.use_bezier_lines = self.fSavedSettings[CARLA_KEY_CANVAS_USE_BEZIER_LINES]
pOptions.antialiasing = self.fSavedSettings[CARLA_KEY_CANVAS_ANTIALIASING] pOptions.antialiasing = self.fSavedSettings[CARLA_KEY_CANVAS_ANTIALIASING]
pOptions.inline_displays = self.fSavedSettings[CARLA_KEY_CANVAS_INLINE_DISPLAYS]


if self.fSavedSettings[CARLA_KEY_CANVAS_FANCY_EYE_CANDY]: if self.fSavedSettings[CARLA_KEY_CANVAS_FANCY_EYE_CANDY]:
pOptions.eyecandy = patchcanvas.EYECANDY_FULL
pOptions.eyecandy = patchcanvas.EYECANDY_FULL
elif self.fSavedSettings[CARLA_KEY_CANVAS_EYE_CANDY]: elif self.fSavedSettings[CARLA_KEY_CANVAS_EYE_CANDY]:
pOptions.eyecandy = patchcanvas.EYECANDY_SMALL
pOptions.eyecandy = patchcanvas.EYECANDY_SMALL
else: else:
pOptions.eyecandy = patchcanvas.EYECANDY_NONE
pOptions.eyecandy = patchcanvas.EYECANDY_NONE


pFeatures = patchcanvas.features_t() pFeatures = patchcanvas.features_t()
pFeatures.group_info = False pFeatures.group_info = False
@@ -1702,6 +1703,7 @@ class HostWindow(QMainWindow):
CARLA_KEY_CANVAS_USE_OPENGL: settings.value(CARLA_KEY_CANVAS_USE_OPENGL, CARLA_DEFAULT_CANVAS_USE_OPENGL, type=bool), CARLA_KEY_CANVAS_USE_OPENGL: settings.value(CARLA_KEY_CANVAS_USE_OPENGL, CARLA_DEFAULT_CANVAS_USE_OPENGL, type=bool),
CARLA_KEY_CANVAS_ANTIALIASING: settings.value(CARLA_KEY_CANVAS_ANTIALIASING, CARLA_DEFAULT_CANVAS_ANTIALIASING, type=int), CARLA_KEY_CANVAS_ANTIALIASING: settings.value(CARLA_KEY_CANVAS_ANTIALIASING, CARLA_DEFAULT_CANVAS_ANTIALIASING, type=int),
CARLA_KEY_CANVAS_HQ_ANTIALIASING: settings.value(CARLA_KEY_CANVAS_HQ_ANTIALIASING, CARLA_DEFAULT_CANVAS_HQ_ANTIALIASING, type=bool), CARLA_KEY_CANVAS_HQ_ANTIALIASING: settings.value(CARLA_KEY_CANVAS_HQ_ANTIALIASING, CARLA_DEFAULT_CANVAS_HQ_ANTIALIASING, type=bool),
CARLA_KEY_CANVAS_INLINE_DISPLAYS: settings.value(CARLA_KEY_CANVAS_INLINE_DISPLAYS, CARLA_DEFAULT_CANVAS_INLINE_DISPLAYS, type=bool),
CARLA_KEY_CUSTOM_PAINTING: (settings.value(CARLA_KEY_MAIN_USE_PRO_THEME, True, type=bool) and CARLA_KEY_CUSTOM_PAINTING: (settings.value(CARLA_KEY_MAIN_USE_PRO_THEME, True, type=bool) and
settings.value(CARLA_KEY_MAIN_PRO_THEME_COLOR, "Black", type=str).lower() == "black"), settings.value(CARLA_KEY_MAIN_PRO_THEME_COLOR, "Black", type=str).lower() == "black"),
} }


+ 6
- 0
source/frontend/carla_settings.py View File

@@ -376,6 +376,7 @@ class CarlaSettingsW(QDialog):
self.ui.cb_canvas_use_opengl.setChecked(settings.value(CARLA_KEY_CANVAS_USE_OPENGL, CARLA_DEFAULT_CANVAS_USE_OPENGL, type=bool) and self.ui.cb_canvas_use_opengl.isEnabled()) self.ui.cb_canvas_use_opengl.setChecked(settings.value(CARLA_KEY_CANVAS_USE_OPENGL, CARLA_DEFAULT_CANVAS_USE_OPENGL, type=bool) and self.ui.cb_canvas_use_opengl.isEnabled())
self.ui.cb_canvas_render_aa.setCheckState(settings.value(CARLA_KEY_CANVAS_ANTIALIASING, CARLA_DEFAULT_CANVAS_ANTIALIASING, type=int)) self.ui.cb_canvas_render_aa.setCheckState(settings.value(CARLA_KEY_CANVAS_ANTIALIASING, CARLA_DEFAULT_CANVAS_ANTIALIASING, type=int))
self.ui.cb_canvas_render_hq_aa.setChecked(settings.value(CARLA_KEY_CANVAS_HQ_ANTIALIASING, CARLA_DEFAULT_CANVAS_HQ_ANTIALIASING, type=bool) and self.ui.cb_canvas_render_hq_aa.isEnabled()) self.ui.cb_canvas_render_hq_aa.setChecked(settings.value(CARLA_KEY_CANVAS_HQ_ANTIALIASING, CARLA_DEFAULT_CANVAS_HQ_ANTIALIASING, type=bool) and self.ui.cb_canvas_render_hq_aa.isEnabled())
self.ui.cb_canvas_inline_displays.setChecked(settings.value(CARLA_KEY_CANVAS_INLINE_DISPLAYS, CARLA_DEFAULT_CANVAS_INLINE_DISPLAYS, type=bool))


# ---------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------


@@ -599,6 +600,7 @@ class CarlaSettingsW(QDialog):
settings.setValue(CARLA_KEY_CANVAS_USE_OPENGL, self.ui.cb_canvas_use_opengl.isChecked()) settings.setValue(CARLA_KEY_CANVAS_USE_OPENGL, self.ui.cb_canvas_use_opengl.isChecked())
settings.setValue(CARLA_KEY_CANVAS_HQ_ANTIALIASING, self.ui.cb_canvas_render_hq_aa.isChecked()) settings.setValue(CARLA_KEY_CANVAS_HQ_ANTIALIASING, self.ui.cb_canvas_render_hq_aa.isChecked())
settings.setValue(CARLA_KEY_CANVAS_ANTIALIASING, self.ui.cb_canvas_render_aa.checkState()) # 0, 1, 2 match their enum variants settings.setValue(CARLA_KEY_CANVAS_ANTIALIASING, self.ui.cb_canvas_render_aa.checkState()) # 0, 1, 2 match their enum variants
settings.setValue(CARLA_KEY_CANVAS_INLINE_DISPLAYS, self.ui.cb_canvas_inline_displays.isChecked())


# ---------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------


@@ -901,6 +903,7 @@ class CarlaSettingsW(QDialog):
self.ui.cb_canvas_fancy_eyecandy.setChecked(CARLA_DEFAULT_CANVAS_FANCY_EYE_CANDY) self.ui.cb_canvas_fancy_eyecandy.setChecked(CARLA_DEFAULT_CANVAS_FANCY_EYE_CANDY)
self.ui.cb_canvas_use_opengl.setChecked(CARLA_DEFAULT_CANVAS_USE_OPENGL and self.ui.cb_canvas_use_opengl.isEnabled()) self.ui.cb_canvas_use_opengl.setChecked(CARLA_DEFAULT_CANVAS_USE_OPENGL and self.ui.cb_canvas_use_opengl.isEnabled())
self.ui.cb_canvas_render_hq_aa.setChecked(CARLA_DEFAULT_CANVAS_HQ_ANTIALIASING and self.ui.cb_canvas_render_hq_aa.isEnabled()) self.ui.cb_canvas_render_hq_aa.setChecked(CARLA_DEFAULT_CANVAS_HQ_ANTIALIASING and self.ui.cb_canvas_render_hq_aa.isEnabled())
self.ui.cb_canvas_inline_displays.setChecked(CARLA_DEFAULT_CANVAS_INLINE_DISPLAYS)
self.ui.ch_engine_force_stereo.setChecked(CARLA_DEFAULT_FORCE_STEREO) self.ui.ch_engine_force_stereo.setChecked(CARLA_DEFAULT_FORCE_STEREO)
self.ui.ch_engine_prefer_plugin_bridges.setChecked(CARLA_DEFAULT_PREFER_PLUGIN_BRIDGES) self.ui.ch_engine_prefer_plugin_bridges.setChecked(CARLA_DEFAULT_PREFER_PLUGIN_BRIDGES)


@@ -933,16 +936,19 @@ class CarlaSettingsW(QDialog):
@pyqtSlot(bool) @pyqtSlot(bool)
def slot_canvasEyeCandyToggled(self, toggled): def slot_canvasEyeCandyToggled(self, toggled):
if not toggled: if not toggled:
# disable fancy eyecandy too
self.ui.cb_canvas_fancy_eyecandy.setChecked(False) self.ui.cb_canvas_fancy_eyecandy.setChecked(False)


@pyqtSlot(bool) @pyqtSlot(bool)
def slot_canvasFancyEyeCandyToggled(self, toggled): def slot_canvasFancyEyeCandyToggled(self, toggled):
if toggled: if toggled:
# make sure normal eyecandy is enabled too
self.ui.cb_canvas_eyecandy.setChecked(True) self.ui.cb_canvas_eyecandy.setChecked(True)


@pyqtSlot(bool) @pyqtSlot(bool)
def slot_canvasOpenGLToggled(self, toggled): def slot_canvasOpenGLToggled(self, toggled):
if not toggled: if not toggled:
# uncheck GL specific option
self.ui.cb_canvas_render_hq_aa.setChecked(False) self.ui.cb_canvas_render_hq_aa.setChecked(False)


# -------------------------------------------------------------------------------------------------------- # --------------------------------------------------------------------------------------------------------


+ 2
- 0
source/frontend/carla_shared.py View File

@@ -198,6 +198,7 @@ CARLA_KEY_CANVAS_FANCY_EYE_CANDY = "Canvas/FancyEyeCandy" # bool
CARLA_KEY_CANVAS_USE_OPENGL = "Canvas/UseOpenGL" # bool CARLA_KEY_CANVAS_USE_OPENGL = "Canvas/UseOpenGL" # bool
CARLA_KEY_CANVAS_ANTIALIASING = "Canvas/Antialiasing" # enum CARLA_KEY_CANVAS_ANTIALIASING = "Canvas/Antialiasing" # enum
CARLA_KEY_CANVAS_HQ_ANTIALIASING = "Canvas/HQAntialiasing" # bool CARLA_KEY_CANVAS_HQ_ANTIALIASING = "Canvas/HQAntialiasing" # bool
CARLA_KEY_CANVAS_INLINE_DISPLAYS = "Canvas/InlineDisplays" # bool


CARLA_KEY_ENGINE_DRIVER_PREFIX = "Engine/Driver-" CARLA_KEY_ENGINE_DRIVER_PREFIX = "Engine/Driver-"
CARLA_KEY_ENGINE_AUDIO_DRIVER = "Engine/AudioDriver" # str CARLA_KEY_ENGINE_AUDIO_DRIVER = "Engine/AudioDriver" # str
@@ -270,6 +271,7 @@ CARLA_DEFAULT_CANVAS_FANCY_EYE_CANDY = False
CARLA_DEFAULT_CANVAS_USE_OPENGL = False CARLA_DEFAULT_CANVAS_USE_OPENGL = False
CARLA_DEFAULT_CANVAS_ANTIALIASING = CANVAS_ANTIALIASING_SMALL CARLA_DEFAULT_CANVAS_ANTIALIASING = CANVAS_ANTIALIASING_SMALL
CARLA_DEFAULT_CANVAS_HQ_ANTIALIASING = False CARLA_DEFAULT_CANVAS_HQ_ANTIALIASING = False
CARLA_DEFAULT_CANVAS_INLINE_DISPLAYS = False


# Engine # Engine
CARLA_DEFAULT_FORCE_STEREO = False CARLA_DEFAULT_FORCE_STEREO = False


+ 4
- 1
source/frontend/patchcanvas/__init__.py View File

@@ -107,7 +107,8 @@ class options_t(object):
'auto_select_items', 'auto_select_items',
'use_bezier_lines', 'use_bezier_lines',
'antialiasing', 'antialiasing',
'eyecandy'
'eyecandy',
'inline_displays'
] ]


# Canvas features # Canvas features
@@ -255,6 +256,7 @@ options.auto_select_items = False
options.use_bezier_lines = True options.use_bezier_lines = True
options.antialiasing = ANTIALIASING_SMALL options.antialiasing = ANTIALIASING_SMALL
options.eyecandy = EYECANDY_SMALL options.eyecandy = EYECANDY_SMALL
options.inline_displays = False


features = features_t() features = features_t()
features.group_info = False features.group_info = False
@@ -272,6 +274,7 @@ def setOptions(new_options):
options.use_bezier_lines = new_options.use_bezier_lines options.use_bezier_lines = new_options.use_bezier_lines
options.antialiasing = new_options.antialiasing options.antialiasing = new_options.antialiasing
options.eyecandy = new_options.eyecandy options.eyecandy = new_options.eyecandy
options.inline_displays = new_options.inline_displays


def setFeatures(new_features): def setFeatures(new_features):
if canvas.initiated: return if canvas.initiated: return


+ 40
- 17
source/frontend/patchcanvas/canvasbox.py View File

@@ -73,6 +73,10 @@ class cb_line_t(object):
# ------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------


class CanvasBox(QGraphicsItem): class CanvasBox(QGraphicsItem):
INLINE_DISPLAY_DISABLED = 0
INLINE_DISPLAY_ENABLED = 1
INLINE_DISPLAY_CACHED = 2

def __init__(self, group_id, group_name, icon, parent=None): def __init__(self, group_id, group_name, icon, parent=None):
QGraphicsItem.__init__(self) QGraphicsItem.__init__(self)
self.setParentItem(parent) self.setParentItem(parent)
@@ -84,7 +88,7 @@ class CanvasBox(QGraphicsItem):
# plugin Id, < 0 if invalid # plugin Id, < 0 if invalid
self.m_plugin_id = -1 self.m_plugin_id = -1
self.m_plugin_ui = False self.m_plugin_ui = False
self.m_plugin_inline = False
self.m_plugin_inline = self.INLINE_DISPLAY_DISABLED


# Base Variables # Base Variables
self.p_width = 50 self.p_width = 50
@@ -99,6 +103,7 @@ class CanvasBox(QGraphicsItem):
self.m_cursor_moving = False self.m_cursor_moving = False
self.m_forced_split = False self.m_forced_split = False
self.m_mouse_down = False self.m_mouse_down = False
self.m_inline_image = None


self.m_port_list_ids = [] self.m_port_list_ids = []
self.m_connection_lines = [] self.m_connection_lines = []
@@ -163,10 +168,17 @@ class CanvasBox(QGraphicsItem):
def getPortList(self): def getPortList(self):
return self.m_port_list_ids return self.m_port_list_ids


def redrawInlineDisplay(self):
if self.m_plugin_inline == self.INLINE_DISPLAY_CACHED:
self.m_plugin_inline = self.INLINE_DISPLAY_ENABLED

def setAsPlugin(self, plugin_id, hasUI, hasInlineDisplay): def setAsPlugin(self, plugin_id, hasUI, hasInlineDisplay):
if hasInlineDisplay and not options.inline_displays:
hasInlineDisplay = False

self.m_plugin_id = plugin_id self.m_plugin_id = plugin_id
self.m_plugin_ui = hasUI self.m_plugin_ui = hasUI
self.m_plugin_inline = hasInlineDisplay
self.m_plugin_inline = self.INLINE_DISPLAY_ENABLED if hasInlineDisplay else self.INLINE_DISPLAY_DISABLED
self.update() self.update()


def setIcon(self, icon): def setIcon(self, icon):
@@ -265,7 +277,7 @@ class CanvasBox(QGraphicsItem):


# Check Text Name size # Check Text Name size
app_name_size = QFontMetrics(self.m_font_name).width(self.m_group_name) + 30 app_name_size = QFontMetrics(self.m_font_name).width(self.m_group_name) + 30
self.p_width = max(200 if self.m_plugin_inline else 50, app_name_size)
self.p_width = max(200 if self.m_plugin_inline != self.INLINE_DISPLAY_DISABLED else 50, app_name_size)


# Get Port List # Get Port List
port_list = [] port_list = []
@@ -311,7 +323,7 @@ class CanvasBox(QGraphicsItem):
port.widget.setY(last_out_pos) port.widget.setY(last_out_pos)
last_out_pos += port_spacing last_out_pos += port_spacing


self.p_width = max(self.p_width, (100 if self.m_plugin_inline else 30) + max_in_width + max_out_width)
self.p_width = max(self.p_width, (100 if self.m_plugin_inline != self.INLINE_DISPLAY_DISABLED else 30) + max_in_width + max_out_width)
self.p_width_in = max_in_width self.p_width_in = max_in_width
self.p_width_out = max_out_width self.p_width_out = max_out_width


@@ -623,19 +635,7 @@ class CanvasBox(QGraphicsItem):
painter.drawRect(rect) painter.drawRect(rect)


# Draw plugin inline display if supported # 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:
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() * canvas.scene.getDevicePixelRatioF()
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)
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)
self.paintInlineDisplay(painter)


# Draw pixmap header # Draw pixmap header
rect.setHeight(canvas.theme.box_header_height) rect.setHeight(canvas.theme.box_header_height)
@@ -671,4 +671,27 @@ class CanvasBox(QGraphicsItem):


painter.restore() painter.restore()


def paintInlineDisplay(self, painter):
if self.m_plugin_id < 0 or self.m_plugin_id > MAX_PLUGIN_ID_ALLOWED:
return
if self.m_plugin_inline == self.INLINE_DISPLAY_DISABLED:
return
if not options.inline_displays:
return

if self.m_plugin_inline == self.INLINE_DISPLAY_ENABLED:
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() * canvas.scene.getDevicePixelRatioF()
size = "%i:%i" % (int(inwidth*scaling), int(inheight*scaling))
data = canvas.callback(ACTION_INLINE_DISPLAY, self.m_plugin_id, 0, size)
self.m_inline_image = QImage(data['data'], data['width'], data['height'], data['stride'], QImage.Format_ARGB32)
#self.m_plugin_inline = self.INLINE_DISPLAY_CACHED

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), self.m_inline_image)

# ------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------

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

@@ -932,12 +932,12 @@ def handlePluginRemoved(plugin_id):
group.plugin_inline = False group.plugin_inline = False
group.widgets[0].m_plugin_id = -1 group.widgets[0].m_plugin_id = -1
group.widgets[0].m_plugin_ui = False group.widgets[0].m_plugin_ui = False
group.widgets[0].m_plugin_inline = False
group.widgets[0].m_plugin_inline = CanvasBox.INLINE_DISPLAY_DISABLED


if group.split and group.widgets[1]: if group.split and group.widgets[1]:
group.widgets[1].m_plugin_id = -1 group.widgets[1].m_plugin_id = -1
group.widgets[1].m_plugin_ui = False group.widgets[1].m_plugin_ui = False
group.widgets[1].m_plugin_inline = False
group.widgets[1].m_plugin_inline = CanvasBox.INLINE_DISPLAY_DISABLED


for group in canvas.group_list: for group in canvas.group_list:
if group.plugin_id < plugin_id or group.plugin_id > MAX_PLUGIN_ID_ALLOWED: if group.plugin_id < plugin_id or group.plugin_id > MAX_PLUGIN_ID_ALLOWED:
@@ -968,11 +968,11 @@ def handleAllPluginsRemoved():
group.plugin_inline = False group.plugin_inline = False
group.widgets[0].m_plugin_id = -1 group.widgets[0].m_plugin_id = -1
group.widgets[0].m_plugin_ui = False group.widgets[0].m_plugin_ui = False
group.widgets[0].m_plugin_inline = False
group.widgets[0].m_plugin_inline = CanvasBox.INLINE_DISPLAY_DISABLED


if group.split and group.widgets[1]: if group.split and group.widgets[1]:
group.widgets[1].m_plugin_id = -1 group.widgets[1].m_plugin_id = -1
group.widgets[1].m_plugin_ui = False group.widgets[1].m_plugin_ui = False
group.widgets[1].m_plugin_inline = False
group.widgets[1].m_plugin_inline = CanvasBox.INLINE_DISPLAY_DISABLED


# ------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------

Loading…
Cancel
Save