diff -r 000000000000 -r bde4ae8d615e os/graphics/graphicsdeviceinterface/directgdi/src/directgdidrawablesource.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/graphics/graphicsdeviceinterface/directgdi/src/directgdidrawablesource.cpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,92 @@ +// 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: +// + +#include "directgdidriver.h" +#include "directgdipaniccodes.h" +#include +#include + +/** +Default constructor. +Only for embedding instances of RDirectGdiDrawableSource into other classes as data members. +Before a RDirectGdiDrawableSource can be used the other constructor must be called. +*/ +EXPORT_C RDirectGdiDrawableSource::RDirectGdiDrawableSource() + : iDriver(NULL), iHandle(KNullHandle) + { + } + +/** +Constructor. + +@param aDriver The CDirectGdiDriver for this thread. + +@pre The CDirectGdiDriver object has been initialised from the calling thread. +@post This handle has a pointer to the CDirectGdiDriver for this thread. + This handle is not associated with any DirectGDI adaptation-specific resource. +*/ +EXPORT_C RDirectGdiDrawableSource::RDirectGdiDrawableSource(CDirectGdiDriver& aDriver) + : iDriver(&aDriver), iHandle(KNullHandle) + { + } + +/** +Creates a DirectGDI adaptation-specific resource that is bound to the specified +drawable resource so it can be drawn using the DirectGDI rendering API. + +@param aDrawable The drawable resource. + +@pre CDirectGdiDriver object for this handle has been set. The drawable + resource has been fully constructed. +@post The DirectGDI adaptation-specific resource that is bound to the given + non-pixel resource is created and this handle is now associated with it. + The reference counter on the drawable resource is incremented. + +@return KErrNone if successful, KErrArgument if the drawable resource is not + valid, KErrAlreadyExists if this handle is already associated with a + DirectGDI adaptation-specific resource, otherwise one of the system-wide + error codes. +@panic DGDI 18, if this drawable source has no pointer to its assosicated CDirectGdiDriver. + This may occur if constructed using the default constructor, and has not yet been + assigned to another drawable source created with the constructor overload. +*/ +EXPORT_C TInt RDirectGdiDrawableSource::Create(const RSgDrawable& aDrawable) + { + GRAPHICS_ASSERT_ALWAYS(iDriver, EDirectGdiPanicDrawableSourceWithoutDriver); + return iDriver->CreateDrawableSource(*this, aDrawable); + } + +/** +Destroys the DirectGDI adaptation-specific resource associated with this handle. +Calling this method on a handle that is not associated with any DirectGDI +adaptation-specific resource will do nothing. Once Close() is called, this handle can be reused. + +@pre The CDirectGdiDriver object for this handle has been set. +@post The DirectGDI specific resource associated with this handle will be destroyed, + at any time. This handle is no longer associated with a DirectGDI specific + resource. The reference counter of the underlying drawable resource is + decremented. +@panic DGDI 18, if this drawable source has no pointer to its assosicated CDirectGdiDriver. + This may occur if constructed using the default constructor, and has not yet been + assigned to another drawable source created with the constructor overload. +*/ +EXPORT_C void RDirectGdiDrawableSource::Close() + { + if (iHandle != KNullHandle) + { + GRAPHICS_ASSERT_ALWAYS(iDriver, EDirectGdiPanicDrawableSourceWithoutDriver); + iDriver->CloseDrawableSource(*this); + } + }