Browse Source

Group and port highlight effect

Draw highlight outline, for if outline is empty (Qt.NoPen), highlight entire background.
TODO: Do we need full bg/fg/outline hover-highlighting support?
pull/170/head
Nikita Zlobin 7 years ago
parent
commit
c9c4114f5d
2 changed files with 52 additions and 1 deletions
  1. +39
    -1
      src/patchcanvas.py
  2. +13
    -0
      src/patchcanvas_theme.py

+ 39
- 1
src/patchcanvas.py View File

@@ -1663,9 +1663,11 @@ class CanvasPort(QGraphicsItem):
self.m_last_selected_state = False

self.m_mouse_down = False
self.m_mouse_over = False
self.m_cursor_moving = False

self.setFlags(QGraphicsItem.ItemIsSelectable)
self.setAcceptHoverEvents(True)

def getPortId(self):
return self.m_port_id
@@ -1713,6 +1715,14 @@ class CanvasPort(QGraphicsItem):
def type(self):
return CanvasPortType

def hoverEnterEvent(self, event):
self.m_mouse_over = True
QGraphicsItem.hoverEnterEvent(self, event)

def hoverLeaveEvent(self, event):
self.m_mouse_over = False
QGraphicsItem.hoverLeaveEvent(self, event)

def mousePressEvent(self, event):
self.m_hover_item = None
self.m_mouse_down = bool(event.button() == Qt.LeftButton)
@@ -1964,6 +1974,15 @@ class CanvasPort(QGraphicsItem):

painter.setPen(poly_pen)
painter.drawPath(path)
if self.m_mouse_over and canvas.theme.port_hover:
if poly_pen.style() == Qt.NoPen:
painter.setBrush(canvas.theme.port_hover)
else:
pen = QPen(poly_pen)
pen.setColor(canvas.theme.port_hover)
painter.setPen(pen)
painter.setBrush(Qt.NoBrush)
painter.drawPath(path)

painter.setPen(text_pen)
painter.setFont(self.m_port_font)
@@ -2022,6 +2041,7 @@ class CanvasBox(QGraphicsItem):
self.m_cursor_moving = False
self.m_forced_split = False
self.m_mouse_down = False
self.m_mouse_over = False

self.m_port_list_ids = []
self.m_connection_lines = []
@@ -2046,6 +2066,7 @@ class CanvasBox(QGraphicsItem):

# Final touches
self.setFlags(QGraphicsItem.ItemIsMovable | QGraphicsItem.ItemIsSelectable)
self.setAcceptHoverEvents(True)

# Wait for at least 1 port
if options.auto_hide_groups:
@@ -2435,6 +2456,14 @@ class CanvasBox(QGraphicsItem):

event.accept()

def hoverEnterEvent(self, event):
self.m_mouse_over = True
QGraphicsItem.hoverEnterEvent(self, event)

def hoverLeaveEvent(self, event):
self.m_mouse_over = False
QGraphicsItem.hoverLeaveEvent(self, event)

def mousePressEvent(self, event):
canvas.last_z_value += 1
self.setZValue(canvas.last_z_value)
@@ -2504,7 +2533,16 @@ class CanvasBox(QGraphicsItem):
painter.setBrush(canvas.theme.box_bg_1)

rect.adjust(line_width / 2, line_width / 2, -line_width / 2, -line_width / 2)
painter.drawRoundedRect(rect, rounding, rounding)
path = QPainterPath()
path.addRoundedRect(rect, rounding, rounding)

painter.drawPath(path)
if self.m_mouse_over and canvas.theme.box_hover:
pen = QPen(canvas.theme.box_pen)
pen.setColor(canvas.theme.box_hover)
painter.setPen(pen)
painter.setBrush(Qt.NoBrush)
painter.drawPath(path)

# Draw pixmap header
rect.setHeight(canvas.theme.box_header_height)


+ 13
- 0
src/patchcanvas_theme.py View File

@@ -75,6 +75,7 @@ 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_hover = QColor(255, 255, 255, 60)
self.box_header_pixmap = None
self.box_header_height = 24
self.box_header_spacing = 0
@@ -91,6 +92,7 @@ class Theme(object):

# Ports
self.port_text = QPen(QColor(250, 250, 250, 180), 0)
self.port_hover = QColor(255, 255, 255, 80)
self.port_bg_pixmap = None
self.port_font_name = "Deja Vu Sans"
self.port_font_size = 8
@@ -169,6 +171,7 @@ 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_hover = QColor(255, 255, 255, 60)
self.box_header_pixmap = None
self.box_header_height = 14
self.box_header_spacing = 0
@@ -185,6 +188,7 @@ class Theme(object):

# Ports
self.port_text = QPen(QColor(250, 250, 250, 220), 0)
self.port_hover = QColor(255, 255, 255, 80)
self.port_bg_pixmap = None
self.port_font_name = "Deja Vu Sans"
self.port_font_size = 6
@@ -263,6 +267,7 @@ class Theme(object):
self.box_bg_1 = QColor(220, 220, 220)
self.box_bg_2 = self.box_bg_1.darker(120)
self.box_shadow = QColor(1, 1, 1, 100)
self.box_hover = QColor(0, 0, 0, 60)
self.box_header_pixmap = None
self.box_header_height = 24
self.box_header_spacing = 0
@@ -279,6 +284,7 @@ class Theme(object):

# Ports
self.port_text = QPen(QColor(255, 255, 255, 220), 1)
self.port_hover = QColor(0, 0, 0, 255)
self.port_bg_pixmap = None
self.port_font_name = "Ubuntu"
self.port_font_size = 9
@@ -368,6 +374,7 @@ 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_hover = QColor(255, 255, 255, 60)
self.box_header_pixmap = None
self.box_header_height = 19
self.box_header_spacing = 0
@@ -384,6 +391,7 @@ class Theme(object):

# Ports
self.port_text = QPen(QColor(250, 250, 250), 0)
self.port_hover = QColor(255, 255, 255, 40)
self.port_bg_pixmap = None
self.port_font_name = "Sans"
self.port_font_size = 8
@@ -452,6 +460,7 @@ 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_hover = QColor(255, 255, 255, 60)
self.box_header_pixmap = None
self.box_header_height = 19
self.box_header_spacing = 0
@@ -468,6 +477,7 @@ class Theme(object):

# Ports
self.port_text = QPen(QColor(250, 250, 250), 0)
self.port_hover = QColor(255, 255, 255, 80)
self.port_bg_pixmap = None
self.port_font_name = "Sans"
self.port_font_size = 8
@@ -539,6 +549,7 @@ class Theme(object):
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_hover = QColor(255, 255, 255, 60)
self.box_header_pixmap = QPixmap(":/bitmaps/canvas/frame_node_header.png")
self.box_header_height = 22
self.box_header_spacing = 6
@@ -558,6 +569,7 @@ class Theme(object):
selPortBG = QColor(23, 23, 23)

self.port_text = QPen(QColor(155, 155, 155), 0)
self.port_hover = QColor(255, 255, 255, 80)
self.port_bg_pixmap = QPixmap(":/bitmaps/canvas/frame_port_bg.png")
self.port_font_name = "Deja Vu Sans"
self.port_font_size = 8
@@ -615,6 +627,7 @@ class Theme(object):
self.rubberband_pen = QPen(QColor(1, 230, 238), 2, Qt.SolidLine)
self.rubberband_brush = QColor(90, 90, 90, 100)

# Font-dependant port height
port_font = QFont(self.port_font_name, self.port_font_size, self.port_font_state)
self.port_height = QFontMetrics(port_font).height() + 2 * self.port_text_padding



Loading…
Cancel
Save