--- /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 ;
+ }