graphicsdeviceinterface/screendriver/smomap/sccol16.cpp
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/screendriver/smomap/sccol16.cpp	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,125 @@
+// 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 implements the class for a 16 bpp color screen.
+// Include files                                                   
+// 
+//
+
+/**
+ @file
+*/
+/********************************************************************/
+#include <hal.h>
+#include <e32std.h>
+#include <bitdraw.h>
+#include "scdraw.h"
+
+/********************************************************************/
+/*  Implementation of CDrawSixteenBppScreenBitmap class             */
+/********************************************************************/
+void CDrawSixteenBppScreenBitmap::SetSize(const TSize& aSize) 
+	{
+    CDrawBitmap::SetSize(aSize);
+    __ASSERT_DEBUG(iSize == aSize, User::Invariant());
+	iLongWidth = iScanLineWords *2;
+	}
+void CDrawSixteenBppScreenBitmap::SetDisplayMode(CFbsDrawDevice* aDrawDevice)
+	{
+	CopyOldSettings(aDrawDevice) ;
+	InitScreen() ;
+	}
+
+TInt CDrawSixteenBppScreenBitmap::HorzTwipsPerThousandPixels() const
+	{
+	if (iSize.iWidth == 0)
+		return 0 ;
+	TMachineInfoV1Buf miBuf ;
+	UserHal::MachineInfo(miBuf) ;
+	return miBuf().iPhysicalScreenSize.iWidth * 1000 / iSize.iWidth ;
+	}
+
+TInt CDrawSixteenBppScreenBitmap::VertTwipsPerThousandPixels() const
+	{
+	if (iSize.iHeight == 0)
+		return 0 ;
+
+	TMachineInfoV1Buf miBuf ;
+	UserHal::MachineInfo(miBuf) ;
+	return miBuf().iPhysicalScreenSize.iHeight * 1000 / iSize.iHeight ;
+	}
+
+/**
+This function initialize the palette. In this mode, there is no palette
+defined
+*/
+TInt CDrawSixteenBppScreenBitmap::InitScreen()
+	{
+	return KErrNone ;
+	}
+
+/**
+Constructs the CDrawSixteenBppScreenBitmap 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 CDrawSixteenBppScreenBitmap::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 = CDrawSixteenBppBitmap::Construct(aSize);
+	if (ret != KErrNone)
+		return ret ;
+
+	/* Set the pointer on the first pixel */
+	TInt offsetToFirstPixel = displayMode;
+	ret = HAL::Get(aScreenNo,HALData::EDisplayOffsetToFirstPixel, offsetToFirstPixel);
+	if (ret != KErrNone)
+		return ret;
+	iBits = (TUint32*)((TUint32)aBitmapAddress + offsetToFirstPixel);
+	
+	return KErrNone ;
+	}
+
+/**
+Define the screen orientation available
+*/
+void CDrawSixteenBppScreenBitmap::OrientationsAvailable(TBool aOrientation[4])
+	{
+	aOrientation[EOrientationNormal]     = ETrue ;
+	aOrientation[EOrientationRotated90]  = ETrue ;
+	aOrientation[EOrientationRotated180] = ETrue ;
+	aOrientation[EOrientationRotated270] = ETrue ;
+	}
+
+/**
+Set the current display orientation
+*/
+TBool CDrawSixteenBppScreenBitmap::SetOrientation(TOrientation aOrientation)
+	{
+	iOrientation = aOrientation ;
+	return ETrue ;
+	}