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