author | Gareth Stockwell <gareth.stockwell@accenture.com> |
Fri, 22 Oct 2010 11:38:29 +0100 | |
branch | bug235_bringup_0 |
changeset 206 | c170e304623f |
parent 0 | 5d03bc08d59c |
permissions | -rw-r--r-- |
// 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 ; }