fbs/fontandbitmapserver/trasterizer/src/examplerasterizer.h
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fbs/fontandbitmapserver/trasterizer/src/examplerasterizer.h	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,104 @@
+// 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:
+//
+
+/**
+ @file
+ @publishedPartner
+ @prototype
+*/
+
+#ifndef EXAMPLERASTERIZER_H
+#define EXAMPLERASTERIZER_H
+
+
+#include <graphics/fbsrasterizer.h>
+#include <graphics/fbsrasterizerclearcache.h>
+
+
+class RMemReadStream;
+
+
+const TUid KUidExampleExtendedBitmap = {0x10285A78};
+const TInt KMaxRecentBmpCacheSize = 0x40000; // 256 KB
+
+
+/** Example implementation of a rasterizer that is used to generate pixel
+data for extended bitmaps of type KUidExampleExtendedBitmap.
+ */
+class CExampleRasterizer : public CFbsRasterizer, public MFbsRasterizerClearCache
+	{
+public:
+	CExampleRasterizer();
+	~CExampleRasterizer();
+
+	// From CFbsRasterizer
+	void BeginBitmap(TInt64 aBitmapId, const TBitmapDesc& aBitmapDesc, const TRegion* aRegionOfInterest);
+	void EndBitmap(TInt64 aBitmapId);
+	const TUint32* ScanLine(TInt64 aBitmapId, const TPoint& aPixel, TInt aLength);	
+	TInt GetInterface(TUid aInterfaceId, TAny*& aInterface);
+	
+	// From MFbsRasterizerClearCache
+	void ClearCache();
+
+private:
+	/** Class for holding information about an extended bitmap registered with this rasterizer.
+	The buffer to store the pre-rendered pixels is allocated in the same heap cell, after the
+	instance variables, by using the overload of operator new with an extra size parameter.
+	 */
+	class CRegisteredBitmap : public CBase
+		{
+	public:
+		CRegisteredBitmap(TInt64 aBitmapId, const TBitmapDesc& aBitmapDesc, TInt aBufLength);
+		~CRegisteredBitmap();
+		TInt Draw(RMemReadStream& aReadStream, const TRegion* aRegionOfInterest);
+		TUint8* Buffer();
+		
+	public:
+		const TInt64 iBitmapId;
+		const TSize iSizeInPixels;
+		const TDisplayMode iDispMode;
+		const TUid iDataType;
+		const TInt iBufLength;
+		TDblQueLink iLink;
+		/** The number of times the bitmap with the ID aBitmapId is currently registered with this
+		rasterizer or zero for recently used bitmaps.
+		 */
+		TInt iRefCount;
+		/** Whether the whole bitmap has been rasterized into the buffer.
+		 */
+		TBool iWhole;
+		};
+	
+private:
+	CRegisteredBitmap* RegisteredBitmap(TInt64 aBitmapId);
+	CRegisteredBitmap* RecentBitmap(TInt64 aBitmapId);
+	static TInt IdleFunction(TAny* aPtr);
+
+private:
+	/** List of currently registered extended bitmaps, the key is the bitmap id.
+	 */
+	TDblQue<CRegisteredBitmap> iRegisteredBmps;
+	/** List of recently used extended bitmaps, the key is the bitmap id.
+	 */
+	TDblQue<CRegisteredBitmap> iRecentBmps;
+	/** Total size in bytes of the pre-rendered buffers for all the recently used extended bitmaps.
+	 */
+	TInt iTotalRecentBmpSize;
+	/** An idle-time active object to clean up the recently used extended bitmaps.
+	 */
+	CIdle* iIdle;
+	};
+
+#endif // EXAMPLERASTERIZER_H