diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/ServerCore/Src/alfsrvtransformationsubsession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfsrvtransformationsubsession.cpp Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,419 @@ +/* +* Copyright (c) 2006 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: Transformation sub session +* +*/ + + + +#include "alfsrvtransformationsubsession.h" +#include "alf/alfconstants.h" +#include "alf/alfappsrvsessionbase.h" +#include "alfappsrvsession.h" +#include "alf/alfserverutils.h" +#include +#include +#include +#include + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CAlfSrvTransformationSubSession::CAlfSrvTransformationSubSession( + CAlfAppSrvSessionBase& aSession ) + : CAlfSrvSubSessionBase( aSession ) + { + } + + +// --------------------------------------------------------------------------- +// 2nd phasse constructor +// --------------------------------------------------------------------------- +// +void CAlfSrvTransformationSubSession::ConstructL() + { + CAlfSrvSubSessionBase::ConstructL(); + } + + +// --------------------------------------------------------------------------- +// NewL +// --------------------------------------------------------------------------- +// +CAlfSrvTransformationSubSession* CAlfSrvTransformationSubSession::NewL( + CAlfAppSrvSessionBase& aSession ) + { + CAlfSrvTransformationSubSession* self = + CAlfSrvTransformationSubSession::NewLC( aSession ); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// NewLC +// --------------------------------------------------------------------------- +// +CAlfSrvTransformationSubSession* CAlfSrvTransformationSubSession::NewLC( + CAlfAppSrvSessionBase& aSession ) + { + CAlfSrvTransformationSubSession* self = + new( ELeave ) CAlfSrvTransformationSubSession( aSession ); + CleanupClosePushL( *self ); + self->ConstructL(); + return self; + } + + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CAlfSrvTransformationSubSession::~CAlfSrvTransformationSubSession() + { + iTransformation= NULL; + } + +// --------------------------------------------------------------------------- +// Gets transformation +// --------------------------------------------------------------------------- +// +CHuiTransformation& CAlfSrvTransformationSubSession::Transformation() + { + __ASSERT_ALWAYS( iTransformation, USER_INVARIANT() ); + return *iTransformation; + } + +// --------------------------------------------------------------------------- +// Sets transformation +// --------------------------------------------------------------------------- +// +void CAlfSrvTransformationSubSession::SetTransformation( + CHuiTransformation* aTransformation ) + { + iTransformation = aTransformation; + } + +// --------------------------------------------------------------------------- +// Reset matrix +// --------------------------------------------------------------------------- +// +void CAlfSrvTransformationSubSession::LoadIdentityL(const RMessage2& aMessage) + { + // Load identity + Transformation().LoadIdentity(); + + // Complete + aMessage.Complete( KErrNone ); + } + +// --------------------------------------------------------------------------- +// Translate +// --------------------------------------------------------------------------- +// +void CAlfSrvTransformationSubSession::TranslateL(const RMessage2& aMessage) + { + // Parser parameters + + // 1: x (in) + TReal32 x(0.0); + TPckg xRealPckg(x); + aMessage.Read(1,xRealPckg); + // 2: y (in) + TReal32 y(0.0); + TPckg yRealPckg(y); + aMessage.Read(2,yRealPckg); + + // Translate + Transformation().Translate( x, y ); + + // Complete + aMessage.Complete( KErrNone ); + } + +// --------------------------------------------------------------------------- +// Rotate +// --------------------------------------------------------------------------- +// +void CAlfSrvTransformationSubSession::RotateL(const RMessage2& aMessage) + { + // Parser parameters + + // 1: angle (in) + TAlfTimedValue alf_angle; + TPckg anglePckg(alf_angle); + aMessage.Read(1,anglePckg); + + THuiTimedValue angle; + AlfTimedValueUtility::CopyTimedValue(alf_angle, angle, Session()); + + // Rotate + Transformation().Rotate( angle ); + + // Complete + aMessage.Complete( KErrNone ); + } + +// --------------------------------------------------------------------------- +// Count +// --------------------------------------------------------------------------- +// +void CAlfSrvTransformationSubSession::CountL(const RMessage2& aMessage) + { + TInt count = 0; + TPckg outputPckg(count); + + // Count + count = Transformation().Count(); + + // Write output params + aMessage.Write(1,outputPckg); + + // Complete + aMessage.Complete( KErrNone ); + } + +// --------------------------------------------------------------------------- +// NonIdentityCount +// --------------------------------------------------------------------------- +// +void CAlfSrvTransformationSubSession::NonIdentityCountL(const RMessage2& aMessage) + { + TInt count = 0; + TPckg outputPckg(count); + + // Count + count = Transformation().NonIdentityCount(); + + // Write output params + aMessage.Write(1,outputPckg); + + // Complete + aMessage.Complete( KErrNone ); + } + +// --------------------------------------------------------------------------- +// Step +// --------------------------------------------------------------------------- +// +void CAlfSrvTransformationSubSession::StepL(const RMessage2& aMessage) + { + // 1: Index (in) + TInt index = aMessage.Int1(); + + // 2: Transform step (out) + CAlfTransformation::TTransform step; + TPckg outputPckg(step); + + // Step + CHuiTransformation::TTransform huiStep = Transformation().Step(index); + step.iType = (CAlfTransformation::TType)huiStep.iType; + for (TInt i=0; i stepPckg(step); + aMessage.Read(2,stepPckg); + + // ReplaceStep + CHuiTransformation::TTransform& huiStep = Transformation().Step(index); + huiStep.iType = (CHuiTransformation::TType)step.iType; + for (TInt i=0; i paramPckg(params); + aMessage.Read(1,paramPckg); + + THuiTimedValue angle; + AlfTimedValueUtility::CopyTimedValue(params.iAngle, angle, Session()); + + // Rotate + Transformation().Rotate( angle, params.iAxisX, params.iAxisY, params.iAxisZ ); + + // Complete + aMessage.Complete( KErrNone ); + } + + +// --------------------------------------------------------------------------- +// Scale (3D version of the function) +// --------------------------------------------------------------------------- +// +void CAlfSrvTransformationSubSession::Scale3DL(const RMessage2& aMessage) + { + // Parse parameters + + // 1: params (in) + TAlfTransformationTimedParams params; + TPckg paramPckg(params); + aMessage.Read(1,paramPckg); + + THuiTimedValue x; + AlfTimedValueUtility::CopyTimedValue(params.iX, x, Session()); + + THuiTimedValue y; + AlfTimedValueUtility::CopyTimedValue(params.iY, y, Session()); + + THuiTimedValue z; + AlfTimedValueUtility::CopyTimedValue(params.iZ, z, Session()); + + // Rotate + Transformation().Scale( x,y,z ); + + // Complete + aMessage.Complete( KErrNone ); + + } + +// --------------------------------------------------------------------------- +// Translate (2D version of the function with timedvalues) +// --------------------------------------------------------------------------- +// +void CAlfSrvTransformationSubSession::Translate2DL(const RMessage2& aMessage) + { + // Parse parameters + + // 1: params (in) + TAlfTransformationTimedParams params; + TPckg paramPckg(params); + aMessage.Read(1,paramPckg); + + THuiTimedValue x; + AlfTimedValueUtility::CopyTimedValue(params.iX, x, Session()); + + THuiTimedValue y; + AlfTimedValueUtility::CopyTimedValue(params.iY, y, Session()); + + // Rotate + Transformation().Translate( x,y ); + + // Complete + aMessage.Complete( KErrNone ); + } + + +// --------------------------------------------------------------------------- +// From CAlfSrvSubSessionBase +// Process the message. +// --------------------------------------------------------------------------- +// +void CAlfSrvTransformationSubSession::DoProcessMessageL(const RMessage2& aMessage) + { + switch( aMessage.Int0() ) + { + case EAlfTransformationLoadIdentity: + { + LoadIdentityL( aMessage ); + break; + } + case EAlfTransformationTranslate: + { + TranslateL( aMessage ); + break; + } + case EAlfTransformationRotate: + { + RotateL( aMessage ); + break; + } + + case EAlfTransformationCount: + { + CountL( aMessage ); + break; + } + case EAlfTransformationNonIdentityCount: + { + NonIdentityCountL( aMessage ); + break; + } + case EAlfTransformationStep: + { + StepL( aMessage ); + break; + } + case EAlfTransformationReplaceStep: + { + ReplaceStepL( aMessage ); + break; + } + case EAlfTransformationRotate3D: + { + Rotate3DL( aMessage ); + break; + } + case EAlfTransformationTranslate2D: + { + Translate2DL( aMessage ); + break; + } + case EAlfTransformationScale: + { + Scale3DL( aMessage ); + break; + } + + case EAlfTransformationSubSessionClose: // obsolete + { + Session().CloseSubSession( aMessage ); + break; + } + default: + CAlfSrvSubSessionBase::DoProcessMessageL( aMessage ); + break; + } + } + + +