Browse Source

PatchCanvas: Theme fixes; Add "Modern Dark (Tiny)" and "OpenOctave Studio" themes

tags/v0.9.0
falkTX 13 years ago
parent
commit
8f20f299da
7 changed files with 401 additions and 104 deletions
  1. +1
    -1
      src/catarina.py
  2. +1
    -1
      src/claudia.py
  3. BIN
      src/icons/bitmaps/canvas/frame_node_header.png
  4. BIN
      src/icons/bitmaps/canvas/frame_port_bg.png
  5. +2
    -0
      src/icons/icons.qrc
  6. +159
    -86
      src/patchcanvas.py
  7. +238
    -16
      src/patchcanvas_theme.py

+ 1
- 1
src/catarina.py View File

@@ -799,7 +799,7 @@ class CatarinaMainW(QMainWindow, ui_catarina.Ui_CatarinaMainW):
patchcanvas.addGroup(group[iGroupId], group[iGroupName], patchcanvas.SPLIT_YES if (group[iGroupSplit]) else patchcanvas.SPLIT_NO, group[iGroupIcon])

for group_pos in self.m_group_list_pos:
patchcanvas.setGroupPos(group_pos[iGroupPosId], group_pos[iGroupPosX_o], group_pos[iGroupPosY_o], group_pos[iGroupPosX_i], group_pos[iGroupPosY_i])
patchcanvas.setGroupPosFull(group_pos[iGroupPosId], group_pos[iGroupPosX_o], group_pos[iGroupPosY_o], group_pos[iGroupPosX_i], group_pos[iGroupPosY_i])

for port in self.m_port_list:
patchcanvas.addPort(port[iPortGroup], port[iPortId], port[iPortName], port[iPortMode], port[iPortType])


+ 1
- 1
src/claudia.py View File

@@ -1149,7 +1149,7 @@ class ClaudiaMainW(QMainWindow, ui_claudia.Ui_ClaudiaMainW):
if x != None and y != None:
if x2 is None: x2 = "%f" % (float(x) + 50)
if y2 is None: y2 = "%f" % (float(y) + 50)
patchcanvas.setGroupPos(group_id, float(x), float(y), float(x2), float(y2))
patchcanvas.setGroupPosFull(group_id, float(x), float(y), float(x2), float(y2))

QTimer.singleShot(0, self.miniCanvasPreview, SLOT("update()"))



BIN
src/icons/bitmaps/canvas/frame_node_header.png View File

Before After
Width: 8  |  Height: 20  |  Size: 224B

BIN
src/icons/bitmaps/canvas/frame_port_bg.png View File

Before After
Width: 6  |  Height: 19  |  Size: 222B

+ 2
- 0
src/icons/icons.qrc View File

@@ -93,6 +93,8 @@
<file>bitmaps/led-big_off.png</file>
<file>bitmaps/carla_about.png</file>
<file>bitmaps/carla_knobs1.png</file>
<file>bitmaps/canvas/frame_node_header.png</file>
<file>bitmaps/canvas/frame_port_bg.png</file>
<file>bitmaps/textures/metal_1-512px.jpg</file>
<file>bitmaps/textures/metal_2-512px.jpg</file>
<file>bitmaps/textures/metal_3-512px.jpg</file>


+ 159
- 86
src/patchcanvas.py View File

@@ -20,7 +20,7 @@

# Imports (Global)
from PyQt4.QtCore import pyqtSlot, qDebug, qCritical, qFatal, qWarning, Qt, QObject, SIGNAL, SLOT
from PyQt4.QtCore import QAbstractAnimation, QLineF, QPointF, QRectF, QSettings, QTimer
from PyQt4.QtCore import QAbstractAnimation, QLineF, QPointF, QRectF, QSizeF, QSettings, QTimer
from PyQt4.QtGui import QColor, QLinearGradient, QPen, QPolygonF, QPainter, QPainterPath
from PyQt4.QtGui import QCursor, QFont, QFontMetrics, QInputDialog, QLineEdit, QMenu
from PyQt4.QtGui import QGraphicsScene, QGraphicsItem, QGraphicsLineItem, QGraphicsPathItem
@@ -430,7 +430,7 @@ def addGroup(group_id, group_name, split=SPLIT_UNDEF, icon=ICON_APPLICATION):
canvas.last_z_value += 1
group_sbox.setZValue(canvas.last_z_value)

if options.auto_hide_groups == False and options.eyecandy == EYECANDY_FULL:
if options.eyecandy == EYECANDY_FULL and not options.auto_hide_groups:
CanvasItemFX(group_sbox, True)

else:
@@ -448,7 +448,7 @@ def addGroup(group_id, group_name, split=SPLIT_UNDEF, icon=ICON_APPLICATION):

canvas.group_list.append(group_dict)

if options.auto_hide_groups == False and options.eyecandy == EYECANDY_FULL:
if options.eyecandy == EYECANDY_FULL and not options.auto_hide_groups:
CanvasItemFX(group_box, True)

QTimer.singleShot(0, canvas.scene, SLOT("update()"))
@@ -677,9 +677,9 @@ def getGroupPos(group_id, port_mode=PORT_MODE_OUTPUT):
return QPointF(0, 0)

def setGroupPos(group_id, group_pos_x, group_pos_y):
setGroupPos(group_id, group_pos_x, group_pos_y, group_pos_x, group_pos_y)
setGroupPosFull(group_id, group_pos_x, group_pos_y, group_pos_x, group_pos_y)

def setGroupPos(group_id, group_pos_x_o, group_pos_y_o, group_pos_x_i, group_pos_y_i):
def setGroupPosFull(group_id, group_pos_x_o, group_pos_y_o, group_pos_x_i, group_pos_y_i):
if canvas.debug:
qDebug("PatchCanvas::setGroupPos(%i, %i, %i, %i, %i)" % (group_id, group_pos_x_o, group_pos_y_o, group_pos_x_i, group_pos_y_i))

@@ -1049,15 +1049,17 @@ def CanvasRemoveItemFX(item):
if item.type() == CanvasBoxType:
item.removeIconFromScene()
canvas.scene.removeItem(item)
del item

elif item.type() == CanvasBoxType:
elif item.type() == CanvasPortType:
canvas.scene.removeItem(item)
del item

elif item.type() in (CanvasLineType, CanvasBezierLineType):
item.deleteFromScene()

# Force deletion of item if needed
if item.type() in (CanvasBoxType, CanvasPortType):
del item

# ------------------------------------------------------------------------------
# patchscene.cpp

@@ -1267,7 +1269,7 @@ class CanvasFadeAnimation(QAbstractAnimation):
return self.m_item

def setDuration(self, time):
if self.m_show == False and self.m_item.opacity() == 0:
if self.m_item.opacity() == 0 and not self.m_show:
self._duration = 0
else:
self.m_item.show()
@@ -1340,7 +1342,10 @@ class CanvasLine(QGraphicsLineItem):

def updateLinePos(self):
if self.item1.getPortMode() == PORT_MODE_OUTPUT:
line = QLineF(self.item1.scenePos().x() + self.item1.getPortWidth() + 12, self.item1.scenePos().y() + 7.5, self.item2.scenePos().x(), self.item2.scenePos().y() + 7.5)
line = QLineF(self.item1.scenePos().x() + self.item1.getPortWidth() + 12,
self.item1.scenePos().y() + float(canvas.theme.port_height)/2,
self.item2.scenePos().x(),
self.item2.scenePos().y() + float(canvas.theme.port_height)/2)
self.setLine(line)

self.m_lineSelected = False
@@ -1433,10 +1438,10 @@ class CanvasBezierLine(QGraphicsPathItem):
def updateLinePos(self):
if self.item1.getPortMode() == PORT_MODE_OUTPUT:
item1_x = self.item1.scenePos().x() + self.item1.getPortWidth() + 12
item1_y = self.item1.scenePos().y() + 7.5
item1_y = self.item1.scenePos().y() + float(canvas.theme.port_height)/2

item2_x = self.item2.scenePos().x()
item2_y = self.item2.scenePos().y() + 7.5
item2_y = self.item2.scenePos().y() + float(canvas.theme.port_height)/2

item1_mid_x = abs(item1_x - item2_x) / 2
item1_new_x = item1_x + item1_mid_x
@@ -1530,10 +1535,10 @@ class CanvasLineMov(QGraphicsLineItem):

if self.m_port_mode == PORT_MODE_INPUT:
item_pos[0] = 0
item_pos[1] = 7.5
item_pos[1] = float(canvas.theme.port_height)/2
elif self.m_port_mode == PORT_MODE_OUTPUT:
item_pos[0] = self.p_width + 12
item_pos[1] = 7.5
item_pos[1] = float(canvas.theme.port_height)/2
else:
return

@@ -1584,12 +1589,12 @@ class CanvasBezierLineMov(QGraphicsPathItem):
def updateLinePos(self, scenePos):
if self.m_port_mode == PORT_MODE_INPUT:
old_x = 0
old_y = 7.5
old_y = float(canvas.theme.port_height)/2
mid_x = abs(scenePos.x() - self.p_itemX) / 2
new_x = old_x - mid_x
elif self.m_port_mode == PORT_MODE_OUTPUT:
old_x = self.p_width + 12
old_y = 7.5
old_y = float(canvas.theme.port_height)/2
mid_x = abs(scenePos.x() - (self.p_itemX + old_x)) / 2
new_x = old_x + mid_x
else:
@@ -1623,8 +1628,8 @@ class CanvasPort(QGraphicsItem):
self.m_port_name = port_name

# Base Variables
self.m_port_width = 15
self.m_port_height = 15
self.m_port_width = 15
self.m_port_height = canvas.theme.port_height
self.m_port_font = QFont(canvas.theme.port_font_name, canvas.theme.port_font_size, canvas.theme.port_font_state)

self.m_line_mov = None
@@ -1833,7 +1838,7 @@ class CanvasPort(QGraphicsItem):
poly_locx = [0, 0, 0, 0, 0]

if self.m_port_mode == PORT_MODE_INPUT:
text_pos = QPointF(3, 12)
text_pos = QPointF(3, canvas.theme.port_text_ypos)

if canvas.theme.port_mode == Theme.THEME_PORT_POLYGON:
poly_locx[0] = 0
@@ -1852,7 +1857,7 @@ class CanvasPort(QGraphicsItem):
return

elif self.m_port_mode == PORT_MODE_OUTPUT:
text_pos = QPointF(9, 12)
text_pos = QPointF(9, canvas.theme.port_text_ypos)

if canvas.theme.port_mode == Theme.THEME_PORT_POLYGON:
poly_locx[0] = self.m_port_width + 12
@@ -1876,16 +1881,24 @@ class CanvasPort(QGraphicsItem):

if self.m_port_type == PORT_TYPE_AUDIO_JACK:
poly_color = canvas.theme.port_audio_jack_bg_sel if self.isSelected() else canvas.theme.port_audio_jack_bg
poly_pen = canvas.theme.port_audio_jack_pen_sel if self.isSelected() else canvas.theme.port_audio_jack_pen
poly_pen = canvas.theme.port_audio_jack_pen_sel if self.isSelected() else canvas.theme.port_audio_jack_pen
text_pen = canvas.theme.port_audio_jack_text_sel if self.isSelected() else canvas.theme.port_audio_jack_text
conn_pen = canvas.theme.port_audio_jack_pen_sel
elif self.m_port_type == PORT_TYPE_MIDI_JACK:
poly_color = canvas.theme.port_midi_jack_bg_sel if self.isSelected() else canvas.theme.port_midi_jack_bg
poly_pen = canvas.theme.port_midi_jack_pen_sel if self.isSelected() else canvas.theme.port_midi_jack_pen
poly_pen = canvas.theme.port_midi_jack_pen_sel if self.isSelected() else canvas.theme.port_midi_jack_pen
text_pen = canvas.theme.port_midi_jack_text_sel if self.isSelected() else canvas.theme.port_midi_jack_text
conn_pen = canvas.theme.port_midi_jack_pen_sel
elif self.m_port_type == PORT_TYPE_MIDI_A2J:
poly_color = canvas.theme.port_midi_a2j_bg_sel if self.isSelected() else canvas.theme.port_midi_a2j_bg
poly_pen = canvas.theme.port_midi_a2j_pen_sel if self.isSelected() else canvas.theme.port_midi_a2j_pen
poly_pen = canvas.theme.port_midi_a2j_pen_sel if self.isSelected() else canvas.theme.port_midi_a2j_pen
text_pen = canvas.theme.port_midi_a2j_text_sel if self.isSelected() else canvas.theme.port_midi_a2j_text
conn_pen = canvas.theme.port_midi_a2j_pen_sel
elif self.m_port_type == PORT_TYPE_MIDI_ALSA:
poly_color = canvas.theme.port_midi_alsa_bg_sel if self.isSelected() else canvas.theme.port_midi_alsa_bg
poly_pen = canvas.theme.port_midi_alsa_pen_sel if self.isSelected() else canvas.theme.port_midi_alsa_pen
poly_pen = canvas.theme.port_midi_alsa_pen_sel if self.isSelected() else canvas.theme.port_midi_alsa_pen
text_pen = canvas.theme.port_midi_alsa_text_sel if self.isSelected() else canvas.theme.port_midi_alsa_text
conn_pen = canvas.theme.port_midi_alsa_pen_sel
else:
qCritical("PatchCanvas::CanvasPort.paint() - invalid port type '%s'" % port_type2str(self.m_port_type))
return
@@ -1893,15 +1906,21 @@ class CanvasPort(QGraphicsItem):
polygon = QPolygonF()
polygon += QPointF(poly_locx[0], 0)
polygon += QPointF(poly_locx[1], 0)
polygon += QPointF(poly_locx[2], 7.5)
polygon += QPointF(poly_locx[3], 15)
polygon += QPointF(poly_locx[4], 15)
polygon += QPointF(poly_locx[2], float(canvas.theme.port_height)/2)
polygon += QPointF(poly_locx[3], canvas.theme.port_height)
polygon += QPointF(poly_locx[4], canvas.theme.port_height)

if canvas.theme.port_bg_pixmap:
portRect = polygon.boundingRect()
portPos = portRect.topLeft()
painter.drawTiledPixmap(portRect, canvas.theme.port_bg_pixmap, portPos)
else:
painter.setBrush(poly_color)

painter.setBrush(poly_color)
painter.setPen(poly_pen)
painter.drawPolygon(polygon)

painter.setPen(canvas.theme.port_text)
painter.setPen(text_pen)
painter.setFont(self.m_port_font)
painter.drawText(text_pos, self.m_port_name)

@@ -1910,6 +1929,17 @@ class CanvasPort(QGraphicsItem):
if connection.port_out_id == self.m_port_id or connection.port_in_id == self.m_port_id:
connection.widget.setLineSelected(self.isSelected())

if canvas.theme.idx == Theme.THEME_OOSTUDIO and canvas.theme.port_bg_pixmap:
painter.setPen(Qt.NoPen)
painter.setBrush(conn_pen.brush())

if self.m_port_mode == PORT_MODE_INPUT:
connRect = QRectF(portRect.topLeft(), QSizeF(2, portRect.height()))
else:
connRect = QRectF(QPointF(portRect.right()-2, portRect.top()), QSizeF(2, portRect.height()))

painter.drawRect(connRect)

self.m_last_selected_state = self.isSelected()

# ------------------------------------------------------------------------------
@@ -1926,12 +1956,12 @@ class CanvasBox(QGraphicsItem):
QGraphicsItem.__init__(self, parent, canvas.scene)

# Save Variables, useful for later
self.m_group_id = group_id
self.m_group_id = group_id
self.m_group_name = group_name

# Base Variables
self.p_width = 50
self.p_height = 25
self.p_width = 50
self.p_height = canvas.theme.box_header_height + canvas.theme.box_header_spacing + 1

self.m_last_pos = QPointF()
self.m_splitted = False
@@ -1949,7 +1979,10 @@ class CanvasBox(QGraphicsItem):
self.m_font_port = QFont(canvas.theme.port_font_name, canvas.theme.port_font_size, canvas.theme.port_font_state)

# Icon
self.icon_svg = CanvasIcon(icon, self.m_group_name, self)
if canvas.theme.box_use_icon:
self.icon_svg = CanvasIcon(icon, self.m_group_name, self)
else:
self.icon_svg = None

# Shadow
if options.eyecandy:
@@ -1987,7 +2020,8 @@ class CanvasBox(QGraphicsItem):
return self.m_port_list_ids

def setIcon(self, icon):
self.icon_svg.setIcon(icon, self.m_group_name)
if self.icon_svg:
self.icon_svg.setIcon(icon, self.m_group_name)

def setSplit(self, split, mode=PORT_MODE_NULL):
self.m_splitted = split
@@ -2055,7 +2089,7 @@ class CanvasBox(QGraphicsItem):
def checkItemPos(self):
if not canvas.size_rect.isNull():
pos = self.scenePos()
if canvas.size_rect.contains(pos) == False or canvas.size_rect.contains(pos + QPointF(self.p_width, self.p_height)) == False:
if canvas.size_rect.contains(pos) == False or canvas.size_rect.contains(pos + QPointF(self.p_width, self.p_height)) == False: # FIXME
if pos.x() < canvas.size_rect.x():
self.setPos(canvas.size_rect.x(), pos.y())
elif pos.x() + self.p_width > canvas.size_rect.width():
@@ -2068,21 +2102,24 @@ class CanvasBox(QGraphicsItem):
self.setPos(pos.x(), canvas.size_rect.height() - self.p_height)

def removeIconFromScene(self):
canvas.scene.removeItem(self.icon_svg)
if self.icon_svg:
canvas.scene.removeItem(self.icon_svg)

def updatePositions(self):
self.prepareGeometryChange()

max_in_width = 0
max_in_height = 24
max_out_width = 0
max_out_height = 24
max_in_width = 0
max_in_height = canvas.theme.box_header_height + canvas.theme.box_header_spacing
max_out_width = 0
max_out_height = canvas.theme.box_header_height + canvas.theme.box_header_spacing
port_spacing = canvas.theme.port_height + canvas.theme.port_spacing

have_audio_jack_in = have_midi_jack_in = have_midi_a2j_in = have_midi_alsa_in = False
have_audio_jack_out = have_midi_jack_out = have_midi_a2j_out = have_midi_alsa_out = False

# reset box size
self.p_width = 50
self.p_height = 25
self.p_width = 50
self.p_height = canvas.theme.box_header_height + canvas.theme.box_header_spacing + 1

# Check Text Name size
app_name_size = QFontMetrics(self.m_font_name).width(self.m_group_name) + 30
@@ -2098,7 +2135,7 @@ class CanvasBox(QGraphicsItem):
# Get Max Box Width/Height
for port in port_list:
if port.port_mode == PORT_MODE_INPUT:
max_in_height += 18
max_in_height += port_spacing

size = QFontMetrics(self.m_font_port).width(port.port_name)
if size > max_in_width:
@@ -2106,19 +2143,19 @@ class CanvasBox(QGraphicsItem):

if port.port_type == PORT_TYPE_AUDIO_JACK and not have_audio_jack_in:
have_audio_jack_in = True
max_in_height += 2
max_in_height += canvas.theme.port_spacingT
elif port.port_type == PORT_TYPE_MIDI_JACK and not have_midi_jack_in:
have_midi_jack_in = True
max_in_height += 2
max_in_height += canvas.theme.port_spacingT
elif port.port_type == PORT_TYPE_MIDI_A2J and not have_midi_a2j_in:
have_midi_a2j_in = True
max_in_height += 2
max_in_height += canvas.theme.port_spacingT
elif port.port_type == PORT_TYPE_MIDI_ALSA and not have_midi_alsa_in:
have_midi_alsa_in = True
max_in_height += 2
max_in_height += canvas.theme.port_spacingT

elif port.port_mode == PORT_MODE_OUTPUT:
max_out_height += 18
max_out_height += port_spacing

size = QFontMetrics(self.m_font_port).width(port.port_name)
if size > max_out_width:
@@ -2126,16 +2163,20 @@ class CanvasBox(QGraphicsItem):

if port.port_type == PORT_TYPE_AUDIO_JACK and not have_audio_jack_out:
have_audio_jack_out = True
max_out_height += 2
max_out_height += canvas.theme.port_spacingT
elif port.port_type == PORT_TYPE_MIDI_JACK and not have_midi_jack_out:
have_midi_jack_out = True
max_out_height += 2
max_out_height += canvas.theme.port_spacingT
elif port.port_type == PORT_TYPE_MIDI_A2J and not have_midi_a2j_out:
have_midi_a2j_out = True
max_out_height += 2
max_out_height += canvas.theme.port_spacingT
elif port.port_type == PORT_TYPE_MIDI_ALSA and not have_midi_alsa_out:
have_midi_alsa_out = True
max_out_height += 2
max_out_height += canvas.theme.port_spacingT

if canvas.theme.port_spacingT == 0:
max_in_height += 2
max_out_height += 2

final_width = 30 + max_in_width + max_out_width
if final_width > self.p_width:
@@ -2148,28 +2189,34 @@ class CanvasBox(QGraphicsItem):
self.p_height = max_out_height

# Remove bottom space
self.p_height -= 2
self.p_height -= canvas.theme.port_spacingT

last_in_pos = 24
last_out_pos = 24
last_in_type = PORT_TYPE_NULL
if canvas.theme.box_header_spacing > 0:
if len(port_list) == 0:
self.p_height -= canvas.theme.box_header_spacing
else:
self.p_height -= canvas.theme.box_header_spacing/2

last_in_pos = canvas.theme.box_header_height + canvas.theme.box_header_spacing
last_out_pos = canvas.theme.box_header_height + canvas.theme.box_header_spacing
last_in_type = PORT_TYPE_NULL
last_out_type = PORT_TYPE_NULL

# Re-position ports, AUDIO_JACK
for port in port_list:
if port.port_type == PORT_TYPE_AUDIO_JACK:
if port.port_mode == PORT_MODE_INPUT:
port.widget.setPos(QPointF(1, last_in_pos))
port.widget.setPos(QPointF(1 + canvas.theme.port_offset, last_in_pos))
port.widget.setPortWidth(max_in_width)

last_in_pos += 18
last_in_pos += port_spacing
last_in_type = port.port_type

elif port.port_mode == PORT_MODE_OUTPUT:
port.widget.setPos(QPointF(self.p_width - max_out_width - 13, last_out_pos))
port.widget.setPos(QPointF(self.p_width - max_out_width - canvas.theme.port_offset - 13, last_out_pos))
port.widget.setPortWidth(max_out_width)

last_out_pos += 18
last_out_pos += port_spacing
last_out_type = port.port_type

# Re-position ports, MIDI_JACK
@@ -2177,22 +2224,22 @@ class CanvasBox(QGraphicsItem):
if port.port_type == PORT_TYPE_MIDI_JACK:
if port.port_mode == PORT_MODE_INPUT:
if last_in_type != PORT_TYPE_NULL and port.port_type != last_in_type:
last_in_pos += 2
last_in_pos += canvas.theme.port_spacingT

port.widget.setPos(QPointF(1, last_in_pos))
port.widget.setPos(QPointF(1 + canvas.theme.port_offset, last_in_pos))
port.widget.setPortWidth(max_in_width)

last_in_pos += 18
last_in_pos += port_spacing
last_in_type = port.port_type

elif port.port_mode == PORT_MODE_OUTPUT:
if last_out_type != PORT_TYPE_NULL and port.port_type != last_out_type:
last_out_pos += 2
last_out_pos += canvas.theme.port_spacingT

port.widget.setPos(QPointF(self.p_width - max_out_width - 13, last_out_pos))
port.widget.setPos(QPointF(self.p_width - max_out_width - canvas.theme.port_offset - 13, last_out_pos))
port.widget.setPortWidth(max_out_width)

last_out_pos += 18
last_out_pos += port_spacing
last_out_type = port.port_type

# Re-position ports, MIDI_A2J
@@ -2200,22 +2247,22 @@ class CanvasBox(QGraphicsItem):
if port.port_type == PORT_TYPE_MIDI_A2J:
if port.port_mode == PORT_MODE_INPUT:
if last_in_type != PORT_TYPE_NULL and port.port_type != last_in_type:
last_in_pos += 2
last_in_pos += canvas.theme.port_spacingT

port.widget.setPos(QPointF(1, last_in_pos))
port.widget.setPos(QPointF(1 + canvas.theme.port_offset, last_in_pos))
port.widget.setPortWidth(max_in_width)

last_in_pos += 18
last_in_pos += port_spacing
last_in_type = port.port_type

elif port.port_mode == PORT_MODE_OUTPUT:
if last_out_type != PORT_TYPE_NULL and port.port_type != last_out_type:
last_out_pos += 2
last_out_pos += canvas.theme.port_spacingT

port.widget.setPos(QPointF(self.p_width - max_out_width - 13, last_out_pos))
port.widget.setPos(QPointF(self.p_width - max_out_width - canvas.theme.port_offset - 13, last_out_pos))
port.widget.setPortWidth(max_out_width)

last_out_pos += 18
last_out_pos += port_spacing
last_out_type = port.port_type

# Re-position ports, MIDI_ALSA
@@ -2223,22 +2270,22 @@ class CanvasBox(QGraphicsItem):
if port.port_type == PORT_TYPE_MIDI_ALSA:
if port.port_mode == PORT_MODE_INPUT:
if last_in_type != PORT_TYPE_NULL and port.port_type != last_in_type:
last_in_pos += 2
last_in_pos += canvas.theme.port_spacingT

port.widget.setPos(QPointF(1, last_in_pos))
port.widget.setPos(QPointF(1 + canvas.theme.port_offset, last_in_pos))
port.widget.setPortWidth(max_in_width)

last_in_pos += 18
last_in_pos += port_spacing
last_in_type = port.port_type

elif port.port_mode == PORT_MODE_OUTPUT:
if last_out_type != PORT_TYPE_NULL and port.port_type != last_out_type:
last_out_pos += 2
last_out_pos += canvas.theme.port_spacingT

port.widget.setPos(QPointF(self.p_width - max_out_width - 13, last_out_pos))
port.widget.setPos(QPointF(self.p_width - max_out_width - canvas.theme.port_offset - 13, last_out_pos))
port.widget.setPortWidth(max_out_width)

last_out_pos += 18
last_out_pos += port_spacing
last_out_type = port.port_type

self.repaintLines(True)
@@ -2313,6 +2360,7 @@ class CanvasBox(QGraphicsItem):
elif port.port_mode == PORT_MODE_OUTPUT:
haveOuts = True

# FIXME
if self.m_splitted == False and bool(haveIns and haveOuts) == False:
act_x_sep2.setVisible(False)
act_x_split_join.setVisible(False)
@@ -2385,23 +2433,48 @@ class CanvasBox(QGraphicsItem):
def paint(self, painter, option, widget):
painter.setRenderHint(QPainter.Antialiasing, False)

# Draw rectangle
if self.isSelected():
painter.setPen(canvas.theme.box_pen_sel)
else:
painter.setPen(canvas.theme.box_pen)

box_gradient = QLinearGradient(0, 0, 0, self.p_height)
box_gradient.setColorAt(0, canvas.theme.box_bg_1)
box_gradient.setColorAt(1, canvas.theme.box_bg_2)
if canvas.theme.box_bg_type == Theme.THEME_BG_GRADIENT:
box_gradient = QLinearGradient(0, 0, 0, self.p_height)
box_gradient.setColorAt(0, canvas.theme.box_bg_1)
box_gradient.setColorAt(1, canvas.theme.box_bg_2)
painter.setBrush(box_gradient)
else:
painter.setBrush(canvas.theme.box_bg_1)

painter.setBrush(box_gradient)
painter.drawRect(0, 0, self.p_width, self.p_height)

text_pos = QPointF(25, 16)
# Draw pixmap header
if canvas.theme.box_header_pixmap:
painter.setPen(Qt.NoPen)
painter.setBrush(canvas.theme.box_bg_2)
painter.drawRect(1, 1, self.p_width-2, canvas.theme.box_header_height)

headerPos = QPointF(1, 1)
headerRect = QRectF(2, 2, self.p_width-4, canvas.theme.box_header_height-3)
painter.drawTiledPixmap(headerRect, canvas.theme.box_header_pixmap, headerPos)

# Draw text
painter.setFont(self.m_font_name)
painter.setPen(canvas.theme.box_text)
painter.drawText(text_pos, self.m_group_name)

if self.isSelected():
painter.setPen(canvas.theme.box_text_sel)
else:
painter.setPen(canvas.theme.box_text)

if canvas.theme.box_use_icon:
textPos = QPointF(25, canvas.theme.box_text_ypos)
else:
appNameSize = QFontMetrics(self.m_font_name).width(self.m_group_name)
rem = self.p_width - appNameSize
textPos = QPointF(rem/2, canvas.theme.box_text_ypos)

painter.drawText(textPos, self.m_group_name)

self.repaintLines()

@@ -2453,9 +2526,9 @@ class CanvasIcon(QGraphicsSvgItem):
self.p_size = QRectF(5, 2, 16, 16)

elif icon == ICON_LADISH_ROOM:
# TODO - make a unique ladish-room icon
icon_path = ":/scalable/pb_hardware.svg"
self.p_size = QRectF(5, 2, 16, 16)
# TODO - make a unique ladish-room icon

else:
self.p_size = QRectF(0, 0, 0, 0)


+ 238
- 16
src/patchcanvas_theme.py View File

@@ -17,7 +17,7 @@
# For a full copy of the GNU General Public License see the COPYING file

from PyQt4.QtCore import Qt
from PyQt4.QtGui import QColor, QFont, QPen
from PyQt4.QtGui import QColor, QFont, QPen, QPixmap

class Theme(object):
# enum PortType
@@ -25,17 +25,22 @@ class Theme(object):
THEME_PORT_POLYGON = 1

# enum List
THEME_MODERN_DARK = 0
THEME_CLASSIC_DARK = 1
THEME_MAX = 2
THEME_MODERN_DARK = 0
THEME_MODERN_DARK_TINY = 1
THEME_CLASSIC_DARK = 2
THEME_OOSTUDIO = 3
THEME_MAX = 4

# enum BackgroundType
THEME_BG_SOLID = 0
THEME_BG_GRADIENT = 1

def __init__(self, idx):
object.__init__(self)

if idx == self.THEME_MODERN_DARK:
# Name this theme
self.name = "Modern Dark"
self.idx = idx

if idx == self.THEME_MODERN_DARK:
# Canvas
self.canvas_bg = QColor(0, 0, 0)

@@ -45,13 +50,29 @@ class Theme(object):
self.box_bg_1 = QColor(32, 34, 35)
self.box_bg_2 = QColor(43, 47, 48)
self.box_shadow = QColor(89, 89, 89, 180)
self.box_header_pixmap = None
self.box_header_height = 24
self.box_header_spacing = 0

self.box_text = QPen(QColor(240, 240, 240), 0)
self.box_text_sel = self.box_text
self.box_text_ypos = 16
self.box_font_name = "Deja Vu Sans"
self.box_font_size = 8
self.box_font_state = QFont.Bold

self.box_bg_type = self.THEME_BG_GRADIENT
self.box_use_icon = True

# Ports
self.port_text = QPen(QColor(250, 250, 250), 0)
self.port_text_ypos = 12
self.port_bg_pixmap = None
self.port_font_name = "Deja Vu Sans"
self.port_font_size = 8
self.port_font_state = QFont.Normal
self.port_mode = self.THEME_PORT_POLYGON

self.port_audio_jack_pen = QPen(QColor(63, 90, 126), 1)
self.port_audio_jack_pen_sel = QPen(QColor(63 + 30, 90 + 30, 126 + 30), 1)
self.port_midi_jack_pen = QPen(QColor(159, 44, 42), 1)
@@ -70,12 +91,102 @@ class Theme(object):
self.port_midi_alsa_bg = QColor(64, 112, 18)
self.port_midi_alsa_bg_sel = QColor(64 + 50, 112 + 50, 18 + 50)

self.port_audio_jack_text = self.port_text
self.port_audio_jack_text_sel = self.port_text
self.port_midi_jack_text = self.port_text
self.port_midi_jack_text_sel = self.port_text
self.port_midi_a2j_text = self.port_text
self.port_midi_a2j_text_sel = self.port_text
self.port_midi_alsa_text = self.port_text
self.port_midi_alsa_text_sel = self.port_text

self.port_height = 15
self.port_offset = 0
self.port_spacing = 3
self.port_spacingT = 2

# Lines
self.line_audio_jack = QColor(63, 90, 126)
self.line_audio_jack_sel = QColor(63 + 90, 90 + 90, 126 + 90)
self.line_audio_jack_glow = QColor(100, 100, 200)
self.line_midi_jack = QColor(159, 44, 42)
self.line_midi_jack_sel = QColor(159 + 90, 44 + 90, 42 + 90)
self.line_midi_jack_glow = QColor(200, 100, 100)
self.line_midi_a2j = QColor(137, 76, 43)
self.line_midi_a2j_sel = QColor(137 + 90, 76 + 90, 43 + 90)
self.line_midi_a2j_glow = QColor(166, 133, 133)
self.line_midi_alsa = QColor(93, 141, 46)
self.line_midi_alsa_sel = QColor(93 + 90, 141 + 90, 46 + 90)
self.line_midi_alsa_glow = QColor(100, 200, 100)

self.rubberband_pen = QPen(QColor(206, 207, 208), 1, Qt.SolidLine)
self.rubberband_brush = QColor(76, 77, 78, 100)

elif idx == self.THEME_MODERN_DARK_TINY:
# Canvas
self.canvas_bg = QColor(0, 0, 0)

# Boxes
self.box_pen = QPen(QColor(76, 77, 78), 1, Qt.SolidLine)
self.box_pen_sel = QPen(QColor(206, 207, 208), 1, Qt.DashLine)
self.box_bg_1 = QColor(32, 34, 35)
self.box_bg_2 = QColor(43, 47, 48)
self.box_shadow = QColor(89, 89, 89, 180)
self.box_header_pixmap = None
self.box_header_height = 14
self.box_header_spacing = 0

self.box_text = QPen(QColor(240, 240, 240), 0)
self.box_text_sel = self.box_text
self.box_text_ypos = 10
self.box_font_name = "Deja Vu Sans"
self.box_font_size = 7
self.box_font_state = QFont.Bold

self.box_bg_type = self.THEME_BG_GRADIENT
self.box_use_icon = False

# Ports
self.port_text = QPen(QColor(250, 250, 250), 0)
self.port_text_ypos = 9
self.port_bg_pixmap = None
self.port_font_name = "Deja Vu Sans"
self.port_font_size = 8
self.port_font_size = 6
self.port_font_state = QFont.Normal
self.port_mode = self.THEME_PORT_POLYGON

self.port_audio_jack_pen = QPen(QColor(63, 90, 126), 1)
self.port_audio_jack_pen_sel = QPen(QColor(63 + 30, 90 + 30, 126 + 30), 1)
self.port_midi_jack_pen = QPen(QColor(159, 44, 42), 1)
self.port_midi_jack_pen_sel = QPen(QColor(159 + 30, 44 + 30, 42 + 30), 1)
self.port_midi_a2j_pen = QPen(QColor(137, 76, 43), 1)
self.port_midi_a2j_pen_sel = QPen(QColor(137 + 30, 76 + 30, 43 + 30), 1)
self.port_midi_alsa_pen = QPen(QColor(93, 141, 46), 1)
self.port_midi_alsa_pen_sel = QPen(QColor(93 + 30, 141 + 30, 46 + 30), 1)

self.port_audio_jack_bg = QColor(35, 61, 99)
self.port_audio_jack_bg_sel = QColor(35 + 50, 61 + 50, 99 + 50)
self.port_midi_jack_bg = QColor(120, 15, 16)
self.port_midi_jack_bg_sel = QColor(120 + 50, 15 + 50, 16 + 50)
self.port_midi_a2j_bg = QColor(101, 47, 16)
self.port_midi_a2j_bg_sel = QColor(101 + 50, 47 + 50, 16 + 50)
self.port_midi_alsa_bg = QColor(64, 112, 18)
self.port_midi_alsa_bg_sel = QColor(64 + 50, 112 + 50, 18 + 50)

self.port_audio_jack_text = self.port_text
self.port_audio_jack_text_sel = self.port_text
self.port_midi_jack_text = self.port_text
self.port_midi_jack_text_sel = self.port_text
self.port_midi_a2j_text = self.port_text
self.port_midi_a2j_text_sel = self.port_text
self.port_midi_alsa_text = self.port_text
self.port_midi_alsa_text_sel = self.port_text

self.port_height = 11
self.port_offset = 0
self.port_spacing = 2
self.port_spacingT = 1

# Lines
self.line_audio_jack = QColor(63, 90, 126)
self.line_audio_jack_sel = QColor(63 + 90, 90 + 90, 126 + 90)
@@ -94,9 +205,6 @@ class Theme(object):
self.rubberband_brush = QColor(76, 77, 78, 100)

elif idx == self.THEME_CLASSIC_DARK:
# Name this theme
self.name = "Classic Dark"

# Canvas
self.canvas_bg = QColor(0, 0, 0)

@@ -106,13 +214,29 @@ class Theme(object):
self.box_bg_1 = QColor(30, 34, 36)
self.box_bg_2 = QColor(30, 34, 36)
self.box_shadow = QColor(89, 89, 89, 180)
self.box_header_pixmap = None
self.box_header_height = 19
self.box_header_spacing = 0

self.box_text = QPen(QColor(255, 255, 255), 0)
self.box_text_sel = self.box_text
self.box_text_ypos = 12
self.box_font_name = "Sans"
self.box_font_size = 9
self.box_font_state = QFont.Normal

self.box_bg_type = self.THEME_BG_GRADIENT
self.box_use_icon = False

# Ports
self.port_text = QPen(QColor(250, 250, 250), 0)
self.port_text_ypos = 11
self.port_bg_pixmap = None
self.port_font_name = "Sans"
self.port_font_size = 8
self.port_font_state = QFont.Normal
self.port_mode = self.THEME_PORT_SQUARE

self.port_audio_jack_pen = QPen(QColor(35, 61, 99), 0)
self.port_audio_jack_pen_sel = QPen(QColor(255, 0, 0), 0)
self.port_midi_jack_pen = QPen(QColor(120, 15, 16), 0)
@@ -131,11 +255,19 @@ class Theme(object):
self.port_midi_alsa_bg = QColor(63, 112, 19)
self.port_midi_alsa_bg_sel = QColor(255, 0, 0)

self.port_text = QPen(QColor(250, 250, 250), 0)
self.port_font_name = "Sans"
self.port_font_size = 8
self.port_font_state = QFont.Normal
self.port_mode = self.THEME_PORT_SQUARE
self.port_audio_jack_text = self.port_text
self.port_audio_jack_text_sel = self.port_text
self.port_midi_jack_text = self.port_text
self.port_midi_jack_text_sel = self.port_text
self.port_midi_a2j_text = self.port_text
self.port_midi_a2j_text_sel = self.port_text
self.port_midi_alsa_text = self.port_text
self.port_midi_alsa_text_sel = self.port_text

self.port_height = 14
self.port_offset = -1
self.port_spacing = 1
self.port_spacingT = 0

# Lines
self.line_audio_jack = QColor(53, 78, 116)
@@ -154,14 +286,104 @@ class Theme(object):
self.rubberband_pen = QPen(QColor(147, 151, 143), 2, Qt.SolidLine)
self.rubberband_brush = QColor(35, 61, 99, 100)

elif idx == self.THEME_OOSTUDIO:
# Canvas
self.canvas_bg = QColor(11, 11, 11)

# Boxes
self.box_pen = QPen(QColor(76, 77, 78), 1, Qt.SolidLine)
self.box_pen_sel = QPen(QColor(189, 122, 214), 1, Qt.DashLine)
self.box_bg_1 = QColor(46, 46, 46)
self.box_bg_2 = QColor(23, 23, 23)
self.box_shadow = QColor(89, 89, 89, 180)
self.box_header_pixmap = QPixmap(":/bitmaps/canvas/frame_node_header.png")
self.box_header_height = 22
self.box_header_spacing = 6

self.box_text = QPen(QColor(144, 144, 144), 0)
self.box_text_sel = QPen(QColor(189, 122, 214), 0)
self.box_text_ypos = 16
self.box_font_name = "Deja Vu Sans"
self.box_font_size = 8
self.box_font_state = QFont.Bold

self.box_bg_type = self.THEME_BG_SOLID
self.box_use_icon = False

# Ports
normalPortBG = QColor(46, 46, 46)
selPortBG = QColor(23, 23, 23)

self.port_text = QPen(QColor(155, 155, 155), 0)
self.port_text_ypos = 14
self.port_bg_pixmap = QPixmap(":/bitmaps/canvas/frame_port_bg.png")
self.port_font_name = "Deja Vu Sans"
self.port_font_size = 8
self.port_font_state = QFont.Normal
self.port_mode = self.THEME_PORT_SQUARE

self.port_audio_jack_pen = QPen(selPortBG, 2)
self.port_audio_jack_pen_sel = QPen(QColor(1, 230, 238), 1)
self.port_midi_jack_pen = QPen(selPortBG, 2)
self.port_midi_jack_pen_sel = QPen(QColor(252, 118, 118), 1)
self.port_midi_a2j_pen = QPen(selPortBG, 2)
self.port_midi_a2j_pen_sel = QPen(QColor(137, 76, 43), 1)
self.port_midi_alsa_pen = QPen(selPortBG, 2)
self.port_midi_alsa_pen_sel = QPen(QColor(129, 244, 118), 0)

self.port_audio_jack_bg = normalPortBG
self.port_audio_jack_bg_sel = selPortBG
self.port_midi_jack_bg = normalPortBG
self.port_midi_jack_bg_sel = selPortBG
self.port_midi_a2j_bg = normalPortBG
self.port_midi_a2j_bg_sel = selPortBG
self.port_midi_alsa_bg = normalPortBG
self.port_midi_alsa_bg_sel = selPortBG

self.port_audio_jack_text = self.port_text
self.port_audio_jack_text_sel = self.port_audio_jack_pen_sel
self.port_midi_jack_text = self.port_text
self.port_midi_jack_text_sel = self.port_midi_jack_pen_sel
self.port_midi_a2j_text = self.port_text
self.port_midi_a2j_text_sel = self.port_midi_a2j_pen_sel
self.port_midi_alsa_text = self.port_text
self.port_midi_alsa_text_sel = self.port_midi_alsa_pen_sel

# missing, ports 2
self.port_height = 19
self.port_offset = 1
self.port_spacing = 5
self.port_spacingT = 0

# Lines
self.line_audio_jack = QColor(64, 64, 64)
self.line_audio_jack_sel = QColor(1, 230, 238)
self.line_audio_jack_glow = QColor(100, 200, 100)
self.line_midi_jack = QColor(64, 64, 64)
self.line_midi_jack_sel = QColor(252, 118, 118)
self.line_midi_jack_glow = QColor(200, 100, 100)
self.line_midi_a2j = QColor(64, 64, 64)
self.line_midi_a2j_sel = QColor(137+90, 76+90, 43+90)
self.line_midi_a2j_glow = QColor(166, 133, 133)
self.line_midi_alsa = QColor(64, 64, 64)
self.line_midi_alsa_sel = QColor(129, 244, 118)
self.line_midi_alsa_glow = QColor(100, 200, 100)

self.rubberband_pen = QPen(QColor(1, 230, 238), 2, Qt.SolidLine)
self.rubberband_brush = QColor(90, 90, 90, 100)

def getDefaultTheme():
return Theme.THEME_MODERN_DARK

def getThemeName(idx):
if idx == Theme.THEME_MODERN_DARK:
return "Modern Dark"
elif idx == Theme.THEME_MODERN_DARK_TINY:
return "Modern Dark (Tiny)"
elif idx == Theme.THEME_CLASSIC_DARK:
return "Classic Dark"
elif idx == Theme.THEME_OOSTUDIO:
return "OpenOctave Studio"
else:
return ""



Loading…
Cancel
Save