diff -r 000000000000 -r bde4ae8d615e os/graphics/graphicsdeviceinterface/screendriver/smomap/sccol8.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/graphics/graphicsdeviceinterface/screendriver/smomap/sccol8.cpp Fri Jun 15 03:10:57 2012 +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 +#include "scdraw.h" +#include + +/********************************************************************/ +/* 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 ; + }