diff -r 000000000000 -r bde4ae8d615e os/graphics/windowing/windowserver/stdgraphic/W32STDGRAPHIC.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/graphics/windowing/windowserver/stdgraphic/W32STDGRAPHIC.CPP Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,147 @@ +// Copyright (c) 1995-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: +// + +#include "W32STDGRAPHIC.H" + +// TWsGraphicAnimation \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ + +EXPORT_C TWsGraphicAnimation::TWsGraphicAnimation(): + TWsGraphicMsgFixedBase(TUid::Uid(ETypeId),sizeof(*this)), + iFlags(EStopped) + { + } + +EXPORT_C TBool TWsGraphicAnimation::IsPlaying() const + { + return (State() == EPlaying); + } + +EXPORT_C TBool TWsGraphicAnimation::IsStopped() const + { + return (State() == EStopped); + } + +EXPORT_C TBool TWsGraphicAnimation::IsStopping() const + { + return (State() == EStopping); + } + +EXPORT_C TBool TWsGraphicAnimation::IsPaused() const + { + return (State() == EPaused); + } + +EXPORT_C TBool TWsGraphicAnimation::Loops() const + { + switch(State()) + { + case EPlaying: + case EPaused: + return ((iFlags & ELoop) == ELoop); + default: + return EFalse; + } + } + +TUint TWsGraphicAnimation::State() const + { + return (iFlags & EStateMask); + } + +void TWsGraphicAnimation::SetState(TUint aState) + { + iFlags &= ~EStateMask; + iFlags |= (aState & EStateMask); + } + + EXPORT_C void TWsGraphicAnimation::Play(TBool aLoop) + { + switch(State()) + { + case EStopped: + case EStopping: + SetState(EPlaying); + // fall through + case EPlaying: + iPlay.UniversalTime(); //Start over again + break; + case EPaused: + SetState(EPlaying); + if(aLoop != Loops()) // can't resume a mismatch of looping attribute + { + iPlay.UniversalTime(); + } + else // resume + { + TTimeIntervalMicroSeconds delta = iPauseOrStopping.MicroSecondsFrom(iPlay); + iPlay.UniversalTime(); + iPlay = iPlay.Int64() - delta.Int64(); + break; + } + } + if(aLoop) + { + iFlags |= ELoop; + } + else + { + iFlags &= ~ELoop; + } + } + +EXPORT_C void TWsGraphicAnimation::Pause() + { + switch(State()) + { + case EPlaying: + case EStopping: + SetState(EPaused); + iPauseOrStopping.UniversalTime(); + break; + case EStopped: + case EPaused: + break; + } + } + +EXPORT_C void TWsGraphicAnimation::Stop(TBool aImmediately) + { + if(aImmediately) + { + SetState(EStopped); + } + else + { + switch(State()) + { + case EPlaying: + SetState(EStopping); + iPauseOrStopping.UniversalTime(); + break; + case EStopped: + break; + case EStopping: + iPauseOrStopping.UniversalTime(); + break; + case EPaused: + SetState(EStopping); + TTimeIntervalMicroSeconds delta = iPauseOrStopping.MicroSecondsFrom(iPlay); + iPlay.UniversalTime(); + iPlay = iPlay.Int64() - delta.Int64(); + iPauseOrStopping.UniversalTime(); + break; + } + } + }