#!/usr/bin/env python3 # SPDX-FileCopyrightText: 2011-2024 Filipe Coelho # SPDX-License-Identifier: GPL-2.0-or-later # ------------------------------------------------------------------------------------------------------------ # Imports (Global) from qt_compat import qt_config if qt_config == 5: from PyQt5.QtCore import qCritical, QRectF from PyQt5.QtGui import QPainter from PyQt5.QtSvg import QGraphicsSvgItem, QSvgRenderer from PyQt5.QtWidgets import QGraphicsColorizeEffect elif qt_config == 6: from PyQt6.QtCore import qCritical, QRectF from PyQt6.QtGui import QPainter from PyQt6.QtSvg import QSvgRenderer from PyQt6.QtSvgWidgets import QGraphicsSvgItem from PyQt6.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) self.setParentItem(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() # ------------------------------------------------------------------------------------------------------------