|
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
-
- # PatchBay Canvas engine using QGraphicsView/Scene
- # Copyright (C) 2010-2019 Filipe Coelho <falktx@falktx.com>
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License as
- # published by the Free Software Foundation; either version 2 of
- # the License, or any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # For a full copy of the GNU General Public License see the doc/GPL.txt file.
-
- # ------------------------------------------------------------------------------------------------------------
- # Imports (Global)
-
- from PyQt5.QtCore import qCritical, QRectF
- from PyQt5.QtGui import QPainter
- from PyQt5.QtSvg import QGraphicsSvgItem, QSvgRenderer
- from PyQt5.QtWidgets import QGraphicsColorizeEffect
-
- # ------------------------------------------------------------------------------------------------------------
- # Imports (Custom)
-
- from . import (
- canvas,
- icon2str,
- CanvasIconType,
- ICON_APPLICATION,
- ICON_HARDWARE,
- ICON_DISTRHO,
- ICON_FILE,
- ICON_PLUGIN,
- ICON_LADISH_ROOM,
- )
-
- # ------------------------------------------------------------------------------------------------------------
-
- class CanvasIcon(QGraphicsSvgItem):
- def __init__(self, icon, name, parent):
- QGraphicsSvgItem.__init__(self, parent)
-
- self.m_renderer = None
- self.p_size = QRectF(0, 0, 0, 0)
-
- self.m_colorFX = QGraphicsColorizeEffect(self)
- self.m_colorFX.setColor(canvas.theme.box_text.color())
-
- self.setGraphicsEffect(self.m_colorFX)
- self.setIcon(icon, name)
-
- def setIcon(self, icon, name):
- name = name.lower()
- icon_path = ""
-
- if icon == ICON_APPLICATION:
- self.p_size = QRectF(3, 2, 19, 18)
-
- if "audacious" in name:
- icon_path = ":/scalable/pb_audacious.svg"
- self.p_size = QRectF(5, 4, 16, 16)
- elif "clementine" in name:
- icon_path = ":/scalable/pb_clementine.svg"
- self.p_size = QRectF(5, 4, 16, 16)
- elif "distrho" in name:
- icon_path = ":/scalable/pb_distrho.svg"
- self.p_size = QRectF(5, 4, 16, 16)
- elif "jamin" in name:
- icon_path = ":/scalable/pb_jamin.svg"
- self.p_size = QRectF(5, 3, 16, 16)
- elif "mplayer" in name:
- icon_path = ":/scalable/pb_mplayer.svg"
- self.p_size = QRectF(5, 4, 16, 16)
- elif "vlc" in name:
- icon_path = ":/scalable/pb_vlc.svg"
- self.p_size = QRectF(5, 3, 16, 16)
-
- else:
- icon_path = ":/scalable/pb_generic.svg"
- self.p_size = QRectF(4, 3, 16, 16)
-
- elif icon == ICON_HARDWARE:
- icon_path = ":/scalable/pb_hardware.svg"
- self.p_size = QRectF(5, 2, 16, 16)
-
- elif icon == ICON_DISTRHO:
- icon_path = ":/scalable/pb_distrho.svg"
- self.p_size = QRectF(5, 4, 16, 16)
-
- elif icon == ICON_FILE:
- icon_path = ":/scalable/pb_file.svg"
- self.p_size = QRectF(5, 4, 16, 16)
-
- elif icon == ICON_PLUGIN:
- icon_path = ":/scalable/pb_plugin.svg"
- self.p_size = QRectF(5, 4, 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)
-
- else:
- self.p_size = QRectF(0, 0, 0, 0)
- qCritical("PatchCanvas::CanvasIcon.setIcon(%s, %s) - unsupported icon requested" % (
- icon2str(icon), name.encode()))
- return
-
- self.m_renderer = QSvgRenderer(icon_path, canvas.scene)
- self.setSharedRenderer(self.m_renderer)
- self.update()
-
- def type(self):
- return CanvasIconType
-
- def boundingRect(self):
- return self.p_size
-
- def paint(self, painter, option, widget):
- if not self.m_renderer:
- QGraphicsSvgItem.paint(self, painter, option, widget)
- return
-
- painter.save()
- painter.setRenderHint(QPainter.Antialiasing, False)
- painter.setRenderHint(QPainter.TextAntialiasing, False)
- self.m_renderer.render(painter, self.p_size)
- painter.restore()
-
- # ------------------------------------------------------------------------------------------------------------
|