diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-09-13 15:54:01 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-09-13 15:54:01 +1000 |
| commit | c2aa63b99abb6d1388f0e4f5e64a20ee24dd7551 (patch) | |
| tree | e9b146773dda02d0ec20a299469b2ddd839ae870 /plugin/src/Caelestia/Internal/circularindicatormanager.hpp | |
| parent | plugin/managers: add CircularIndicatorManager (diff) | |
| download | caelestia-shell-c2aa63b99abb6d1388f0e4f5e64a20ee24dd7551.tar.gz caelestia-shell-c2aa63b99abb6d1388f0e4f5e64a20ee24dd7551.tar.bz2 caelestia-shell-c2aa63b99abb6d1388f0e4f5e64a20ee24dd7551.zip | |
plugin: managers -> internal
Diffstat (limited to 'plugin/src/Caelestia/Internal/circularindicatormanager.hpp')
| -rw-r--r-- | plugin/src/Caelestia/Internal/circularindicatormanager.hpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/plugin/src/Caelestia/Internal/circularindicatormanager.hpp b/plugin/src/Caelestia/Internal/circularindicatormanager.hpp new file mode 100644 index 0000000..71da93d --- /dev/null +++ b/plugin/src/Caelestia/Internal/circularindicatormanager.hpp @@ -0,0 +1,72 @@ +#pragma once + +#include <qeasingcurve.h> +#include <qobject.h> +#include <qqmlintegration.h> + +namespace caelestia { + +class CircularIndicatorManager : public QObject { + Q_OBJECT + QML_ELEMENT + + Q_PROPERTY(qreal startFraction READ startFraction NOTIFY startFractionChanged) + Q_PROPERTY(qreal endFraction READ endFraction NOTIFY endFractionChanged) + Q_PROPERTY(qreal rotation READ rotation NOTIFY rotationChanged) + Q_PROPERTY(qreal progress READ progress WRITE setProgress NOTIFY progressChanged) + Q_PROPERTY(qreal completeEndProgress READ completeEndProgress WRITE setCompleteEndProgress NOTIFY + completeEndProgressChanged) + Q_PROPERTY(qreal duration READ duration NOTIFY indeterminateAnimationTypeChanged) + Q_PROPERTY(qreal completeEndDuration READ completeEndDuration NOTIFY indeterminateAnimationTypeChanged) + Q_PROPERTY(IndeterminateAnimationType indeterminateAnimationType READ indeterminateAnimationType WRITE + setIndeterminateAnimationType NOTIFY indeterminateAnimationTypeChanged) + +public: + explicit CircularIndicatorManager(QObject* parent = nullptr); + + enum IndeterminateAnimationType { + Advance = 0, + Retreat + }; + Q_ENUM(IndeterminateAnimationType) + + [[nodiscard]] qreal startFraction() const; + [[nodiscard]] qreal endFraction() const; + [[nodiscard]] qreal rotation() const; + + [[nodiscard]] qreal progress() const; + void setProgress(qreal progress); + + [[nodiscard]] qreal completeEndProgress() const; + void setCompleteEndProgress(qreal progress); + + [[nodiscard]] qreal duration() const; + [[nodiscard]] qreal completeEndDuration() const; + + [[nodiscard]] IndeterminateAnimationType indeterminateAnimationType() const; + void setIndeterminateAnimationType(IndeterminateAnimationType t); + +signals: + void startFractionChanged(); + void endFractionChanged(); + void rotationChanged(); + void progressChanged(); + void completeEndProgressChanged(); + void indeterminateAnimationTypeChanged(); + +private: + IndeterminateAnimationType m_type; + QEasingCurve m_curve; + + qreal m_progress; + qreal m_startFraction; + qreal m_endFraction; + qreal m_rotation; + qreal m_completeEndProgress; + + void update(qreal progress); + void updateAdvance(qreal progress); + void updateRetreat(qreal progress); +}; + +} // namespace caelestia |