--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/directgdiadaptation/hwsrc/directgdidriverimpl.h Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,155 @@
+// 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:
+// Declaration of a Direct Graphics Device Interface (GDI) Driver implementation,
+// this class actually implements the HAI.
+//
+//
+
+
+#ifndef __DIRECTGDIDRIVERIMPL_H__
+#define __DIRECTGDIDRIVERIMPL_H__
+
+/**
+@file
+@internalComponent Reference implementation of Open VG hardware accelerated DirectGDI adaptation.
+*/
+#include "vgimagecache.h"
+#include "directgdidrawableref.h"
+#include "directgdiimageref.h"
+#include "directgdidriverprocessstate.h"
+#include "glyphimagecache.h"
+#include <graphics/directgdidriverinternal.h>
+#include <graphics/directgdiextensioninterfaces.h>
+#include <e32hashtab.h>
+#include <e32cmn.h>
+#include <pls.h>
+
+
+// Forward declarations.
+//
+class CDirectGdiImageTargetImpl;
+class CDirectGdiImageSourceImpl;
+class CVgEngine;
+class CDirectGdiDrawableRef;
+class RDirectGdiImageTarget;
+
+/**
+Represents the body part of CDirectGdiDriver that actually implements the HAI. Derives from the CDirectGdiDriverInternal class and implements all the
+interfaces to provide the functionality required by the generic layer.
+*/
+NONSHARABLE_CLASS(CDirectGdiDriverImpl): public CDirectGdiDriverInternal, public MDirectGdiDriverCacheSize
+ {
+public:
+ static TInt New(CDirectGdiDriverInternal*& aInternal, RLibrary aLibrary);
+ ~CDirectGdiDriverImpl();
+
+ // From CDirectGdiDriverInternal
+ void Flush();
+ void Finish();
+ TInt GetError();
+ void SetError(TInt aErr);
+ TInt CreateDrawableSource(TInt& aHandleRet, const RSgDrawable& aSgDrawable);
+ void CloseDrawableSource(TInt& aHandle) ;
+ TInt CreateImageTarget(TInt& aHandleRet, const RSgImage& aImageDestination);
+ void CloseImageTarget(TInt& aHandle);
+ TInt CreateEngine(MDirectGdiEngine*& aDirectGdiEngine);
+ void DestroyEngine(MDirectGdiEngine* aDirectGdiEngine);
+ TInt GetInterface(TUid aInterfaceId, TAny*& aInterface);
+
+ // From MDirectGdiDriverCacheSize
+ TInt SetMaxImageCacheSize(TInt aSize);
+ TInt MaxImageCacheSize() const;
+ TInt SetMaxGlyphCacheSize(TInt aSize);
+ TInt MaxGlyphCacheSize() const;
+
+ void SetCurrentEngine(CVgEngine* aCurrentEngine);
+ void SetCurrentTarget(CDirectGdiImageTargetImpl* aCurrentTarget);
+ TBool IsCurrentEngine(const CVgEngine* aCurrentEngine) const;
+ TBool IsCurrentTarget(const CDirectGdiImageTargetImpl* aCurrentTarget) const;
+ void Activate(CDirectGdiImageTargetImpl* aRenderingTarget);
+ void Reactivate(CDirectGdiImageTargetImpl* aRenderingTarget);
+ void Deactivate(CDirectGdiImageTargetImpl* aRenderingTarget);
+ CDirectGdiImageSourceImpl* GetImageSourceFromHandle(TInt aHandle) const;
+ CDirectGdiImageTargetImpl* GetImageTargetFromHandle(TInt aHandle) const;
+ TBool IsImageSource(TInt aHandle) const;
+
+ CFontGlyphImageStorage* FontGlyphImageStorage() const;
+ TInt PreAllocateFontGlyphImages(); //images will be used to draw glyphs if the system runs out of memory
+ CVgImageCache* VgImageCache() const;
+
+ // VGImage cache commands
+ VGImage GetVgImageFromCache(const CFbsBitmap& aBitmap, const TPoint& aOrigin) const;
+ TBool AddVgImageToCache(const CFbsBitmap& aBitmap, VGImage& aImage, const TPoint& aOrigin);
+
+ TInt RegisterSourceImage(const CDirectGdiImageSourceImpl& aImage);
+ TInt RegisterTargetImage(const CDirectGdiImageTargetImpl& aImage);
+ TInt UnregisterSourceImage(const CDirectGdiImageSourceImpl& aImage);
+ TInt UnregisterTargetImage(const CDirectGdiImageTargetImpl& aImage);
+
+ inline EGLDisplay EglDisplay() const;
+ inline XDirectGdiDriverProcessState& ProcessState() const;
+
+ static TInt GetVgError();
+
+private:
+ CDirectGdiDriverImpl(RLibrary aLibrary);
+ TInt Construct();
+ TInt InitializeEglConfigs(EGLDisplay display);
+
+#ifdef _DEBUG
+ void CheckSourceIsValid(TInt aHandle) const;
+ void CheckTargetIsValid(TInt aHandle) const;
+#endif // _DEBUG
+
+private:
+ TInt iErrorCode; /**< The first error code to occur in any CVgEngine instance.*/
+ RHashMap<TInt, EGLContext> iPixelContextMap;
+ RHashMap<TInt, EGLConfig> iPixelConfigMap;
+ CVgEngine* iCurrentEngine;
+ CDirectGdiImageTargetImpl* iCurrentTarget;
+ EGLContext iSharedContext;
+ EGLDisplay iDisplay;
+ RPointerArray<CDirectGdiImageRef> iSourceArray; /**< An array of pointers to all sources created and currently held open by this driver.*/
+ RPointerArray<CDirectGdiImageRef> iTargetArray; /**< An array of pointers to all targets created and currently held open by this driver.*/
+
+ CFontGlyphImageStorage* iGlyphImageStorage;
+ CVgImageCache* iVgImageCache;
+
+#ifndef __WINS__
+ static XDirectGdiDriverProcessState gProcessState;
+#endif
+ };
+
+/**
+@return A reference to the process state object.
+*/
+inline XDirectGdiDriverProcessState& CDirectGdiDriverImpl::ProcessState() const
+ {
+#ifdef __WINS__
+ const TUid KDirectGdiAdapterUid = {0x102858E9};
+ return *Pls<XDirectGdiDriverProcessState>(KDirectGdiAdapterUid);
+#else
+ return gProcessState;
+#endif
+ }
+
+/**
+@return A handle to the EGLDisplay associated with this driver.
+*/
+inline EGLDisplay CDirectGdiDriverImpl::EglDisplay() const
+ {
+ return iDisplay;
+ }
+
+#endif //__DIRECTGDIDRIVERIMPL_H__