diff -r 000000000000 -r 2f259fa3e83a lafagnosticuifoundation/animation/src/ICLAnimationDataProvider.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lafagnosticuifoundation/animation/src/ICLAnimationDataProvider.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,180 @@ +// Copyright (c) 2004-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: +// AnimationDataProvider.cpp +// +// + +#include "ICLAnimationDataProvider.h" + +#include + +#include "AnimationMixins.h" +#include "AnimationEvents.h" +#include "ICLAnimationDataLoader.h" + +/** Default constructor.*/ +EXPORT_C CICLAnimationDataProvider::CICLAnimationDataProvider() + { + } + +/** +Destructor. + +It is normal for an animation to take ownership of a data provider, and hence +responsibility for destroying it. +*/ +EXPORT_C CICLAnimationDataProvider::~CICLAnimationDataProvider() + { + Reset(); + } //lint !e1740 suppress "pointer member not directly freed or zeroed by destructor" + +/** +Specifies the file to load the animation from. + +This must be called before constructing an animation with this data provider. +It may be called again for other files at any point during the lifespan of +the animation, in which case current animation will be stopped. + +@param aFs A session with the file server +@param aFileName The path to the image file to be loaded +*/ +EXPORT_C void CICLAnimationDataProvider::SetFileL(RFs & aFs, const TFileName& aFileName) + { + Reset(); + + iDataLoader = CICLAnimationDataLoader::NewL(aFs, *this); + iDataLoader->LoadImageDataL(aFileName); + if (iObserver) + { + SendEventL(EAnimationDataChanged); + } + } + +/** +Implmenets CAnimationDataProvider::StartL() + +You do not need to call this function unless you are writing a new animation +type. +*/ +void CICLAnimationDataProvider::StartL() + { + if (!iObserver) + { + User::Leave(KErrNotReady); + } + + DataDeliveryL(); + } + +void CICLAnimationDataProvider::DataDeliveryL() + { + if (!iDataLoader) + { + User::Leave(KErrNotReady); + } + + if(!iCurrentFrame) + { + iCurrentFrame = CAnimationFrame::NewL(); + } + + DecodeImageL(); + } + +void CICLAnimationDataProvider::Reset() + { + if (iDataLoader) + { + iDataLoader->Cancel(); + delete iDataLoader; + iDataLoader = NULL; + } + + delete iCurrentFrame; + iCurrentFrame = NULL; + } + +void CICLAnimationDataProvider::DecodeImageL() + { + iDataLoader->GetNextFrameL(iCurrentFrame); + } + +CAnimationFrame::THandles CICLAnimationDataProvider::CurrentFrame() const + { + CAnimationFrame::THandles serverFrame; + iCurrentFrame->GetHandles(serverFrame); + return serverFrame; + } + +void CICLAnimationDataProvider::DataLoaderEventL(TDataLoaderEvent aEvent, TInt aError) + { + if (aError == KErrNone) + { + CAnimationFrame::THandles handle; + switch(aEvent) + { + case MICLAnimationDataLoaderObserver::EImagePartialConvert: + handle = CurrentFrame(); + SendEventL(EBitmapAnimationNewFrame, &handle, sizeof(CAnimationFrame::THandles)); + DecodeImageL(); + break; + case MICLAnimationDataLoaderObserver::EImageConvertComplete: + if (!iDataLoader->IsMngAnimation()) + { + handle = CurrentFrame(); + SendEventL(EBitmapAnimationNewFrame, &handle, sizeof(CAnimationFrame::THandles)); + } + // If it is a mng images, the last frame submitted by ICL is superflous + // as a blank frame, it should not be received. + SendEventL(EBitmapAnimationComplete); + Reset(); + break; + default: + break; + } + } + else + { + SendEventL(EAnimationDataProviderError, aError); + } + } + +/** Reserved for future use */ +EXPORT_C void CICLAnimationDataProvider::CICLAnimationDataProvider_Reserved1() + { + } + +/** Reserved for future use */ +EXPORT_C void CICLAnimationDataProvider::CICLAnimationDataProvider_Reserved2() + { + } + +// From CAnimationDataProvider +/** Reserved for future use */ +EXPORT_C void CICLAnimationDataProvider::CAnimationDataProvider_Reserved1() + { + CAnimationDataProvider::CAnimationDataProvider_Reserved1(); + } + +/** Reserved for future use */ +EXPORT_C void CICLAnimationDataProvider::CAnimationDataProvider_Reserved2() + { + CAnimationDataProvider::CAnimationDataProvider_Reserved2(); + } + + +EXPORT_C TPtrC8 CICLAnimationDataProvider::DataType() + { + return(KBitmapAnimationDataType()); + }