egl/eglinterface/include/eglwindow.h
author hgs
Thu, 09 Sep 2010 10:13:45 +0300
changeset 171 414d4b727fd9
permissions -rw-r--r--
201034
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
171
hgs
parents:
diff changeset
     1
// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     2
// All rights reserved.
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     7
//
hgs
parents:
diff changeset
     8
// Initial Contributors:
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    10
//
hgs
parents:
diff changeset
    11
// Contributors:
hgs
parents:
diff changeset
    12
//
hgs
parents:
diff changeset
    13
// Description:
hgs
parents:
diff changeset
    14
// This file is intended for use by clients of EGL. It provides
hgs
parents:
diff changeset
    15
// the window type that clients must use in order to create EGL
hgs
parents:
diff changeset
    16
// window surfaces that have no dependency on the window server.
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
/**
hgs
parents:
diff changeset
    20
 @file
hgs
parents:
diff changeset
    21
 @publishedPartner
hgs
parents:
diff changeset
    22
 @prototype
hgs
parents:
diff changeset
    23
*/
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
#ifndef __EGLWINDOW_H__
hgs
parents:
diff changeset
    27
#define __EGLWINDOW_H__
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
#include <graphics/eglwindowcommon.h>
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
/**
hgs
parents:
diff changeset
    34
Base class for all EGL window types except for RWindow. If an 
hgs
parents:
diff changeset
    35
RWindow pointer is cast to this type, IsRWindow() will return true.
hgs
parents:
diff changeset
    36
*/
hgs
parents:
diff changeset
    37
NONSHARABLE_CLASS(REglWindowBase)
hgs
parents:
diff changeset
    38
    {
hgs
parents:
diff changeset
    39
public:
hgs
parents:
diff changeset
    40
    virtual TBool IsValid() const = 0;
hgs
parents:
diff changeset
    41
    virtual TSize SizeInPixels() const = 0;
hgs
parents:
diff changeset
    42
    virtual TSize SizeInTwips() const = 0;
hgs
parents:
diff changeset
    43
    virtual TInt ScreenNumber() const = 0;
hgs
parents:
diff changeset
    44
    virtual void SetBackgroundColor(TRgb aColor, TBool aTriggerRedraw) = 0;
hgs
parents:
diff changeset
    45
    virtual TInt SetBackgroundSurface(const TSurfaceConfiguration &aConfiguration, TBool aTriggerRedraw) = 0;
hgs
parents:
diff changeset
    46
    virtual void RemoveBackgroundSurface(TBool aTriggerRedraw) = 0;
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
protected:
hgs
parents:
diff changeset
    49
    REglWindowBase();
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
private:
hgs
parents:
diff changeset
    52
    friend class TEglWindowInterface;
hgs
parents:
diff changeset
    53
    TBool IsRWindow() const;
hgs
parents:
diff changeset
    54
    
hgs
parents:
diff changeset
    55
private:
hgs
parents:
diff changeset
    56
    //This is aligned with RWindow::iBuffer, which is at offset 4 in RWindow.
hgs
parents:
diff changeset
    57
    //Note that this class has virtual functions to the vptr occupies bytes 0-3.
hgs
parents:
diff changeset
    58
    TInt iIsRWindow;
hgs
parents:
diff changeset
    59
    };
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
/**
hgs
parents:
diff changeset
    63
Forward Declarations.
hgs
parents:
diff changeset
    64
*/
hgs
parents:
diff changeset
    65
class MEglStandAloneWindowObserver;
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
/**
hgs
parents:
diff changeset
    69
Concrete EGL window type that has mutable size. It informs its 
hgs
parents:
diff changeset
    70
delegate whenever a surface is attached and removed from it. It is
hgs
parents:
diff changeset
    71
intended that render stages requiring an EGL window surface create a
hgs
parents:
diff changeset
    72
window of this type, passing itself as the delegate. When creating 
hgs
parents:
diff changeset
    73
the EGL window surface, the render stage passes this window as the 
hgs
parents:
diff changeset
    74
EGLNativeWindowType. Whenever EGL attaches and removes surfaces, the 
hgs
parents:
diff changeset
    75
render stage is notified via the delegate and can act accordingly by 
hgs
parents:
diff changeset
    76
modifying the compositor's scene. The symbian composition surface
hgs
parents:
diff changeset
    77
can be retrieved by calling GetBackgroundSurface(). This surface
hgs
parents:
diff changeset
    78
is considered unmappable. Users must not call RSurfaceManager::
hgs
parents:
diff changeset
    79
MapSurface() for this surface.
hgs
parents:
diff changeset
    80
*/
hgs
parents:
diff changeset
    81
NONSHARABLE_CLASS(REglStandAloneWindow) : public REglWindowBase
hgs
parents:
diff changeset
    82
    {
hgs
parents:
diff changeset
    83
public:
hgs
parents:
diff changeset
    84
    IMPORT_C REglStandAloneWindow();
hgs
parents:
diff changeset
    85
    IMPORT_C TInt Create(const TSize& aSizeInPixels, const TSize& aSizeInTwips, TInt aScreenNumber, MEglStandAloneWindowObserver& aObserver);
hgs
parents:
diff changeset
    86
    IMPORT_C void Close();
hgs
parents:
diff changeset
    87
    
hgs
parents:
diff changeset
    88
    IMPORT_C void SetSizeInPixels(const TSize& aSize);
hgs
parents:
diff changeset
    89
    IMPORT_C void SetSizeInTwips(const TSize& aSize);
hgs
parents:
diff changeset
    90
    IMPORT_C TRgb BackgroundColor() const;
hgs
parents:
diff changeset
    91
    IMPORT_C TBool GetBackgroundSurface(TSurfaceConfiguration& aConfiguration) const;
hgs
parents:
diff changeset
    92
    
hgs
parents:
diff changeset
    93
public: //From REglWindowBase.
hgs
parents:
diff changeset
    94
    IMPORT_C TBool IsValid() const;
hgs
parents:
diff changeset
    95
    IMPORT_C TSize SizeInPixels() const;
hgs
parents:
diff changeset
    96
    IMPORT_C TSize SizeInTwips() const;
hgs
parents:
diff changeset
    97
    IMPORT_C TInt ScreenNumber() const;
hgs
parents:
diff changeset
    98
    IMPORT_C void SetBackgroundColor(TRgb aColor, TBool aTriggerRedraw);
hgs
parents:
diff changeset
    99
    IMPORT_C TInt SetBackgroundSurface(const TSurfaceConfiguration& aConfiguration, TBool aTriggerRedraw);
hgs
parents:
diff changeset
   100
    IMPORT_C void RemoveBackgroundSurface(TBool aTriggerRedraw);
hgs
parents:
diff changeset
   101
    
hgs
parents:
diff changeset
   102
private:
hgs
parents:
diff changeset
   103
    class TEglStandAloneWindowData;
hgs
parents:
diff changeset
   104
    TEglStandAloneWindowData* iData;
hgs
parents:
diff changeset
   105
    };
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
/**
hgs
parents:
diff changeset
   109
Delegate class intended for implementation by a render stage that 
hgs
parents:
diff changeset
   110
requires an EGL window surface. See REglStandAloneWindow.
hgs
parents:
diff changeset
   111
*/
hgs
parents:
diff changeset
   112
class MEglStandAloneWindowObserver
hgs
parents:
diff changeset
   113
    {
hgs
parents:
diff changeset
   114
public:
hgs
parents:
diff changeset
   115
    /**
hgs
parents:
diff changeset
   116
    This method is called by REglStandAloneWindow just after a new 
hgs
parents:
diff changeset
   117
    background color was set for the REglStandAloneWindow instance. 
hgs
parents:
diff changeset
   118
    It provides the observer with an oportunity to adjust the 
hgs
parents:
diff changeset
   119
    compositor's scene to reflect this change.
hgs
parents:
diff changeset
   120
    
hgs
parents:
diff changeset
   121
    @param  aWindow         The instance of REglStandAloneWindow that 
hgs
parents:
diff changeset
   122
                            the background color was set upon.
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
    @param  aTriggerRedraw  If set, the client that set the 
hgs
parents:
diff changeset
   125
                            background surface expects that it will
hgs
parents:
diff changeset
   126
                            appear on screen immediately.
hgs
parents:
diff changeset
   127
    */
hgs
parents:
diff changeset
   128
    virtual void ColorWasSetForWindow(const REglStandAloneWindow& aWindow, TBool aTriggerRedraw) = 0;
hgs
parents:
diff changeset
   129
    
hgs
parents:
diff changeset
   130
    /**
hgs
parents:
diff changeset
   131
    This method is called by REglStandAloneWindow just after a new 
hgs
parents:
diff changeset
   132
    background surface was set on the REglStandAloneWindow instance. 
hgs
parents:
diff changeset
   133
    It provides the observer with an oportunity to adjust the 
hgs
parents:
diff changeset
   134
    compositor's scene to include this new surface.
hgs
parents:
diff changeset
   135
    
hgs
parents:
diff changeset
   136
    @param  aWindow         The instance of REglStandAloneWindow that 
hgs
parents:
diff changeset
   137
                            the background surface was set upon.
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
    @param  aTriggerRedraw  If set, the client that set the 
hgs
parents:
diff changeset
   140
                            background surface expects that it will
hgs
parents:
diff changeset
   141
                            appear on screen immediately.
hgs
parents:
diff changeset
   142
                            
hgs
parents:
diff changeset
   143
    @return KErrNone on success or any system-wide error code. This
hgs
parents:
diff changeset
   144
            is reported back to the caller of REglStandAloneWindow::
hgs
parents:
diff changeset
   145
            SetBackgroundSurface().
hgs
parents:
diff changeset
   146
    */
hgs
parents:
diff changeset
   147
    virtual TInt SurfaceWasSetForWindow(const REglStandAloneWindow& aWindow, TBool aTriggerRedraw) = 0;
hgs
parents:
diff changeset
   148
    
hgs
parents:
diff changeset
   149
    /**
hgs
parents:
diff changeset
   150
    This method is called by REglStandAloneWindow just before the 
hgs
parents:
diff changeset
   151
    current background surface will be removed from the 
hgs
parents:
diff changeset
   152
    REglStandAloneWindow instance. It provides the observer with an 
hgs
parents:
diff changeset
   153
    oportunity to adjust the compositor's scene to exclude this 
hgs
parents:
diff changeset
   154
    surface and unregister the surface with the compositor.
hgs
parents:
diff changeset
   155
    
hgs
parents:
diff changeset
   156
    @param  aWindow         The instance of REglStandAloneWindow that
hgs
parents:
diff changeset
   157
                            the background surface was removed from.
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
    @param  aTriggerRedraw  If set, the client that removed the
hgs
parents:
diff changeset
   160
                            background surface expects that the 
hgs
parents:
diff changeset
   161
                            changes will appear on screen 
hgs
parents:
diff changeset
   162
                            immediately.
hgs
parents:
diff changeset
   163
    */
hgs
parents:
diff changeset
   164
    virtual void SurfaceWillBeRemovedForWindow(const REglStandAloneWindow& aWindow, TBool aTriggerRedraw) = 0;
hgs
parents:
diff changeset
   165
    };
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
#endif //__EGLWINDOW_H__