diff -r 000000000000 -r bde4ae8d615e os/graphics/windowing/windowserverplugins/openwfc/inc/rendertarget.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/graphics/windowing/windowserverplugins/openwfc/inc/rendertarget.h Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,127 @@ +// Copyright (c) 2008-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: +// + +#ifndef __RENDERTARGET_H__ +#define __RENDERTARGET_H__ + +#include +#include +#include "directgdigcwrapper.h" + +#if defined(__WINS__) && defined(_DEBUG) +class CDebugOsbWin; +#endif + +class RWsOffScreenImageTarget + { +public: + RWsOffScreenImageTarget(); + void OpenL(TUint32 aUsage,TSgCpuAccess aCpuAccess,TUidPixelFormat aPixelFormat,const TSize& aSize, TInt aScreenNumber); + void Close(); +public: + static const TInt KAspectRatioCount = 2; + TSgImageInfo iImageInfos[KAspectRatioCount]; + RDirectGdiImageTarget iImageTargets[KAspectRatioCount]; + RSgImageCollection iImageCollections[KAspectRatioCount]; + RSgImage iImages[KAspectRatioCount]; + }; + +class CRenderTarget : public CBase, public MWsUiBuffer + { +public: + enum TAspectRatio + { + ENormalAspectRatio = 0, + EInvertedAspectRatio = 1, + EAspectRatioCount = RWsOffScreenImageTarget::KAspectRatioCount + }; +public: + static CRenderTarget* NewL(MWsIniFile* aIniFile, TUint32 aUsage, TSgCpuAccess aCpuAccess, TDisplayMode aDisplayMode, + const TSize& aSize, TInt aScreenNumber); + ~CRenderTarget(); + + TAny* ResolveObjectInterface(TUint aTypeId); + + TDisplayMode DisplayMode() const; + const TSurfaceId& SurfaceId() const; + + inline TAspectRatio AspectRatio() const; + void SetAspectRatio(TAspectRatio aAspectRatio); + const TSgDrawableId& ImageId(TAspectRatio aAspectRatio) const; + + inline CDirectGdiGcWrapper* DirectGdiGc() const; + TInt SetDrawDeviceOffset(TPoint& aOrigin); + + TInt AllocNewTarget(RWsOffScreenImageTarget& aNewTarget, const TSize& aNewSize); + void SwitchTarget(RWsOffScreenImageTarget& aNewTarget); //takes ownership of aNewTarget + + void GetPixel(TRgb& aColor, const TPoint& aPixel) const; + void GetScanLine(TDes8& aScanLine, const TPoint& aStartPixel, TInt aPixelLength, TDisplayMode aDispMode) const; + TBool RectCompare(const TRect& aRect1, const TRect& aRect2) const; + void CopyToBitmapL(CFbsBitmap* aBitmap, const TRect& aRect) const; + +#if defined(__WINS__) && defined(_DEBUG) + void UpdateDebugWin(); +#endif + +public: //from MWsUiBuffer + TInt MapReadWrite(TAny*& aDataAddress, TInt& aDataStride); + TInt MapWriteOnly(TAny*& aDataAddress, TInt& aDataStride); + TInt Unmap(); + TUidPixelFormat PixelFormat() const; + TSize SizeInPixels() const; + +public: + TPoint iOffset; + +private: + CRenderTarget(); + void ConstructL(MWsIniFile* aIniFile, TUint32 aUsage, TSgCpuAccess aCpuAccess, TDisplayMode aDisplayMode, const TSize& aSize, TInt aScreenNumber); + inline RSgImage& Image(); + inline const RSgImage& Image() const; + inline const RSgImageCollection& ImageCollection() const; + inline const TSgImageInfo& ImageInfo() const; + const TUint8* DataAddress(const TAny* aStartDataAddress, const TPoint& aStartPoint, TInt aDataStride, TInt aBpp) const; + TInt MapReadOnly(const TAny*& aDataAddress, TInt& aDataStride) const; + TInt Unmap() const; + +private: + RWsOffScreenImageTarget iTarget; + TAspectRatio iCurrentAspectRatio; + CDirectGdiGcWrapper* iDirectGdiGcWrapper; +#if defined(__WINS__) && defined(_DEBUG) + CDebugOsbWin* iOsbWin; +#endif + }; + +inline CRenderTarget::TAspectRatio CRenderTarget::AspectRatio() const + { return iCurrentAspectRatio; } + +inline CDirectGdiGcWrapper* CRenderTarget::DirectGdiGc() const + { return iDirectGdiGcWrapper; } + +inline RSgImage& CRenderTarget::Image() + { return iTarget.iImages[iCurrentAspectRatio]; } + +inline const RSgImage& CRenderTarget::Image() const + { return iTarget.iImages[iCurrentAspectRatio]; } + +inline const RSgImageCollection& CRenderTarget::ImageCollection() const + { return iTarget.iImageCollections[iCurrentAspectRatio]; } + +inline const TSgImageInfo& CRenderTarget::ImageInfo() const + { return iTarget.iImageInfos[iCurrentAspectRatio]; } + +#endif // __RENDERTARGET_H__