summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@digia.com>2013-03-20 16:02:53 +0100
committerEike Ziller <eike.ziller@digia.com>2013-04-03 09:19:45 +0200
commit36a421e778c5c78dcebabb6712ec215e94e466cd (patch)
treedc7cab1e2f04414ed294578cd29b17b907e4dc4e
parent37e0b9145068ea9675ec4e3008cc3faafd4790f7 (diff)
downloadqt-creator-36a421e778c5c78dcebabb6712ec215e94e466cd.tar.gz
ProgressManager: Use QGraphicsOpacityEffect instead of hack
Change-Id: Ic3bd8e7d8d33a14be0e49e2d4a22ea30384aebc5 Reviewed-by: Eike Ziller <eike.ziller@digia.com>
-rw-r--r--src/plugins/coreplugin/progressmanager/futureprogress.cpp94
-rw-r--r--src/plugins/coreplugin/progressmanager/futureprogress.h4
2 files changed, 34 insertions, 64 deletions
diff --git a/src/plugins/coreplugin/progressmanager/futureprogress.cpp b/src/plugins/coreplugin/progressmanager/futureprogress.cpp
index 9db8c768f2..d0e78fece9 100644
--- a/src/plugins/coreplugin/progressmanager/futureprogress.cpp
+++ b/src/plugins/coreplugin/progressmanager/futureprogress.cpp
@@ -30,55 +30,30 @@
#include "futureprogress.h"
#include "progressbar.h"
-#include <QFutureWatcher>
-#include <QTimer>
#include <QCoreApplication>
+#include <QFutureWatcher>
+#include <QGraphicsOpacityEffect>
#include <QPropertyAnimation>
#include <QSequentialAnimationGroup>
+#include <QTimer>
#include <QVBoxLayout>
#include <QHBoxLayout>
-#include <QPainter>
#include <QMouseEvent>
-#include <utils/stylehelper.h>
const int notificationTimeout = 8000;
const int shortNotificationTimeout = 1000;
namespace Core {
-namespace Internal {
-class FadeWidgetHack : public QWidget
+class FutureProgressPrivate : public QObject
{
Q_OBJECT
- Q_PROPERTY(float opacity READ opacity WRITE setOpacity)
-public:
- FadeWidgetHack(QWidget *parent):QWidget(parent), m_opacity(0){
- setAttribute(Qt::WA_TransparentForMouseEvents);
- }
- void paintEvent(QPaintEvent *);
-
- void setOpacity(float o) { m_opacity = o; update(); }
- float opacity() const { return m_opacity; }
-
-private:
- float m_opacity;
-};
-
-void FadeWidgetHack::paintEvent(QPaintEvent *)
-{
- if (m_opacity == 0)
- return;
-
- QPainter p(this);
- p.setOpacity(m_opacity);
- if (m_opacity > 0)
- Utils::StyleHelper::verticalGradient(&p, rect(), rect());
-}
-} // namespace Internal
+public slots:
+ void fadeAway();
-struct FutureProgressPrivate {
+public:
explicit FutureProgressPrivate(FutureProgress *q);
void tryToFadeAway();
@@ -90,7 +65,6 @@ struct FutureProgressPrivate {
QString m_type;
FutureProgress::KeepOnFinishType m_keep;
bool m_waitingForUserInteraction;
- Internal::FadeWidgetHack *m_faderWidget;
FutureProgress *m_q;
bool m_isFading;
};
@@ -98,7 +72,7 @@ struct FutureProgressPrivate {
FutureProgressPrivate::FutureProgressPrivate(FutureProgress *q) :
m_progress(new Internal::ProgressBar), m_widget(0), m_widgetLayout(new QHBoxLayout),
m_keep(FutureProgress::HideOnFinish), m_waitingForUserInteraction(false),
- m_faderWidget(new Internal::FadeWidgetHack(q)), m_q(q), m_isFading(false)
+ m_q(q), m_isFading(false)
{
}
@@ -231,9 +205,9 @@ void FutureProgress::setStarted()
bool FutureProgress::eventFilter(QObject *, QEvent *e)
{
if (d->m_keep != KeepOnFinish && d->m_waitingForUserInteraction
- && (e->type() == QEvent::MouseMove || e->type() == QEvent::KeyPress)) {
+ && (e->type() == QEvent::MouseMove || e->type() == QEvent::KeyPress)) {
qApp->removeEventFilter(this);
- QTimer::singleShot(notificationTimeout, this, SLOT(fadeAway()));
+ QTimer::singleShot(notificationTimeout, d, SLOT(fadeAway()));
}
return false;
}
@@ -264,7 +238,7 @@ void FutureProgressPrivate::tryToFadeAway()
qApp->installEventFilter(m_q);
m_isFading = true;
} else if (m_keep == FutureProgress::HideOnFinish) {
- QTimer::singleShot(shortNotificationTimeout, m_q, SLOT(fadeAway()));
+ QTimer::singleShot(shortNotificationTimeout, this, SLOT(fadeAway()));
m_isFading = true;
}
}
@@ -314,11 +288,6 @@ void FutureProgress::mousePressEvent(QMouseEvent *event)
QWidget::mousePressEvent(event);
}
-void FutureProgress::resizeEvent(QResizeEvent *)
-{
- d->m_faderWidget->setGeometry(rect());
-}
-
/*!
\fn bool FutureProgress::hasError() const
Returns the error state of this progress indicator.
@@ -328,25 +297,6 @@ bool FutureProgress::hasError() const
return d->m_progress->hasError();
}
-void FutureProgress::fadeAway()
-{
- d->m_faderWidget->raise();
- QSequentialAnimationGroup *group = new QSequentialAnimationGroup(this);
- QPropertyAnimation *animation = new QPropertyAnimation(d->m_faderWidget, "opacity");
- animation->setDuration(600);
- animation->setEndValue(1.0);
- group->addAnimation(animation);
- animation = new QPropertyAnimation(this, "maximumHeight");
- animation->setDuration(120);
- animation->setEasingCurve(QEasingCurve::InCurve);
- animation->setStartValue(sizeHint().height());
- animation->setEndValue(0.0);
- group->addAnimation(animation);
- group->start(QAbstractAnimation::DeleteWhenStopped);
-
- connect(group, SIGNAL(finished()), this, SIGNAL(removeMe()));
-}
-
void FutureProgress::setType(const QString &type)
{
d->m_type = type;
@@ -378,6 +328,28 @@ QWidget *FutureProgress::widget() const
return d->m_widget;
}
+void FutureProgressPrivate::fadeAway()
+{
+ QGraphicsOpacityEffect *opacityEffect = new QGraphicsOpacityEffect;
+ opacityEffect->setOpacity(1.);
+ m_q->setGraphicsEffect(opacityEffect);
+
+ QSequentialAnimationGroup *group = new QSequentialAnimationGroup(this);
+ QPropertyAnimation *animation = new QPropertyAnimation(opacityEffect, "opacity");
+ animation->setDuration(600);
+ animation->setEndValue(0.);
+ group->addAnimation(animation);
+ animation = new QPropertyAnimation(m_q, "maximumHeight");
+ animation->setDuration(120);
+ animation->setEasingCurve(QEasingCurve::InCurve);
+ animation->setStartValue(m_q->sizeHint().height());
+ animation->setEndValue(0.0);
+ group->addAnimation(animation);
+ group->start(QAbstractAnimation::DeleteWhenStopped);
+
+ connect(group, SIGNAL(finished()), m_q, SIGNAL(removeMe()));
+}
+
} // namespace Core
#include "futureprogress.moc"
diff --git a/src/plugins/coreplugin/progressmanager/futureprogress.h b/src/plugins/coreplugin/progressmanager/futureprogress.h
index f4cbcc1789..b8cfec78ca 100644
--- a/src/plugins/coreplugin/progressmanager/futureprogress.h
+++ b/src/plugins/coreplugin/progressmanager/futureprogress.h
@@ -37,7 +37,7 @@
#include <QWidget>
namespace Core {
-struct FutureProgressPrivate;
+class FutureProgressPrivate;
class CORE_EXPORT FutureProgress : public QWidget
{
@@ -79,7 +79,6 @@ signals:
protected:
void mousePressEvent(QMouseEvent *event);
- void resizeEvent(QResizeEvent *);
private slots:
void updateToolTip(const QString &);
@@ -89,7 +88,6 @@ private slots:
void setProgressRange(int min, int max);
void setProgressValue(int val);
void setProgressText(const QString &text);
- void fadeAway();
private:
FutureProgressPrivate *d;