diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/coretoolkit/src/HuiFxParameterManager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiFxParameterManager.cpp Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,225 @@ +/* +* Copyright (c) 2008 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 "HuiFxParameterManager.h" +#include "HuiFxEngine.h" +#include "HuiFxScalarParameter.h" +#include "HuiFxColorParameter.h" +#include + +CHuiFxParameterManager* CHuiFxParameterManager::NewL() + { + CHuiFxParameterManager* self = new (ELeave) CHuiFxParameterManager(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CHuiFxParameterManager::CHuiFxParameterManager() + { +#ifdef HUIFX_TRACE + RDebug::Print(_L("CHuiFxParameterManager::CHuiFxParameterManager - 0x%x "), this); +#endif + } + +void CHuiFxParameterManager::ConstructL() + { + } + +CHuiFxParameterManager* CHuiFxParameterManager::CloneL() const +{ + CHuiFxParameterManager *params = CHuiFxParameterManager::NewL(); + return params; +} + +void CHuiFxParameterManager::CopyParameterL(const TDesC &aName, TReal32 *aValue, const CHuiFxParameterManager *aOldValues) + { + MHuiFxParameter *param = const_cast(aOldValues)->Parameter(aName); + MHuiFxParameter *param2 = param->CloneL(); + param2->ReRef(aValue); + iParameters.InsertL(aName.AllocL(), param2); + } +void CHuiFxParameterManager::CopyParameterL(const TDesC &aName, TRgb *aValue, const CHuiFxParameterManager *aOldValues) + { + MHuiFxParameter *param = const_cast(aOldValues)->Parameter(aName); + MHuiFxParameter *param2 = param->CloneL(); + param2->ReRef(aValue); + iParameters.InsertL(aName.AllocL(), param2); + } + + +CHuiFxParameterManager::~CHuiFxParameterManager() + { + // Free registered parameters + /*TPtrHashMapIter i(iParameters); + for (i.NextValue(); i.CurrentValue(); i.NextValue()) + { + delete i.CurrentKey(); + delete i.CurrentValue(); + } + iParameters.Close();*/ + iParameters.ResetAndDestroy(); + iParameters.Close(); +#ifdef HUIFX_TRACE + RDebug::Print(_L("CHuiFxParameterManager::~CHuiFxParameterManager - 0x%x "), this); +#endif + } + +void CHuiFxParameterManager::RegisterParameterL(const TDesC& aName, TReal32* aValue) + { +#ifdef HUIFX_TRACE + RDebug::Print(_L("CHuiFxParameterManager::RegisterParameterL - 0x%x %S scal: 0x%x"), this, &aName, *aValue); +#endif + MHuiFxParameter* param = new (ELeave) CHuiFxScalarParameter(aValue); + CleanupStack::PushL(param); + iParameters.InsertL(aName.AllocL(), param); + CleanupStack::Pop(param); + } + +void CHuiFxParameterManager::RegisterParameterL(const TDesC& aName, TRgb* aValue) + { +#ifdef HUIFX_TRACE + RDebug::Print(_L("CHuiFxParameterManager::RegisterParameterL - 0x%x %S rgb: 0x%x"), this, &aName, *aValue); +#endif //#ifdef HUIFX_TRACE + MHuiFxParameter* param = new (ELeave) CHuiFxColorParameter(aValue); + CleanupStack::PushL(param); + iParameters.InsertL(aName.AllocL(), param); + CleanupStack::Pop(param); + } + +TBool CHuiFxParameterManager::HasAnimatedParameters() const + { + TPtrHashMapIter i(iParameters); + for (i.NextValue(); i.CurrentValue(); i.NextValue()) + { + if (i.CurrentValue()->IsAnimated()) + { + return ETrue; + } + } + return EFalse; + } + +void CHuiFxParameterManager::AdvanceTime(TReal32 aElapsedTime) + { + TPtrHashMapIter i(iParameters); + for (i.NextValue(); i.CurrentValue(); i.NextValue()) + { + MHuiFxParameter* p = (MHuiFxParameter*)i.CurrentValue(); + p->AdvanceTime(aElapsedTime); + } + } + +TBool CHuiFxParameterManager::Update(CHuiFxEngine& aEngine, const TRect& aVisualRect) + { + // Calculate all current parameter values + TPtrHashMapIter i(iParameters); + + TBool parameterChanged = EFalse; + for (i.NextValue(); i.CurrentValue(); i.NextValue()) + { + MHuiFxParameter* p = (MHuiFxParameter*)i.CurrentValue(); + if ( p->IsAnimated() ) + { + parameterChanged = ETrue; + } + + TReal32 newValue = p->ReferenceValue(); + ResolveReference( newValue, p->ReferencePoint(), aEngine, aVisualRect ); + if ( newValue != p->ReferenceValue() ) + { + p->SetReferenceValue( newValue ); + parameterChanged = ETrue; + } + + if ( p->StartReference() != EReferencePointUndefined ) + { + newValue = p->StartValue(); + ResolveReference( newValue, p->StartReference(), aEngine, aVisualRect ); + if ( newValue != p->StartValue() ) + { + p->SetStartValue( newValue ); + parameterChanged = ETrue; + } + } + + if ( p->EndReference() != EReferencePointUndefined ) + { + newValue = p->EndValue(); + ResolveReference( newValue, p->EndReference(), aEngine, aVisualRect ); + if ( newValue != p->EndValue() ) + { + p->SetEndValue( newValue ); + parameterChanged = ETrue; + } + } + + p->Update(); + } + return parameterChanged; + } + +MHuiFxParameter* CHuiFxParameterManager::Parameter(const TDesC& aName) + { + return iParameters.Find(aName); + } + +void CHuiFxParameterManager::ResolveReference( TReal32& aDefaultValue, THuiFxReferencePoint aRef, CHuiFxEngine& aEngine, const TRect& aVisualRect ) + { + switch ( aRef ) + { + case EReferencePointIdentity: + case EReferencePointUndefined: + // If the reference point is an external value, it will not change + // after it has been set + case EReferencePointExtRectWidth: + case EReferencePointExtRectHeight: + case EReferencePointExtRectTop: + case EReferencePointExtRectBottom: + case EReferencePointExtRectLeft: + case EReferencePointExtRectRight: + break; + case EReferencePointVisualWidth: + aDefaultValue = aVisualRect.Size().iWidth; + break; + case EReferencePointVisualHeight: + aDefaultValue = aVisualRect.Size().iHeight; + break; + case EReferencePointVisualTop: + aDefaultValue = aVisualRect.iTl.iY; + break; + case EReferencePointVisualBottom: + // the bottom right corner of a rect is actually outside the rect + aDefaultValue = aVisualRect.iBr.iY; + break; + case EReferencePointVisualLeft: + aDefaultValue = aVisualRect.iTl.iX; + break; + case EReferencePointVisualRight: + // the bottom right corner of a rect is actually outside the rect + aDefaultValue = aVisualRect.iBr.iX; + break; + default: + // This will return reference points that depend on display size + aDefaultValue = aEngine.GetReferenceValue( aRef ); + break; + } + } +