diff -r 000000000000 -r b26acd06ea60 sdkcreationmw/sdkexamples/cppexamples/S60Ex/helperfunctions/bitmapmethods.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sdkcreationmw/sdkexamples/cppexamples/S60Ex/helperfunctions/bitmapmethods.cpp Mon Mar 08 12:09:11 2010 +0530 @@ -0,0 +1,202 @@ +/* +* Copyright (c) 2004, 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: +* +*/ + + + +// INCLUDE FILES +#include "bitmapmethods.h" + +#include +#include + +// ============================ MEMBER FUNCTIONS ============================== + +// ---------------------------------------------------------------------------- +// NBitmapMethods::CreateGraphicsContextLC() +// Create a graphics context and leave it on the cleanup stack. +// ---------------------------------------------------------------------------- +// +CFbsBitGc* NBitmapMethods +::CreateGraphicsContextLC( CFbsBitmapDevice& aBitmapDevice ) + { + CFbsBitGc* graphicsContext = NULL; + User::LeaveIfError( aBitmapDevice.CreateContext( graphicsContext ) ); + CleanupStack::PushL( graphicsContext ); + return graphicsContext; + } + +// ---------------------------------------------------------------------------- +// NBitmapMethods::CreateGraphicsContextL() +// Create a graphics context. +// ---------------------------------------------------------------------------- +// +CFbsBitGc* NBitmapMethods +::CreateGraphicsContextL( CFbsBitmapDevice& aBitmapDevice ) + { + CFbsBitGc* gc = CreateGraphicsContextLC( aBitmapDevice ); + CleanupStack::Pop( gc ); + return gc; + } + +// ---------------------------------------------------------------------------- +// NBitmapMethods::CreateBitmapDeviceLC() +// Create a bitmap device and leave it on the cleanup stack. +// ---------------------------------------------------------------------------- +// +CFbsBitmapDevice* NBitmapMethods::CreateBitmapDeviceLC( CFbsBitmap& aBitmap ) + { + CFbsBitmapDevice* bitmapDevice = CFbsBitmapDevice::NewL( &aBitmap ); + CleanupStack::PushL( bitmapDevice ); + return bitmapDevice; + } + +// ---------------------------------------------------------------------------- +// NBitmapMethods::CreateBitmapDeviceL() +// Create a bitmap device. +// ---------------------------------------------------------------------------- +// +CFbsBitmapDevice* NBitmapMethods::CreateBitmapDeviceL( CFbsBitmap& aBitmap ) + { + CFbsBitmapDevice* device = CreateBitmapDeviceLC( aBitmap ); + CleanupStack::Pop( device ); + return device; + } + +// ---------------------------------------------------------------------------- +// NBitmapMethods::CreateBitmapLC() +// Create a bitmap and leave it on the cleanup stack. +// ---------------------------------------------------------------------------- +// +CFbsBitmap* NBitmapMethods +::CreateBitmapLC( TSize aSizeInPixels, TDisplayMode aDispMode ) + { + CFbsBitmap* bitmap = new ( ELeave ) CFbsBitmap(); + CleanupStack::PushL( bitmap ); + User::LeaveIfError( bitmap->Create( aSizeInPixels,aDispMode ) ); + ASSERT( ( bitmap->DisplayMode() == KColourDepth ) + || ( bitmap->DisplayMode() == EGray2 ) ); + return bitmap; + } + +// ---------------------------------------------------------------------------- +// NBitmapMethods::CreateBitmapL() +// Create a bitmap. +// ---------------------------------------------------------------------------- +// +CFbsBitmap* NBitmapMethods +::CreateBitmapL( TSize aSizeInPixels, TDisplayMode aDispMode ) + { + CFbsBitmap* bitmap = CreateBitmapLC( aSizeInPixels, aDispMode ); + CleanupStack::Pop( bitmap ); + return bitmap; + } + +// ---------------------------------------------------------------------------- +// NBitmapMethods::CreateBitmapLC() +// Create a bitmap and leave it on the cleanup stack. +// ---------------------------------------------------------------------------- +// +CFbsBitmap* NBitmapMethods::CreateBitmapLC( const TDesC& aFileName, TInt aId ) + { + CFbsBitmap* bitmap = new ( ELeave ) CFbsBitmap(); + + CleanupStack::PushL( bitmap ); + TInt loadException = bitmap->Load( aFileName, aId ); + User::LeaveIfError( loadException ); + + if ( ( bitmap->DisplayMode() == KColourDepth ) + || ( bitmap->DisplayMode() == EGray2 ) ) + { + return bitmap; + } + else + { + CFbsBitmap* newBitmap = CreateBitmapLC( bitmap->SizeInPixels(), + KColourDepth ); + + CFbsBitmapDevice* bitmapDevice = CreateBitmapDeviceLC( *newBitmap ); + CFbsBitGc* bitmapGc = CreateGraphicsContextLC( *bitmapDevice ); + bitmapGc->BitBlt( TPoint( 0,0 ), + bitmap, TRect( bitmap->SizeInPixels() ) ); + CleanupStack::PopAndDestroy( 2 ); // gc and device + // The next three lines are here to get rid + // of the old bitmap but keep the new one + CleanupStack::Pop( newBitmap ); + CleanupStack::PopAndDestroy( bitmap ); + CleanupStack::PushL( newBitmap ); + + return newBitmap; + } + } + +// ---------------------------------------------------------------------------- +// NBitmapMethods::CreateBitmapL() +// Create a bitmap. +// ---------------------------------------------------------------------------- +// +CFbsBitmap* NBitmapMethods::CreateBitmapL( const TDesC& aFileName, TInt aId ) + { + CFbsBitmap* bitmap = CreateBitmapLC( aFileName, aId ); + CleanupStack::Pop( bitmap ); + return bitmap; + } + +// ---------------------------------------------------------------------------- +// NBitmapMethods::BitBltMaskedEntireBitmap() +// Blit the entire of a bitmap with a mask onto a gc. +// ---------------------------------------------------------------------------- +// +void NBitmapMethods::BitBltMaskedEntireBitmap( CFbsBitGc& aTargetGc, + TPoint aTopLeft, + const CFbsBitmap& aBitmap, + const CFbsBitmap& aBitMask ) + { + PartialReset( aTargetGc ); + aTargetGc.BitBltMasked( aTopLeft, + &aBitmap, + aBitmap.SizeInPixels(), + &aBitMask, + ETrue ); + PartialReset( aTargetGc ); + } + +// ---------------------------------------------------------------------------- +// NBitmapMethods::PartialReset() +// Reset a gc. +// ---------------------------------------------------------------------------- +// +void NBitmapMethods::PartialReset( CFbsBitGc& aGc ) + { + aGc.SetPenSize( TSize( 1,1 ) ); + aGc.SetPenColor( KRgbBlack ); + aGc.SetPenStyle( CFbsBitGc::ESolidPen ); + aGc.SetDrawMode( CFbsBitGc::EDrawModePEN ); + aGc.DiscardFont(); + aGc.DiscardBrushPattern(); + aGc.SetBrushColor( KRgbWhite ); + aGc.SetBrushStyle( CFbsBitGc::ENullBrush ); + aGc.SetCharJustification( 0,0 ); + aGc.SetWordJustification( 0,0 ); + aGc.SetDitherOrigin( TPoint( 0,0 ) ); + aGc.SetPenStyle( CFbsBitGc::ENullPen ); + aGc.SetShadowMode( EFalse ); + aGc.SetStrikethroughStyle( EStrikethroughOff ); + aGc.SetUnderlineStyle( EUnderlineOff ); + aGc.SetUserDisplayMode( ENone ); + } + +// End of File