mirror of
https://bitbucket.org/smil3y/katie.git
synced 2025-02-23 10:22:55 +00:00
QOpacityEffect review
by starting the elapsed timer just before the fade timer the opacity transition will be smoother at the start of the effect Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
69f22fa639
commit
2991e926c7
2 changed files with 28 additions and 32 deletions
|
@ -3,7 +3,7 @@
|
|||
# https://wiki.archlinux.org/index.php/Arch_package_guidelines
|
||||
|
||||
pkgname=katie-git
|
||||
pkgver=4.12.0.r7833.a324f5a0a
|
||||
pkgver=4.12.0.r7846.69f22fa63
|
||||
pkgrel=1
|
||||
pkgdesc='C++ toolkit derived from the Qt 4.8 framework'
|
||||
arch=('i486' 'i686' 'pentium4' 'x86_64' 'arm')
|
||||
|
|
|
@ -19,14 +19,10 @@
|
|||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "qapplication.h"
|
||||
#ifndef QT_NO_EFFECTS
|
||||
#include "qdesktopwidget.h"
|
||||
#include "qeffects_p.h"
|
||||
#include "qevent.h"
|
||||
#include "qimage.h"
|
||||
#include "qpainter.h"
|
||||
#include "qpixmap.h"
|
||||
|
||||
#ifndef QT_NO_EFFECTS
|
||||
#include "qwidget.h"
|
||||
#include "qpointer.h"
|
||||
#include "qtimer.h"
|
||||
#include "qelapsedtimer.h"
|
||||
|
@ -53,31 +49,31 @@ private slots:
|
|||
void cancel();
|
||||
|
||||
private:
|
||||
QPointer<QWidget> widget;
|
||||
QTimer anim;
|
||||
QElapsedTimer checkTime;
|
||||
QPointer<QWidget> m_widget;
|
||||
QTimer m_fadetimer;
|
||||
QElapsedTimer m_elapsedtimer;
|
||||
};
|
||||
|
||||
static QOpacityEffect* q_opacity = nullptr;
|
||||
|
||||
QOpacityEffect::QOpacityEffect(QWidget* w)
|
||||
: QObject(w),
|
||||
widget(w)
|
||||
m_widget(w)
|
||||
{
|
||||
connect(widget, SIGNAL(destroyed()), this, SLOT(cancel()));
|
||||
connect(m_widget, SIGNAL(destroyed()), this, SLOT(cancel()));
|
||||
|
||||
checkTime.start();
|
||||
widget->setWindowOpacity(0.0);
|
||||
widget->show();
|
||||
connect(&anim, SIGNAL(timeout()), this, SLOT(fade()));
|
||||
anim.start(1);
|
||||
m_widget->setWindowOpacity(0.0);
|
||||
m_widget->show();
|
||||
connect(&m_fadetimer, SIGNAL(timeout()), this, SLOT(fade()));
|
||||
m_elapsedtimer.start();
|
||||
m_fadetimer.start(1);
|
||||
}
|
||||
|
||||
QOpacityEffect::~QOpacityEffect()
|
||||
{
|
||||
// Restore the opacity value
|
||||
if (widget) {
|
||||
widget->setWindowOpacity(1);
|
||||
if (m_widget) {
|
||||
m_widget->setWindowOpacity(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -86,46 +82,46 @@ QOpacityEffect::~QOpacityEffect()
|
|||
*/
|
||||
void QOpacityEffect::fade()
|
||||
{
|
||||
const double alpha = (double(checkTime.elapsed()) / s_duration);
|
||||
const double alpha = (double(m_elapsedtimer.elapsed()) / s_duration);
|
||||
|
||||
if (alpha >= 1.0 || !widget) {
|
||||
anim.stop();
|
||||
if (widget) {
|
||||
widget->setWindowOpacity(1.0);
|
||||
if (alpha >= 1.0 || !m_widget) {
|
||||
m_fadetimer.stop();
|
||||
if (m_widget) {
|
||||
m_widget->setWindowOpacity(1.0);
|
||||
}
|
||||
q_opacity = nullptr;
|
||||
deleteLater();
|
||||
} else {
|
||||
widget->setWindowOpacity(alpha);
|
||||
m_widget->setWindowOpacity(alpha);
|
||||
}
|
||||
}
|
||||
|
||||
void QOpacityEffect::cancel()
|
||||
{
|
||||
anim.stop();
|
||||
m_fadetimer.stop();
|
||||
q_opacity = nullptr;
|
||||
deleteLater();
|
||||
}
|
||||
|
||||
/*!
|
||||
Fade in widget \a w.
|
||||
Fade in widget \a widget, if \a widget is null the effect is canceled.
|
||||
*/
|
||||
void qFadeEffect(QWidget* w)
|
||||
void qFadeEffect(QWidget* widget)
|
||||
{
|
||||
if (q_opacity) {
|
||||
q_opacity = nullptr;
|
||||
q_opacity->deleteLater();
|
||||
}
|
||||
|
||||
if (!w) {
|
||||
if (!widget) {
|
||||
return;
|
||||
}
|
||||
|
||||
q_opacity = new QOpacityEffect(w);
|
||||
q_opacity = new QOpacityEffect(widget);
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#include "moc_qeffects.cpp"
|
||||
|
||||
#endif //QT_NO_EFFECTS
|
||||
#endif // QT_NO_EFFECTS
|
||||
|
|
Loading…
Add table
Reference in a new issue