diff options
author | Dominik Kapusta <dominik.kapusta@teleca.com> | 2010-09-10 10:58:04 +0200 |
---|---|---|
committer | Dominik Kapusta <dominik.kapusta@teleca.com> | 2010-09-14 09:10:52 +0200 |
commit | 711be3e575c7b0ea7df80b832bd9159ed3d79f1f (patch) | |
tree | d4021ec6cd219b4ca88a8f3fa343e8c16746b014 /src | |
parent | 8702bbc8f62e4642958cfb1401c183fff6790ba3 (diff) |
Changes: Fix widget move animations triggered by status bar appear/disappear animation.
RevBy: Marcin Miklas
Details:
1. When status bar gets hidden it moves up navigation bar and
home/close buttons. This is the case when the navbar is on top of the
page, just below the status bar. When it's on the bottom, it shouldn't
be affected by the status bar animation.
2. Add a separate root element for dock widget for its position to be
affected by status bar show/hide animation.
Needs up-to-date meegotouch-theme.
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/scene/mscenemanager.cpp | 38 | ||||
-rw-r--r-- | src/corelib/scene/mscenemanager_p.h | 2 |
2 files changed, 36 insertions, 4 deletions
diff --git a/src/corelib/scene/mscenemanager.cpp b/src/corelib/scene/mscenemanager.cpp index 994ba92e..e26b430b 100644 --- a/src/corelib/scene/mscenemanager.cpp +++ b/src/corelib/scene/mscenemanager.cpp @@ -115,6 +115,8 @@ void MSceneManagerPrivate::init(MScene *scene) homeButtonRootElement->setZValue(zForWindowType(MSceneWindow::HomeButtonPanel)); navigationBarRootElement = new QGraphicsWidget(rootElement); navigationBarRootElement->setZValue(zForWindowType(MSceneWindow::NavigationBar)); + dockWidgetRootElement = new QGraphicsWidget(rootElement); + dockWidgetRootElement->setZValue(zForWindowType(MSceneWindow::DockWidget)); rootElement->setTransformOriginPoint(QPointF(q->visibleSceneSize().width() / 2.0, q->visibleSceneSize().height() / 2.0)); scene->addItem(rootElement); @@ -662,6 +664,9 @@ QGraphicsItem *MSceneManagerPrivate::rootElementForSceneWindowType(MSceneWindow: case MSceneWindow::NotificationEvent: root = homeButtonRootElement; break; + case MSceneWindow::DockWidget: + root = dockWidgetRootElement; + break; default: root = rootElement; break; @@ -1229,6 +1234,7 @@ void MSceneManagerPrivate::appearSceneWindow(MSceneWindow *window, if (window->windowType() == MSceneWindow::StatusBar) { qreal y = window->y() + window->geometry().height(); navigationBarRootElement->setPos(0, y); + dockWidgetRootElement->setPos(0, y); homeButtonRootElement->setPos(0, y); } } @@ -1377,6 +1383,7 @@ void MSceneManagerPrivate::disappearSceneWindow(MSceneWindow *window, setSceneWindowState(window, MSceneWindow::Disappeared); if (window->windowType() == MSceneWindow::StatusBar) { navigationBarRootElement->setPos(0, 0); + dockWidgetRootElement->setPos(0, 0); homeButtonRootElement->setPos(0, 0); } } @@ -1425,8 +1432,7 @@ void MSceneManagerPrivate::createAppearanceAnimationForSceneWindow(MSceneWindow slideInAnimation->setTransitionDirection(MWidgetSlideAnimation::In); animation = slideInAnimation; - QList<QGraphicsWidget*> list; - list << navigationBarRootElement << homeButtonRootElement; + QList<QGraphicsWidget*> list = findSceneWindowsForMoveAnimation(sceneWindow); foreach(QGraphicsWidget *widget, list) { MWidgetMoveAnimation *moveAnimation = new MWidgetMoveAnimation; moveAnimation->setWidget(widget); @@ -1495,8 +1501,7 @@ void MSceneManagerPrivate::createDisappearanceAnimationForSceneWindow(MSceneWind slideOutAnimation->setTransitionDirection(MWidgetSlideAnimation::Out); animation = slideOutAnimation; - QList<QGraphicsWidget*> list; - list << navigationBarRootElement << homeButtonRootElement; + QList<QGraphicsWidget*> list = findSceneWindowsForMoveAnimation(sceneWindow); foreach(QGraphicsWidget *widget, list) { MWidgetMoveAnimation *moveAnimation = new MWidgetMoveAnimation; moveAnimation->setWidget(widget); @@ -1533,6 +1538,31 @@ void MSceneManagerPrivate::createDisappearanceAnimationForSceneWindow(MSceneWind sceneWindow->d_func()->disappearanceAnimation = animation; } +QList<QGraphicsWidget*> MSceneManagerPrivate::findSceneWindowsForMoveAnimation(MSceneWindow *sceneWindow) +{ + QList<QGraphicsWidget*> rootElements; + QList<QGraphicsWidget*> list; + rootElements << navigationBarRootElement << dockWidgetRootElement << homeButtonRootElement; + + foreach(QGraphicsWidget *rootElement, rootElements) { + foreach(QGraphicsItem *item, rootElement->childItems()) { + MSceneWindow *win = static_cast<MSceneWindow*>(item); + if (win && (win->sceneWindowState() == MSceneWindow::Appeared || + win->sceneWindowState() == MSceneWindow::Appearing)) + { + if ((win->alignment() & Qt::AlignVertical_Mask) == + (sceneWindow->alignment() & Qt::AlignVertical_Mask)) + { + list << rootElement; + break; + } + } + } + } + + return list; +} + void MSceneManagerPrivate::setSceneWindowState(MSceneWindow *sceneWindow, MSceneWindow::SceneWindowState newState) { diff --git a/src/corelib/scene/mscenemanager_p.h b/src/corelib/scene/mscenemanager_p.h index 81c98957..438b3603 100644 --- a/src/corelib/scene/mscenemanager_p.h +++ b/src/corelib/scene/mscenemanager_p.h @@ -173,6 +173,7 @@ public: void onSceneWindowEnteringDisappearedState(MSceneWindow *sceneWindow); void fastForwardSceneWindowTransitionAnimation(MSceneWindow *sceneWindow); + QList<QGraphicsWidget*> findSceneWindowsForMoveAnimation(MSceneWindow *sceneWindow); MSceneManagerStyleContainer &style(); const MSceneManagerStyleContainer &style() const; @@ -214,6 +215,7 @@ public: QGraphicsWidget *rootElement; QGraphicsWidget *homeButtonRootElement; QGraphicsWidget *navigationBarRootElement; + QGraphicsWidget *dockWidgetRootElement; MOrientationAnimation *orientationAnimation; MPageSwitchAnimation *pageSwitchAnimation; |