#!/usr/bin/env python3 # -*- coding: utf-8 -*- # PatchBay Canvas engine using QGraphicsView/Scene # Copyright (C) 2010-2019 Filipe Coelho # # 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 QAbstractAnimation from PyQt5.QtWidgets import QGraphicsObject # ------------------------------------------------------------------------------------------------------------ # Imports (Custom) from . import canvas, CanvasBoxType # ------------------------------------------------------------------------------------------------------------ class CanvasFadeAnimation(QAbstractAnimation): def __init__(self, item, show): QAbstractAnimation.__init__(self) self.m_show = show self.m_duration = 0 self.m_item = item self.m_item_is_object = isinstance(item, QGraphicsObject) def item(self): return self.m_item def forceStop(self): self.blockSignals(True) self.stop() self.blockSignals(False) def setDuration(self, time): if self.m_item.opacity() == 0 and not self.m_show: self.m_duration = 0 else: if self.m_item_is_object: self.m_item.blockSignals(True) self.m_item.show() self.m_item.blockSignals(False) else: self.m_item.show() self.m_duration = time def duration(self): return self.m_duration def updateCurrentTime(self, time): if self.m_duration == 0: return if self.m_show: value = float(time) / self.m_duration else: value = 1.0 - (float(time) / self.m_duration) try: self.m_item.setOpacity(value) except RuntimeError: print("CanvasFadeAnimation::updateCurrentTime() - failed to animate canvas item, already destroyed?") self.forceStop() canvas.animation_list.remove(self) return if self.m_item.type() == CanvasBoxType: self.m_item.setShadowOpacity(value) def updateDirection(self, direction): pass def updateState(self, oldState, newState): pass # ------------------------------------------------------------------------------------------------------------