uiacceltk/hitchcock/Client/src/alfmeshvisual.cpp
changeset 0 15bf7259bb7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/Client/src/alfmeshvisual.cpp	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,375 @@
+/*
+* 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:   Mesh visual
+*
+*/
+
+
+
+#include "alf/alfmeshvisual.h"
+#include "alf/alfproceduralmesh.h"
+#include "alf/alfm3gmesh.h"
+#include "alf/alfcontrol.h"
+#include "alflogger.h"
+#include "alf/alfgencomponent.h"
+#include "alf/alfconstants.h"
+#include "alf/alfimage.h"
+#include "alf/alftexture.h"
+#include "alfskinnableimage.h"
+#include "alf/alfenv.h"
+
+#include <uiacceltk/HuiUtil.h>
+
+// ======== MEMBER FUNCTIONS ========
+
+struct CAlfMeshVisual::TMeshVisualPrivateData
+    {
+    CAlfMesh* iMesh; // own
+    CAlfSkinnableImage* iImage;
+    CAlfSkinnableImage* iSecondaryImage;    
+    CAlfSkinnableImage* iSpecularImage;
+    };
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+
+EXPORT_C CAlfMeshVisual* CAlfMeshVisual::AddNewL(
+    CAlfControl& aOwnerControl,
+    CAlfLayout* aParentLayout )
+    {
+    CAlfMeshVisual* text = STATIC_CAST(CAlfMeshVisual*,
+        aOwnerControl.AppendVisualL(EAlfVisualTypeMesh, aParentLayout));
+    return text;
+    }
+
+EXPORT_C CAlfMeshVisual::CAlfMeshVisual()
+    {
+    }
+
+EXPORT_C void CAlfMeshVisual::ConstructL(CAlfControl& aOwner)
+    {
+    CAlfVisual::ConstructL(aOwner);
+    
+    iMeshVisualData = new (ELeave) TMeshVisualPrivateData;
+    iMeshVisualData->iMesh = NULL;
+    iMeshVisualData->iImage = NULL;
+    iMeshVisualData->iSecondaryImage = NULL;
+    iMeshVisualData->iSpecularImage = NULL;
+    
+    iMeshVisualData->iImage = new (ELeave) CAlfSkinnableImage(&aOwner.Env());
+    iMeshVisualData->iSecondaryImage = new (ELeave) CAlfSkinnableImage(&aOwner.Env());
+    iMeshVisualData->iSpecularImage = new (ELeave) CAlfSkinnableImage(&aOwner.Env());
+    }
+
+EXPORT_C CAlfMeshVisual::~CAlfMeshVisual()
+    {
+    if ( iMeshVisualData )
+        {
+        delete iMeshVisualData->iMesh;
+        iMeshVisualData->iMesh = NULL;
+        
+        delete iMeshVisualData->iImage;
+        iMeshVisualData->iImage = NULL;
+
+        delete iMeshVisualData->iSecondaryImage;
+        iMeshVisualData->iSecondaryImage = NULL;
+
+        delete iMeshVisualData->iSpecularImage;
+        iMeshVisualData->iSpecularImage = NULL;
+        }
+        
+    delete iMeshVisualData;
+    iMeshVisualData = NULL;
+    }
+    
+EXPORT_C void CAlfMeshVisual::CreateMeshL(TInt aMeshType)
+    {
+    // Destroy the old mesh object.
+    if( iMeshVisualData->iMesh )
+        {
+        delete iMeshVisualData->iMesh;
+        iMeshVisualData->iMesh = NULL;
+        }
+    
+    // Create a new mesh object.
+    if ( aMeshType == EAlfMeshTypeProcedural )
+        {
+        iMeshVisualData->iMesh = CAlfProceduralMesh::NewL( *Comms() );
+        }
+    if ( aMeshType == EAlfMeshTypeM3G )
+        {
+        iMeshVisualData->iMesh = CAlfM3GMesh::NewL( *Comms(), Env() );
+        }        
+    }
+    
+EXPORT_C void CAlfMeshVisual::SetImage(const TAlfImage& aImage)
+    {    
+    iMeshVisualData->iImage->SetImage(aImage);// This texturizes skin graphics if needed
+    
+    TAlfImageParams params(iMeshVisualData->iImage->Image());
+
+    TPckgC<TAlfImageParams> buf(params);
+    TInt err = Comms()->DoCmdNoReply(EAlfMeshVisualSetImage, buf );
+    
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfMeshVisual::SetImage ignore error %d", err )
+        }
+    }
+    
+EXPORT_C const TAlfImage& CAlfMeshVisual::Image() const
+    {
+    return iMeshVisualData->iImage->Image();
+    }
+
+EXPORT_C void CAlfMeshVisual::SetSecondaryImage(const TAlfImage& aImage)
+    {
+    iMeshVisualData->iSecondaryImage->SetImage(aImage);// This texturizes skin graphics if needed
+    
+    TAlfImageParams params(iMeshVisualData->iSecondaryImage->Image());
+
+    TPckgC<TAlfImageParams> buf(params);
+    TInt err = Comms()->DoCmdNoReply(EAlfMeshVisualSetSecondaryImage, buf );
+    
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfMeshVisual::SetSecondaryImage ignore error %d", err )
+        }
+    }
+    
+EXPORT_C const TAlfImage& CAlfMeshVisual::SecondaryImage() const
+    {
+    return iMeshVisualData->iSecondaryImage->Image();
+    }
+
+EXPORT_C void CAlfMeshVisual::SetSpecularImage(const TAlfImage& aImage)
+    {
+    // This functionality applies to procedural mesh only.
+    if(Mesh().MeshType() == EAlfMeshTypeProcedural)
+        {    
+        CAlfProceduralMesh& mesh = static_cast<CAlfProceduralMesh&>(Mesh());
+        iMeshVisualData->iSpecularImage->SetImage(aImage);// This texturizes skin graphics if needed
+        
+        TAlfImageParams params(iMeshVisualData->iSpecularImage->Image());
+
+        TPckgC<TAlfImageParams> buf(params);
+        TInt err = Comms()->DoCmdNoReply(EAlfMeshVisualSetSpecularImage, buf );
+        
+        if ( err )
+            {
+            __ALFLOGSTRING1( "CAlfMeshVisual::SetSpecularImage ignore error %d", err )
+            }
+            
+        mesh.SetSpecularImage( iMeshVisualData->iSpecularImage->Image() );        
+        }
+    }
+    
+EXPORT_C const TAlfImage& CAlfMeshVisual::SpecularImage() const
+    {
+    return iMeshVisualData->iSpecularImage->Image();
+    }
+
+EXPORT_C CAlfMesh& CAlfMeshVisual::Mesh()
+    {
+    // Create a default mesh
+    if ( !iMeshVisualData->iMesh )
+        {
+        TRAPD( err, CreateMeshL(EAlfMeshTypeProcedural) );
+        if ( err )
+            {
+            __ALFLOGSTRING1( "CAlfMeshVisual::Mesh panic error %d", err )
+            USER_INVARIANT();
+            }
+        }
+    return *iMeshVisualData->iMesh;
+    }
+    
+EXPORT_C CAlfProceduralMesh* CAlfMeshVisual::ProceduralMesh() const
+    {
+    if(iMeshVisualData->iMesh && (iMeshVisualData->iMesh->MeshType() == EAlfMeshTypeProcedural))
+        {
+        return static_cast<CAlfProceduralMesh*>(iMeshVisualData->iMesh);
+        }    
+    return NULL;
+    }
+
+EXPORT_C CAlfM3GMesh* CAlfMeshVisual::M3GMesh() const
+    {
+    if(iMeshVisualData->iMesh && (iMeshVisualData->iMesh->MeshType() == EAlfMeshTypeM3G))
+        {
+        return static_cast<CAlfM3GMesh*>(iMeshVisualData->iMesh);
+        }    
+    return NULL;    
+    }
+    
+EXPORT_C TAlfTimedValue CAlfMeshVisual::SecondaryAlpha() const
+    {
+    TAlfTimedValue result;
+    TPckg<TAlfTimedValue> buf(result);
+    TInt err = Comms()->DoSynchronousCmd( EAlfMeshVisualSecondaryAlpha, KNullDesC8, buf);
+    
+    if (err)
+        {
+        __ALFLOGSTRING1( "CAlfMeshVisual::SecondaryAlpha panic error %d", err )
+        USER_INVARIANT();
+        }
+    
+    return result;  
+    }
+    
+EXPORT_C void CAlfMeshVisual::SetSecondaryAlpha( const TAlfTimedValue& aSecondaryAlpha )
+    {
+    TPckgC<TAlfTimedValue> buf(aSecondaryAlpha);
+
+    TInt err = Comms()->DoCmdNoReply( EAlfMeshVisualSetSecondaryAlpha, buf );
+    if (err)
+        {
+        __ALFLOGSTRING1( "CAlfMeshVisual::SetSecondaryAlpha panic error %d", err )
+        USER_INVARIANT();
+        }
+    }
+    
+    
+EXPORT_C TAlfTimedValue CAlfMeshVisual::YawAngle() const
+    {
+    TAlfTimedValue result;
+    TPckg<TAlfTimedValue> buf(result);
+    TInt err = Comms()->DoSynchronousCmd( EAlfMeshVisualYawAngle, KNullDesC8, buf);
+    
+    if (err)
+        {
+        __ALFLOGSTRING1( "CAlfMeshVisual::YawAngle panic error %d", err )
+        USER_INVARIANT();
+        }
+    
+    return result;  
+    }
+    
+EXPORT_C void CAlfMeshVisual::SetYawAngle( const TAlfTimedValue& aYawAngle )
+    {
+    TPckgC<TAlfTimedValue> buf(aYawAngle);
+    
+    TInt err = Comms()->DoCmdNoReply( EAlfMeshVisualSetYawAngle, buf );
+    if (err)
+        {
+        __ALFLOGSTRING1( "CAlfMeshVisual::SetYawAngle panic error %d", err )
+        USER_INVARIANT();
+        }
+    }
+    
+    
+EXPORT_C TAlfTimedValue CAlfMeshVisual::PitchAngle() const
+    {
+    TAlfTimedValue result;
+    TPckg<TAlfTimedValue> buf(result);
+    TInt err = Comms()->DoSynchronousCmd( EAlfMeshVisualPitchAngle, KNullDesC8, buf);
+    
+    if (err)
+        {
+        __ALFLOGSTRING1( "CAlfMeshVisual::PitchAngle panic error %d", err )
+        USER_INVARIANT();
+        }
+    
+    return result; 
+    }
+    
+EXPORT_C void CAlfMeshVisual::SetPitchAngle( const TAlfTimedValue& aPitchAngle )
+    {
+    TPckgC<TAlfTimedValue> buf(aPitchAngle);
+
+    TInt err = Comms()->DoCmdNoReply( EAlfMeshVisualSetPitchAngle, buf );
+    if (err)
+        {
+        __ALFLOGSTRING1( "CAlfMeshVisual::SetPitchAngle panic error %d", err )
+        USER_INVARIANT();
+        }
+    }
+    
+    
+EXPORT_C TAlfTimedValue CAlfMeshVisual::Scale() const
+    {
+    TAlfTimedValue result;
+    TPckg<TAlfTimedValue> buf(result);
+    TInt err = Comms()->DoSynchronousCmd( EAlfMeshVisualScale, KNullDesC8, buf);
+    
+    if (err)
+        {
+        __ALFLOGSTRING1( "CAlfMeshVisual::Scale panic error %d", err )
+        USER_INVARIANT();
+        }
+    
+    return result; 
+    }
+    
+EXPORT_C void CAlfMeshVisual::SetScale( const TAlfTimedValue& aScale )
+    {
+    TPckgC<TAlfTimedValue> buf(aScale);
+
+    TInt err = Comms()->DoCmdNoReply( EAlfMeshVisualSetScale, buf );
+    if (err)
+        {
+        __ALFLOGSTRING1( "CAlfMeshVisual::SetScale panic error %d", err )
+        USER_INVARIANT();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Place holder from CAlfVisual
+// ---------------------------------------------------------------------------
+//     
+EXPORT_C void CAlfMeshVisual::RemoveAndDestroyAllD()
+    {
+    CAlfVisual::RemoveAndDestroyAllD();
+    }
+  
+// ---------------------------------------------------------------------------
+// Place holder from CAlfVisual
+// ---------------------------------------------------------------------------
+//  
+EXPORT_C void CAlfMeshVisual::UpdateChildrenLayout(TInt aTransitionTime )
+    {
+    CAlfVisual::UpdateChildrenLayout( aTransitionTime );
+    }
+  
+// ---------------------------------------------------------------------------
+// Place holder from CAlfVisual
+// ---------------------------------------------------------------------------
+//  
+EXPORT_C CAlfVisual* CAlfMeshVisual::FindTag(const TDesC8& aTag)
+    {
+    return CAlfVisual::FindTag( aTag );
+    }
+
+// ---------------------------------------------------------------------------
+// Place holder from CAlfVisual
+// ---------------------------------------------------------------------------
+//  
+EXPORT_C void CAlfMeshVisual::DoRemoveAndDestroyAllD()
+    {
+    CAlfVisual::DoRemoveAndDestroyAllD();
+    }
+    
+// ---------------------------------------------------------------------------
+//  future proofing  
+// ---------------------------------------------------------------------------
+//  
+EXPORT_C void CAlfMeshVisual::PropertyOwnerExtension(const TUid& aExtensionUid, TAny** aExtensionParams)
+    {
+    CAlfVisual::PropertyOwnerExtension(aExtensionUid,aExtensionParams);
+    }
+    
+
+