diff options
-rw-r--r-- | src/widgets/itemviews/qcolumnview.cpp | 11 | ||||
-rw-r--r-- | src/widgets/itemviews/qtreeview.cpp | 1 | ||||
-rw-r--r-- | src/widgets/styles/qcommonstyle.cpp | 11 | ||||
-rw-r--r-- | src/widgets/styles/qstyle.cpp | 4 | ||||
-rw-r--r-- | src/widgets/styles/qstyle.h | 1 | ||||
-rw-r--r-- | src/widgets/widgets/qtabbar_p.h | 5 | ||||
-rw-r--r-- | src/widgets/widgets/qwidgetanimator.cpp | 28 |
7 files changed, 45 insertions, 16 deletions
diff --git a/src/widgets/itemviews/qcolumnview.cpp b/src/widgets/itemviews/qcolumnview.cpp index 5aee78fab4..32a3dddca1 100644 --- a/src/widgets/itemviews/qcolumnview.cpp +++ b/src/widgets/itemviews/qcolumnview.cpp @@ -332,11 +332,14 @@ void QColumnView::scrollTo(const QModelIndex &index, ScrollHint hint) } #ifndef QT_NO_ANIMATION - d->currentAnimation.setEndValue(newScrollbarValue); - d->currentAnimation.start(); -#else - horizontalScrollBar()->setValue(newScrollbarValue); + if (style()->styleHint(QStyle::SH_Widget_Animate, 0, this)) { + d->currentAnimation.setEndValue(newScrollbarValue); + d->currentAnimation.start(); + } else #endif //QT_NO_ANIMATION + { + horizontalScrollBar()->setValue(newScrollbarValue); + } } /*! diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index 38f0aa6a9e..bbbfb817f0 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -2986,6 +2986,7 @@ void QTreeViewPrivate::initialize() header->setDefaultAlignment(Qt::AlignLeft|Qt::AlignVCenter); q->setHeader(header); #ifndef QT_NO_ANIMATION + animationsEnabled = q->style()->styleHint(QStyle::SH_Widget_Animate, 0, q); QObject::connect(&animatedOperation, SIGNAL(finished()), q, SLOT(_q_endAnimatedOperation())); #endif //QT_NO_ANIMATION } diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp index 262275611c..f5b61ea6f3 100644 --- a/src/widgets/styles/qcommonstyle.cpp +++ b/src/widgets/styles/qcommonstyle.cpp @@ -65,6 +65,7 @@ #include <qtoolbar.h> #include <qtoolbutton.h> #include <qrubberband.h> +#include "qtreeview.h" #include <private/qcommonstylepixmaps_p.h> #include <private/qmath_p.h> #include <qdebug.h> @@ -5113,6 +5114,16 @@ int QCommonStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget ret = 2000; break; #endif + case SH_Widget_Animate: +#ifndef QT_NO_TREEVIEW + if (qobject_cast<const QTreeView*>(widget)) { + ret = false; + } else +#endif + { + ret = true; + } + break; default: ret = 0; break; diff --git a/src/widgets/styles/qstyle.cpp b/src/widgets/styles/qstyle.cpp index 826a05db51..8d8eb3aa46 100644 --- a/src/widgets/styles/qstyle.cpp +++ b/src/widgets/styles/qstyle.cpp @@ -1900,6 +1900,10 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, a tooltip is shown (notice: shown, not hidden). When a new wake isn't needed, a user-requested tooltip will be shown nearly instantly. + \value SH_Widget_Animate Determines if the widget should show animations or not, for example + a transition between checked and unchecked statuses in a checkbox. + This enum value has been introduced in Qt 5.2. + \sa styleHint() */ diff --git a/src/widgets/styles/qstyle.h b/src/widgets/styles/qstyle.h index d4e1be4787..fffd423c8a 100644 --- a/src/widgets/styles/qstyle.h +++ b/src/widgets/styles/qstyle.h @@ -700,6 +700,7 @@ public: SH_Menu_SupportsSections, SH_ToolTip_WakeUpDelay, SH_ToolTip_FallAsleepDelay, + SH_Widget_Animate, // Add new style hint values here SH_CustomBase = 0xf0000000 diff --git a/src/widgets/widgets/qtabbar_p.h b/src/widgets/widgets/qtabbar_p.h index 7468144146..8c6e70b8d7 100644 --- a/src/widgets/widgets/qtabbar_p.h +++ b/src/widgets/widgets/qtabbar_p.h @@ -138,6 +138,10 @@ public: } *animation; void startAnimation(QTabBarPrivate *priv, int duration) { + if (!priv->isAnimated()) { + priv->moveTabFinished(priv->tabList.indexOf(*this)); + return; + } if (!animation) animation = new TabBarAnimation(this, priv); animation->setStartValue(dragOffset); @@ -162,6 +166,7 @@ public: int indexAtPos(const QPoint &p) const; + inline bool isAnimated() const { Q_Q(const QTabBar); return q->style()->styleHint(QStyle::SH_Widget_Animate, 0, q); } inline bool validIndex(int index) const { return index >= 0 && index < tabList.count(); } void setCurrentNextEnabledIndex(int offset); diff --git a/src/widgets/widgets/qwidgetanimator.cpp b/src/widgets/widgets/qwidgetanimator.cpp index bbd96ca29a..1209ade536 100644 --- a/src/widgets/widgets/qwidgetanimator.cpp +++ b/src/widgets/widgets/qwidgetanimator.cpp @@ -91,24 +91,28 @@ void QWidgetAnimator::animate(QWidget *widget, const QRect &_final_geometry, boo QRect(QPoint(-500 - widget->width(), -500 - widget->height()), widget->size()); #ifndef QT_NO_ANIMATION - AnimationMap::const_iterator it = m_animation_map.constFind(widget); - if (it != m_animation_map.constEnd() && (*it)->endValue().toRect() == final_geometry) - return; + //If the QStyle has animations, animate + if (widget->style()->styleHint(QStyle::SH_Widget_Animate, 0, widget)) { + AnimationMap::const_iterator it = m_animation_map.constFind(widget); + if (it != m_animation_map.constEnd() && (*it)->endValue().toRect() == final_geometry) + return; - QPropertyAnimation *anim = new QPropertyAnimation(widget, "geometry", widget); - anim->setDuration(animate ? 200 : 0); - anim->setEasingCurve(QEasingCurve::InOutQuad); - anim->setEndValue(final_geometry); - m_animation_map[widget] = anim; - connect(anim, SIGNAL(finished()), SLOT(animationFinished())); - anim->start(QPropertyAnimation::DeleteWhenStopped); -#else + QPropertyAnimation *anim = new QPropertyAnimation(widget, "geometry", widget); + anim->setDuration(animate ? 200 : 0); + anim->setEasingCurve(QEasingCurve::InOutQuad); + anim->setEndValue(final_geometry); + m_animation_map[widget] = anim; + connect(anim, SIGNAL(finished()), SLOT(animationFinished())); + anim->start(QPropertyAnimation::DeleteWhenStopped); + } else +#endif //QT_NO_ANIMATION + { //we do it in one shot widget->setGeometry(final_geometry); #ifndef QT_NO_MAINWINDOW m_mainWindowLayout->animationFinished(widget); #endif //QT_NO_MAINWINDOW -#endif //QT_NO_ANIMATION + } } bool QWidgetAnimator::animating() const |