mirror of
https://gitgud.io/wackyideas/aerothemeplasma.git
synced 2024-08-15 00:43:43 +00:00
144 lines
3 KiB
C++
144 lines
3 KiB
C++
//////////////////////////////////////////////////////////////////////////////
|
|
// breezetransitiondata.h
|
|
// data container for generic transitions
|
|
// -------------------
|
|
//
|
|
// SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr>
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#pragma once
|
|
|
|
#include "breezetransitionwidget.h"
|
|
|
|
#include <QElapsedTimer>
|
|
#include <QObject>
|
|
#include <QWidget>
|
|
|
|
namespace Breeze
|
|
{
|
|
//* generic data
|
|
class TransitionData : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
//* constructor
|
|
TransitionData(QObject *parent, QWidget *target, int);
|
|
|
|
//* destructor
|
|
virtual ~TransitionData();
|
|
|
|
//* enability
|
|
virtual void setEnabled(bool value)
|
|
{
|
|
_enabled = value;
|
|
}
|
|
|
|
//* enability
|
|
virtual bool enabled() const
|
|
{
|
|
return _enabled;
|
|
}
|
|
|
|
//* duration
|
|
virtual void setDuration(int duration)
|
|
{
|
|
if (_transition) {
|
|
_transition.data()->setDuration(duration);
|
|
}
|
|
}
|
|
|
|
//* max render time
|
|
void setMaxRenderTime(int value)
|
|
{
|
|
_maxRenderTime = value;
|
|
}
|
|
|
|
//* max renderTime
|
|
const int &maxRenderTime() const
|
|
{
|
|
return _maxRenderTime;
|
|
}
|
|
|
|
//* start clock
|
|
void startClock()
|
|
{
|
|
if (!_clock.isValid()) {
|
|
_clock.start();
|
|
} else {
|
|
_clock.restart();
|
|
}
|
|
}
|
|
|
|
//* check if rendering is too slow
|
|
bool slow() const
|
|
{
|
|
return !(!_clock.isValid() || _clock.elapsed() <= maxRenderTime());
|
|
}
|
|
|
|
protected Q_SLOTS:
|
|
|
|
//* initialize animation
|
|
virtual bool initializeAnimation() = 0;
|
|
|
|
//* animate
|
|
virtual bool animate() = 0;
|
|
|
|
protected:
|
|
//* returns true if one parent matches given class name
|
|
inline bool hasParent(const QWidget *, const char *) const;
|
|
|
|
//* transition widget
|
|
virtual const TransitionWidget::Pointer &transition() const
|
|
{
|
|
return _transition;
|
|
}
|
|
|
|
//* used to avoid recursion when grabbing widgets
|
|
void setRecursiveCheck(bool value)
|
|
{
|
|
_recursiveCheck = value;
|
|
}
|
|
|
|
//* used to avoid recursion when grabbing widgets
|
|
bool recursiveCheck() const
|
|
{
|
|
return _recursiveCheck;
|
|
}
|
|
|
|
private:
|
|
//* enability
|
|
bool _enabled = true;
|
|
|
|
//* used to avoid recursion when grabbing widgets
|
|
bool _recursiveCheck = false;
|
|
|
|
//* timer used to detect slow rendering
|
|
QElapsedTimer _clock;
|
|
|
|
//* max render time
|
|
/*! used to detect slow rendering */
|
|
int _maxRenderTime = 200;
|
|
|
|
//* animation handling
|
|
TransitionWidget::Pointer _transition;
|
|
};
|
|
|
|
//_____________________________________________________________________________________
|
|
bool TransitionData::hasParent(const QWidget *widget, const char *className) const
|
|
{
|
|
if (!widget) {
|
|
return false;
|
|
}
|
|
for (QWidget *parent = widget->parentWidget(); parent; parent = parent->parentWidget()) {
|
|
if (parent->inherits(className)) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
}
|