Files
qt-creator/src/libs/utils/styleanimator.h

80 lines
2.2 KiB
C
Raw Normal View History

// Copyright (C) 2016 The Qt Company Ltd.
// 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
#pragma once
2008-12-02 12:01:29 +01:00
#include "utils_global.h"
#include <QBasicTimer>
#include <QPointer>
#include <QTime>
#include <QWidget>
2008-12-02 12:01:29 +01:00
QT_BEGIN_NAMESPACE
class QPainter;
class QStyleOption;
QT_END_NAMESPACE
namespace Utils {
/*
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.
*
*/
class QTCREATOR_UTILS_EXPORT Animation
2008-12-02 12:01:29 +01:00
{
public :
Animation() = default;
virtual ~Animation() = default;
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:
void drawBlendedImage(QPainter *painter, const QRect &rect, float value);
QTime m_startTime;
QPointer<QWidget> m_widget;
QImage m_primaryImage;
QImage m_secondaryImage;
QImage m_tempImage;
bool m_running = true;
2008-12-02 12:01:29 +01:00
};
// Handles state transition animations
class QTCREATOR_UTILS_EXPORT Transition : public Animation
2008-12-02 12:01:29 +01:00
{
public :
Transition() = default;
~Transition() override = default;
void setDuration(int duration) { m_duration = duration; }
void setStartImage(const QImage &image) { m_primaryImage = image; }
void setEndImage(const QImage &image) { m_secondaryImage = image; }
void paint(QPainter *painter, const QStyleOption *option) override;
int duration() const { return m_duration; }
int m_duration = 100; //set time in ms to complete a state transition
2008-12-02 12:01:29 +01: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:
StyleAnimator(QObject *parent = nullptr) : QObject(parent) {}
2008-12-02 12:01:29 +01: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;
2008-12-02 12:01:29 +01:00
private:
QBasicTimer animationTimer;
QList <Animation*> animations;
};
}