diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/Client/src/alfimagebrush.cpp --- /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 + +// 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 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 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 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 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 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 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 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 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; + }