diff -r 8e5f6eea9c9f -r 5b3385a43d68 photosgallery/viewframework/uiutilities/src/glxanimationview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/viewframework/uiutilities/src/glxanimationview.cpp Wed Sep 01 12:33:26 2010 +0100 @@ -0,0 +1,175 @@ +/* +* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: View-transition animations +* +*/ + + + + +/** + * @internal reviewed 12/07/2007 by Michael Yip + */ + +#include "glxanimationview.h" + +#include +#include +#include + + +const TReal KGlxViewSwitchBackgroundScalingFactor = 0.2; +const TReal KGlxViewSwitchForegroundScalingFactor = 0.3; + + + +// ----------------------------------------------------------------------------- +// NewL +// ----------------------------------------------------------------------------- +// +CGlxAnimationView* CGlxAnimationView::NewL( + TGlxViewswitchAnimation aAnimType, + TGlxNavigationDirection aDirection, + const RPointerArray& aControlGroups) + { + CGlxAnimationView* self = new (ELeave) CGlxAnimationView(aAnimType, aDirection); + CleanupStack::PushL(self); + self->ConstructL(aControlGroups); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// Constructor +// ----------------------------------------------------------------------------- +// +CGlxAnimationView::CGlxAnimationView( + TGlxViewswitchAnimation aAnimType, + TGlxNavigationDirection aDirection) +: iAnimType(aAnimType), + iDirection(aDirection) + { + } + +// ----------------------------------------------------------------------------- +// ConstructL +// ----------------------------------------------------------------------------- +// +void CGlxAnimationView::ConstructL(const RPointerArray& aControlGroups) + { + TInt count = aControlGroups.Count(); + + for (TInt index = 0; index < count; index++) + { + iControlGroups.AppendL(aControlGroups[index]); + } + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +CGlxAnimationView::~CGlxAnimationView() + { + iControlGroups.Close(); + } + +// ----------------------------------------------------------------------------- +// StartTimedAnimationL +// ----------------------------------------------------------------------------- +// +void CGlxAnimationView::StartTimedAnimationL( TInt aTime ) + { + // Set up timed values + TAlfTimedValue scale( 1.0 ); + TAlfTimedValue opacity( 1.0 ); + + // Set the scaling effect + if ( EGlxNavigationForwards == iDirection ) + { + if( EGlxViewAnimationEntry == iAnimType ) + { + scale.SetValueNow( 1 - KGlxViewSwitchBackgroundScalingFactor ); + scale.SetTarget( 1, aTime ); // and target + } + else if ( EGlxViewAnimationExit == iAnimType ) + { + scale.SetValueNow( 1 ); + scale.SetTarget( 1 + KGlxViewSwitchForegroundScalingFactor, aTime ); // and target + } + } + else if ( EGlxNavigationBackwards == iDirection ) + { + if( EGlxViewAnimationEntry == iAnimType ) + { + scale.SetValueNow( 1 + KGlxViewSwitchForegroundScalingFactor ); + scale.SetTarget( 1, aTime ); // and target + } + else if ( EGlxViewAnimationExit == iAnimType ) + { + scale.SetValueNow( 1 ); + scale.SetTarget( 1 - KGlxViewSwitchBackgroundScalingFactor, aTime ); // and target + } + } + + // Set the opacity effect + if( EGlxViewAnimationEntry == iAnimType ) + { + opacity.SetValueNow( 0 ); + opacity.SetTarget(1.0, aTime ); + } + else if ( EGlxViewAnimationExit == iAnimType ) + { + opacity.SetValueNow( 1.0 ); + opacity.SetTarget(0.0, aTime ); + } + opacity.SetStyle(EAlfTimedValueStyleLinear); + + // Find out the screen size + CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL(); + CleanupClosePushL( *uiUtility ); + CleanupStack::PopAndDestroy( uiUtility ); + + // Animate each of the control groups + TInt cgCount = iControlGroups.Count(); + for ( TInt cg = 0; cg < cgCount; cg++ ) + { + // If exiting, disable input events + if ( EGlxViewAnimationExit == iAnimType ) + { + iControlGroups[cg]->SetAcceptInput( EFalse ); + } + + // Set up control group transformations + iControlGroups[cg]->EnableTransformationL(); + CAlfTransformation& trans = iControlGroups[cg]->Transformation(); + trans.Scale( scale, scale ); + + // Set opacity of all toplevel visuals in all controls in this group + TInt controlCount = iControlGroups[cg]->Count(); + for(TInt i = 0; i < controlCount; i++ ) + { + CAlfControl& control = iControlGroups[cg]->Control(i); + for(TInt j = 0; j < control.VisualCount(); j++) + { + if ( control.Visual(j).Layout() ) + { + control.Visual(j).SetOpacity( opacity ); + } + } + } + } + } + +