diff -r 000000000000 -r f72a12da539e idlehomescreen/xmluirendering/renderingplugins/xnbitmapfactory/src/xnbitmapadapter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idlehomescreen/xmluirendering/renderingplugins/xnbitmapfactory/src/xnbitmapadapter.cpp Thu Dec 17 08:40:49 2009 +0200 @@ -0,0 +1,297 @@ +/* +* Copyright (c) 2002-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: Xuikon Bitmap Plugin. +* +*/ + + +#include "xnnodepluginif.h" +#include "xndomproperty.h" +#include "xnproperty.h" +#include "xncontroladapter.h" + +#include "xnbitmapadapter.h" + +_LIT(KSkin, "skin("); + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CXnBitmapAdapter::NewL +// Symbian static 1st phase constructor +// ----------------------------------------------------------------------------- +// +CXnBitmapAdapter* CXnBitmapAdapter::NewL(CXnNodePluginIf& aNode) + { + CXnBitmapAdapter* self = new( ELeave ) CXnBitmapAdapter( aNode ); + + CleanupStack::PushL( self ); + self->ConstructL( aNode ); + CleanupStack::Pop(); + + return self; + } + +// ----------------------------------------------------------------------------- +// CXnBitmapAdapter::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CXnBitmapAdapter::ConstructL(CXnNodePluginIf& aNode) + { + CXnControlAdapter::ConstructL( aNode ); + + iAreBitmapsLoaded = EFalse; + + iFallbackPathChange = ETrue; + } + +// ----------------------------------------------------------------------------- +// CXnBitmapAdapter::CXnBitmapAdapter +// C++ default constructor +// ----------------------------------------------------------------------------- +// +CXnBitmapAdapter::CXnBitmapAdapter(CXnNodePluginIf& aNode) : iNode( aNode ) + { + } + +// ----------------------------------------------------------------------------- +// CXnBitmapAdapter::~CXnBitmapAdapter +// C++ destructor +// ----------------------------------------------------------------------------- +// +CXnBitmapAdapter::~CXnBitmapAdapter() + { + delete iPath; + delete iFallbackPath; + } + +// ----------------------------------------------------------------------------- +// CXnBitmapAdapter::SetContentBitmaps +// ----------------------------------------------------------------------------- +// +void CXnBitmapAdapter::SetContentBitmaps(CFbsBitmap* aBitmap, CFbsBitmap* aMask) + { + CXnControlAdapter::SetContentBitmaps( aBitmap, aMask ); + + iAreBitmapsSet = ETrue; + + TRAP_IGNORE( iNode.SetDirtyL() ); + } + +// ----------------------------------------------------------------------------- +// CXnBitmapAdapter::ContentBitmaps +// ----------------------------------------------------------------------------- +// +void CXnBitmapAdapter::ContentBitmaps(CFbsBitmap*& aBitmap, CFbsBitmap*& aMask) + { + CXnControlAdapter::ContentBitmaps( aBitmap, aMask ); + } + +// ----------------------------------------------------------------------------- +// CXnBitmapAdapter::Draw +// ----------------------------------------------------------------------------- +// +void CXnBitmapAdapter::Draw(const TRect& aRect) const + { + CXnControlAdapter::Draw( aRect ); + } + +// ----------------------------------------------------------------------------- +// CXnBitmapAdapter::SizeChanged +// ----------------------------------------------------------------------------- +// +void CXnBitmapAdapter::SizeChanged() + { + CXnControlAdapter::SizeChanged(); + + if ( !iAreBitmapsSet ) + { + TSize size( Rect().Size() ); + + if( size != iBitmapSize ) + { + iBitmapSize = size; + + iAreBitmapsLoaded = EFalse; + + TRAP_IGNORE( InitializeBitmapsL() ); + } + } + } + +// ----------------------------------------------------------------------------- +// CXnBitmapAdapter::HandlePropertyChangeL +// ----------------------------------------------------------------------------- +// +void CXnBitmapAdapter::DoHandlePropertyChangeL( CXnProperty* aProperty ) + { + TBool reConstruct( ETrue ); + + if( aProperty ) + { + const TDesC8& name( aProperty->Property()->Name( ) ); + + //If display changed no need to reconstruct + if( name == XnPropertyNames::style::common::KDisplay( ) ) + { + reConstruct = EFalse; + } + // Visibility changed, no need to do anything. + else if( name == XnPropertyNames::style::common::KVisibility( ) ) + { + return; + } + else if( name == XnPropertyNames::appearance::common::KFallBackImage ) + { + HBufC* fallbackPath( aProperty->StringValueL( ) ); + + if( fallbackPath ) + { + CleanupStack::PushL( fallbackPath ); + + if( iFallbackPath ) + { + if( ( *fallbackPath ).Compare( *iFallbackPath ) ) + { + delete iFallbackPath; + iFallbackPath = NULL; + iFallbackPath = fallbackPath->AllocL( ); + iFallbackPathChange = ETrue; + } + } + else + { + iFallbackPath = fallbackPath->AllocL( ); + iFallbackPathChange = ETrue; + } + + CleanupStack::PopAndDestroy( fallbackPath ); + } + } + } + + //If data API has been used don't load new bitmaps. + if( !iAreBitmapsSet && reConstruct ) + { + InitializeBitmapsL(); + } + } + +// ----------------------------------------------------------------------------- +// CXnTextAdapter::HandleResourceChange +// ----------------------------------------------------------------------------- +// +void CXnBitmapAdapter::HandleScreenDeviceChangedL( ) + { + CXnControlAdapter::HandleScreenDeviceChangedL(); + } + +// ----------------------------------------------------------------------------- +// CXnBitmapAdapter::HandlePointerEventL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CXnBitmapAdapter::HandlePointerEventL( const TPointerEvent& aPointerEvent ) + { + CXnControlAdapter::HandlePointerEventL( aPointerEvent ); + } + +// ----------------------------------------------------------------------------- +// CXnBitmapAdapter::SkinChanged +// ----------------------------------------------------------------------------- +// +void CXnBitmapAdapter::SkinChanged() + { + CXnControlAdapter::SkinChanged(); + + if( iPath ) + { + TInt pos( iPath->FindF( KSkin ) ); + + if( pos != KErrNotFound ) + { + iBitmapSize = Rect().Size(); + + iAreBitmapsLoaded = EFalse; + + TRAP_IGNORE( InitializeBitmapsL() ); + } + } + } + +// ----------------------------------------------------------------------------- +// CXnBitmapAdapter::InitializeBitmapsL +// ----------------------------------------------------------------------------- +// +void CXnBitmapAdapter::InitializeBitmapsL( ) + { + TBool pathChanged( EFalse ); + + CXnProperty* pathProperty( iNode.PathL( ) ); + CXnProperty* maskPathProperty( iNode.MaskPathL( ) ); + + if ( !pathProperty ) + { + return; + } + + HBufC* path( pathProperty->StringValueL( ) ); + + if( !path ) + { + return; + } + + CleanupStack::PushL( path ); + + HBufC* maskPath( NULL ); + + if( maskPathProperty ) + { + maskPath = maskPathProperty->StringValueL( ); + } + + CleanupStack::PushL( maskPath ); + + if( !iPath ) + { + iPath = path->AllocL( ); + } + + if( path->Des( ) != iPath->Des( ) ) + { + pathChanged = ETrue; + } + + if( !iAreBitmapsLoaded || pathChanged || iFallbackPathChange ) + { + delete iPath; + iPath = NULL; + iPath = path->AllocL( ); + + CXnControlAdapter::SetContentBitmaps( *path, ( maskPath ) + ? maskPath->Des( ) : KNullDesC() ); + + iAreBitmapsLoaded = ETrue; + iFallbackPathChange = EFalse; + + iNode.SetDirtyL(); + } + + CleanupStack::PopAndDestroy( 2, path ); + } + +// End of File +