graphicsdeviceinterface/screendriver/smomap/sccol8.cpp
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/screendriver/smomap/sccol8.cpp	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,145 @@
+// Copyright (c) 2003-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:
+// This module implemente the class use for a 8 bpp color screen.
+// Include files                                                   
+// 
+//
+
+/**
+ @file
+*/
+/********************************************************************/
+#include <bitdraw.h>
+#include "scdraw.h"
+#include <hal.h>
+
+/********************************************************************/
+/*  Implementation of CDrawEightBppScreenBitmapColor class          */
+/********************************************************************/
+void CDrawEightBppScreenBitmapColor::SetSize(const TSize& aSize) 
+	{
+	CDrawBitmap::SetSize(aSize);
+	__ASSERT_DEBUG(iSize == aSize, User::Invariant());
+	iLongWidth = CDrawBitmap::iScanLineWords * 4;
+	}
+void CDrawEightBppScreenBitmapColor::SetDisplayMode(CFbsDrawDevice* aDrawDevice)
+	{
+	CopyOldSettings(aDrawDevice) ;
+	InitScreen() ;
+	}
+
+TInt CDrawEightBppScreenBitmapColor::HorzTwipsPerThousandPixels() const
+	{
+	if (iSize.iWidth == 0)
+		return 0 ;
+	TMachineInfoV1Buf miBuf ;
+	UserHal::MachineInfo(miBuf) ;
+	return miBuf().iPhysicalScreenSize.iWidth * 1000 / iSize.iWidth ;
+	}
+
+TInt CDrawEightBppScreenBitmapColor::VertTwipsPerThousandPixels() const
+	{
+	if (iSize.iHeight == 0)
+		return 0 ;
+
+	TMachineInfoV1Buf miBuf ;
+	UserHal::MachineInfo(miBuf) ;
+	return miBuf().iPhysicalScreenSize.iHeight * 1000 / iSize.iHeight ;
+	}
+	
+/**
+Initialises the palette
+*/
+TInt CDrawEightBppScreenBitmapColor::InitScreen()
+	{
+
+	__ASSERT_ALWAYS(iPaletteAddress!=NULL, Panic(EScreenDriverPanicNullPointer)) ;
+
+	/* Fill the palette to support 8 Bpp color */
+	TUint16* palettePtr = iPaletteAddress ;
+	for (TInt count = 0; count < KEightBppPaletteEntries; count++)
+		*palettePtr++ = TRgb::Color256(count)._Color4K() | KEightBppPixelBitSize ;
+
+	return KErrNone ;
+	}
+
+/**
+Constructs the CDrawEightBppScreenBitmapColor object.
+@param aScreenNo Screen number. It will be used in HAL::Get() calls.
+@param aBitmapAddress The screen memory address.
+@param aSize Screen size
+@return System-wide error codes, KErrNone if the construction was successfull.
+*/
+TInt CDrawEightBppScreenBitmapColor::ConstructScreenL(TInt aScreenNo, TAny* aBitmapAddress, TSize aSize)
+	{
+	iScreenNo = aScreenNo;
+	TInt displayMode;
+
+	TInt ret = HAL::Get(aScreenNo, HALData::EDisplayMode, displayMode);
+	if (ret != KErrNone)
+		return ret;
+
+	TInt linepitchInBytes = displayMode;
+	ret = HAL::Get(aScreenNo,HALData::EDisplayOffsetBetweenLines,linepitchInBytes);
+	if (ret != KErrNone)
+		return ret;
+
+	CDrawBitmap::iScanLineWords = linepitchInBytes / 4;
+	ret = CDrawEightBppBitmapColor::Construct(aSize);
+	if (ret != KErrNone)
+		return ret ;
+
+	/* Set the pointer on the first palette entry */
+	iPaletteAddress = (TUint16*)aBitmapAddress ;
+	
+	TInt offsetToFirstPixel = displayMode;
+	ret = HAL::Get(aScreenNo,HALData::EDisplayOffsetToFirstPixel, offsetToFirstPixel);
+	if (ret != KErrNone)
+		return ret;
+	iBits = (TUint32*)((TUint32)aBitmapAddress + offsetToFirstPixel);
+
+	return KErrNone ;
+	}
+
+void CDrawEightBppScreenBitmapColor::OrientationsAvailable(TBool aOrientation[4])
+	{
+	aOrientation[EOrientationNormal]     = ETrue ;
+	aOrientation[EOrientationRotated90]  = ETrue ;
+	aOrientation[EOrientationRotated180] = ETrue ;
+	aOrientation[EOrientationRotated270] = ETrue ;
+	}
+
+TBool CDrawEightBppScreenBitmapColor::SetOrientation(TOrientation aOrientation)
+	{
+	iOrientation = aOrientation ;
+	return ETrue ;
+	}
+
+TInt CDrawEightBppScreenBitmapColor::SetCustomPalette(const CPalette* aPalette)
+	{
+	TInt ret = CDrawEightBppBitmapColor::SetCustomPalette(aPalette) ;
+
+	if (ret == KErrNone)
+		{
+		TInt index = 0 ;
+		TUint16* palettePtr = iPaletteAddress ;
+		const TUint16* const palettePtrLimit = iPaletteAddress + KEightBppPaletteEntries ;
+
+		*palettePtr++ = IndexToColor(index++)._Color4K() | KEightBppPixelBitSize ;
+
+		while (palettePtr < palettePtrLimit)
+			*palettePtr++ = IndexToColor(index++)._Color4K() ;
+		}
+	return ret ;
+	}