diff options
author | Jukka Halonen <ext-jukka.a.halonen@nokia.com> | 2011-01-04 11:53:08 +0200 |
---|---|---|
committer | Dominik Kapusta <dominik.kapusta@teleca.com> | 2011-01-04 11:19:08 +0100 |
commit | 64a78589f881883d58324b0f2c8503d4e2b8de55 (patch) | |
tree | 67139ba856debae70c7ef4ea541e19438606b1dd | |
parent | b760e0a6a4c82f5ad4d08184dcfd68c38da2b31f (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.cpp | 76 | ||||
-rw-r--r-- | src/corelib/animation/widget/mapplicationmenuanimation.h | 47 | ||||
-rw-r--r-- | src/corelib/animation/widget/mapplicationmenuanimation_p.h | 38 | ||||
-rw-r--r-- | src/corelib/animation/widget/mdialoganimation_p.h | 8 | ||||
-rw-r--r-- | src/corelib/animation/widget/widget.pri | 3 | ||||
-rw-r--r-- | src/corelib/scene/mscenemanager.cpp | 10 | ||||
-rw-r--r-- | src/corelib/style/mapplicationmenuanimationstyle.h | 46 | ||||
-rw-r--r-- | src/corelib/style/style.pri | 1 | ||||
-rw-r--r-- | src/views/mapplicationmenuview.cpp | 14 | ||||
-rw-r--r-- | src/views/mapplicationmenuview_p.h | 3 |
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; |