/* * SPDX-FileCopyrightText: 2014 Hugo Pereira Da Costa * * SPDX-License-Identifier: GPL-2.0-or-later */ #pragma once #include "breezeanimationdata.h" #include namespace Breeze { //* handles spinbox arrows hover class SpinBoxData : public AnimationData { Q_OBJECT //* declare opacity property Q_PROPERTY(qreal upArrowOpacity READ upArrowOpacity WRITE setUpArrowOpacity) Q_PROPERTY(qreal downArrowOpacity READ downArrowOpacity WRITE setDownArrowOpacity) public: //* constructor SpinBoxData(QObject *parent, QObject *target, int duration); //* animation state bool updateState(QStyle::SubControl subControl, bool value) { if (subControl == QStyle::SC_SpinBoxUp) { return _upArrowData.updateState(value); } else if (subControl == QStyle::SC_SpinBoxDown) { return _downArrowData.updateState(value); } else { return false; } } //* animation state bool isAnimated(QStyle::SubControl subControl) const { return ((subControl == QStyle::SC_SpinBoxUp && upArrowAnimation().data()->isRunning()) || (subControl == QStyle::SC_SpinBoxDown && downArrowAnimation().data()->isRunning())); } //* opacity qreal opacity(QStyle::SubControl subControl) const { if (subControl == QStyle::SC_SpinBoxUp) { return upArrowOpacity(); } else if (subControl == QStyle::SC_SpinBoxDown) { return downArrowOpacity(); } else { return OpacityInvalid; } } //* duration void setDuration(int duration) override { upArrowAnimation().data()->setDuration(duration); downArrowAnimation().data()->setDuration(duration); } //*@name up arrow animation //@{ //* opacity qreal upArrowOpacity() const { return _upArrowData._opacity; } //* opacity void setUpArrowOpacity(qreal value) { value = digitize(value); if (_upArrowData._opacity == value) { return; } _upArrowData._opacity = value; setDirty(); } //* animation Animation::Pointer upArrowAnimation() const { return _upArrowData._animation; } //@} //*@name down arrow animation //@{ //* opacity qreal downArrowOpacity() const { return _downArrowData._opacity; } //* opacity void setDownArrowOpacity(qreal value) { value = digitize(value); if (_downArrowData._opacity == value) { return; } _downArrowData._opacity = value; setDirty(); } //* animation Animation::Pointer downArrowAnimation() const { return _downArrowData._animation; } //@} private: //* container for needed animation data class Data { public: //* default constructor Data() : _state(false) , _opacity(0) { } //* state bool updateState(bool); //* arrow state bool _state; //* animation Animation::Pointer _animation; //* opacity qreal _opacity; }; //* up arrow data Data _upArrowData; //* down arrow data Data _downArrowData; }; }