egl/eglinterface/include/eglwindowinterface.h
changeset 171 414d4b727fd9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/egl/eglinterface/include/eglwindowinterface.h	Thu Sep 09 10:13:45 2010 +0300
@@ -0,0 +1,169 @@
+// 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 EGL implementations only. It 
+// provides a standardised mechanism for interfacing with window
+// objects that are passed to EGL.
+
+
+/**
+ @file
+ @publishedPartner
+ @prototype
+*/
+
+
+#ifndef __EGLWINDOWINTERFACE_H__
+#define __EGLWINDOWINTERFACE_H__
+
+
+#include <graphics/eglwindowcommon.h>
+#include <EGL/egltypes.h>
+
+
+/**
+Forward declarations.
+*/
+class REglWindowBase;
+
+
+/**
+TEglWindowInterface exposes a proxy interface that forwards actions
+to the NativeWindow that the instance is constructed from. The 
+interface consists of all the functionality that an EGL 
+implementation requires to implement EGL window surfaces.
+*/
+NONSHARABLE_CLASS(TEglWindowInterface)
+    {
+public:
+    /**
+    Constructs a TEglWindowInterface to provide an interface to the
+    EGLNativeWindowType handle passed in.
+
+    @param  aNativeWindow   Pointer to the native window. 
+    
+    @pre    aNativeWindow is either an initialised RWindow or an 
+            initialised REglWindowBase derived type.
+
+    @error  If aNativeWindow is not an RWindow or an REglWindowBase 
+    derived type, behaviour is undefined.
+    */
+    IMPORT_C TEglWindowInterface(EGLNativeWindowType aNativeWindow);
+
+    /**
+    If the native window that is wrapped by the instance of 
+    TEglWindowInterface is valid, this function returns ETrue, else
+    EFalse is returned.
+    */
+    IMPORT_C TBool IsValid() const;
+    
+    /**
+    Returns the size in pixels of the native window.
+    */
+    IMPORT_C TSize SizeInPixels() const;
+    
+    /**
+    Returns the size in twips of the native window. This can be used
+    in conjunction with SizeInPixels() to work out the dot pitch and
+    pixel aspect ratio of the EGL surface attached to this window.
+    These attributes are queryable by an EGL client.
+    */
+    IMPORT_C TSize SizeInTwips() const;
+    
+    /**
+    Returns the screen number that the native window is displayed on
+    or KAllScreens to indicate that the window must be displayable on 
+    all screens in the system. 
+    */
+    IMPORT_C TInt ScreenNumber() const;
+    
+    /**
+    Sets the window's background color. This is the area of the 
+    window not covered by a background surface, either because it
+    has no background surface, or because the surface configuration
+    specifies that the surface does not cover the whole of the 
+    window's area.
+    
+    @param  aColor          The color that the window's background
+                            will be set to.
+                            
+    @param  aTriggerRedraw  If set causes any affected portions of 
+                            the display to be redrawn.
+                            
+    @note   The appearance on screen may not change until the window
+            is redrawn and the next refresh occurs. The 
+            aTriggerRedraw parameter can be set to trigger this 
+            redrawing.
+    */
+    IMPORT_C void SetBackgroundColor(TRgb aColor, TBool aTriggerRedraw);
+    
+    /**
+    This sets a surface to appear in front of the native window's 
+    background within a given area of that window. The 
+    TSurfaceConfiguration object contains the Surface ID and allows 
+    various surface presentation attributes to be specified. This 
+    describes the mapping from surface co-ordinates to screen 
+    co-ordinates, allowing for scaling, cropping, and rotation.
+    
+    @param  aConfiguration  The set of configuration that applies to
+                            the surface. 
+    
+    @param  aTriggerRedraw  If set causes any affected portions of 
+                            the display to be redrawn.  
+
+    @pre    The surface is opaque; otherwise results are not defined. 
+
+    @pre    The surface must not be the null surface ID; otherwise 
+            the client is panicked with code ENWPanicInvalidSurface. 
+
+    @note   If the same surface ID is already set as the window 
+            background surface, then only the configuration 
+            parameters will be updated.
+
+    @note   If the window already has a background surface (that is
+            not same as the new surface) then that surface will be 
+            removed and the new background surface will be set. The 
+            Surface ID will be registered while attached to this 
+            window, incrementing the registration count by one.
+
+    @post   The window has a new background surface set to be within 
+            the given area. 
+     
+    @return KErrNone on success or any system-wide error code. 
+    */
+    IMPORT_C TInt SetBackgroundSurface(const TSurfaceConfiguration &aConfiguration, TBool aTriggerRedraw);
+    
+    /**
+    This removes any background surface that has previously been set 
+    to the window. The surface ID registration associated with the 
+    window will be released. The aTriggerRedraw parameter triggers a 
+    redraw of at least the affected areas of the window at the end of
+    this method.
+
+    @param  aTriggerRedraw  If set causes any affected portions of 
+                            the display to be redrawn. 
+
+    @post   Any background surface associated with this window has 
+            been removed. The appearance on screen may not change 
+            until the window is redrawn and the next refresh occurs. 
+            The aTriggerRedraw parameter can be set to trigger this 
+            redrawing.
+    */
+    IMPORT_C void RemoveBackgroundSurface(TBool aTriggerRedraw);
+    
+private:
+    REglWindowBase* iEglWindow;
+    };
+
+
+#endif //__EGLWINDOWINTERFACE_H__