aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/corelib/animation/widget/mwidgetmoveanimation.cpp2
-rw-r--r--src/corelib/animation/widget/mwidgetmoveanimation.h4
-rw-r--r--src/corelib/animation/widget/mwidgetmoveanimation_p.h3
-rw-r--r--src/corelib/scene/mscenemanager.cpp102
-rw-r--r--src/corelib/scene/mscenemanager_p.h6
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;