aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDominik Kapusta <dominik.kapusta@teleca.com>2010-09-10 10:58:04 +0200
committerDominik Kapusta <dominik.kapusta@teleca.com>2010-09-14 09:10:52 +0200
commit711be3e575c7b0ea7df80b832bd9159ed3d79f1f (patch)
treed4021ec6cd219b4ca88a8f3fa343e8c16746b014 /src
parent8702bbc8f62e4642958cfb1401c183fff6790ba3 (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.cpp38
-rw-r--r--src/corelib/scene/mscenemanager_p.h2
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;