diff -r 000000000000 -r 4e1aa6a622a0 accessoryservices/pluggeddisplay/pluggeddisplayengine/src/tvstandbyfigure.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/accessoryservices/pluggeddisplay/pluggeddisplayengine/src/tvstandbyfigure.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2009 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: GSServer is responsible for initializing the TV + * driver during the boot and always when the cable is connected. + * + */ + + +// INCLUDE FILES +#include "tvstandbyfigure.h" +#include "TVOutStandbyFigure.mbg" +#include +#include +#include +#include +#include +//#include + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS =============================== + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CTvStandbyFigure::CTvStandbyFigure +// Empty default constructor. +// ----------------------------------------------------------------------------- +// +CTvStandbyFigure::CTvStandbyFigure() + { + } + + +// ----------------------------------------------------------------------------- +// CTvStandbyFigure::ConstructL +// Open the needed sessions, load the original bitmap and draw over it. +// ----------------------------------------------------------------------------- +// +void CTvStandbyFigure::ConstructL( + const TDesC& aFilename, + TInt aImageNumber ) + { + // Setup the font and bitmap server and open session to it + User::LeaveIfError( FbsStartup() ); + User::LeaveIfError( RFbsSession::Connect() ); + + // Create and load a bitmap from the given file, then draw the text over it + iBitmap = new (ELeave) CFbsBitmap(); + TInt err = iBitmap->Load( aFilename, aImageNumber ); + User::LeaveIfError( err ); + } + + +// ----------------------------------------------------------------------------- +// CTvStandbyFigure::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CTvStandbyFigure* CTvStandbyFigure::NewLC( + const TDesC& aFilename, + TInt aImageNumber ) + { + CTvStandbyFigure* self = new (ELeave) CTvStandbyFigure(); + CleanupStack::PushL( self ); + self->ConstructL( aFilename, aImageNumber ); + return self; + } + + +// ----------------------------------------------------------------------------- +// CTvStandbyFigure::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CTvStandbyFigure* CTvStandbyFigure::NewL( + const TDesC& aFilename, + TInt aImageNumber ) + { + CTvStandbyFigure* self = CTvStandbyFigure::NewLC( + aFilename, + aImageNumber ); + CleanupStack::Pop( self ); + return self; + } + + +// ----------------------------------------------------------------------------- +// CTvStandbyFigure::NewL +// Release the bitmap and close the session. +// ----------------------------------------------------------------------------- +// +CTvStandbyFigure::~CTvStandbyFigure() + { + if ( iBitmap ) + { + iBitmap->Reset(); + delete iBitmap; + RFbsSession::Disconnect(); + } + } + + +// ----------------------------------------------------------------------------- +// CTvStandbyFigure::RgbConvertL +// Convert bitmap to RGB565. +// ----------------------------------------------------------------------------- +// +TUint16* CTvStandbyFigure::RgbConvertL() + { + TSize drawingSize( iBitmap->SizeInPixels() ); + TInt pixels = drawingSize.iWidth * drawingSize.iHeight; + TUint16* RGB565Data = new(ELeave) TUint16[pixels]; + CleanupStack::PushL(RGB565Data); + + //This is needed to lock the bitmap object before + //manipulating the object using TBitmapUtil object + iBitmap->LockHeapLC(); + TBitmapUtil bitmapUtil( iBitmap ); + bitmapUtil.Begin( TPoint( 0, 0 ) ); + + for (TInt y = 0; y < drawingSize.iHeight; ++y) + { + bitmapUtil.SetPos( TPoint( 0, y ) ); + for (TInt x = 0; x < drawingSize.iWidth; ++x) + { + TUint32 pixelValue = bitmapUtil.GetPixel(); + TUint r = (pixelValue >> 16) & 0xff; + TUint g = (pixelValue >> 8) & 0xff; + TUint b = pixelValue & 0xff; + RGB565Data[x + y * drawingSize.iWidth] = + (( r >> 3) << 11) + + (( g >> 2) << 5) + + (b >> 3); + bitmapUtil.IncXPos(); + } + } + + bitmapUtil.End(); + + CleanupStack::PopAndDestroy(); // bitmapUtil + CleanupStack::Pop(RGB565Data); + return RGB565Data; + } + + +// ----------------------------------------------------------------------------- +// CTvStandbyFigure::GetFigureSize +// ----------------------------------------------------------------------------- +// +void CTvStandbyFigure::GetFigureSize( TSize& aSize ) + { + aSize = iBitmap->SizeInPixels(); + } + +// End of File