diff -r 000000000000 -r 5d03bc08d59c graphicstest/uibench/s60/src/surfaceutility.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphicstest/uibench/s60/src/surfaceutility.h Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,128 @@ +/** +* Copyright (c) 2007-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: +* +*/ + +/** + * @file +*/ + +#ifndef __SURFACE_UTILITY__ +#define __SURFACE_UTILITY__ + +#include +#include +#include +#include + +#define ENABLE_TEST_LOGGING +#define ALPHA_FIX_24BIT 0x7f //This forces a non-zero value into the X byte of 16MU color values + +#if defined(ENABLE_TEST_LOGGING) +#define LOG(X) RDebug::Printf X +#else +#define LOG(X) +#endif + +class TRgb; +class CFbsBitmap; + +class CSurfaceUtility : public CBase + { +public: + static CSurfaceUtility* NewL(CSurfaceUtility* aClone=NULL); + virtual ~CSurfaceUtility(); + TSize SurfaceSize(const TSurfaceId& aSurface); + void CreateSurfaceFromFileL(const TDesC& aFileName, TSurfaceId& aSurface); + TSurfaceId CreateSurfaceL(const TSize& aSize, TUidPixelFormat aPixelFormat, TInt aStride, TInt aBuffers = 1); + void FillSurfaceL(TSurfaceId& aSurface, const TRgb& aColor); + void FillChunkL(TSurfaceId& aSurface, RChunk& aChunk, const TRgb& aColor, TInt aBufferNumber); + void FillRectangleL(TSurfaceId& aSurface, TPoint& aStartPos, TSize& aSize, const TRgb& aColor); + void FillRectangleNoUpdateL(TSurfaceId& aSurface, TPoint& aStartPos, TSize& aSize, const TRgb& aColor); + void GridFillSurfaceL(TSurfaceId& aSurface, const TRgb& aColor, const TRgb& aLines); + void PatternFillSurfaceL(TSurfaceId& aSurface); + void FanFillSurfaceL(TSurfaceId& aSurface, const TRgb& aColor, const TRgb& aLinesTL,const TRgb& aLinesBR); + void LineFillSurfaceL(TSurfaceId& aSurface, const TRgb& aBackColor, const TRgb& aLineColor, TInt aPosition); + CFbsBitmap* EquivalentBitmapL(TSurfaceId& aSurface, CFbsBitmap* aCopyTo=NULL); + void DestroySurface(TSurfaceId& aSurface); + TBool DestroyAll(); + void SubmitUpdate(TInt aScreenNumber, const TSurfaceId& aSurface, const TRegion* aRegion, TInt aBufferNumber = 0); + void MapAndSubmitUpdateL(RChunk& aChunk, TInt aScreenNumber, const TSurfaceId& aSurface, const TRegion* aRegion); + void MapSurfaceL(const TSurfaceId& aSurface, RChunk& aChunk); + void CopyBitmapFromFileToSurfaceL(const TDesC& aFileName, const TSurfaceId& aSurface); + void ScaleBitmapFromFileToSurfaceL(const TDesC& aFileName, const TSurfaceId& aSurface); + void CopyBitmapSurfaceL(const CFbsBitmap* aBitmap, TSurfaceId& aSurface); + void CopyBitmapToSurfaceL(TSurfaceId& aSurface, const CFbsBitmap& aBitmap); + TInt PixelDataOffet(const TSurfaceId& aSurface); + TInt BytesPerPixelL(TUidPixelFormat aPixelFormat); +private: + CSurfaceUtility(CSurfaceUtility* aClone); + void ConstructL(); + +private: + RSurfaceManager iManager; + RSurfaceUpdateSession iSurfaceUpdateSession; + //This local object wraps the array operations in a heap switch + //The reason for providing this wrapper is to allow threads to share the surface manager surface ID list. + //In particular, the next test can attempt to release the previous test's surfaces if it paniced. + //Note that the presumption is that the owning thread will be paused, + //so there will be no thread interlock issues with it's heap manager. + class RHeapSurfaceArray + { + public: + typedef RArray Array; + RHeapSurfaceArray(RHeapSurfaceArray* aUseExternalArray=NULL); + + //Emulation of RArray entrypoints. Add more stub methods if required... + TSurfaceId& operator[](TUint aIndex); + void Close(); + TInt Count() const; + inline void Reset(); + void AppendL(const TSurfaceId &anEntry); + TInt Find(const TSurfaceId &anEntry) const; + void Remove(TInt anIndex); + + private: + static void PopHeap(void* mainheap); + static void SwitchHeapLC(RHeap* aNewHeap); + + Array iLocalArray; + Array* iUseArray; + RHeap &iExternalHeapRef; + } iSurfaces; + }; + +/** +CActiveListener provides the asynchronous operation +of an active object +*/ +class CActiveListener : public CActive + { +public: + static CActiveListener* NewLC(); + ~CActiveListener(); + + void Initialize(); + TBool IsRequestCancelled(); + +private: + CActiveListener(); + + virtual void RunL(); + virtual void DoCancel(); + }; + +#endif // __SURFACE_UTILITY__ +