2024-02-17 22:51:19 +00:00
|
|
|
/*
|
|
|
|
* SPDX-FileCopyrightText: 2014 Hugo Pereira Da Costa <hugo.pereira@free.fr>
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
*/
|
2024-08-09 01:20:25 +00:00
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "config-breeze.h"
|
2024-02-17 22:51:19 +00:00
|
|
|
|
|
|
|
#include "breezeanimation.h"
|
|
|
|
|
2024-08-09 01:20:25 +00:00
|
|
|
#if BREEZE_HAVE_QTQUICK
|
|
|
|
#include <QQuickItem>
|
|
|
|
#endif
|
|
|
|
|
2024-02-17 22:51:19 +00:00
|
|
|
#include <QEvent>
|
|
|
|
#include <QObject>
|
|
|
|
#include <QWidget>
|
|
|
|
|
|
|
|
#include <cmath>
|
|
|
|
|
|
|
|
namespace Breeze
|
|
|
|
{
|
|
|
|
//* base class
|
|
|
|
class AnimationData : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
//* constructor
|
2024-08-09 01:20:25 +00:00
|
|
|
AnimationData(QObject *parent, QObject *target)
|
2024-02-17 22:51:19 +00:00
|
|
|
: QObject(parent)
|
|
|
|
, _target(target)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
//* duration
|
|
|
|
virtual void setDuration(int) = 0;
|
|
|
|
|
|
|
|
//* steps
|
|
|
|
static void setSteps(int value)
|
|
|
|
{
|
|
|
|
_steps = value;
|
|
|
|
}
|
|
|
|
|
|
|
|
//* enability
|
|
|
|
virtual bool enabled() const
|
|
|
|
{
|
|
|
|
return _enabled;
|
|
|
|
}
|
|
|
|
|
|
|
|
//* enability
|
|
|
|
virtual void setEnabled(bool value)
|
|
|
|
{
|
|
|
|
_enabled = value;
|
|
|
|
}
|
|
|
|
|
|
|
|
//* target
|
2024-08-09 01:20:25 +00:00
|
|
|
const WeakPointer<QObject> &target() const
|
2024-02-17 22:51:19 +00:00
|
|
|
{
|
|
|
|
return _target;
|
|
|
|
}
|
|
|
|
|
|
|
|
//* invalid opacity
|
|
|
|
static const qreal OpacityInvalid;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
//* setup animation
|
|
|
|
virtual void setupAnimation(const Animation::Pointer &animation, const QByteArray &property);
|
|
|
|
|
|
|
|
//* apply step
|
|
|
|
virtual qreal digitize(const qreal &value) const
|
|
|
|
{
|
|
|
|
if (_steps > 0) {
|
|
|
|
return std::floor(value * _steps) / _steps;
|
|
|
|
} else {
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//* trigger target update
|
|
|
|
virtual void setDirty() const
|
|
|
|
{
|
2024-08-09 01:20:25 +00:00
|
|
|
if (auto widget = qobject_cast<QWidget *>(_target)) {
|
|
|
|
widget->update();
|
2024-02-17 22:51:19 +00:00
|
|
|
}
|
2024-08-09 01:20:25 +00:00
|
|
|
#if BREEZE_HAVE_QTQUICK
|
|
|
|
else if (auto item = qobject_cast<QQuickItem *>(_target)) {
|
|
|
|
// Note: Calling polish() instead of update() because that's where
|
|
|
|
// Breeze would repaint its image for texture.
|
|
|
|
item->polish();
|
|
|
|
}
|
|
|
|
#endif
|
2024-02-17 22:51:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
//* guarded target
|
2024-08-09 01:20:25 +00:00
|
|
|
WeakPointer<QObject> _target;
|
2024-02-17 22:51:19 +00:00
|
|
|
|
|
|
|
//* enability
|
|
|
|
bool _enabled = true;
|
|
|
|
|
|
|
|
//* steps
|
|
|
|
static int _steps;
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|