aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJukka Halonen <ext-jukka.a.halonen@nokia.com>2011-01-04 11:53:08 +0200
committerDominik Kapusta <dominik.kapusta@teleca.com>2011-01-04 11:19:08 +0100
commit64a78589f881883d58324b0f2c8503d4e2b8de55 (patch)
tree67139ba856debae70c7ef4ea541e19438606b1dd
parentb760e0a6a4c82f5ad4d08184dcfd68c38da2b31f (diff)
New: Additional application (view) menu animations (MApplicationMenuAnimation)
RevBy: TrustMe Details: Support for new appearance/disappearance animations for the application (view) menu. Requires updated meegotouch-theme.
-rw-r--r--src/corelib/animation/widget/mapplicationmenuanimation.cpp76
-rw-r--r--src/corelib/animation/widget/mapplicationmenuanimation.h47
-rw-r--r--src/corelib/animation/widget/mapplicationmenuanimation_p.h38
-rw-r--r--src/corelib/animation/widget/mdialoganimation_p.h8
-rw-r--r--src/corelib/animation/widget/widget.pri3
-rw-r--r--src/corelib/scene/mscenemanager.cpp10
-rw-r--r--src/corelib/style/mapplicationmenuanimationstyle.h46
-rw-r--r--src/corelib/style/style.pri1
-rw-r--r--src/views/mapplicationmenuview.cpp14
-rw-r--r--src/views/mapplicationmenuview_p.h3
10 files changed, 239 insertions, 7 deletions
diff --git a/src/corelib/animation/widget/mapplicationmenuanimation.cpp b/src/corelib/animation/widget/mapplicationmenuanimation.cpp
new file mode 100644
index 00000000..294b39b1
--- /dev/null
+++ b/src/corelib/animation/widget/mapplicationmenuanimation.cpp
@@ -0,0 +1,76 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#include "mapplicationmenuanimation.h"
+#include "mapplicationmenuanimation_p.h"
+#include "manimationcreator.h"
+
+#include <QPropertyAnimation>
+
+MApplicationMenuAnimationPrivate::MApplicationMenuAnimationPrivate()
+ : MDialogAnimationPrivate()
+{
+}
+
+QPointF MApplicationMenuAnimationPrivate::setupPositionAnimation(const QPointF &widgetPos)
+{
+ Q_Q(MApplicationMenuAnimation);
+
+ QPointF pos = widgetPos;
+ pos.ry() += q->style()->contentsViewportPositionAnimationDistance();
+ return pos;
+}
+
+void MApplicationMenuAnimationPrivate::setupDurations()
+{
+ Q_Q(MApplicationMenuAnimation);
+
+ MDialogAnimationPrivate::setupDurations();
+
+ contentsViewportPositionAnimation->setDuration(q->style()->contentsViewportPositionAnimationDuration());
+}
+
+void MApplicationMenuAnimationPrivate::setupEasingCurves()
+{
+ Q_Q(MApplicationMenuAnimation);
+
+ MDialogAnimationPrivate::setupEasingCurves();
+
+ if (!q->style()->titleBarHasCustomEasingCurve()) {
+ titleBarOpacityAnimation->setEasingCurve(q->style()->titleBarAnimationEasingCurve());
+ titleBarPositionAnimation->setEasingCurve(q->style()->titleBarAnimationEasingCurve());
+ }
+
+ contentsViewportPositionAnimation->setEasingCurve(q->style()->contentsViewportPositionAnimationEasingCurve());
+}
+
+MApplicationMenuAnimation::MApplicationMenuAnimation(QObject *parent)
+ : MDialogAnimation(new MApplicationMenuAnimationPrivate, parent)
+{
+}
+
+MApplicationMenuAnimation::MApplicationMenuAnimation(MApplicationMenuAnimationPrivate *dd, QObject *parent)
+ : MDialogAnimation(dd, parent)
+{
+}
+
+#include "moc_mapplicationmenuanimation.cpp"
+
+M_REGISTER_ANIMATION(MApplicationMenuAnimation)
+
diff --git a/src/corelib/animation/widget/mapplicationmenuanimation.h b/src/corelib/animation/widget/mapplicationmenuanimation.h
new file mode 100644
index 00000000..e62b99a2
--- /dev/null
+++ b/src/corelib/animation/widget/mapplicationmenuanimation.h
@@ -0,0 +1,47 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MAPPLICATIONMENUANIMATION_H
+#define MAPPLICATIONMENUANIMATION_H
+
+#include "mdialoganimation.h"
+#include <mapplicationmenuanimationstyle.h>
+
+//! \internal
+
+class MApplicationMenuAnimationPrivate;
+
+class MApplicationMenuAnimation : public MDialogAnimation
+{
+ Q_OBJECT
+ M_ANIMATION_GROUP(MApplicationMenuAnimationStyle)
+
+public:
+ MApplicationMenuAnimation(QObject *parent = NULL);
+
+protected:
+ MApplicationMenuAnimation(MApplicationMenuAnimationPrivate *dd, QObject *parent = NULL);
+
+private:
+ Q_DECLARE_PRIVATE(MApplicationMenuAnimation)
+};
+
+//! \internal_end
+
+#endif // MAPPLICATIONMENUANIMATION_H
diff --git a/src/corelib/animation/widget/mapplicationmenuanimation_p.h b/src/corelib/animation/widget/mapplicationmenuanimation_p.h
new file mode 100644
index 00000000..acf84e2c
--- /dev/null
+++ b/src/corelib/animation/widget/mapplicationmenuanimation_p.h
@@ -0,0 +1,38 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MAPPLICATIONMENUANIMATION_P_H
+#define MAPPLICATIONMENUANIMATION_P_H
+
+#include "mdialoganimation_p.h"
+#include "mapplicationmenuanimation.h"
+
+class MApplicationMenuAnimationPrivate : public MDialogAnimationPrivate
+{
+ Q_DECLARE_PUBLIC(MApplicationMenuAnimation)
+
+public:
+ MApplicationMenuAnimationPrivate();
+
+ virtual void setupDurations();
+ virtual void setupEasingCurves();
+ virtual QPointF setupPositionAnimation(const QPointF &widgetPos);
+};
+
+#endif // MAPPLICATIONMENUANIMATION_P_H
diff --git a/src/corelib/animation/widget/mdialoganimation_p.h b/src/corelib/animation/widget/mdialoganimation_p.h
index 0ab84c45..1e08addd 100644
--- a/src/corelib/animation/widget/mdialoganimation_p.h
+++ b/src/corelib/animation/widget/mdialoganimation_p.h
@@ -26,7 +26,7 @@
class QPropertyAnimation;
class QPauseAnimation;
-class MDialogAnimationPrivate : MAbstractWidgetAnimationPrivate
+class MDialogAnimationPrivate : public MAbstractWidgetAnimationPrivate
{
Q_DECLARE_PUBLIC(MDialogAnimation)
public:
@@ -35,14 +35,14 @@ public:
void findComponentsForAnimation();
QGraphicsWidget* findDialogBox(QGraphicsItem *parentItem);
- void setupDurations();
- void setupEasingCurves();
+ virtual void setupDurations();
+ virtual void setupEasingCurves();
void setupTitleBarAnimation();
void setupContentsViewportAnimation();
void setupButtonBoxAnimation();
- QPointF setupPositionAnimation(const QPointF &widgetPos);
+ virtual QPointF setupPositionAnimation(const QPointF &widgetPos);
MDialogAnimation::TransitionDirection direction;
QPointF origin;
diff --git a/src/corelib/animation/widget/widget.pri b/src/corelib/animation/widget/widget.pri
index dac4326d..7317202f 100644
--- a/src/corelib/animation/widget/widget.pri
+++ b/src/corelib/animation/widget/widget.pri
@@ -8,6 +8,7 @@ include(core/core.pri)
ANIMATIONS_WIDGET_SRC_DIR=./animation/widget
PUBLIC_HEADERS += \
+ $$ANIMATIONS_WIDGET_SRC_DIR/mapplicationmenuanimation.h \
$$ANIMATIONS_WIDGET_SRC_DIR/mdialoganimation.h \
$$ANIMATIONS_WIDGET_SRC_DIR/mwidgetfadeanimation.h \
$$ANIMATIONS_WIDGET_SRC_DIR/mwidgetmoveanimation.h \
@@ -17,6 +18,7 @@ PUBLIC_HEADERS += \
$$ANIMATIONS_WIDGET_SRC_DIR/mcontentfadeandslideanimation.h \
PRIVATE_HEADERS += \
+ $$ANIMATIONS_WIDGET_SRC_DIR/mapplicationmenuanimation_p.h \
$$ANIMATIONS_WIDGET_SRC_DIR/mdialoganimation_p.h \
$$ANIMATIONS_WIDGET_SRC_DIR/mwidgetfadeanimation_p.h \
$$ANIMATIONS_WIDGET_SRC_DIR/mwidgetmoveanimation_p.h \
@@ -26,6 +28,7 @@ PRIVATE_HEADERS += \
$$ANIMATIONS_WIDGET_SRC_DIR/mcontentfadeandslideanimation_p.h \
SOURCES += \
+ $$ANIMATIONS_WIDGET_SRC_DIR/mapplicationmenuanimation.cpp \
$$ANIMATIONS_WIDGET_SRC_DIR/mdialoganimation.cpp \
$$ANIMATIONS_WIDGET_SRC_DIR/mwidgetfadeanimation.cpp \
$$ANIMATIONS_WIDGET_SRC_DIR/mwidgetmoveanimation.cpp \
diff --git a/src/corelib/scene/mscenemanager.cpp b/src/corelib/scene/mscenemanager.cpp
index bad60e3b..95d1df38 100644
--- a/src/corelib/scene/mscenemanager.cpp
+++ b/src/corelib/scene/mscenemanager.cpp
@@ -1598,10 +1598,13 @@ void MSceneManagerPrivate::createAppearanceAnimationForSceneWindow(MSceneWindow
switch(sceneWindow->windowType()) {
case MSceneWindow::NotificationInformation:
case MSceneWindow::NotificationEvent:
- case MSceneWindow::ApplicationMenu:
case MSceneWindow::NavigationBar:
animation = new MWidgetSlideAnimation(sceneWindow);
break;
+ case MSceneWindow::ApplicationMenu:
+ animation = qobject_cast<MAbstractWidgetAnimation*>(
+ MTheme::animation(style()->applicationMenuAnimation()));
+ break;
case MSceneWindow::PopupList:
animation = qobject_cast<MAbstractWidgetAnimation*>(
MTheme::animation(style()->popupListAnimation()));
@@ -1658,10 +1661,13 @@ void MSceneManagerPrivate::createDisappearanceAnimationForSceneWindow(MSceneWind
switch(sceneWindow->windowType()) {
case MSceneWindow::NotificationInformation:
case MSceneWindow::NotificationEvent:
- case MSceneWindow::ApplicationMenu:
case MSceneWindow::NavigationBar:
animation = new MWidgetSlideAnimation(sceneWindow);
break;
+ case MSceneWindow::ApplicationMenu:
+ animation = qobject_cast<MAbstractWidgetAnimation*>(
+ MTheme::animation(style()->applicationMenuAnimation()));
+ break;
case MSceneWindow::PopupList:
animation = qobject_cast<MAbstractWidgetAnimation*>(
MTheme::animation(style()->popupListAnimation()));
diff --git a/src/corelib/style/mapplicationmenuanimationstyle.h b/src/corelib/style/mapplicationmenuanimationstyle.h
new file mode 100644
index 00000000..d6cf2d9c
--- /dev/null
+++ b/src/corelib/style/mapplicationmenuanimationstyle.h
@@ -0,0 +1,46 @@
+/***************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (directui@nokia.com)
+**
+** This file is part of libmeegotouch.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at directui@nokia.com.
+**
+** This library is free software; you can redistribute it and/or
+** modify it under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation
+** and appearing in the file LICENSE.LGPL included in the packaging
+** of this file.
+**
+****************************************************************************/
+
+#ifndef MAPPLICATIONMENUANIMATIONSTYLE_H
+#define MAPPLICATIONMENUANIMATIONSTYLE_H
+
+#include <mdialoganimationstyle.h>
+
+//! \internal
+class MApplicationMenuAnimationStyle: public MDialogAnimationStyle
+{
+ Q_OBJECT
+ M_STYLE_INTERNAL(MApplicationMenuAnimationStyle)
+
+ M_STYLE_ATTRIBUTE(bool, titleBarHasCustomEasingCurve, TitleBarHasCustomEasingCurve)
+ M_STYLE_ATTRIBUTE(QEasingCurve, titleBarAnimationEasingCurve, TitleBarAnimationEasingCurve)
+
+ M_STYLE_ATTRIBUTE(int, contentsViewportPositionAnimationDuration, ContentsViewportPositionAnimationDuration)
+ M_STYLE_ATTRIBUTE(QEasingCurve, contentsViewportPositionAnimationEasingCurve, ContentsViewportPositionAnimationEasingCurve)
+ M_STYLE_ATTRIBUTE(qreal, contentsViewportPositionAnimationDistance, ContentsViewportPositionAnimationDistance)
+};
+
+class MApplicationMenuAnimationStyleContainer : public MDialogAnimationStyleContainer
+{
+ M_STYLE_CONTAINER_INTERNAL(MApplicationMenuAnimationStyle)
+};
+//! \internal_end
+
+#endif
+
diff --git a/src/corelib/style/style.pri b/src/corelib/style/style.pri
index 94e5a7cb..2b8ca2ee 100644
--- a/src/corelib/style/style.pri
+++ b/src/corelib/style/style.pri
@@ -27,6 +27,7 @@ STYLE_HEADERS += \
$$STYLE_SRC_DIR/mbasiclayoutanimationstyle.h \
$$STYLE_SRC_DIR/mcrossfadedorientationanimationstyle.h \
$$STYLE_SRC_DIR/mdialoganimationstyle.h \
+ $$STYLE_SRC_DIR/mapplicationmenuanimationstyle.h \
$$STYLE_SRC_DIR/mgroupanimationstyle.h \
$$STYLE_SRC_DIR/mlayoutanimationstyle.h \
$$STYLE_SRC_DIR/mwidgetfadeanimationstyle.h \
diff --git a/src/views/mapplicationmenuview.cpp b/src/views/mapplicationmenuview.cpp
index 002af5f2..edf3fb17 100644
--- a/src/views/mapplicationmenuview.cpp
+++ b/src/views/mapplicationmenuview.cpp
@@ -39,6 +39,7 @@
#include "mgridlayoutpolicy.h"
#include "mbasiclistitem.h"
#include "mcombobox.h"
+#include "mstylablewidget.h"
const int maxCommandActionsWithStyle = 6;
const int maxColumns = 1;
@@ -54,7 +55,9 @@ MApplicationMenuViewPrivate::MApplicationMenuViewPrivate(MApplicationMenu *menu)
styleButtonGroup(0),
leasedWidgets(),
buttons(),
- controller(menu)
+ controller(menu),
+ actionCommandViewport(0),
+ topArea(0)
{
//mainlayout for the application menu
controllerLayout = new QGraphicsLinearLayout(Qt::Vertical, controller);
@@ -68,6 +71,8 @@ MApplicationMenuViewPrivate::MApplicationMenuViewPrivate(MApplicationMenu *menu)
QGraphicsWidget* actionWidget = new QGraphicsWidget(controller);
actionWidget->setLayout(actionCommandLayout);
actionCommandViewport = new MPannableViewport(controller);
+ actionCommandViewport->setStyleName("MApplicationMenuActionViewport");
+ actionCommandViewport->setObjectName(actionCommandViewport->styleName());
actionCommandViewport->setVerticalPanningPolicy(MPannableWidget::PanningAsNeeded);
actionCommandViewport->setWidget(actionWidget);
@@ -80,7 +85,14 @@ MApplicationMenuViewPrivate::MApplicationMenuViewPrivate(MApplicationMenu *menu)
styleButtonGroup = new MButtonGroup();
styleButtonGroup->setExclusive(true);
+ //top decoration area
+ topArea = new MStylableWidget;
+ topArea->setStyleName("MApplicationMenuTopArea");
+ topArea->setObjectName(topArea->styleName());
+
//add sublayouts to the mainlayout
+ controllerLayout->addItem(topArea);
+ controllerLayout->setAlignment(topArea, Qt::AlignCenter);
controllerLayout->addItem(styleCommandLayout);
controllerLayout->addItem(actionCommandViewport);
controllerLayout->setAlignment(actionCommandViewport, Qt::AlignCenter);
diff --git a/src/views/mapplicationmenuview_p.h b/src/views/mapplicationmenuview_p.h
index 79cc02a3..eab8af0a 100644
--- a/src/views/mapplicationmenuview_p.h
+++ b/src/views/mapplicationmenuview_p.h
@@ -42,6 +42,8 @@ class MButtonGroup;
class MWidget;
class MBasicListItem;
class MComboBox;
+class MWidgetController;
+class MStylableWidget;
class MApplicationMenuViewPrivate : public QObject
{
@@ -115,6 +117,7 @@ protected:
MApplicationMenu *controller;
MPannableViewport* actionCommandViewport;
+ MStylableWidget *topArea;
#ifdef UNIT_TEST
friend class Ut_MApplicationMenu;