uiacceltk/hitchcock/Client/src/alfcurvepath.cpp
changeset 64 9f8c0686fb49
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/Client/src/alfcurvepath.cpp	Wed Nov 03 19:29:22 2010 +0200
@@ -0,0 +1,439 @@
+/*
+* Copyright (c) 2007 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:   Curve paths are composed of path segments
+*                and can be used as mapping functions, and in line visuals.
+*
+*/
+
+
+
+#include "alf/alfcurvepath.h"
+#include "alf/alfgencomponent.h"
+#include "alf/alfconstants.h"
+#include "alflogger.h"
+
+#include <uiacceltk/HuiUtil.h>
+
+struct CAlfCurvePath::TPrivateData
+    {
+    CAlfGenComponent* iComms; // Own
+    TAlfTimedPoint iOffset; // Own.
+    };
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CAlfCurvePath::CAlfCurvePath()
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// Second phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CAlfCurvePath::ConstructL( CAlfEnv& aEnv, TInt aCurvePathProviderHandle )
+    {
+    iData = new (ELeave) TPrivateData;
+
+    iData->iComms = NULL;
+    
+    TPckgC<TInt> constructionParamBuf( aCurvePathProviderHandle );
+    iData->iComms = CAlfGenComponent::NewL(
+        aEnv,
+        EAlfCurvePathCreate, 
+        0, 
+        constructionParamBuf );
+    }
+
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAlfCurvePath* CAlfCurvePath::NewL( CAlfEnv& aEnv, TInt aCurvePathProviderHandle )
+    {
+    CAlfCurvePath* self = CAlfCurvePath::NewLC(aEnv, aCurvePathProviderHandle);
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Constructor, leave on cleanup stack
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAlfCurvePath* CAlfCurvePath::NewLC( CAlfEnv& aEnv, TInt aCurvePathProviderHandle )
+    {
+    CAlfCurvePath* self = new( ELeave ) CAlfCurvePath;
+    CleanupStack::PushL( self );
+    self->ConstructL(aEnv,aCurvePathProviderHandle);
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAlfCurvePath::~CAlfCurvePath()
+    {
+    if ( iData )
+        {
+        delete iData->iComms;
+        iData->iComms = NULL;
+        }
+        
+    delete iData;
+    iData = NULL;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Reset path
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfCurvePath::Reset()
+    {
+    TBufC8<1> inDummy;
+    TBuf8<1> outDummy;
+    
+    TInt err = iData->iComms->DoSynchronousCmd(
+        EAlfCurvePathReset, 
+        inDummy, 
+        outDummy );
+        
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfCurvePath::Reset panic error %d", err )
+        USER_INVARIANT();
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// Enable closed loop path
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfCurvePath::EnableLoop(TBool aEnable)
+    {
+    TPckgC<TBool> inBuf( aEnable );
+    TBuf8<1> outDummy;
+    
+    TInt err = iData->iComms->DoSynchronousCmd(
+        EAlfCurvePathEnableLoop, 
+        inBuf, 
+        outDummy );
+        
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfCurvePath::EnableLoop panic error %d", err )
+        USER_INVARIANT();
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// Is path a loop
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAlfCurvePath::Loop() const
+    {
+    TBool result = EFalse;
+    TPckg<TBool> outBuf( result );
+    
+    TInt err = iData->iComms->DoSynchronousCmd(
+        EAlfCurvePathLoop, 
+        KNullDesC8(), 
+        outBuf );
+        
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfCurvePath::Loop panic error %d", err )
+        USER_INVARIANT();
+        }
+    
+    return result;
+    }
+    
+// ---------------------------------------------------------------------------
+// Set origin of path
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfCurvePath::SetOrigin(TReal32 aPosOrigin) __SOFTFP
+    {
+    TPckgC<TReal32> inBuf( aPosOrigin );
+    TBuf8<1> outDummy;
+    
+    TInt err = iData->iComms->DoSynchronousCmd(
+        EAlfCurvePathSetOrigin, 
+        inBuf, 
+        outDummy );
+        
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfCurvePath::SetOrigin panic error %d", err )
+        USER_INVARIANT();
+        }
+    }
+   
+// ---------------------------------------------------------------------------
+// Add line segment
+// @deprecated
+// ---------------------------------------------------------------------------
+// 
+EXPORT_C void CAlfCurvePath::AppendLineL(
+    const TPoint& aStart, 
+    const TPoint& aEnd,
+    TReal32 aLength ) __SOFTFP
+    {
+    TAlfCurvePathLineParams params;
+    params.iStart = aStart;
+    params.iEnd = aEnd;
+    params.iLength = aLength;
+    
+    TPckgC<TAlfCurvePathLineParams> inBuf( params );
+    TBuf8<1> outDummy;
+    
+    TInt err = iData->iComms->DoSynchronousCmd(
+        EAlfCurvePathAppendLine, 
+        inBuf, 
+        outDummy );
+        
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfCurvePath::AppendLineL panic error %d", err )
+        USER_INVARIANT();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Add line segment
+// ---------------------------------------------------------------------------
+// 
+EXPORT_C void CAlfCurvePath::AppendLineL(
+    const TAlfRealPoint& aStart, 
+    const TAlfRealPoint& aEnd,
+    TReal32 aLength ) __SOFTFP
+    {
+    TAlfCurvePathLineRealParams params;
+    params.iStart = aStart;
+    params.iEnd = aEnd;
+    params.iLength = aLength;
+    
+    TPckgC<TAlfCurvePathLineRealParams> inBuf( params );
+    TBuf8<1> outDummy;
+    
+    TInt err = iData->iComms->DoSynchronousCmd(
+        EAlfCurvePathAppendLine2, 
+        inBuf, 
+        outDummy );
+        
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfCurvePath::AppendLineL panic error %d", err )
+        USER_INVARIANT();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Add arc
+// @deprecated
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfCurvePath::AppendArcL(
+    const TPoint& aOrigin, 
+    const TSize& aSize,
+    TReal32 aStartAngle, 
+    TReal32 aEndAngle,
+    TReal32 aLength ) __SOFTFP
+    {
+    TAlfCurvePathArcParams params;
+    params.iOrigin = aOrigin;
+    params.iSize = aSize;
+    params.iStartAngle = aStartAngle;
+    params.iEndAngle = aEndAngle;
+    params.iLength = aLength;
+    
+    TPckgC<TAlfCurvePathArcParams> inBuf( params );
+    TBuf8<1> outDummy;
+    
+    TInt err = iData->iComms->DoSynchronousCmd(
+        EAlfCurvePathAppendArc, 
+        inBuf, 
+        outDummy );
+        
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfCurvePath::AppendArcL panic error %d", err )
+        USER_INVARIANT();
+        }
+    }
+ 
+// ---------------------------------------------------------------------------
+// Add arc
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfCurvePath::AppendArcL(
+    const TAlfRealPoint& aOrigin, 
+    const TAlfRealSize& aSize,
+    TReal32 aStartAngle, 
+    TReal32 aEndAngle,
+    TReal32 aLength ) __SOFTFP
+    {
+    TAlfCurvePathArcRealParams params;
+    params.iOrigin = aOrigin;
+    params.iSize = aSize;
+    params.iStartAngle = aStartAngle;
+    params.iEndAngle = aEndAngle;
+    params.iLength = aLength;
+    
+    TPckgC<TAlfCurvePathArcRealParams> inBuf( params );
+    TBuf8<1> outDummy;
+    
+    TInt err = iData->iComms->DoSynchronousCmd(
+        EAlfCurvePathAppendArc2, 
+        inBuf, 
+        outDummy );
+        
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfCurvePath::AppendArcL panic error %d", err )
+        USER_INVARIANT();
+        }
+    }
+ 
+// ---------------------------------------------------------------------------
+// Get length of curved path
+// ---------------------------------------------------------------------------
+//   
+EXPORT_C TReal32 CAlfCurvePath::Length() const __SOFTFP
+    {
+    TReal32 result = 0.0;
+    TPckg<TReal32> outBuf( result );
+    
+    TInt err = iData->iComms->DoSynchronousCmd(
+        EAlfCurvePathLength, 
+        KNullDesC8(), 
+        outBuf );
+        
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfCurvePath::Length panic error %d", err )
+        USER_INVARIANT();
+        }
+    
+    return result;
+    }
+   
+// ---------------------------------------------------------------------------
+// Calculate a point on the path
+// ---------------------------------------------------------------------------
+// 
+EXPORT_C void CAlfCurvePath::Evaluate(TReal32 aPos, TAlfRealPoint& aPoint) const __SOFTFP
+    {
+    TPckgC<TReal32> inBuf( aPos );
+    TPckg<TAlfRealPoint> outBuf( aPoint );
+    
+    TInt err = iData->iComms->DoSynchronousCmd(
+        EAlfCurvePathEvaluate, 
+        inBuf, 
+        outBuf );
+        
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfCurvePath::Evaluate panic error %d", err )
+        USER_INVARIANT();
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// Get offset of path
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C const TAlfTimedPoint& CAlfCurvePath::Offset() const
+    {
+    TPckg<TAlfTimedPoint> outBuf( iData->iOffset );
+    
+    TInt err = iData->iComms->DoSynchronousCmd(
+        EAlfCurvePathOffset, 
+        KNullDesC8(), 
+        outBuf );
+        
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfCurvePath::Offset panic error %d", err )
+        USER_INVARIANT();
+        }
+    
+    return iData->iOffset;
+    }
+    
+// ---------------------------------------------------------------------------
+// Set offset of path
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C void CAlfCurvePath::SetOffset( const TAlfTimedPoint& aOffset )
+    {
+    TPckgC<TAlfTimedPoint> inBuf( aOffset );
+    TBuf8<1> outDummy;
+    
+    TInt err = iData->iComms->DoSynchronousCmd(
+        EAlfCurvePathSetOffset, 
+        inBuf, 
+        outDummy );
+        
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfCurvePath::SetOffset panic error %d", err )
+        USER_INVARIANT();
+        }
+    
+    iData->iOffset = aOffset;
+    }
+
+// ---------------------------------------------------------------------------
+// Get the mapping function ID of this path
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CAlfCurvePath::MappingFunctionIdentifier() const
+    {
+    return iData->iComms->Identifier();
+    }
+  
+// ---------------------------------------------------------------------------
+// Evaluate an x/y value on the path
+// ---------------------------------------------------------------------------
+//  
+EXPORT_C TReal32 CAlfCurvePath::MapValue(TReal32 aValue, TInt aMode) const __SOFTFP
+    {
+    TIntTReal mapValues( aMode, aValue );
+    TPckgC<TIntTReal> mapValuesPckg( mapValues );
+    
+    TReal32 returnValue = aValue;
+    TPckg<TReal32> returnBuf(returnValue);
+    
+    TInt err = iData->iComms->DoSynchronousCmd(
+        EAlfCurvePathMapValue, 
+        mapValuesPckg, 
+        returnBuf );
+    
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfCurvePath::MapValue panic error %d", err )
+        USER_INVARIANT();
+        }
+    
+    return returnValue;
+    }
+