diff --git a/lib/documentview/documentview.h b/lib/documentview/documentview.h --- a/lib/documentview/documentview.h +++ b/lib/documentview/documentview.h @@ -55,7 +55,6 @@ Q_PROPERTY(QPoint position READ position WRITE setPosition NOTIFY positionChanged) public: static const int MaximumZoom; - static const int AnimDuration; struct Setup { Setup() diff --git a/lib/documentview/documentview.cpp b/lib/documentview/documentview.cpp --- a/lib/documentview/documentview.cpp +++ b/lib/documentview/documentview.cpp @@ -44,6 +44,7 @@ #include #include #include +#include // KDE #include @@ -93,7 +94,6 @@ static const int COMPARE_MARGIN = 4; const int DocumentView::MaximumZoom = 16; -const int DocumentView::AnimDuration = 250; struct DocumentViewPrivate { @@ -340,6 +340,14 @@ return; } } + int animDuration = q->style()->styleHint(QStyle::SH_Widget_Animation_Duration, nullptr, nullptr); + if (!QApplication::isEffectEnabled(Qt::UI_FadeTooltip) || animDuration <= 0) { + mOpacityEffect->setOpacity(value); + if (qFuzzyCompare(value, 1)) { + emit q->fadeInFinished(q); + } + return; + } // Create a new fade animation QPropertyAnimation* anim = new QPropertyAnimation(mOpacityEffect, "opacity"); anim->setStartValue(mOpacityEffect->opacity()); @@ -349,7 +357,7 @@ q, &DocumentView::slotFadeInFinished); } QObject::connect(anim, &QAbstractAnimation::finished, q, &DocumentView::isAnimatedChanged); - anim->setDuration(DocumentView::AnimDuration); + anim->setDuration(animDuration); mFadeAnimation = anim; emit q->isAnimatedChanged(); anim->start(QAbstractAnimation::DeleteWhenStopped); @@ -982,10 +990,15 @@ void DocumentView::moveToAnimated(const QRect& rect) { + int animDuration = style()->styleHint(QStyle::SH_Widget_Animation_Duration, nullptr, nullptr); + if (!QApplication::isEffectEnabled(Qt::UI_AnimateTooltip) || animDuration <= 0) { + setGeometry(rect); + return; + } QPropertyAnimation* anim = new QPropertyAnimation(this, "geometry"); anim->setStartValue(geometry()); anim->setEndValue(rect); - anim->setDuration(DocumentView::AnimDuration); + anim->setDuration(animDuration); connect(anim, &QAbstractAnimation::finished, this, &DocumentView::isAnimatedChanged); d->mMoveAnimation = anim; emit isAnimatedChanged(); diff --git a/lib/documentview/documentviewcontainer.cpp b/lib/documentview/documentviewcontainer.cpp --- a/lib/documentview/documentviewcontainer.cpp +++ b/lib/documentview/documentviewcontainer.cpp @@ -36,6 +36,7 @@ #include #include #include +#include namespace Gwenview { @@ -178,7 +179,8 @@ QList views = (d->mViews | d->mAddedViews).toList(); std::sort(views.begin(), views.end(), viewLessThan); - bool animated = GwenviewConfig::animationMethod() != DocumentView::NoAnimation; + const int animDuration = style()->styleHint(QStyle::SH_Widget_Animation_Duration, nullptr, this); + bool animated = GwenviewConfig::animationMethod() != DocumentView::NoAnimation && animDuration > 0; bool crossFade = d->mAddedViews.count() == 1 && d->mRemovedViews.count() == 1; if (animated && crossFade) { @@ -271,7 +273,8 @@ if (animated) { for (DocumentView* view : qAsConst(d->mRemovedViews)) { view->fadeOut(); - QTimer::singleShot(DocumentView::AnimDuration, view, &QObject::deleteLater); + int animDuration = style()->styleHint(QStyle::SH_Widget_Animation_Duration, nullptr, this); + QTimer::singleShot(animDuration, view, &QObject::deleteLater); } } else { for (DocumentView* view : qAsConst(d->mRemovedViews)) { diff --git a/lib/fullscreenbar.cpp b/lib/fullscreenbar.cpp --- a/lib/fullscreenbar.cpp +++ b/lib/fullscreenbar.cpp @@ -32,6 +32,7 @@ #include #include #include +#include // KDE #include @@ -41,7 +42,6 @@ namespace Gwenview { -static const int SLIDE_DURATION = 150; static const int AUTO_HIDE_CURSOR_TIMEOUT = 1000; // How long before the bar slide out after switching to fullscreen @@ -54,7 +54,7 @@ struct FullScreenBarPrivate { FullScreenBar* q; - QTimeLine* mTimeLine; + QTimeLine* mTimeLine = nullptr; QTimer* mAutoHideCursorTimer; bool mAutoHidingEnabled; bool mEdgeTriggerEnabled; @@ -62,7 +62,7 @@ void startTimeLine() { - if (mTimeLine->state() != QTimeLine::Running) { + if (mTimeLine && mTimeLine->state() != QTimeLine::Running) { mTimeLine->start(); } } @@ -124,8 +124,11 @@ d->mEdgeTriggerEnabled = true; setObjectName(QStringLiteral("fullScreenBar")); - d->mTimeLine = new QTimeLine(SLIDE_DURATION, this); - connect(d->mTimeLine, &QTimeLine::valueChanged, this, &FullScreenBar::moveBar); + int animDuration = style()->styleHint(QStyle::SH_Widget_Animation_Duration, nullptr, this); + if (QApplication::isEffectEnabled(Qt::UI_AnimateMenu) && animDuration > 0) { + d->mTimeLine = new QTimeLine(animDuration, this); + connect(d->mTimeLine, &QTimeLine::valueChanged, this, &FullScreenBar::moveBar); + } d->mAutoHideCursorTimer = new QTimer(this); d->mAutoHideCursorTimer->setInterval(AUTO_HIDE_CURSOR_TIMEOUT); @@ -210,16 +213,24 @@ void FullScreenBar::slideOut() { - d->mInitialHideTimer->stop(); - d->mTimeLine->setDirection(QTimeLine::Backward); - d->startTimeLine(); + if (d->mTimeLine) { + d->mInitialHideTimer->stop(); + d->mTimeLine->setDirection(QTimeLine::Backward); + d->startTimeLine(); + } else { + FullScreenBar::moveBar(0.); + } } void FullScreenBar::slideIn() { - d->mInitialHideTimer->stop(); - d->mTimeLine->setDirection(QTimeLine::Forward); - d->startTimeLine(); + if (d->mTimeLine) { + d->mInitialHideTimer->stop(); + d->mTimeLine->setDirection(QTimeLine::Forward); + d->startTimeLine(); + } else { + FullScreenBar::moveBar(1.); + } } bool FullScreenBar::eventFilter(QObject* object, QEvent* event) diff --git a/lib/slidecontainer.cpp b/lib/slidecontainer.cpp --- a/lib/slidecontainer.cpp +++ b/lib/slidecontainer.cpp @@ -26,12 +26,12 @@ #include #include #include +#include +#include namespace Gwenview { -static const int SLIDE_DURATION = 250; - SlideContainer::SlideContainer(QWidget* parent) : QFrame(parent) { @@ -61,9 +61,15 @@ void SlideContainer::animTo(int newHeight) { + int animDuration = style()->styleHint(QStyle::SH_Widget_Animation_Duration, nullptr, this); + if (!QApplication::isEffectEnabled(Qt::UI_AnimateMenu) || animDuration <= 0) { + setSlideHeight(newHeight); + return; + } + delete mAnim.data(); QPropertyAnimation* anim = new QPropertyAnimation(this, "slideHeight", this); - anim->setDuration(SLIDE_DURATION); + anim->setDuration(animDuration); anim->setStartValue(slideHeight()); anim->setEndValue(newHeight); anim->start(QAbstractAnimation::DeleteWhenStopped); diff --git a/lib/thumbnailview/previewitemdelegate.cpp b/lib/thumbnailview/previewitemdelegate.cpp --- a/lib/thumbnailview/previewitemdelegate.cpp +++ b/lib/thumbnailview/previewitemdelegate.cpp @@ -457,24 +457,42 @@ geometry.moveRight(mView->viewport()->width()); } + const int animDuration = qApp->style()->styleHint(QStyle::SH_Widget_Animation_Duration, nullptr, nullptr); + + bool hasAnimation = false; // Show tip + QParallelAnimationGroup* anim = new QParallelAnimationGroup(); - QPropertyAnimation* fadeIn = new QPropertyAnimation(mToolTip, "opacity"); - fadeIn->setStartValue(mToolTip->opacity()); - fadeIn->setEndValue(1.); - anim->addAnimation(fadeIn); + if (QApplication::isEffectEnabled(Qt::UI_FadeTooltip) && animDuration > 0) { + QPropertyAnimation* fadeIn = new QPropertyAnimation(mToolTip, "opacity"); + fadeIn->setDuration(animDuration); + fadeIn->setStartValue(mToolTip->opacity()); + fadeIn->setEndValue(1.); + anim->addAnimation(fadeIn); + hasAnimation = true; + } else { + mToolTip->setOpacity(1); + } - if (newTipLabel) { + if (newTipLabel || !QApplication::isEffectEnabled(Qt::UI_AnimateTooltip) || animDuration <= 0) { mToolTip->setGeometry(geometry); } else { QPropertyAnimation* move = new QPropertyAnimation(mToolTip, "geometry"); + move->setDuration(animDuration); move->setStartValue(mToolTip->geometry()); move->setEndValue(geometry); anim->addAnimation(move); + hasAnimation = true; } - mToolTipAnimation.reset(anim); - mToolTipAnimation->start(); + + if (hasAnimation) { + mToolTipAnimation.reset(anim); + mToolTipAnimation->start(); + } else { + mToolTipAnimation.reset(nullptr); + delete anim; + } } void hideToolTip() @@ -482,11 +500,19 @@ if (!mToolTip) { return; } + + const int animDuration = qApp->style()->styleHint(QStyle::SH_Widget_Animation_Duration, nullptr, nullptr); + if (!QApplication::isEffectEnabled(Qt::UI_FadeTooltip) || animDuration <= 0) { + mToolTip->setOpacity(0); + return; + } + QSequentialAnimationGroup* anim = new QSequentialAnimationGroup(); if (mToolTipAnimation->state() == QPropertyAnimation::Stopped) { anim->addPause(500); } QPropertyAnimation* fadeOut = new QPropertyAnimation(mToolTip, "opacity"); + fadeOut->setDuration(animDuration); fadeOut->setStartValue(mToolTip->opacity()); fadeOut->setEndValue(0.); anim->addAnimation(fadeOut); diff --git a/lib/thumbnailview/thumbnailbarview.cpp b/lib/thumbnailview/thumbnailbarview.cpp --- a/lib/thumbnailview/thumbnailbarview.cpp +++ b/lib/thumbnailview/thumbnailbarview.cpp @@ -49,11 +49,6 @@ namespace Gwenview { -/** - * Duration in ms of the smooth scroll - */ -const int SMOOTH_SCROLL_DURATION = 250; - /** * Space between the item outer rect and the content, and between the * thumbnail and the caption @@ -351,7 +346,7 @@ { ThumbnailBarView* q; QStyle* mStyle; - QTimeLine* mTimeLine; + QTimeLine* mTimeLine = nullptr; Qt::Orientation mOrientation; int mRowCount; @@ -379,13 +374,17 @@ const QRect rect = q->visualRect(index); - int oldValue = scrollBar()->value(); int newValue = scrollToValue(rect); - if (mTimeLine->state() == QTimeLine::Running) { - mTimeLine->stop(); + if (mTimeLine) { + int oldValue = scrollBar()->value(); + if (mTimeLine->state() == QTimeLine::Running) { + mTimeLine->stop(); + } + mTimeLine->setFrameRange(oldValue, newValue); + mTimeLine->start(); + } else { + scrollBar()->setValue(newValue); } - mTimeLine->setFrameRange(oldValue, newValue); - mTimeLine->start(); } int scrollToValue(const QRect& rect) @@ -454,8 +453,12 @@ , d(new ThumbnailBarViewPrivate) { d->q = this; - d->mTimeLine = new QTimeLine(SMOOTH_SCROLL_DURATION, this); - connect(d->mTimeLine, &QTimeLine::frameChanged, this, &ThumbnailBarView::slotFrameChanged); + + int animDuration = style()->styleHint(QStyle::SH_Widget_Animation_Duration, nullptr, this); + if (animDuration > 0) { + d->mTimeLine = new QTimeLine(animDuration, this); + connect(d->mTimeLine, &QTimeLine::frameChanged, this, &ThumbnailBarView::slotFrameChanged); + } d->mRowCount = 1; d->mOrientation = Qt::Vertical; // To pass value-has-changed check in setOrientation()