uiacceltk/hitchcock/ServerCore/Src/alfsrvtransformationsubsession.cpp
changeset 0 15bf7259bb7c
--- /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 <uiacceltk/HuiEnv.h>
+#include <uiacceltk/HuiTransformation.h>
+#include <uiacceltk/HuiUtil.h>
+#include <alf/alftransformation.h>
+
+
+// ======== 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<TReal32> xRealPckg(x);
+    aMessage.Read(1,xRealPckg);
+    // 2: y (in)
+    TReal32 y(0.0);
+    TPckg<TReal32> 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<TAlfTimedValue> 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<TInt> 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<TInt> 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<CAlfTransformation::TTransform> outputPckg(step);    
+               
+    // Step
+    CHuiTransformation::TTransform huiStep = Transformation().Step(index);
+    step.iType = (CAlfTransformation::TType)huiStep.iType;
+    for (TInt i=0; i<KHuiTransformParamCount; i++)
+        {
+        AlfTimedValueUtility::CopyTimedValue(huiStep.iParams[i], step.iParams[i]);    
+        step.iParams[i].Flags() = EAlfValueFlagsNone; // clear flags so client will send only changed values back         
+        }
+    
+    // Write output params
+    aMessage.Write(2,outputPckg);    
+    
+    // Complete
+    aMessage.Complete( KErrNone );
+    }
+
+// ---------------------------------------------------------------------------
+// ReplaceStep
+// ---------------------------------------------------------------------------
+//  
+void CAlfSrvTransformationSubSession::ReplaceStepL(const RMessage2& aMessage)
+    {
+    // 1: Index (in) 
+    TInt index = aMessage.Int1();
+    
+    // 2: Transform step (in)
+    CAlfTransformation::TTransform step;
+    TPckg<CAlfTransformation::TTransform> stepPckg(step);    
+    aMessage.Read(2,stepPckg);               
+    
+    // ReplaceStep
+    CHuiTransformation::TTransform& huiStep = Transformation().Step(index); 
+    huiStep.iType = (CHuiTransformation::TType)step.iType;
+    for (TInt i=0; i<KHuiTransformParamCount; i++)
+        {
+        AlfTimedValueUtility::CopyTimedValue(step.iParams[i], huiStep.iParams[i], Session());    
+        }    
+    
+    // Complete
+    aMessage.Complete( KErrNone );
+    }
+
+// ---------------------------------------------------------------------------
+// Rotate (3D version of the function)
+// ---------------------------------------------------------------------------
+//  
+void CAlfSrvTransformationSubSession::Rotate3DL(const RMessage2& aMessage)
+    {
+    // Parse parameters
+
+    // 1: params (in)
+    TAlfTransformationRotateParams params;
+    TPckg<TAlfTransformationRotateParams> 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<TAlfTransformationTimedParams> 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<TAlfTransformationTimedParams> 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;
+        }
+    }
+    
+ 
+