diff options
-rw-r--r-- | src/corelib/animation/widget/mwidgetmoveanimation.cpp | 2 | ||||
-rw-r--r-- | src/corelib/animation/widget/mwidgetmoveanimation.h | 4 | ||||
-rw-r--r-- | src/corelib/animation/widget/mwidgetmoveanimation_p.h | 3 | ||||
-rw-r--r-- | src/corelib/scene/mscenemanager.cpp | 102 | ||||
-rw-r--r-- | src/corelib/scene/mscenemanager_p.h | 6 |
5 files changed, 58 insertions, 59 deletions
diff --git a/src/corelib/animation/widget/mwidgetmoveanimation.cpp b/src/corelib/animation/widget/mwidgetmoveanimation.cpp index 25a73db4..994e1fa2 100644 --- a/src/corelib/animation/widget/mwidgetmoveanimation.cpp +++ b/src/corelib/animation/widget/mwidgetmoveanimation.cpp @@ -61,7 +61,7 @@ MWidgetMoveAnimation::MWidgetMoveAnimation(MWidgetMoveAnimationPrivate *dd, QObj d->init(); } -void MWidgetMoveAnimation::setWidget(MWidgetController *widget) +void MWidgetMoveAnimation::setWidget(QGraphicsWidget *widget) { Q_D(MWidgetMoveAnimation); diff --git a/src/corelib/animation/widget/mwidgetmoveanimation.h b/src/corelib/animation/widget/mwidgetmoveanimation.h index 7bc51447..87ad23ce 100644 --- a/src/corelib/animation/widget/mwidgetmoveanimation.h +++ b/src/corelib/animation/widget/mwidgetmoveanimation.h @@ -28,7 +28,7 @@ #include <QPointF> class MWidgetMoveAnimationPrivate; -class MWidgetController; +class QGraphicsWidget; //! \internal @@ -40,7 +40,7 @@ class MWidgetMoveAnimation : public MParallelAnimationGroup public: MWidgetMoveAnimation(QObject *parent = NULL); - void setWidget(MWidgetController *widget); + void setWidget(QGraphicsWidget *widget); void setFinalPos(const QPointF &pos); protected: diff --git a/src/corelib/animation/widget/mwidgetmoveanimation_p.h b/src/corelib/animation/widget/mwidgetmoveanimation_p.h index f0b86e86..00839825 100644 --- a/src/corelib/animation/widget/mwidgetmoveanimation_p.h +++ b/src/corelib/animation/widget/mwidgetmoveanimation_p.h @@ -24,7 +24,6 @@ #include "mparallelanimationgroup_p.h" #include <QPointer> -class MWidgetController; class QPauseAnimation; class QPropertyAnimation; @@ -34,7 +33,7 @@ class MWidgetMoveAnimationPrivate : public MParallelAnimationGroupPrivate public: virtual void init(); - QPointer<MWidgetController> widget; + QPointer<QGraphicsWidget> widget; QPointF finalPos; QPauseAnimation *delay; diff --git a/src/corelib/scene/mscenemanager.cpp b/src/corelib/scene/mscenemanager.cpp index 6c1572a3..87da05ec 100644 --- a/src/corelib/scene/mscenemanager.cpp +++ b/src/corelib/scene/mscenemanager.cpp @@ -97,6 +97,10 @@ void MSceneManagerPrivate::init(MScene *scene) initOrientationAngles(); rootElement = new QGraphicsWidget(); + homeButtonRootElement = new QGraphicsWidget(rootElement); + homeButtonRootElement->setZValue(zForWindowType(MSceneWindow::HomeButtonPanel)); + navigationBarRootElement = new QGraphicsWidget(rootElement); + navigationBarRootElement->setZValue(zForWindowType(MSceneWindow::NavigationBar)); rootElement->setTransformOriginPoint(QPointF(q->visibleSceneSize().width() / 2.0, q->visibleSceneSize().height() / 2.0)); scene->addItem(rootElement); @@ -509,7 +513,7 @@ void MSceneManagerPrivate::addUnmanagedSceneWindow(MSceneWindow *sceneWindow) // add scene window to the scene // Now its sceneManager() method will return the correct result. // It will also transfer the ownership of the scene window to the scene. - sceneWindow->setParentItem(rootElement); + setParentItemForSceneWindow(sceneWindow, sceneWindow->windowType()); sceneWindow->setZValue(zForWindowType(sceneWindow->windowType())); @@ -589,7 +593,8 @@ MSceneLayerEffect *MSceneManagerPrivate::createLayerEffectForWindow(MSceneWindow setSceneWindowGeometry(effect); // Add effect to scene via rootElement - effect->setParentItem(rootElement); + setParentItemForSceneWindow(effect, window->windowType()); + effect->setZValue(zForWindowType(window->windowType())); // Add window as child of the effect @@ -600,6 +605,25 @@ MSceneLayerEffect *MSceneManagerPrivate::createLayerEffectForWindow(MSceneWindow return effect; } +void MSceneManagerPrivate::setParentItemForSceneWindow(MSceneWindow *sceneWindow, + MSceneWindow::WindowType type) +{ + switch (type) { + case MSceneWindow::EscapeButtonPanel: + case MSceneWindow::NavigationBar: + sceneWindow->setParentItem(navigationBarRootElement); + break; + case MSceneWindow::HomeButtonPanel: + case MSceneWindow::NotificationInformation: + case MSceneWindow::NotificationEvent: + sceneWindow->setParentItem(homeButtonRootElement); + break; + default: + sceneWindow->setParentItem(rootElement); + break; + } +} + void MSceneManagerPrivate::setSceneWindowGeometries() { _q_restoreSceneWindow(); @@ -636,39 +660,12 @@ void MSceneManagerPrivate::notifyWidgetsAboutOrientationChange() } } -QRectF MSceneManagerPrivate::calculateAvailableSceneRect(MSceneWindow *window) +QPointF MSceneManagerPrivate::calculateSceneWindowPosition(MSceneWindow *window) { Q_Q(MSceneManager); - QSizeF sceneSize = q->visibleSceneSize(orientation(angle)); QRectF availableSceneRect(QPointF(0,0), sceneSize); - if (statusBar) { - const MSceneWindow::WindowType type = window->windowType(); - if( type != MSceneWindow::StatusBar && type != MSceneWindow::LayerEffect) { - QSizeF windowSize = window->effectiveSizeHint(Qt::PreferredSize); - - qreal statusBarBottomEdge = statusBar->y() + - statusBar->effectiveSizeHint(Qt::PreferredSize).height(); - - if ((statusBarBottomEdge + windowSize.height()) < sceneSize.height()) { - // Window should still fit within the remaining scene space when shifted - // downwards due to the status bar presence - availableSceneRect.setY(statusBarBottomEdge); - - Q_ASSERT(availableSceneRect.height() > 0.0); - } - } - } - - return availableSceneRect; -} - -QPointF MSceneManagerPrivate::calculateSceneWindowPosition(MSceneWindow *window) -{ - // The rectangle available for the positioning of the given scene window - QRectF availableSceneRect = calculateAvailableSceneRect(window); - Qt::Alignment alignment = window->alignment(); QSizeF windowSize = window->effectiveSizeHint(Qt::PreferredSize); @@ -1159,6 +1156,11 @@ void MSceneManagerPrivate::appearSceneWindow(MSceneWindow *window, window->d_func()->appearanceAnimation->start(); } else { setSceneWindowState(window, MSceneWindow::Appeared); + if (window->windowType() == MSceneWindow::StatusBar) { + qreal y = window->y() + window->geometry().height(); + navigationBarRootElement->setPos(0, y); + homeButtonRootElement->setPos(0, y); + } } } @@ -1293,6 +1295,10 @@ void MSceneManagerPrivate::disappearSceneWindow(MSceneWindow *window, window->d_func()->disappearanceAnimation->start(); } else { setSceneWindowState(window, MSceneWindow::Disappeared); + if (window->windowType() == MSceneWindow::StatusBar) { + navigationBarRootElement->setPos(0, 0); + homeButtonRootElement->setPos(0, 0); + } } } @@ -1339,17 +1345,13 @@ void MSceneManagerPrivate::createAppearanceAnimationForSceneWindow(MSceneWindow slideInAnimation->setTransitionDirection(MWidgetSlideAnimation::In); animation = slideInAnimation; - QList<MSceneWindow*> sceneWindows = windows; - sceneWindows.removeAll(sceneWindow); - foreach (MSceneWindow *window, sceneWindows) { - if (window->sceneWindowState() != MSceneWindow::Disappeared && - window->windowType() != MSceneWindow::ApplicationPage && - window->windowType() != MSceneWindow::DockWidget) { - MWidgetMoveAnimation *moveAnimation = new MWidgetMoveAnimation; - moveAnimation->setWidget(window); - moveAnimation->setFinalPos(QPointF(window->x(), window->y() + sceneWindow->effectiveSizeHint(Qt::PreferredSize).height())); - animation->addAnimation(moveAnimation); - } + QList<QGraphicsWidget*> list; + list << navigationBarRootElement << homeButtonRootElement; + foreach(QGraphicsWidget *widget, list) { + MWidgetMoveAnimation *moveAnimation = new MWidgetMoveAnimation; + moveAnimation->setWidget(widget); + moveAnimation->setFinalPos(QPointF(widget->x(), widget->y() + sceneWindow->effectiveSizeHint(Qt::PreferredSize).height())); + animation->addAnimation(moveAnimation); } break; } @@ -1413,17 +1415,13 @@ void MSceneManagerPrivate::createDisappearanceAnimationForSceneWindow(MSceneWind slideOutAnimation->setTransitionDirection(MWidgetSlideAnimation::Out); animation = slideOutAnimation; - QList<MSceneWindow*> sceneWindows = windows; - sceneWindows.removeAll(sceneWindow); - foreach (MSceneWindow *window, sceneWindows) { - if (window->sceneWindowState() != MSceneWindow::Disappeared && - window->windowType() != MSceneWindow::ApplicationPage && - window->windowType() != MSceneWindow::DockWidget) { - MWidgetMoveAnimation *moveAnimation = new MWidgetMoveAnimation; - moveAnimation->setWidget(window); - moveAnimation->setFinalPos(QPointF(window->x(), window->y() - sceneWindow->effectiveSizeHint(Qt::PreferredSize).height())); - animation->addAnimation(moveAnimation); - } + QList<QGraphicsWidget*> list; + list << navigationBarRootElement << homeButtonRootElement; + foreach(QGraphicsWidget *widget, list) { + MWidgetMoveAnimation *moveAnimation = new MWidgetMoveAnimation; + moveAnimation->setWidget(widget); + moveAnimation->setFinalPos(QPointF(widget->x(), widget->y() - sceneWindow->effectiveSizeHint(Qt::PreferredSize).height())); + animation->addAnimation(moveAnimation); } break; } diff --git a/src/corelib/scene/mscenemanager_p.h b/src/corelib/scene/mscenemanager_p.h index ed6a7998..033be96c 100644 --- a/src/corelib/scene/mscenemanager_p.h +++ b/src/corelib/scene/mscenemanager_p.h @@ -96,6 +96,7 @@ public: QPointF calculateSceneWindowPosition(MSceneWindow *window); void setSceneWindowGeometry(MSceneWindow *window); void setSceneWindowGeometries(); + void setParentItemForSceneWindow(MSceneWindow *window, MSceneWindow::WindowType type); void notifyWidgetsAboutOrientationChange(); void rotateToAngle(M::OrientationAngle newAngle); void setOrientationAngleWithoutAnimation(M::OrientationAngle newAngle); @@ -135,8 +136,6 @@ public: MSceneWindow *oldPage, MPageSwitchAnimation::PageTransitionDirection direction); - QRectF calculateAvailableSceneRect(MSceneWindow *window); - void createOrientationAnimation(); void createAppearanceAnimationForSceneWindow(MSceneWindow *sceneWindow); @@ -195,6 +194,9 @@ public: MScene *scene; QGraphicsWidget *rootElement; + QGraphicsWidget *homeButtonRootElement; + QGraphicsWidget *navigationBarRootElement; + MOrientationAnimation *orientationAnimation; MPageSwitchAnimation *pageSwitchAnimation; |