This patch forward the "stateChanged" signal emitted from the private kinetic scroll animation all the way to Plasma::ScrollWidget, which then forwards this signal to its childs. This enables an object which derives from Plasma::ScrollWidget to know the kinetic scrolling animation state.
Patch by Bruno Abinader svn path=/trunk/KDE/kdelibs/; revision=1064768
This commit is contained in:
parent
09fc589dce
commit
fdae3f0d59
@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
#include <QtGui/QImage>
|
#include <QtGui/QImage>
|
||||||
#include <QtCore/QObject>
|
#include <QtCore/QObject>
|
||||||
|
#include <QtCore/QAbstractAnimation>
|
||||||
|
|
||||||
#include <plasma/plasma_export.h>
|
#include <plasma/plasma_export.h>
|
||||||
|
|
||||||
@ -201,6 +202,8 @@ Q_SIGNALS:
|
|||||||
void movementFinished(QGraphicsItem *item);
|
void movementFinished(QGraphicsItem *item);
|
||||||
void elementAnimationFinished(int id);
|
void elementAnimationFinished(int id);
|
||||||
void customAnimationFinished(int id);
|
void customAnimationFinished(int id);
|
||||||
|
void scrollStateChanged(QGraphicsWidget *widget, QAbstractAnimation::State newState,
|
||||||
|
QAbstractAnimation::State oldState);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void timerEvent(QTimerEvent *event);
|
void timerEvent(QTimerEvent *event);
|
||||||
@ -214,7 +217,10 @@ private:
|
|||||||
Q_PRIVATE_SLOT(d, void movingItemDestroyed(QObject*))
|
Q_PRIVATE_SLOT(d, void movingItemDestroyed(QObject*))
|
||||||
Q_PRIVATE_SLOT(d, void animatedElementDestroyed(QObject*))
|
Q_PRIVATE_SLOT(d, void animatedElementDestroyed(QObject*))
|
||||||
Q_PRIVATE_SLOT(d, void customAnimReceiverDestroyed(QObject*))
|
Q_PRIVATE_SLOT(d, void customAnimReceiverDestroyed(QObject*))
|
||||||
|
Q_PRIVATE_SLOT(d, void scrollStateChanged(QAbstractAnimation::State,
|
||||||
|
QAbstractAnimation::State))
|
||||||
|
|
||||||
|
friend class AnimatorPrivate;
|
||||||
AnimatorPrivate * const d;
|
AnimatorPrivate * const d;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -40,8 +40,9 @@ namespace Plasma
|
|||||||
static const int MIN_TICK_RATE_INT = 10;
|
static const int MIN_TICK_RATE_INT = 10;
|
||||||
static const qreal MIN_TICK_RATE = 10;
|
static const qreal MIN_TICK_RATE = 10;
|
||||||
|
|
||||||
AnimatorPrivate::AnimatorPrivate()
|
AnimatorPrivate::AnimatorPrivate(Animator *parent)
|
||||||
: driver(0),
|
: q(parent),
|
||||||
|
driver(0),
|
||||||
animId(0),
|
animId(0),
|
||||||
timerId(0)
|
timerId(0)
|
||||||
{
|
{
|
||||||
@ -117,6 +118,18 @@ void AnimatorPrivate::performMovement(qreal amount, const MovementState *state)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AnimatorPrivate::scrollStateChanged(QAbstractAnimation::State newState,
|
||||||
|
QAbstractAnimation::State oldState)
|
||||||
|
{
|
||||||
|
KineticScrolling *scroll = qobject_cast<KineticScrolling*>(q->sender());
|
||||||
|
if (!scroll) {
|
||||||
|
kDebug() << "Could not find KineticScrolling object";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
emit q->scrollStateChanged(scrollingManagers.key(scroll), newState, oldState);
|
||||||
|
}
|
||||||
|
|
||||||
class AnimatorSingleton
|
class AnimatorSingleton
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -132,7 +145,7 @@ Animator *Animator::self()
|
|||||||
|
|
||||||
Animator::Animator(QObject *parent)
|
Animator::Animator(QObject *parent)
|
||||||
: QObject(parent),
|
: QObject(parent),
|
||||||
d(new AnimatorPrivate)
|
d(new AnimatorPrivate(this))
|
||||||
{
|
{
|
||||||
d->init(this);
|
d->init(this);
|
||||||
}
|
}
|
||||||
@ -752,12 +765,18 @@ void Animator::registerScrollingManager(QGraphicsWidget *widget)
|
|||||||
if (!d->scrollingManagers.contains(widget)) {
|
if (!d->scrollingManagers.contains(widget)) {
|
||||||
KineticScrolling *scroll = new KineticScrolling(widget);
|
KineticScrolling *scroll = new KineticScrolling(widget);
|
||||||
d->scrollingManagers.insert(widget, scroll);
|
d->scrollingManagers.insert(widget, scroll);
|
||||||
|
connect(scroll,
|
||||||
|
SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State)), this,
|
||||||
|
SLOT(scrollStateChanged(QAbstractAnimation::State, QAbstractAnimation::State)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Animator::unregisterScrollingManager(QGraphicsWidget *widget)
|
void Animator::unregisterScrollingManager(QGraphicsWidget *widget)
|
||||||
{
|
{
|
||||||
if (d->scrollingManagers.contains(widget)) {
|
if (d->scrollingManagers.contains(widget)) {
|
||||||
|
disconnect(d->scrollingManagers.value(widget),
|
||||||
|
SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State)), this,
|
||||||
|
SLOT(scrollStateChanged(QAbstractAnimation::State, QAbstractAnimation::State)));
|
||||||
d->scrollingManagers.value(widget)->deleteLater();
|
d->scrollingManagers.value(widget)->deleteLater();
|
||||||
d->scrollingManagers.remove(widget);
|
d->scrollingManagers.remove(widget);
|
||||||
}
|
}
|
||||||
|
@ -90,10 +90,12 @@ struct CustomAnimationState
|
|||||||
char *slot;
|
char *slot;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Animator;
|
||||||
|
|
||||||
class AnimatorPrivate
|
class AnimatorPrivate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AnimatorPrivate();
|
AnimatorPrivate(Animator *parent);
|
||||||
~AnimatorPrivate();
|
~AnimatorPrivate();
|
||||||
|
|
||||||
qreal calculateProgress(int time, int duration, Animator::CurveShape curve);
|
qreal calculateProgress(int time, int duration, Animator::CurveShape curve);
|
||||||
@ -107,6 +109,10 @@ class AnimatorPrivate
|
|||||||
void animatedElementDestroyed(QObject*);
|
void animatedElementDestroyed(QObject*);
|
||||||
void customAnimReceiverDestroyed(QObject*);
|
void customAnimReceiverDestroyed(QObject*);
|
||||||
|
|
||||||
|
void scrollStateChanged(QAbstractAnimation::State newState,
|
||||||
|
QAbstractAnimation::State oldState);
|
||||||
|
|
||||||
|
Animator *q;
|
||||||
AnimationDriver *driver;
|
AnimationDriver *driver;
|
||||||
int animId;
|
int animId;
|
||||||
int timerId;
|
int timerId;
|
||||||
|
@ -349,6 +349,9 @@ void KineticScrolling::setWidget(QGraphicsWidget *parent)
|
|||||||
if (d->parent) {
|
if (d->parent) {
|
||||||
d->parent->removeEventFilter(this);
|
d->parent->removeEventFilter(this);
|
||||||
disconnect(d->scrollAnimation, SIGNAL(finished()), this, SLOT(overshoot()));
|
disconnect(d->scrollAnimation, SIGNAL(finished()), this, SLOT(overshoot()));
|
||||||
|
disconnect(d->scrollAnimation,
|
||||||
|
SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State)), this,
|
||||||
|
SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State)));
|
||||||
delete d->scrollAnimation;
|
delete d->scrollAnimation;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -358,6 +361,9 @@ void KineticScrolling::setWidget(QGraphicsWidget *parent)
|
|||||||
|
|
||||||
d->scrollAnimation = new QPropertyAnimation(parent, "scrollPosition", parent);
|
d->scrollAnimation = new QPropertyAnimation(parent, "scrollPosition", parent);
|
||||||
connect(d->scrollAnimation, SIGNAL(finished()), this, SLOT(overshoot()));
|
connect(d->scrollAnimation, SIGNAL(finished()), this, SLOT(overshoot()));
|
||||||
|
connect(d->scrollAnimation,
|
||||||
|
SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State)), this,
|
||||||
|
SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State)));
|
||||||
d->scrollAnimation->setEasingCurve(QEasingCurve::OutCirc);
|
d->scrollAnimation->setEasingCurve(QEasingCurve::OutCirc);
|
||||||
|
|
||||||
if (parent) {
|
if (parent) {
|
||||||
|
@ -28,6 +28,7 @@ class QGraphicsSceneWheelEvent;
|
|||||||
class QKeyEvent;
|
class QKeyEvent;
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QPointF>
|
#include <QPointF>
|
||||||
|
#include <QtCore/QAbstractAnimation>
|
||||||
|
|
||||||
|
|
||||||
namespace Plasma
|
namespace Plasma
|
||||||
@ -43,6 +44,10 @@ public:
|
|||||||
~KineticScrolling();
|
~KineticScrolling();
|
||||||
void setWidget(QGraphicsWidget *parent);
|
void setWidget(QGraphicsWidget *parent);
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void stateChanged(QAbstractAnimation::State newState,
|
||||||
|
QAbstractAnimation::State oldState);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
|
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
|
||||||
void mousePressEvent(QGraphicsSceneMouseEvent *event);
|
void mousePressEvent(QGraphicsSceneMouseEvent *event);
|
||||||
|
@ -285,6 +285,14 @@ public:
|
|||||||
dragHandles.remove(static_cast<QGraphicsWidget *>(destroyed));
|
dragHandles.remove(static_cast<QGraphicsWidget *>(destroyed));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void scrollStateChanged(QGraphicsWidget *widget, QAbstractAnimation::State newState,
|
||||||
|
QAbstractAnimation::State oldState)
|
||||||
|
{
|
||||||
|
if (widget == q) {
|
||||||
|
emit q->scrollStateChanged(newState, oldState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ScrollWidget *q;
|
ScrollWidget *q;
|
||||||
QGraphicsWidget *scrollingWidget;
|
QGraphicsWidget *scrollingWidget;
|
||||||
QWeakPointer<QGraphicsWidget> widget;
|
QWeakPointer<QGraphicsWidget> widget;
|
||||||
@ -338,6 +346,11 @@ void ScrollWidget::setWidget(QGraphicsWidget *widget)
|
|||||||
|
|
||||||
d->widget = widget;
|
d->widget = widget;
|
||||||
Plasma::Animator::self()->registerScrollingManager(this);
|
Plasma::Animator::self()->registerScrollingManager(this);
|
||||||
|
connect(Plasma::Animator::self(),
|
||||||
|
SIGNAL(scrollStateChanged(QGraphicsWidget *, QAbstractAnimation::State,
|
||||||
|
QAbstractAnimation::State)), this,
|
||||||
|
SLOT(scrollStateChanged(QGraphicsWidget *, QAbstractAnimation::State,
|
||||||
|
QAbstractAnimation::State)));
|
||||||
//it's not good it's setting a size policy here, but it's done to be retrocompatible with older applications
|
//it's not good it's setting a size policy here, but it's done to be retrocompatible with older applications
|
||||||
|
|
||||||
if (widget) {
|
if (widget) {
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#ifndef PLASMA_SCROLLWIDGET_H
|
#ifndef PLASMA_SCROLLWIDGET_H
|
||||||
#define PLASMA_SCROLLWIDGET_H
|
#define PLASMA_SCROLLWIDGET_H
|
||||||
|
|
||||||
|
#include <QtCore/QAbstractAnimation>
|
||||||
#include <QtGui/QGraphicsWidget>
|
#include <QtGui/QGraphicsWidget>
|
||||||
|
|
||||||
#include <plasma/plasma_export.h>
|
#include <plasma/plasma_export.h>
|
||||||
@ -181,6 +182,10 @@ public:
|
|||||||
*/
|
*/
|
||||||
QWidget *nativeWidget() const;
|
QWidget *nativeWidget() const;
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void scrollStateChanged(QAbstractAnimation::State newState,
|
||||||
|
QAbstractAnimation::State oldState);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
void resizeEvent(QGraphicsSceneResizeEvent *event);
|
void resizeEvent(QGraphicsSceneResizeEvent *event);
|
||||||
@ -202,6 +207,10 @@ private:
|
|||||||
Q_PRIVATE_SLOT(d, void makeItemVisible())
|
Q_PRIVATE_SLOT(d, void makeItemVisible())
|
||||||
Q_PRIVATE_SLOT(d, void cleanupDragHandles(QObject *destroyed))
|
Q_PRIVATE_SLOT(d, void cleanupDragHandles(QObject *destroyed))
|
||||||
Q_PRIVATE_SLOT(d, void adjustScrollbars())
|
Q_PRIVATE_SLOT(d, void adjustScrollbars())
|
||||||
|
Q_PRIVATE_SLOT(d, void scrollStateChanged(QGraphicsWidget *, QAbstractAnimation::State,
|
||||||
|
QAbstractAnimation::State))
|
||||||
|
|
||||||
|
friend class ScrollWidgetPrivate;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Plasma
|
} // namespace Plasma
|
||||||
|
Loading…
Reference in New Issue
Block a user