provide the Animator::registerScrollingManager(qgraphicsidget) function.

the animator creates a kineticscroll and associates it with the widget.
in this way we can use kineticscroll outside of libplasma with a single
call.

svn path=/trunk/KDE/kdelibs/; revision=1037751
This commit is contained in:
Marco Martin 2009-10-19 22:10:25 +00:00
parent 89e73cecd2
commit b2bb69732a
6 changed files with 50 additions and 9 deletions

View File

@ -27,6 +27,7 @@
#include <plasma/plasma_export.h> #include <plasma/plasma_export.h>
class QGraphicsItem; class QGraphicsItem;
class QGraphicsWidget;
class QTimeLine; class QTimeLine;
namespace Plasma namespace Plasma
@ -159,6 +160,25 @@ public:
*/ */
KDE_DEPRECATED Q_INVOKABLE bool isAnimating() const; KDE_DEPRECATED Q_INVOKABLE bool isAnimating() const;
/**
* Register a widget as a scrolling widget.
* The widget will get animate scrolling with mouse dragging and mouse wheel.
* It must provide
* scrollValue, viewportGeometry and pageSize properties
*
* @param widget the widget that offers a scrolling behaviour
* @since 4.4
*/
void registerScrollingManager(QGraphicsWidget *widget);
/**
* unregister the scrolling manager of a certain widget
*
* @param widget the widget we don't want no longer animated
* @since 4.4
*/
void unregisterScrollingManager(QGraphicsWidget *widget);
Q_SIGNALS: Q_SIGNALS:
void animationFinished(QGraphicsItem *item, Plasma::Animator::Animation anim); void animationFinished(QGraphicsItem *item, Plasma::Animator::Animation anim);
void movementFinished(QGraphicsItem *item); void movementFinished(QGraphicsItem *item);

View File

@ -31,6 +31,7 @@
#include <kglobalsettings.h> #include <kglobalsettings.h>
#include "animationdriver.h" #include "animationdriver.h"
#include "private/kineticscroll_p.h"
namespace Plasma namespace Plasma
{ {
@ -194,6 +195,8 @@ class AnimatorPrivateDeprecated
QSet<MovementState *> movingItemsToDelete; QSet<MovementState *> movingItemsToDelete;
QSet<ElementAnimationState *> animatedElementsToDelete; QSet<ElementAnimationState *> animatedElementsToDelete;
QSet<CustomAnimationState *> customAnimsToDelete; QSet<CustomAnimationState *> customAnimsToDelete;
QHash<QGraphicsWidget *, KineticScrolling *> scrollingManagers;
}; };
class AnimatorSingleton class AnimatorSingleton
@ -828,6 +831,22 @@ void AnimatorPrivateDeprecated::cleanupStates()
customAnimsToDelete.clear(); customAnimsToDelete.clear();
} }
void Animator::registerScrollingManager(QGraphicsWidget *widget)
{
if (!d->scrollingManagers.contains(widget)) {
KineticScrolling *scroll = new KineticScrolling(widget);
d->scrollingManagers.insert(widget, scroll);
}
}
void Animator::unregisterScrollingManager(QGraphicsWidget *widget)
{
if (d->scrollingManagers.contains(widget)) {
d->scrollingManagers.value(widget)->deleteLater();
d->scrollingManagers.remove(widget);
}
}
} // namespace Plasma } // namespace Plasma
#include <../animator.moc> #include <../animator.moc>

View File

@ -126,9 +126,10 @@ public:
}; };
KineticScrolling::KineticScrolling(): d(0) KineticScrolling::KineticScrolling(QGraphicsWidget *parent)
: d(new KineticScrollingPrivate)
{ {
d = new KineticScrollingPrivate; setWidget(parent);
} }
KineticScrolling::~KineticScrolling() KineticScrolling::~KineticScrolling()
@ -355,6 +356,8 @@ void KineticScrolling::setWidget(QGraphicsWidget *parent)
d->parent->removeEventFilter(this); d->parent->removeEventFilter(this);
} }
setParent(parent);
d->parent = parent; d->parent = parent;
if (parent) { if (parent) {

View File

@ -38,7 +38,7 @@ class KineticScrolling: public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
KineticScrolling(); KineticScrolling(QGraphicsWidget *parent);
~KineticScrolling(); ~KineticScrolling();
void setWidget(QGraphicsWidget *parent); void setWidget(QGraphicsWidget *parent);

View File

@ -18,7 +18,6 @@
*/ */
#include "scrollwidget.h" #include "scrollwidget.h"
#include "private/kineticscroll_p.h"
//Qt //Qt
#include <QGraphicsSceneResizeEvent> #include <QGraphicsSceneResizeEvent>
#include <QGraphicsGridLayout> #include <QGraphicsGridLayout>
@ -39,7 +38,7 @@
namespace Plasma namespace Plasma
{ {
class ScrollWidgetPrivate: public KineticScrolling class ScrollWidgetPrivate
{ {
public: public:
ScrollWidgetPrivate(ScrollWidget *parent) ScrollWidgetPrivate(ScrollWidget *parent)
@ -275,7 +274,7 @@ void ScrollWidget::setWidget(QGraphicsWidget *widget)
} }
d->widget = widget; d->widget = widget;
d->setWidget(this); Plasma::Animator::self()->registerScrollingManager(this);
widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
widget->setParentItem(d->scrollingWidget); widget->setParentItem(d->scrollingWidget);
widget->setPos(QPoint(0,0)); widget->setPos(QPoint(0,0));

View File

@ -37,12 +37,12 @@
#include "plasma/widgets/webview.h" #include "plasma/widgets/webview.h"
#include "plasma/private/kineticscroll_p.h" #include "plasma/animator.h"
namespace Plasma namespace Plasma
{ {
class WebViewPrivate : public KineticScrolling class WebViewPrivate
{ {
public: public:
WebViewPrivate(WebView *parent) WebViewPrivate(WebView *parent)
@ -69,7 +69,7 @@ WebView::WebView(QGraphicsItem *parent)
{ {
d->page = 0; d->page = 0;
d->loaded = false; d->loaded = false;
d->setWidget(this); Plasma::Animator::self()->registerScrollingManager(this);
setAcceptsHoverEvents(true); setAcceptsHoverEvents(true);
setFlags(QGraphicsItem::ItemIsFocusable); setFlags(QGraphicsItem::ItemIsFocusable);