--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/Client/src/alfmeshvisual.cpp Wed Nov 03 19:29:22 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);
+ }
+
+
+