uiacceltk/hitchcock/Client/src/alfimagebrush.cpp
changeset 0 15bf7259bb7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/Client/src/alfimagebrush.cpp	Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,324 @@
+/*
+* 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:   Image brush
+*
+*/
+
+
+
+#include "alf/alfimagebrush.h"
+#include "alf/alfimage.h"
+#include "alf/alftexture.h"
+#include "alf/alfenv.h"
+#include "alf/alfgencomponent.h"
+#include "alflogger.h"
+#include "alfskinnableimage.h"
+#include "alf/alfconstants.h"
+
+#include <uiacceltk/HuiUtil.h>
+
+// Private data structure
+struct CAlfImageBrush::TImageBrushPrivateData
+    {
+    CAlfSkinnableImage* iImage;   // owned
+    TInt iLeftBorderWidth;
+    TInt iRightBorderWidth;
+    TInt iTopBorderWidth;
+    TInt iBottomBorderWidth;     
+    TAlfTimedPoint iOffset;
+    TAlfTimedValue iScale;
+    };
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CAlfImageBrush::CAlfImageBrush()
+    : CAlfBrush()
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+void CAlfImageBrush::ConstructL(CAlfEnv& aEnv, const TAlfImage & aImage)
+    {
+    iImageBrushData = new (ELeave) TImageBrushPrivateData;
+    iImageBrushData->iImage = NULL;
+    iImageBrushData->iImage = new (ELeave) CAlfSkinnableImage(&aEnv);
+    iImageBrushData->iImage->SetImage(aImage); // This texturizes skin graphics if needed
+    iImageBrushData->iLeftBorderWidth = 0;
+    iImageBrushData->iRightBorderWidth = 0;
+    iImageBrushData->iTopBorderWidth = 0;
+    iImageBrushData->iBottomBorderWidth = 0;    
+    
+    TAlfImageBrushParams params;
+    params.iTextureHandle = iImageBrushData->iImage->Image().Texture().ServerHandle(); 
+    params.iTl = aImage.TimedTopLeft();
+    params.iBr = aImage.TimedBottomRight();
+    params.iLeftBorderWidth = iImageBrushData->iLeftBorderWidth;
+    params.iRightBorderWidth = iImageBrushData->iRightBorderWidth;
+    params.iTopBorderWidth = iImageBrushData->iTopBorderWidth;
+    params.iBottomBorderWidth = iImageBrushData->iBottomBorderWidth;
+    
+    TPckgC<TAlfImageBrushParams> paramsPckg(params);
+        
+    CAlfBrush::ConstructL(
+        aEnv,
+        EAlfImageBrushCreate,
+        0,
+        paramsPckg
+        );
+    }
+
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAlfImageBrush* CAlfImageBrush::NewL(CAlfEnv& aEnv, 
+    const TAlfImage & aImage)
+    {
+    CAlfImageBrush* self = CAlfImageBrush::NewLC( aEnv, aImage );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAlfImageBrush* CAlfImageBrush::NewLC(CAlfEnv& aEnv, 
+    const TAlfImage & aImage)
+    {
+    CAlfImageBrush* self = new( ELeave ) CAlfImageBrush;
+    CleanupStack::PushL( self );
+    self->ConstructL(aEnv, aImage);
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CAlfImageBrush::~CAlfImageBrush()
+    {
+    if ( iImageBrushData )
+        {
+        delete iImageBrushData->iImage;
+        iImageBrushData->iImage = NULL;
+        }
+    delete iImageBrushData;
+    iImageBrushData = NULL;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Set image
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfImageBrush::SetImage(const TAlfImage& aImage)
+    {
+    iImageBrushData->iImage->SetImage(aImage); // This texturizes skin graphics if needed
+    
+    TAlfImageBrushParams params;
+    params.iTextureHandle = aImage.Texture().ServerHandle(); 
+    params.iTl = aImage.TimedTopLeft();
+    params.iBr = aImage.TimedBottomRight();
+    params.iLeftBorderWidth = iImageBrushData->iLeftBorderWidth;
+    params.iRightBorderWidth = iImageBrushData->iRightBorderWidth;
+    params.iTopBorderWidth = iImageBrushData->iTopBorderWidth;
+    params.iBottomBorderWidth = iImageBrushData->iBottomBorderWidth;    
+    TPckgC<TAlfImageBrushParams> paramsPckg(params);        
+
+    TInt err = Comms()->DoCmdNoReply(EAlfImageBrushSetImage, paramsPckg);    
+    
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfImageBrush::SetImage ignore error %d", err )
+        }
+    }
+ 
+// ---------------------------------------------------------------------------
+// Get image
+// ---------------------------------------------------------------------------
+//   
+EXPORT_C const TAlfImage& CAlfImageBrush::Image() const
+    {
+    return iImageBrushData->iImage->Image();
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfImageBrush::SetBorders(TInt aLeftBorderWidth,
+                             TInt aRightBorderWidth,
+                             TInt aTopBorderHeight,
+                             TInt aBottomBorderHeight)
+    {
+    iImageBrushData->iLeftBorderWidth = aLeftBorderWidth;
+    iImageBrushData->iRightBorderWidth = aRightBorderWidth;
+    iImageBrushData->iTopBorderWidth = aTopBorderHeight;
+    iImageBrushData->iBottomBorderWidth = aBottomBorderHeight;    
+
+    TAlfImageBrushParams params;
+    params.iLeftBorderWidth = iImageBrushData->iLeftBorderWidth;
+    params.iRightBorderWidth = iImageBrushData->iRightBorderWidth;
+    params.iTopBorderWidth = iImageBrushData->iTopBorderWidth;
+    params.iBottomBorderWidth = iImageBrushData->iBottomBorderWidth;    
+    TPckgC<TAlfImageBrushParams> paramsPckg(params);        
+
+    TInt err = Comms()->DoCmdNoReply(EAlfImageBrushSetBorders, paramsPckg);    
+    
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfImageBrush::SetBorders ignore error %d", err )
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAlfImageBrush::BorderDrawingEnabled() const
+    {
+	return ((iImageBrushData->iLeftBorderWidth!=0) || (iImageBrushData->iRightBorderWidth!=0)		
+		    || (iImageBrushData->iTopBorderWidth!=0) || (iImageBrushData->iBottomBorderWidth!=0));
+        
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAlfImageBrush::CenterDrawingEnabled() const
+    {
+	if(!iImageBrushData->iImage->Image().HasTexture()) 
+		{
+		return EFalse;
+		}				
+	// determine if there are center pixels available inside borders
+	// if not, we can't draw the center..
+	TSize imageSize = iImageBrushData->iImage->Image().Texture().Size();	
+	if((imageSize.iWidth - iImageBrushData->iLeftBorderWidth - iImageBrushData->iRightBorderWidth <= 0)
+	   || (imageSize.iHeight - iImageBrushData->iTopBorderWidth - iImageBrushData->iBottomBorderWidth <= 0))
+		{
+		return EFalse;
+		}	  
+		
+	return ETrue;        
+    }
+
+// ---------------------------------------------------------------------------
+// Set scale mode for the image brush
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAlfImageBrush::SetScaleMode(CAlfImageVisual::TScaleMode aScaleMode)
+    {
+    TPckgC<TInt> paramsPckg(aScaleMode);        
+
+    TInt err = Comms()->DoCmdNoReply(EAlfImageBrushSetScaleMode, paramsPckg );    
+    
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfImageBrush::SetScaleMode panic error %d", err )
+        USER_INVARIANT();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Sets offfset for the image
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C void CAlfImageBrush::SetOffset(const TAlfTimedPoint& aOffset)
+    {
+    iImageBrushData->iOffset.iX = aOffset.iX;
+    iImageBrushData->iOffset.iY = aOffset.iY;
+
+
+    TPckgC<TAlfTimedPoint> offsetPckg(iImageBrushData->iOffset);
+    
+    TInt err = Comms()->DoCmdNoReply(EAlfImageBrushSetOffset, offsetPckg);
+    
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfImageBrush::SetOffset panic error %d", err )
+        USER_INVARIANT();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Returns the offset
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C const TAlfTimedPoint& CAlfImageBrush::Offset() const
+    {
+    TPckg<TAlfTimedPoint> offsetPckg(iImageBrushData->iOffset);
+    
+    TInt err = Comms()->DoSynchronousCmd(EAlfImageBrushOffset, KNullDesC8, offsetPckg);
+    
+    if ( err )
+        {
+        __ALFLOGSTRING1( "CAlfImageBrush::Offset ignore error %d", err )
+        }
+
+    return iImageBrushData->iOffset;
+    }
+
+// ---------------------------------------------------------------------------
+// Sets scale factor
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C void CAlfImageBrush::SetScale(const TAlfTimedValue& aScale)
+    {
+    TPckgC<TAlfTimedValue> buf(aScale);
+
+    TInt err = Comms()->DoCmdNoReply( EAlfImageBrushSetScale, buf );
+
+    if ( err == KErrNone )
+        {
+        iImageBrushData->iScale = aScale;
+        }
+    else
+        {
+        __ALFLOGSTRING1( "CAlfImageBrush::SetScale panic error %d", err )
+        USER_INVARIANT();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Returns scale factor
+// ---------------------------------------------------------------------------
+//    
+EXPORT_C const TAlfTimedValue& CAlfImageBrush::Scale() const
+    {
+    TPckg<TAlfTimedValue> buf(iImageBrushData->iScale);
+    TInt err = Comms()->DoSynchronousCmd( EAlfImageBrushScale, KNullDesC8, buf);
+
+    if ( err != KErrNone )
+        {
+        __ALFLOGSTRING1( "CAlfImageBrush::Scale panic error %d", err )
+        USER_INVARIANT();
+        }
+    
+    return iImageBrushData->iScale;
+    }