accessoryservices/pluggeddisplay/pluggeddisplayengine/src/tvstandbyfigure.cpp
changeset 0 4e1aa6a622a0
--- /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 <e32std.h>
+#include <fbs.h>
+#include <f32file.h>
+#include <bitdev.h>
+#include <gdi.h>
+//#include <r_display.h>
+
+// 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