2022-08-19 15:59:36 +02:00
|
|
|
// Copyright (C) 2016 The Qt Company Ltd.
|
2022-12-21 10:12:09 +01:00
|
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
2008-12-02 15:08:31 +01:00
|
|
|
|
2016-03-18 07:55:01 +01:00
|
|
|
#pragma once
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2023-03-24 15:24:58 +02:00
|
|
|
#include "utils_global.h"
|
|
|
|
|
|
|
|
|
|
#include <QBasicTimer>
|
2012-02-15 10:42:41 +01:00
|
|
|
#include <QPointer>
|
|
|
|
|
#include <QTime>
|
|
|
|
|
#include <QWidget>
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2023-03-24 15:24:58 +02:00
|
|
|
class QPainter;
|
|
|
|
|
class QStyleOption;
|
|
|
|
|
|
|
|
|
|
namespace Utils {
|
2010-01-29 21:33:57 +01:00
|
|
|
/*
|
2008-12-02 12:01:29 +01:00
|
|
|
* This is a set of helper classes to allow for widget animations in
|
|
|
|
|
* the style. Its mostly taken from Vista style so it should be fully documented
|
|
|
|
|
* there.
|
|
|
|
|
*
|
|
|
|
|
*/
|
2010-01-29 21:33:57 +01:00
|
|
|
|
2023-03-24 15:24:58 +02:00
|
|
|
class QTCREATOR_UTILS_EXPORT Animation
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
public :
|
2018-07-21 21:11:46 +02:00
|
|
|
Animation() = default;
|
|
|
|
|
virtual ~Animation() = default;
|
2009-01-26 15:27:04 +01:00
|
|
|
QWidget * widget() const { return m_widget; }
|
|
|
|
|
bool running() const { return m_running; }
|
|
|
|
|
const QTime &startTime() const { return m_startTime; }
|
|
|
|
|
void setRunning(bool val) { m_running = val; }
|
|
|
|
|
void setWidget(QWidget *widget) { m_widget = widget; }
|
|
|
|
|
void setStartTime(const QTime &startTime) { m_startTime = startTime; }
|
2008-12-02 12:01:29 +01:00
|
|
|
virtual void paint(QPainter *painter, const QStyleOption *option);
|
|
|
|
|
|
|
|
|
|
protected:
|
2014-05-19 18:27:46 +03:00
|
|
|
void drawBlendedImage(QPainter *painter, const QRect &rect, float value);
|
2009-01-26 15:27:04 +01:00
|
|
|
QTime m_startTime;
|
|
|
|
|
QPointer<QWidget> m_widget;
|
|
|
|
|
QImage m_primaryImage;
|
|
|
|
|
QImage m_secondaryImage;
|
|
|
|
|
QImage m_tempImage;
|
2018-07-21 21:11:46 +02:00
|
|
|
bool m_running = true;
|
2008-12-02 12:01:29 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Handles state transition animations
|
2023-03-24 15:24:58 +02:00
|
|
|
class QTCREATOR_UTILS_EXPORT Transition : public Animation
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
|
|
|
|
public :
|
2018-07-21 21:11:46 +02:00
|
|
|
Transition() = default;
|
|
|
|
|
~Transition() override = default;
|
2009-01-26 15:27:04 +01:00
|
|
|
void setDuration(int duration) { m_duration = duration; }
|
|
|
|
|
void setStartImage(const QImage &image) { m_primaryImage = image; }
|
|
|
|
|
void setEndImage(const QImage &image) { m_secondaryImage = image; }
|
2018-07-21 21:11:46 +02:00
|
|
|
void paint(QPainter *painter, const QStyleOption *option) override;
|
2009-01-26 15:27:04 +01:00
|
|
|
int duration() const { return m_duration; }
|
2018-07-21 21:11:46 +02:00
|
|
|
int m_duration = 100; //set time in ms to complete a state transition
|
2008-12-02 12:01:29 +01:00
|
|
|
};
|
|
|
|
|
|
2023-03-24 15:24:58 +02:00
|
|
|
class QTCREATOR_UTILS_EXPORT StyleAnimator : public QObject
|
2008-12-02 12:01:29 +01:00
|
|
|
{
|
2009-07-11 09:41:57 +02:00
|
|
|
Q_OBJECT
|
2008-12-02 12:01:29 +01:00
|
|
|
|
|
|
|
|
public:
|
2018-07-21 21:11:46 +02:00
|
|
|
StyleAnimator(QObject *parent = nullptr) : QObject(parent) {}
|
2008-12-02 12:01:29 +01:00
|
|
|
|
2018-07-21 21:11:46 +02:00
|
|
|
void timerEvent(QTimerEvent *) override;
|
2008-12-02 12:01:29 +01:00
|
|
|
void startAnimation(Animation *);
|
|
|
|
|
void stopAnimation(const QWidget *);
|
|
|
|
|
Animation* widgetAnimation(const QWidget *) const;
|
2010-01-29 21:33:57 +01:00
|
|
|
|
2008-12-02 12:01:29 +01:00
|
|
|
private:
|
|
|
|
|
QBasicTimer animationTimer;
|
|
|
|
|
QList <Animation*> animations;
|
|
|
|
|
};
|
2023-03-24 15:24:58 +02:00
|
|
|
}
|