--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/egl/eglinterface/include/eglwindow.h Fri Sep 17 08:36:49 2010 +0300
@@ -0,0 +1,168 @@
+// Copyright (c) 2010 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:
+// This file is intended for use by clients of EGL. It provides
+// the window type that clients must use in order to create EGL
+// window surfaces that have no dependency on the window server.
+
+
+/**
+ @file
+ @publishedPartner
+ @prototype
+*/
+
+
+#ifndef __EGLWINDOW_H__
+#define __EGLWINDOW_H__
+
+
+#include <graphics/eglwindowcommon.h>
+
+
+/**
+Base class for all EGL window types except for RWindow. If an
+RWindow pointer is cast to this type, IsRWindow() will return true.
+*/
+NONSHARABLE_CLASS(REglWindowBase)
+ {
+public:
+ virtual TBool IsValid() const = 0;
+ virtual TSize SizeInPixels() const = 0;
+ virtual TSize SizeInTwips() const = 0;
+ virtual TInt ScreenNumber() const = 0;
+ virtual void SetBackgroundColor(TRgb aColor, TBool aTriggerRedraw) = 0;
+ virtual TInt SetBackgroundSurface(const TSurfaceConfiguration &aConfiguration, TBool aTriggerRedraw) = 0;
+ virtual void RemoveBackgroundSurface(TBool aTriggerRedraw) = 0;
+
+protected:
+ REglWindowBase();
+
+private:
+ friend class TEglWindowInterface;
+ TBool IsRWindow() const;
+
+private:
+ //This is aligned with RWindow::iBuffer, which is at offset 4 in RWindow.
+ //Note that this class has virtual functions to the vptr occupies bytes 0-3.
+ TInt iIsRWindow;
+ };
+
+
+/**
+Forward Declarations.
+*/
+class MEglStandAloneWindowObserver;
+
+
+/**
+Concrete EGL window type that has mutable size. It informs its
+delegate whenever a surface is attached and removed from it. It is
+intended that render stages requiring an EGL window surface create a
+window of this type, passing itself as the delegate. When creating
+the EGL window surface, the render stage passes this window as the
+EGLNativeWindowType. Whenever EGL attaches and removes surfaces, the
+render stage is notified via the delegate and can act accordingly by
+modifying the compositor's scene. The symbian composition surface
+can be retrieved by calling GetBackgroundSurface(). This surface
+is considered unmappable. Users must not call RSurfaceManager::
+MapSurface() for this surface.
+*/
+NONSHARABLE_CLASS(REglStandAloneWindow) : public REglWindowBase
+ {
+public:
+ IMPORT_C REglStandAloneWindow();
+ IMPORT_C TInt Create(const TSize& aSizeInPixels, const TSize& aSizeInTwips, TInt aScreenNumber, MEglStandAloneWindowObserver& aObserver);
+ IMPORT_C void Close();
+
+ IMPORT_C void SetSizeInPixels(const TSize& aSize);
+ IMPORT_C void SetSizeInTwips(const TSize& aSize);
+ IMPORT_C TRgb BackgroundColor() const;
+ IMPORT_C TBool GetBackgroundSurface(TSurfaceConfiguration& aConfiguration) const;
+
+public: //From REglWindowBase.
+ IMPORT_C TBool IsValid() const;
+ IMPORT_C TSize SizeInPixels() const;
+ IMPORT_C TSize SizeInTwips() const;
+ IMPORT_C TInt ScreenNumber() const;
+ IMPORT_C void SetBackgroundColor(TRgb aColor, TBool aTriggerRedraw);
+ IMPORT_C TInt SetBackgroundSurface(const TSurfaceConfiguration& aConfiguration, TBool aTriggerRedraw);
+ IMPORT_C void RemoveBackgroundSurface(TBool aTriggerRedraw);
+
+private:
+ class TEglStandAloneWindowData;
+ TEglStandAloneWindowData* iData;
+ };
+
+
+/**
+Delegate class intended for implementation by a render stage that
+requires an EGL window surface. See REglStandAloneWindow.
+*/
+class MEglStandAloneWindowObserver
+ {
+public:
+ /**
+ This method is called by REglStandAloneWindow just after a new
+ background color was set for the REglStandAloneWindow instance.
+ It provides the observer with an oportunity to adjust the
+ compositor's scene to reflect this change.
+
+ @param aWindow The instance of REglStandAloneWindow that
+ the background color was set upon.
+
+ @param aTriggerRedraw If set, the client that set the
+ background surface expects that it will
+ appear on screen immediately.
+ */
+ virtual void ColorWasSetForWindow(const REglStandAloneWindow& aWindow, TBool aTriggerRedraw) = 0;
+
+ /**
+ This method is called by REglStandAloneWindow just after a new
+ background surface was set on the REglStandAloneWindow instance.
+ It provides the observer with an oportunity to adjust the
+ compositor's scene to include this new surface.
+
+ @param aWindow The instance of REglStandAloneWindow that
+ the background surface was set upon.
+
+ @param aTriggerRedraw If set, the client that set the
+ background surface expects that it will
+ appear on screen immediately.
+
+ @return KErrNone on success or any system-wide error code. This
+ is reported back to the caller of REglStandAloneWindow::
+ SetBackgroundSurface().
+ */
+ virtual TInt SurfaceWasSetForWindow(const REglStandAloneWindow& aWindow, TBool aTriggerRedraw) = 0;
+
+ /**
+ This method is called by REglStandAloneWindow just before the
+ current background surface will be removed from the
+ REglStandAloneWindow instance. It provides the observer with an
+ oportunity to adjust the compositor's scene to exclude this
+ surface and unregister the surface with the compositor.
+
+ @param aWindow The instance of REglStandAloneWindow that
+ the background surface was removed from.
+
+ @param aTriggerRedraw If set, the client that removed the
+ background surface expects that the
+ changes will appear on screen
+ immediately.
+ */
+ virtual void SurfaceWillBeRemovedForWindow(const REglStandAloneWindow& aWindow, TBool aTriggerRedraw) = 0;
+ };
+
+
+#endif //__EGLWINDOW_H__