--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/inc/Graphics/openwfc/WSGRAPHICDRAWERINTERFACE.H Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,1413 @@
+// Copyright (c) 2005-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:
+// WSGRAPHICDRAWERINTEFACE.H
+// Server-side base-classes for graphic drawer plugins
+//
+//
+
+#ifndef __WSGRAPHICDRAWERINTEFACE_H__
+#define __WSGRAPHICDRAWERINTEFACE_H__
+
+#include <e32base.h>
+#include <w32std.h>
+#include <gdi.h>
+#include <bitstd.h>
+
+class CWsGraphicDrawer;
+struct TGraphicDrawerId;
+class MWsEventHandler;
+class CWsGraphicMessageQueue;
+class CWsClient;
+class CWsWindow;
+
+#if !defined(SYMBIAN_GRAPHICS_GCE)
+ class MWsFlickerFreeBufferObserver;
+#endif
+
+class MWsScreenRedrawObserver;
+class MWsMemoryRelease;
+class MEventHandler;
+class MWsElement;
+class MWsGraphicsContext;
+
+/**
+@publishedPartner
+@released
+*/
+enum TWinType
+ {
+ EWinTypeClient,
+ EWinTypeRoot,
+ EWinTypeGroup,
+ };
+
+/** Declares an object type, ETypeId, for a class, in order to allow the WSERV object
+provider mechanism to locate and provide objects from the class.
+@publishedPartner
+@released
+@see MWsObjectProvider */
+#define DECLARE_WS_TYPE_ID(id) enum { EWsObjectInterfaceId = id };
+
+class MWsObjectProvider
+/** A class for dynamic extension of object instances
+ WSERV classes which wish to allow dynamic extension show derive those
+ extensions from MWsObjectProvider and use the DECLARE_WS_TYPE_ID macro
+ Similiar in principle and operation to CONE's MObjectProvider
+ @publishedPartner
+ @released
+ @see MObjectProvider
+*/ {
+public:
+ template<class T>
+ T* ObjectInterface()
+ /** Gets an object of the type defined by the template parameter.
+
+ @return A pointer to an object of the type required, or NULL if none can be
+ found. */
+ { return (T*)ResolveObjectInterface(T::EWsObjectInterfaceId); }
+ /** Gets an object of the type defined by the template parameter.
+ @return A pointer to a const object of the type required, or NULL if none can be
+ found. */
+ template<class T>
+ const T* ObjectInterface() const
+ { return (T*)const_cast<MWsObjectProvider*>(this)->ResolveObjectInterface(T::EWsObjectInterfaceId); }
+ /** Resolve an instance of an interface
+ should be overriden by implementations when they have custom interfaces to provide. */
+ IMPORT_C virtual TAny* ResolveObjectInterface(TUint aTypeId);
+ };
+
+class MWsScreen: public MWsObjectProvider
+/** A destination for a drawing occasion of a CWsGraphicDrawer
+ Used by animation schedulers to update screens
+ @publishedPartner
+ @released
+*/ {
+public:
+ using MWsObjectProvider::ResolveObjectInterface;
+
+private:
+ friend class MWsAnimationScheduler;
+#if !defined(SYMBIAN_GRAPHICS_GCE)
+ /** Called by the MWsAnimationScheduler when scheduled animation is to be serviced
+
+ WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
+
+ @released */
+ virtual void OnAnimation() = 0;
+#else
+ /** Called by the MWsAnimationScheduler when a scheduled animation is to be serviced.
+ @param aFinished If not NULL then this is signalled when the animation has
+ been processed and further animations may be submitted. An animation may be
+ submitted prior to signalling, but the render stage pipeline may not be ready
+ to process it.
+
+ WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
+
+ @released */
+ virtual void OnAnimation(TRequestStatus* aFinished) = 0;
+#endif
+ /** Called by the MWsAnimationScheduler when the screen needs to be redrawn in its entirity
+
+ WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
+
+ @released */
+ virtual void Redraw() = 0;
+ /** Called by MWsAnimationScheduler when the any parts of the screen that potentially contain
+ commands to draw graphics in the list of IDs passed need to be redrawn
+ @param aInvalid the list of IDs that are invalid
+ @return whether the screen did any redrawing
+
+ WARNING: Function for internal use ONLY. Compatibility is not guaranteed in future releases.
+
+ @released */
+ virtual TBool RedrawInvalid(const TArray<TGraphicDrawerId>& aInvalid) = 0;
+ };
+
+class MWsAnimationScheduler: public MWsObjectProvider
+/** A system mechanism for customising the animation timer to a particular hardware variant or to a
+ particular external compositor e.g. an out-of-scene transition engine.
+ The default animation scheduler in WSERV does not understand device-dependant parameters e.g.
+ screen refresh rates
+ @publishedPartner
+ @released
+ to be adapted when WSERV migrates to surfaces
+*/ {
+public:
+ /** Called to schedule an animation event for a screen to occur not before some point
+ A screen may be scheduled to animate several times without actually receiving an animation event from the scheduler
+ If the scheduler cannot honour the request e.g. device constraints, it ignores the request.
+ @param aScreen the screen to recieve the event
+ @param aWhen the point in time the event need not occur before
+ */
+ virtual void ScheduleAnimation(MWsScreen& aScreen,const TTime& aWhen) = 0;
+ /** Called if a screen determines that it no longer needs to schedule any animation
+ @param aScreen the screen not needing to receive any animation events
+ */
+ virtual void UnscheduleAnimation(MWsScreen& aScreen) = 0;
+ /** Called to schedule the redrawing of all screens containing this graphic.
+ The redrawing of affected screens can be deferred by the scheduler.
+ @param aId the ID of the graphic to be redrawn. The graphic itself need not exist
+ (e.g. it has just been deleted, hence the need to redraw all potentially affected screens). */
+ virtual void Invalidate(const TGraphicDrawerId& aId) = 0;
+ /** Called when the Window Server receives a TRawEvent::EInactive event, to signal power-saving */
+ virtual void OnInactive() = 0;
+ /** Called when the Window Server receives a TRawEvent::EActive event, to signal screen back on */
+ virtual void OnActive() = 0;
+
+ /** Called to schedule a redraw for a screen which is out of date
+ A screen may be scheduled to redraw several times without actually receiving aredraw event from the scheduler
+ If this request is ignored then the screen will be draw incorrectly untill a such a request is not ignored.
+ @param aScreen the screen to recieve the event
+ @param aWhen the point in time the event need not occur before
+ */
+ virtual void ScheduleRedraw(MWsScreen& aScreen,const TTime& aWhen) = 0;
+ /** Called to force a previously scheduled redraw for a screen to happen synchronously
+ Used when we are about to loose our ability to perform the redraw correctly.
+ @param aScreen the screen to recieve the event
+ */
+ virtual void DoRedrawNow(MWsScreen& aScreen) = 0;
+
+protected:
+ IMPORT_C void Animate(MWsScreen& aScreen);
+ IMPORT_C void Animate(MWsScreen& aScreen, TRequestStatus* aFinished);
+ IMPORT_C void Redraw(MWsScreen& aScreen);
+ IMPORT_C TBool RedrawInvalid(MWsScreen& aScreen,const TArray<TGraphicDrawerId>& aInvalid);
+ };
+
+/**
+@publishedPartner
+@prototype
+*/
+class CWsMessageData : public CBase, public MWsObjectProvider
+ {
+public:
+ virtual TPtrC8 Data() const = 0;
+ virtual void Release() = 0;
+ IMPORT_C TInt ClientHandle() const;
+ IMPORT_C TInt Id() const;
+ IMPORT_C const CWsGraphicDrawer* Drawer();
+ IMPORT_C void SetClientHandle(TInt aClientHandle);
+ IMPORT_C void SetId( TInt aId);
+ IMPORT_C void SetDrawer(const CWsGraphicDrawer* aDrawer);
+private:
+ friend class CWsGraphicMessageQueue;
+ friend class CWsClient;
+ CWsMessageData* iNext;
+ const CWsGraphicDrawer* iDrawer;
+ TInt iId;
+ TInt iClientHandle;
+ TInt iMWsMessageDataSpare[3];
+ };
+
+class MWsClient: public MWsObjectProvider
+/*** Represents a client session
+ @publishedPartner
+ @released */
+ {
+public:
+ /** Determines if this client has the specified capability */
+ virtual TBool HasCapability(TCapability aCapability) const = 0;
+ /** Retrieves the Secure ID of the client's process */
+ virtual TSecureId SecureId() const = 0;
+ /** Retrieves the Vendor ID of the client's process */
+ virtual TVendorId VendorId() const = 0;
+private:
+ friend class CWsGraphicDrawer;
+ virtual TInt SendMessage(const CWsGraphicDrawer* aOnBehalfOf,const TDesC8& aData) = 0;
+ virtual TInt SendMessage(const CWsGraphicDrawer* aOnBehalfOf,CWsMessageData& aData) = 0;
+ };
+
+class MWsGraphicDrawerEnvironment: public MWsObjectProvider
+/** The environment for a graphic drawer
+@publishedPartner
+@released
+*/ {
+public:
+ /** Locate a graphic by ID
+ @return the graphic with that ID, else NULL if no such graphic exists */
+ virtual const CWsGraphicDrawer* ResolveGraphic(const TGraphicDrawerId& aId) const = 0;
+ /** The number of screens the device has; this is constant for a device */
+ virtual TInt ScreenCount() const = 0;
+ /** Get a particular screen by ordinal
+ @return the screen, or NULL if aIndex is out of bounds */
+ virtual MWsScreen* Screen(TInt aIndex) = 0;
+ /** Get a particular screen by ordinal
+ @return the screen, or NULL if aIndex is out of bounds */
+ virtual const MWsScreen* Screen(TInt aIndex) const = 0;
+ /** Set the animation scheduler; this can only be done once by custom code
+ @return success of overriding the default scheduler */
+ virtual TBool SetCustomAnimationScheduler(MWsAnimationScheduler* aScheduler) = 0;
+ /** Query whether a custom animation scheduler has been set
+ @return ETrue if the custom animation scheduler has been set */
+ virtual TBool HasCustomAnimationScheduler() const = 0;
+ /** Clears a custom animation scheduler
+ @return success if the custom scheduler was set, and hence removed */
+ virtual TBool ClearCustomAnimationScheduler(MWsAnimationScheduler* aCurrentScheduler) = 0;
+protected:
+ friend class CWsGraphicDrawer;
+ /** Schedules all potentially affected parts of the screen to repaint
+ This is called automatically whenever a graphic is added, replaced or removed.
+ However, if a graphic which changes representation during runtime must call this
+ explicitly.
+ Note: this is not a suitable method for animating a graphic. For animation,
+ use MWsGc::Invalidate when the graphic is being drawn to schedule the next
+ animation frame instead.
+ @param aId the ID of the artwork; the artwork may not exist */
+ virtual void Invalidate(const TGraphicDrawerId& aId) = 0;
+public:
+ /** Register to be notified when some events occur.
+ @return KErrNone if successful */
+ virtual TInt RegisterEventHandler(CWsGraphicDrawer* aDrawer, MWsEventHandler* aHandler, TUint32 aEventMask) = 0;
+ /** Unregister from events notification
+ @return KErrNone if successful */
+ virtual TInt UnregisterEventHandler(CWsGraphicDrawer* aDrawer) = 0;
+ /** Register to be notified when some events occur.
+ @return KErrNone if successful
+ @prototype */
+ virtual TInt RegisterWsEventHandler(MWsEventHandler* aHandler, TUint32 aEventMask) = 0;
+ /** Unregister from events notification
+ @return KErrNone if successful
+ @prototype */
+ virtual TInt UnregisterWsEventHandler(MWsEventHandler* aHandler) = 0;
+ /** Logs a message to the wserv logger, if one is loaded
+ @param aPriority The priority of the message - low priority is 1, high is 9
+ @param aFmt The string to log. This may contain a single %d, %x or equivalent
+ @param aParam An integer parameter corresponding to a %d, if present
+ @prototype */
+ virtual void Log(TInt aPriority,const TDesC &aFmt,TInt aParam=0) = 0;
+ /** Registers an interface for releasing memory in low memory situations.
+ The release function may be called as a result of any Alloc or ReAlloc attempts in the window server
+ process.
+ @param aMemoryRelease a callback interface
+ @return KErrNone or a system wide error code
+ @prototype */
+ virtual TInt RegisterMemoryRelease(MWsMemoryRelease * aMemoryRelease) = 0;
+ /** Removes a registration set by RegisterMemoryRelease
+ @param aMemoryRelease the registered release object to remove
+ @prototype */
+ virtual void UnregisterMemoryRelease(MWsMemoryRelease * aMemoryRelease) = 0;
+ };
+
+class MWsGc: public MWsObjectProvider
+/** A destination for a drawing occasion of a CWsGraphicDrawer
+ Used to register invalidation schedules for animation
+ @publishedPartner
+ @released
+*/ {
+public:
+ /** The Client requesting this drawing occasion
+ @return the client
+ @publishedPartner
+ @released */
+ virtual MWsClient& Client() = 0;
+ /** The screen that is currently being drawn to
+ @return the screen
+ @publishedPartner
+ @released */
+ virtual MWsScreen& Screen() = 0;
+#if !defined(SYMBIAN_GRAPHICS_GCE)
+ /** The origin of the GC relative to the screen's origin
+ @return the origin
+ @publishedPartner
+ @released */
+ virtual TPoint GcOrigin() const = 0;
+ /** The clipping region currently being used
+ @return the clipping region
+ @publishedPartner
+ @released */
+ virtual const TRegion& ClippingRegion() = 0;
+ /** The BITGDI graphics context to draw to
+ @publishedPartner
+ @released */
+ virtual CFbsBitGc& BitGc() = 0;
+ /** Saves the state of the GC to an internal buffer. Several GC states can be saved in a FILO.
+ Do not restore a GC (using PopBitGcSettings()) that wasn't properly saved!
+ @return KErrNone if successful, else one of the system-wide error codes. */
+ virtual TInt PushBitGcSettings() = 0;
+ /** Restores the last GC state that was saved. */
+ virtual void PopBitGcSettings() = 0;
+#endif
+ /** The time for the current redraw
+ @publishedPartner
+ @released */
+ virtual const TTime& Now() const = 0;
+ /** Schedule an animation of a rectangle in the future.
+ Scheduled animation doesn't work in low memory conditions or
+ if aRect values fall outside the window area of this animation.
+ @param aRect the rectangle to animate, in the GC's coordinates
+ @param aFromNow the time in microseconds from Now() that the rectangle will be invalid
+ @publishedPartner
+ @released */
+ virtual void ScheduleAnimation(const TRect& aRect,const TTimeIntervalMicroSeconds& aFromNow) = 0;
+ /** Schedule an animation of a rectangle in the future
+ @param aRect the rectangle to animate, in the GC's coordinates
+ @param aFromNow the time in microseconds from Now() that the rectangle will be invalid
+ @param aFreq microseconds between frames that this rectangle will probably be invalid in the future (0 means no such hint is known)
+ @param aStop the duration in microseconds from Now() that the aFreq hint will be valid for (0 means indefinitely)
+ @publishedPartner
+ @released */
+ virtual void ScheduleAnimation(const TRect& aRect,const TTimeIntervalMicroSeconds& aFromNow,const TTimeIntervalMicroSeconds& aFreq,const TTimeIntervalMicroSeconds& aStop) = 0;
+ /** Sets the origin of gc
+ @param aOrigin The new origin of the gc
+ @publishedPartner
+ @prototype */
+ virtual void SetGcOrigin(const TPoint& aOrigin) = 0;
+ };
+
+/** Interface Extension
+*/
+enum
+ {
+ KMWsScreenConfigInterfaceId = 1,
+#if !defined(SYMBIAN_GRAPHICS_GCE)
+ KMWsBackBufferInterfaceId = 2,
+ KMWsFrontBufferInterfaceId = 3,
+#endif
+ KMWsGraphicDrawerMessageAlloc = 4,
+ KMWsGraphicMessageAlloc = 5,
+ KWsGraphicHandleSynchronMessageId = 6,
+ KWsGraphicMessageCallbackInterfaceId = 7,
+ KWsActiveSchedulerDebug = 8,
+#if !defined(SYMBIAN_GRAPHICS_GCE)
+ KWsFlickerFreeBufferObserver = 9,
+#endif
+ KMWsWindow = 10,
+ KWsScreenRedraw = 11,
+ KWsScreenRedrawObserver = 12,
+ KCWsRenderStage = 13,
+ KMWsRenderStageFactory = 14,
+ KMWsMemoryRelease = 15,
+#if !defined(SYMBIAN_GRAPHICS_GCE)
+ KMWsGcClipRect = 16,
+#endif
+ KMWsFader = 17,
+ KMWsPluginManager = 18,
+ KMWsIniFile = 19,
+ KMWsRawEventServer = 20,
+ KMWsPlaceSurfaceId = 21,
+#if defined(SYMBIAN_GRAPHICS_GCE)
+ KMWsTextCursor = 22, // CWsRenderStage Object Extension will yield an MWsTextCursor
+#endif
+ KMWsGraphicsContext = 23, // CWsRenderStage Object Extension will yield an MWsGraphicsContext
+ KMWsCompositionContext = 24, // CWsRenderStage Object Extension will yield an MWsCompositionContext
+ // MWsCompositionContext::CreateLayer will yield a MWsLayer
+ KMWsEventHandler = 25, // CWsRenderStage Object Extension will yield an MWsEventHandler
+ KMWsScreenDevice = 26, // CWsRenderStage Object Extension will yield an MWsScreenDevice
+ KMWsPalette = 27, // CWsRenderStage Object Extension will optionally yield an MWsPalette
+#if defined(SYMBIAN_GRAPHICS_GCE)
+ KMWsUiBufferInterfaceId = 28, // CWsRenderStage Object Extension will optionally yield an MWsUiBuffer
+#endif
+ KMWsDebugBar = 29, // CWsRenderStage Object Extension will optionally yield an MWsDebugBar
+ KMWsDrawableSourceProvider = 30, // CWsRenderStage Object Extension will optionally yield an MWsDrawableSourceProvider
+ KMWsScreenConfigListInterfaceId = 31, //MWsScreen can return this list interface
+ KMWsWindowTreeObserver = 32, // CWsRenderStage Object Extension will optionally yield an MWsWindowTreeObserver
+ KMWsDrawAnnotationObserver = 33, // CWsRenderStage Object Extension will optionally yield an MWsDrawAnnotationObserver
+ KMWsWindowVisibilityNotifier = 34, // CWsRenderStage Object Extension will optionally yield an MWsWindowVisibilityNotifier
+ KMWsWindowTree = 35, // Object Extension to be used by render stages for recovery of MWsWindowTree
+ KMWsScene = 36, // CWsRenderStage Object Extension will yield an MWsScene
+ // MWsScene::CreateSceneElement will yield a MWsElement
+
+ };
+
+class TSurfaceConfiguration;
+
+
+/** Extension to GC to allow surface placement.
+
+@publishedPartner
+@prototype
+@deprecated
+
+NOTE: This interface is deprecated. Do not use!
+*/
+class MWsSurfacePlacement: public MWsObjectProvider
+ {
+ public:
+ DECLARE_WS_TYPE_ID(KMWsPlaceSurfaceId)
+ virtual TInt PlaceSurface(const TSurfaceConfiguration& aConfig)=0;
+ };
+
+/** Current screen mode configuration.Values return from this interface shall not be cached as they
+can change at anytime when wserv changes its screen mode. Plugin can listen to event EScreenSizeModeChanged
+to be notified when it happens.
+
+@publishedPartner
+@released
+*/
+class MWsScreenConfig: public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsScreenConfigInterfaceId)
+
+ /** Get screen display mode */
+ virtual TDisplayMode DisplayMode() const = 0;
+ /** Get physical screen size in pixels */
+ virtual TSize SizeInPixels() const = 0;
+ /** Get screen size in pixels for current screen size mode as defined in wsini */
+ virtual TSize ScreenModeSizeInPixels() const = 0;
+ /** Get frame buffer line pitch */
+ virtual TInt Stride() const = 0;
+ /** Get screen orientation */
+ virtual CFbsBitGc::TGraphicsOrientation Orientation() const = 0;
+ /** Get screen size mode */
+ virtual TInt SizeMode() const = 0;
+ /** Get screen scaling factor */
+ virtual TSize ScalingFactor() const = 0;
+ /** Get screen origin */
+ virtual TPoint Origin() const = 0;
+ /** Get screen scaled origin */
+ virtual TPoint ScaledOrigin() const = 0;
+ };
+
+/** Available list of screen modes as specified during start-up.
+ * This interface can generally be enquired from the MWsScreen instance.
+ * Can be read by render stage to configure its Display Configuration policy.
+ *
+ * Note that mode list is not contiguous, so methods may leave if missing index is requested.
+ **/
+class MWsScreenConfigList: public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsScreenConfigListInterfaceId)
+
+ enum TModeFlags
+ {
+ EDynamic= 0x00000001, //"-1,-1"
+ EHighRes= 0x00000002, //High-res policy mode
+ EDisconnected= 0x00000004, //Mode to use when disconnected
+ EHalDefault= 0x00000008,
+ ETwipsSpecified= 0x00000010,
+ EClientDefinedDigitiserArea= 0x00000020,
+ };
+
+ /** Get list of valid display modes - may be sparse **/
+ virtual TInt GetScreenSizeModeList(RArray<TInt>&aList) const =0;
+ /** Get screen display mode */
+ virtual TDisplayMode DisplayModeL(TInt aIndex) const = 0;
+ /** Get screen size in pixels for current screen size mode as defined in wsini */
+ virtual TSize ScreenModeSizeInPixelsL(TInt aIndex) const = 0;
+ /** Get screen size in twips for current screen size mode as defined in wsini */
+ virtual TSize ScreenModeSizeInTwipsL(TInt aIndex) const = 0;
+ /** Get screen orientation */
+ virtual CFbsBitGc::TGraphicsOrientation OrientationL(TInt aIndex) const = 0;
+ /** Get screen orientation */
+ virtual TInt AvailableOrientationsL(TInt aIndex) const = 0;
+ /** Get screen scaling factor - note this is expected to stay at 1:1 */
+ virtual TSize ScalingFactorL(TInt aIndex) const = 0;
+ /** Get screen origin */
+ virtual TPoint OriginL(TInt aIndex) const = 0;
+ /** Get screen scaled origin - note this is expected to stay at 1:1 */
+ virtual TPoint ScaledOriginL(TInt aIndex) const = 0;
+ /** Get the modeflags for specified mode */
+ virtual TInt ModeFlagsL(TInt aIndex) const = 0;
+
+ };
+
+class MWsWindowTree : public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsWindowTree)
+ virtual void SendTree() const = 0;
+ };
+
+#if !defined(SYMBIAN_GRAPHICS_GCE)
+/** Wserv flickerfree buffer access
+
+@publishedPartner
+@released
+*/
+class MWsBackBuffer: public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsBackBufferInterfaceId)
+ /** Get wserv flickerfree buffer bitmap
+ */
+ virtual CFbsBitmap* GetBitmap() = 0;
+ /** Get default wserv flickerfree buffer drawing context. This will always return the original
+ context not the current context (e.g. not the redirecting context when it is redirected).
+ */
+ virtual CFbsBitGc* GetBitGc() = 0;
+ /** Set wserv flickerfree buffer drawing context to redirect its drawing output. Drawing context must
+ have been activated on a device prior calling this function.
+ @param aBitGc The context where flickerfree buffer drawing output is redirected to. If it is NULL
+ the redirection will be cancelled and default drawing context will be restored.
+ @return KErrNone if successful, otherwise one of system-wide error codes.
+ */
+ virtual TInt SetBitGc(CFbsBitGc* aBitGc) = 0;
+ /** Redirects drawing to another back buffer. Target back buffer must provide bitmap and drawing context
+ which has been activated on a bitmap device.
+ @param aTarget Target back buffer where drawing is redirected to. If it is NULL
+ the redirection will be terminated.
+ @return KErrNone if successful, otherwise one of system-wide error codes.
+ @prototype
+ */
+ virtual TInt RedirectTo(MWsBackBuffer* aTarget) = 0;
+
+ /** Sets the back buffers observer. The observer will be called just before and just after each
+ complete sequence of drawing to the back buffer.
+ @param aObserver The observer handling the callbacks
+ @prototype
+ */
+ virtual void SetObserver(MWsFlickerFreeBufferObserver* aObserver) = 0;
+
+ /** This returns the observer set by SetObserver.
+ @return The observer set by SetObserver, or NULL
+ @prototype
+ */
+ virtual MWsFlickerFreeBufferObserver* Observer() = 0;
+
+ /** Get current wserv flickerfree buffer drawing context. This will return the redirected context
+ when it is set.
+ @return The graphics context to use to draw to the flicker buffer directly.
+ @prototype
+ */
+ virtual CFbsBitGc* GetBitGcCurrent() = 0;
+ };
+
+/** Wserv screen buffer access
+
+@publishedPartner
+@released
+*/
+class MWsFrontBuffer: public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsFrontBufferInterfaceId)
+ /** Get pointer to framebuffer
+ */
+ virtual const TAny* GetBits() = 0;
+ /** Get default wserv screen drawing context. This will always return the original
+ context not the current context (e.g. not the redirecting context when it is redirected).
+ */
+ virtual CFbsBitGc* GetBitGc() = 0;
+ /** Set wserv screen drawing context to redirect its drawing output. Drawing context must
+ have been activated on a device prior calling this function.
+ @param aBitGc The context where screen drawing output is redirected to. If it is NULL
+ the redirection will be cancelled and default drawing context will be restored.
+ @return KErrNone if successful, otherwise one of system-wide error codes.
+ */
+ virtual TInt SetBitGc(CFbsBitGc* aBitGc) = 0;
+ /** Set wserv screen drawing context to redirect its drawing output and perform fullscreen
+ redraw if necessary. Drawing context must have been activated on a device prior calling this
+ function.
+ @param aBitGc The context where screen drawing output is redirected to. If it is NULL
+ the redirection will be cancelled and default drawing context will be restored.
+ @param aInvalidateScreen Flag to tell wserv to perform fullscreen redraw or not
+ @return KErrNone if successful, otherwise one of system-wide error codes.
+ @prototype
+ */
+ virtual TInt SetBitGc(CFbsBitGc* aBitGc, TBool aInvalidateScreen) = 0;
+
+ /** Get current wserv screen drawing context. This will return the redirected context
+ when it is set.
+ @prototype
+ */
+ virtual CFbsBitGc* GetBitGcCurrent() = 0;
+ };
+#endif // !SYMBIAN_GRAPHICS_GCE
+
+/** Optional Memory Allocator for incoming messages
+ To be implemented by CRPs which want to control large incoming messages themselves
+
+@publishedPartner
+@released
+*/
+class MWsGraphicDrawerMessageAlloc: public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsGraphicDrawerMessageAlloc)
+ virtual TAny* Alloc(TInt aSize) = 0;
+ virtual void Free(TAny* aCell) = 0;
+ };
+
+/** Optional Memory Allocator for incoming messages
+ To be implemented by CWsGraphics which want to control large incoming messages themselves
+
+@publishedPartner
+@released
+*/
+class MWsGraphicMessageAlloc: public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsGraphicMessageAlloc)
+ NONSHARABLE_CLASS(MBuffer): public MWsObjectProvider
+ {
+ public:
+ virtual TPtr8 Buffer() = 0;
+ virtual void Release() = 0;
+ };
+ virtual MBuffer* Alloc(TInt aSize) = 0;
+ };
+
+/** For debug purposes only
+
+@publishedPartner
+@prototype
+*/
+class MWsActiveSchedulerDebug: public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KWsActiveSchedulerDebug)
+ virtual TInt64 Requests() const = 0;
+ virtual TInt64 Errors() const = 0;
+ virtual TInt64 Draws() const = 0;
+ virtual TInt64 Total() const = 0;
+ virtual TInt64 Preparing() const = 0;
+ virtual TInt64 Drawing() const = 0;
+ virtual TInt64 Idle() const = 0;
+ };
+
+#if !defined(SYMBIAN_GRAPHICS_GCE)
+/** This forms part of the MWsBackBuffer interface
+
+@publishedPartner
+@prototype
+*/
+class MWsFlickerFreeBufferObserver: public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KWsFlickerFreeBufferObserver)
+ /** Function that gets called before the flicker buffer is updated
+ @param aBuffer The back buffer that is about to be updated
+ @param aRegion The region of the back buffer that is about to be updated
+ */
+ virtual void BeforeUpdate(MWsBackBuffer& aBuffer,const TRegion& aRegion) = 0;
+ /** Function that gets called after the flicker buffer has been updated
+ @param aBuffer The back buffer that has been updated
+ @param aRegion The region of the the back buffer that has been updated
+ */
+ virtual void AfterUpdate(MWsBackBuffer& aBuffer,const TRegion& aRegion) = 0;
+ };
+#endif // !SYMBIAN_GRAPHICS_GCE
+
+/** An interface through which a window can be examined
+This returns non const copies instead of const references, and the
+functions themselves are non const.
+
+@publishedPartner
+@prototype
+*/
+class MWsWindow : public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsWindow)
+public:
+ /** Gets the origin of the window.
+ @return TPoint containing the origin of the window.
+ */
+ virtual TPoint Origin() const = 0;
+ /** Gets the windows rect in absolute co-ordinates.
+ @return TRect
+ */
+ virtual TRect AbsRect() const = 0;
+ /** Gets the size of the window
+ @return TSize containing the size of the window
+ */
+ virtual TSize Size() const = 0;
+ /** Get the window's handle
+ @return TUint32 containing the window's handle.
+ */
+ virtual TUint32 Handle() const = 0;
+ /** Invalidate an area of the window.
+ @param aRect TRect containing the area to invalidate.
+ */
+ virtual void Invalidate(const TRect * aRect = 0) = 0;
+ /** Get the MWsScreen for this window.
+ @return A pointer to the MWsScreen that this window is on.
+ */
+ virtual MWsScreen * WsScreen() const = 0;
+ /** Finds a child of this window by specifiying its handle.
+ @param aHandle A handle to the window to find.
+ @return an MWsWindow pointer to the found window
+ */
+ virtual MWsWindow * FindChildByHandle(TUint32 aHandle) = 0;
+ /**
+ Returns the ordinal priority of the node.
+ */
+ virtual TInt OrdinalPriority() const = 0;
+ /** Get the window's basic area before any clipping is done.
+ For windows with rounded corners, the window area is different from AbsRect.
+ @return a reference to the window area
+ */
+ virtual const TRegion& WindowArea() const = 0;
+ };
+
+/**
+An interface providing information about a window group.
+@publishedPartner
+@prototype
+*/
+class MWsWindowGroup
+ {
+public:
+ virtual TInt Identifier() const = 0;
+ virtual TPtrC Name() const = 0;
+ virtual TBool IsFocusable() const = 0;
+ virtual TInt OrdinalPriority() const = 0;
+ virtual const MWsClient * Client() const = 0;
+ };
+
+/**
+An interface through which a sprite can be examined.
+@publishedPartner
+@prototype
+*/
+class MWsSprite
+ {
+public:
+ enum TSpriteType
+ {
+ EWindowSprite,
+ EFloatingSprite,
+ ECustomTextCursorSprite,
+ EPointerCursorSprite
+ };
+public:
+ virtual TRect Rect() const = 0;
+ virtual TSpriteType SpriteType() const = 0;
+ };
+
+/**
+An interface through which a standard text cursor can be examined.
+@publishedPartner
+@prototype
+*/
+class MWsStandardTextCursor
+ {
+public:
+ /**
+ Cursor type.
+ @return The cursor type; either TTextCursor::ETypeRectangle or TTextCursor::ETypeHollowRectangle.
+ */
+ virtual TInt Type() const = 0;
+ /**
+ Draw rectangle.
+ @return Draw rectangle of the cursor in <b>window</b> co-ordinates.
+ */
+ virtual TRect Rect() const = 0;
+ /**
+ Clipping rectangle in <b>window</b> co-ordinates.
+ @return If a clipping rect has been set, the cursor must be drawn clipped to the returned rectangle.
+ @see MWsWindowTreeObserver::ECursorClipRectSet
+ */
+ virtual TRect ClipRect() const = 0;
+ /**
+ Cursor flags.
+ For possible values, see TTextCursor::EFlags.
+ Note, only flags included by the mask TTextCursor::EUserFlags are provided.
+ @see TTextCursor::EFlags
+ */
+ virtual TUint Flags() const = 0;
+ /**
+ Cursor color.
+ @return The cursor color.
+ */
+ virtual TRgb Color() const = 0;
+ /**
+ Flash time interval.
+ @return If TTextCursor::EFlagNoFlash is set, zero; otherwise the time interval between cursor flash on/off.
+ @see MWsStandardTextCursor::Flags()
+ */
+ virtual TTimeIntervalMicroSeconds32 FlashInterval() const = 0;
+ };
+
+
+/** An interface providing information about a window tree node.
+@publishedPartner
+@prototype
+*/
+class MWsWindowTreeNode
+ {
+public:
+
+ enum TType
+ {
+ EWinTreeNodeClient = EWinTypeClient, //0
+ EWinTreeNodeRoot = EWinTypeRoot, //1
+ EWinTreeNodeGroup = EWinTypeGroup, //2
+ EWinTreeNodeAnim = 16, //3-15 reserved for expansion of TWinType
+ EWinTreeNodeSprite,
+ EWinTreeNodeStandardTextCursor,
+ };
+
+ /**
+ @return The Node Type for this MWsWindowTreeNode. */
+ virtual TType NodeType() const = 0;
+ /**
+ @return A pointer to a MWsWindow interface only when this
+ MWsWindowTreeNode represents a client window
+ (i.e. node type EWinTreeNodeClient), NULL otherwise. */
+ virtual const MWsWindow* Window() const = 0;
+ /**
+ @return A pointer to a MWsSprite interface only when this
+ MWsWindowTreeNode represents a sprite, NULL otherwise. */
+ virtual const MWsSprite* Sprite() const = 0;
+ /**
+ @return A pointer to a MWsStandardTextCursor interface only when this
+ MWsWindowTreeNode represents a standard text cursor, NULL otherwise. */
+ virtual const MWsStandardTextCursor* StandardTextCursor() const = 0;
+ /**
+ @return The MWsWindowGroup this MWsWindowTreeNode belongs to, or "this"
+ MWsWindowTreeNode object if the NodeType is EWinTreeNodeGroup. Will
+ return NULL if this MWsWindowTreeNode is of type EWinTreeNodeRoot. */
+ virtual const MWsWindowGroup* WindowGroup() const = 0;
+ /**
+ @return The parent MWsWindowTreeNode. NULL if current node is of type
+ EWinTreeNodeRoot. The parent of a floating sprite is the root window. */
+ virtual const MWsWindowTreeNode* ParentNode() const = 0;
+ };
+
+/**
+An interface optionally provided by render stages, to observe changes in
+window tree structure, or changes to tree nodes.
+
+@publishedPartner
+@prototype
+*/
+class MWsWindowTreeObserver : public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsWindowTreeObserver)
+
+public:
+ /**
+ This enum encapsulates the set of boolean attribute changes that can be observed
+ using the MWsWindowTreeObserver interface.
+ @see FlagChanged */
+ enum TFlags
+ {
+ /** For a window to be drawn, it needs to be activated and visible and have visible parents.
+ Making a window invisible, implies that its children should be invisible as well.
+ The default value for a window is true. */
+ EVisible = 1,
+ /** Non-fading windows should not be drawn faded regardless of their fade-count.
+ The default value is false. */
+ ENonFading,
+ /** Windows with this attribute enabled uses alpha channel to control its transparency.
+ The default value is false. */
+ EAlphaChannelTransparencyEnabled,
+ /** True if a clipping rect should be applied when drawing a standard text cursor, false otherwise.
+ The default value is false. */
+ ECursorClipRectSet
+ };
+ /**
+ This enum encapsulates the set of non-boolean attribute changes that can be observed
+ using the MWsWindowTreeObserver interface.
+ @see AttributeChanged */
+ enum TAttributes
+ {
+ /** Cursor type.
+ @see MWsStandardTextCursor::Type()*/
+ ECursorType = 1,
+ /** Cursor clip rect.
+ @see MWsStandardTextCursor::ClipRect()*/
+ ECursorClipRect,
+ /** Cursor flags.
+ @see MWsStandardTextCursor::Flags()*/
+ ECursorFlags,
+ /** Cursor color.
+ @see MWsStandardTextCursor::Color()*/
+ ECursorColor,
+ /** Window shape.
+ @see MWsWindow::WindowArea()*/
+ EWindowShape,
+ /** Window group name
+ @see MWsWindowGroup::Name()*/
+ EWindowGroupName
+ };
+ /**
+ Callback to notify that a MWsWindowTreeNode has just been created.
+ Nodes are always added as the left-most sibling as this means they are
+ added in front of exisitng nodes.
+ @param aWindowTreeNode Use to query attributes of the node that has been
+ created. Note that attributes such as e.g. the extent
+ is not yet set by the client when this notification arrives.
+ @param aParent The parent node which aWindowTreeNode has been attached to.
+ Special cases: aParent will be set to NULL for root windows,
+ and set to the root window for floating sprites. */
+ virtual void NodeCreated(const MWsWindowTreeNode& aWindowTreeNode, const MWsWindowTreeNode* aParent) = 0;
+ /**
+ Callback to notify that a node in the window tree is about to be destroyed.
+ @param aWindowTreeNode Use to query attributes of node that's about to be destroyed. */
+ virtual void NodeReleased(const MWsWindowTreeNode& aWindowTreeNode) = 0;
+ /**
+ Callback to notify that a node in the window tree has been activated. This
+ event is only generated for windows which has a visual appearance
+ (i.e. root windows and group windows are not activated). Before a node
+ can be drawn it needs to be activated and visible and have a non-zero size.
+ @param aWindowTreeNode Use to query attributes of node that has been activated. */
+ virtual void NodeActivated(const MWsWindowTreeNode& aWindowTreeNode) = 0;
+ /**
+ Callback to notify that a node's extent has changed. It is guaranteed that there
+ will be at least one NodeExtentChanged notification between the NodeCreated and
+ NodeActivated notifications.
+ Note that when a window has child-windows, those are always moving along with their
+ parent but no NodeExtentChanged notifications will be generated for the child-windows.
+ @param aWindowTreeNode Use to query attributes of the node that has been changed.
+ @param aRect The new rectangle. */
+ virtual void NodeExtentChanged(const MWsWindowTreeNode& aWindowTreeNode, const TRect& aRect) = 0;
+ /**
+ Callback to notify that the ordinal position of a window has changed.
+ @param aWindowTreeNode Use to query attributes of the node that has been changed..
+ @param aNewPos The new position of this node among its siblings. */
+ virtual void SiblingOrderChanged(const MWsWindowTreeNode& aWindowTreeNode, TInt aNewPos) = 0;
+ /**
+ Callback to notify that a node has had one of its boolean attributes changed.
+ @param aWindowTreeNode Use to query attributes of the node that has been changed.
+ @param aFlag The attribute that has changed.
+ @param aNewValue The new value for the attribute. */
+ virtual void FlagChanged(const MWsWindowTreeNode& aWindowTreeNode, TFlags aFlag, TBool aNewValue) = 0;
+ /**
+ Callback to notify that a node has had one of its non-boolean attributes changed.
+ @param aWindowTreeNode Use to identify the affected node and query the new value of the changed attribute.
+ @param aAttribute The attribute that has changed. */
+ virtual void AttributeChanged(const MWsWindowTreeNode& aWindowTreeNode, TAttributes aAttribute) = 0;
+ /**
+ Callback to notify that a window's fade count has been changed.
+ @param aWindowTreeNode Use to query attributes of the node that has been changed.
+ @param aFadeCount Zero means the window is not faded, an integer > 0 means
+ faded if absolute fading is used, or the number of times
+ SetFaded has been called if using counting fade. */
+ virtual void FadeCountChanged(const MWsWindowTreeNode& aWindowTreeNode, TInt aFadeCount) = 0;
+ /**
+ Callback to notify that the user defined transparent region of a window has changed.
+ This information is for optimisation purpose only, the rendering engine don't need
+ to do a full back-to-front rendering behind the opaque region.
+ @param aWindowTreeNode Use to query attributes of the node that has been changed.
+ @param aNewTransparentRegion The transparent region defined by the user. Coordinates
+ are relative the window's origin.
+ @param aNewOpaqueRegion The inverse of aNewTransparentRegion. Coordinates are
+ relative the window's origin. */
+ virtual void TransparentRegionChanged(const MWsWindowTreeNode& aWindowTreeNode, const TRegion& aNewTransparentRegion, const TRegion* aNewOpaqueRegion) = 0;
+ /**
+ Callback to notify that a element has been added to this window.
+ The render stages implementing this interface know when elements are added or removed through MWsElement interface.
+ The purpose of the ElementAdded API is only to enable render stages to make an association between the element and the window.
+ @param aWindowTreeNode Use to query attributes of the node that has been changed.
+ @param aElement Use to query attributes of the new element. */
+ virtual void ElementAdded(const MWsWindowTreeNode& aWindowTreeNode, const MWsElement& aElement) = 0;
+ /**
+ Callback to notify that a window has been moved to another window group.
+ @param aWindowTreeNode Use to query attributes of the node that has been moved.
+ @param aNewWindowGroupNode The window group aWindowTreeNode has been moved to.
+ @see RWindowBase::MoveToGroup */
+ virtual void MovedToWindowGroup(const MWsWindowTreeNode& aWindowTreeNode, const MWsWindowTreeNode& aNewWindowGroupNode) = 0;
+ /**
+ Callback to notify that a window group chain has been formed or extended.
+ @param aParent The window group node to which a child has been attached.
+ @param aChild The window group node that has been attached to aParent. */
+ virtual void WindowGroupChained(const MWsWindowTreeNode& aParent, const MWsWindowTreeNode& aChild) = 0;
+ /**
+ Callback to notify that a window group chain has been broken.
+ Special case: Deleting a window group that is part of a chain will break all chaining
+ after the deleted window group and a notification for each node being dequed will be sent.
+ @param aWindowGroupNode The window group chain is broken directly after this window group. */
+ virtual void WindowGroupChainBrokenAfter(const MWsWindowTreeNode& aWindowGroupNode) = 0;
+ /**
+ Callback to notify that all nodes below aWindowTreeNode should be drawn faded,
+ unless they have the ENonFading flag set.
+ This API is primarily used in conjunction with application frameworks that uses
+ absolute fading rather than counting fade.
+ @param aWindowTreeNode Typically a root window, for which all children should have their
+ fade state set to aFaded.
+ @param aFaded The new fade state to apply. ETrue means faded, EFalse not faded. */
+ virtual void FadeAllChildren(const MWsWindowTreeNode& aWindowTreeNode, TBool aFaded) = 0;
+ };
+
+/**
+An interface optionally provided by render stages, to observe which node in
+the window tree structure that is being rendered.
+
+Text cursors and sprites (floating or non) are annotated by the same APIs.
+
+@publishedPartner
+@prototype
+*/
+class MWsDrawAnnotationObserver : public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsDrawAnnotationObserver)
+ virtual void WindowRedrawStart(const MWsWindowTreeNode& aWindowTreeNode, const TRegion& aRegion) = 0;
+ virtual void WindowRedrawEnd(const MWsWindowTreeNode& aWindowTreeNode) = 0;
+ virtual void WindowAnimRedrawStart(const MWsWindowTreeNode& aWindowTreeNode, const TRegion& aRegion) = 0;
+ virtual void WindowAnimRedrawEnd(const MWsWindowTreeNode& aWindowTreeNode) = 0;
+ virtual void SpriteRedrawStart(const MWsWindowTreeNode& aWindowTreeNode, const TRegion& aRegion) = 0;
+ virtual void SpriteRedrawEnd(const MWsWindowTreeNode& aWindowTreeNode) = 0;
+ virtual void SpriteFlash(const MWsWindowTreeNode& aWindowTreeNode, TBool aFlashOn) = 0;
+ virtual void SegmentRedrawStart(const TRegion& aRegion) = 0;
+ virtual void SegmentRedrawEnd() = 0;
+ };
+
+/**
+Implemented by a WSERV screen to respond to window visibility change notifications sent
+by a render stage implementing MWsWindowVisibilityNotifier.
+
+Immediately after WSERV sucessfully obtains a pointer to MWsWindowVisibilityNotifier,
+WSERV will call MWsWindowVisibilityNotifier::RegisterWindowVisibilityObserver()
+to provide a means for the render stage to notify WSERV, when window visibility changes.
+
+@see MWsWindowVisibilityNotifier
+
+@publishedPartner
+@prototype
+*/
+class MWsWindowVisibilityObserver
+ {
+public:
+ /**
+ Called by the render stage to indicate a window's visible region has changed.
+ After this method has been called, it does not need to be called again until
+ after WSERV calls SendVisibilityChanges.
+ @see MWsWindowVisibilityNotifier::SendVisibilityChanges
+ */
+ virtual void VisibilityChanged() = 0;
+
+ /**
+ Called by the render stage to update a window's visible region.
+ @param aWindow The window whose visible region has changed.
+ @param aVisibleRegion Region of the window not obscured by a fully opaque window. Part of this region could potentially still
+ be obscured by opaque parts of translucent windows on top of aWindow.
+ */
+ virtual void SetWindowVisibility(const MWsWindow& aWindow, const TRegion& aVisibleRegion) = 0;
+ };
+
+/**
+This interface may be implemented by a render stage wishing to take over responsibility
+from WSERV, for updating a window's visible region.
+For example, if a render stage introduces non-WSERV visuals which overlap WSERV windows, WSERV may
+need to receive updated window visibility information.
+
+Immediately after sucessfully obtaining this interface, WSERV will call RegisterWindowVisibilityObserver
+to provide a means for the render stage to notify WSERV when window visibility changes.
+
+@see MWsWindowVisibilityObserver
+
+@publishedPartner
+@prototype
+*/
+class MWsWindowVisibilityNotifier : public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsWindowVisibilityNotifier)
+
+ /**
+ Register to be notified when window visibility changes.
+ @param aWindowVisibilityObserver Observer to be notified.
+ */
+ virtual void RegisterWindowVisibilityObserver(MWsWindowVisibilityObserver* aWindowVisibilityObserver) = 0;
+
+ /**
+ Register to be notified when visibility of a specific window changes.
+ After registering a window, the render stage must immediately provide the
+ current visible region by calling VisibilityChanged() and later, in response
+ to SendVisibilityChanges, call SetWindowVisibility.
+ RegisterWindow and UnregisterWindow are symmetrical operations. For each
+ call to RegisterWindow, there will follow exactly one call to UnregisterWindow.
+ @param aWindow Window for which WSERV needs accurate visibility information.
+ @see MWsWindowVisibilityObserver
+ */
+ virtual void RegisterWindow(const MWsWindow& aWindow) = 0;
+
+ /**
+ Stops visibility notifications being sent for the specified window.
+ RegisterWindow and UnregisterWindow are symmetrical operations. For each
+ call to RegisterWindow, there will follow exactly one call to UnregisterWindow.
+ @param aWindow Window for which visibility notifications are no longer required.
+ */
+ virtual void UnregisterWindow(const MWsWindow& aWindow) = 0;
+
+ /**
+ Asks the render stage to call SetWindowVisibility for each window whose
+ visible region has changed.
+ All visible region changes must be sent before this method returns.
+ @see MWsWindowVisibilityObserver
+ */
+ virtual void SendVisibilityChanges() = 0;
+ };
+
+/** This is an extension of the MWsScreen interface for handling the
+animation aspects of the redraw sequence.
+
+@publishedPartner
+@prototype
+*/
+class MWsScreenRedraw: public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KWsScreenRedraw)
+ /**Sets the screen redraw observer.
+ @param aObserver
+ */
+ virtual void SetObserver(MWsScreenRedrawObserver* aObserver) = 0;
+ /** Checks if there is a redraw in progress or scheduled to take place.
+ @return Returns ETrue if there is an update pending.
+ */
+ virtual TBool IsUpdatePending() = 0;
+ /** Gets the current time according to the animation scheduler
+ @return The current time as a TTime reference.
+ */
+ virtual const TTime& Now() const = 0;
+ /** Schedule a render of the screen without requesting any area of it
+ to be redrawn. Effectively, request a rerun of the render stages.
+ @param aFromNow The time from now, in microseconds, to perform the render.
+ */
+ virtual void ScheduleRender(const TTimeIntervalMicroSeconds& aFromNow) = 0;
+ /** Gets the the animation region for this screen redraw.
+ @return the Region being redrawn during the animation
+ */
+ virtual const TRegion * AnimationRegion() const = 0;
+ /** Updates the screen device to reflect any animation changes
+ */
+ virtual void UpdateDevice() = 0;
+ };
+
+/** This is part of the MWsScreenRedraw interface
+
+@publishedPartner
+@prototype
+*/
+class MWsScreenRedrawObserver: public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KWsScreenRedrawObserver)
+ /** Callback function that gets called after the completion of every redraw sequence.
+ @see MWsScreenRedraw::SetObserver
+ @publishedPartner
+ @prototype
+ */
+ virtual void ScreenUpdated(TInt aScreenNumber) = 0;
+ };
+
+/** This is part of the MGraphicDrawerInterface
+
+@publishedPartner
+@prototype
+*/
+class MWsMemoryRelease : public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsMemoryRelease)
+ enum TMemoryReleaseLevel
+ {
+ ELow,
+ EMedium,
+ EHigh
+ };
+ /** This function is called on registered memory release objects whenever there
+ is insufficient memory available to honour an Alloc or ReAlloc in the window server
+ process. It may be called up to three times, once for each level defined in TLevel.
+ The meaning of each level is open to interpretation by individual implementations.
+ @see MGraphicDrawerEnvironment::RegisterMemoryRelease
+ @param aLevel
+ @return ETrue to indicate that memory was freed, EFalse otherwise.
+ @publishedPartner
+ @prototype
+ */
+ virtual TBool ReleaseMemory(TMemoryReleaseLevel aLevel) = 0;
+ };
+
+#if !defined(SYMBIAN_GRAPHICS_GCE)
+/** This is an extension of the MWsGc. This interface is not used in
+non-NGA configurations. It has been removed from NGA configurations.
+
+@see MWsGc
+@publishedPartner
+@prototype
+*/
+class MWsGcClipRect : public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsGcClipRect)
+ /** Sets a master clipping rectangle on the GC. This will combine with any clipping rectangles
+ specified by the client.
+ @param aRect
+ */
+ virtual void SetClipRect(TRect aRect) = 0;
+ /** Resets the master clipping rectangle specified in SetMasterClipRect
+ */
+ virtual void ResetClipRect() = 0;
+ /** Returns the combined clipping rectangle.
+ @param aRect this is set to the clipping rectangle
+ @param aSet this is true if there is a clipping rectangle in effect
+ */
+ virtual void GetClipRect(TRect & aRect, TBool & aSet) = 0;
+ };
+#endif
+
+/** DebugBarDrawer interface
+
+@publishedPartner
+@prototype
+*/
+class MWsDebugBar : public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsDebugBar)
+
+public:
+ /**
+ * Prints a debug information bar overlaid at the top the screen.
+ *
+ * @param aDebugText An array of text lines.
+ */
+ virtual void DrawDebugBar(const TArray<TPtrC>& aDebugText)=0;
+ };
+
+/** This is an extension of MWsGc and provides plugin fading capabilities for wserv.
+ Default implementation of the plugin uses bitgdi fade.
+
+@see MWsGc
+@publishedPartner
+@prototype
+*/
+class MWsFader : public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsFader)
+
+public:
+ /** Sets any parameters for the fade.
+ @param aData Descriptor containing the fade parameters
+ */
+ virtual void SetFadingParameters(const TDesC8& aData)=0;
+#if !defined(SYMBIAN_GRAPHICS_GCE)
+ /** Perform a fade of the specified region
+ @param aBitGc CFbsBitGc to perform the fading with.
+ @param aRegion TRegion containing the region that the fading is to be performed on.
+ */
+ virtual void FadeArea(CFbsBitGc* aBitGc,const TRegion * aRegion)=0;
+#else
+ /** Perform a fade of the specified region
+ @param aRegion TRegion containing the region that the fading is to be performed on.
+ */
+ virtual void FadeArea(const TRegion& aRegion)=0;
+#endif
+ };
+
+/** Plugin Manager Interface
+@publishedPartner
+@prototype
+*/
+class MWsPluginManager : public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsPluginManager)
+
+ /** Resolve an instance of an interface
+ @param aTypeId
+ */
+ virtual TAny* ResolvePluginInterface(TUint aTypeId) = 0;
+ };
+
+/** An Interface to allow CRP's and CWsPlugins to access the wserv ini file
+@publishedPartner
+@prototype
+*/
+class MWsIniFile : public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsIniFile)
+
+ /** Find the value of the specified variable if present in the window server ini file.
+ @param aVarName TDesC containing the name of the variable to find.
+ @param aResult TPtrC that gets set to the value of the ini variable.
+ @return ETrue if ini file variable found
+ */
+ virtual TBool FindVar(const TDesC &aVarName, TPtrC &aResult) = 0;
+
+ /** Find the value of the specified variable if present in the window server ini file.
+ @param aVarName TDesC containing the name of the variable to find
+ @param aResult TInt that gets set to the value of the ini variable
+ @return ETrue if ini file variable found
+ */
+ virtual TBool FindVar(const TDesC &aVarName, TInt &aResult) = 0;
+
+ /** Find if the variable is present in the ini file
+ @param aVarName TDesC containing the name of the variable to find
+ @return ETrue if ini file variable found
+ */
+ virtual TBool FindVar(const TDesC &aVarName) = 0;
+
+ /** Find if the variable is present in the [SCREENx] section
+ @param aScreen TInt containing the screen number
+ @param aVarName TDesC containing the name of the variable to find
+ @return ETrue if ini file variable found
+ */
+ virtual TBool FindVar( TInt aScreen, const TDesC &aVarName) = 0;
+
+ /** Find the value of the specified variable if present in the [SCREENx] section of the ini file
+ @param aScreen TInt containing the screen number
+ @param aVarName TDesC containing the name of the variable to find
+ @param aResult TInt that gets set to the value of the ini variable
+ @return ETrue if ini file variable found
+ */
+ virtual TBool FindVar( TInt aScreen, const TDesC &aVarName, TInt &aResult) = 0;
+
+ /** Find the value of the specified variable if present in the [SCREENx] section of the ini file
+ @param aScreen TInt containing the screen number
+ @param aVarName TDesC containing the name of the variable to find
+ @param aResult TPtrC that gets set to the value of the ini variable.
+ @return ETrue if ini file variable found
+ */
+ virtual TBool FindVar( TInt aScreen, const TDesC& aVarName, TPtrC &aResult) = 0;
+
+ /** Find if the specified variable is present in the named section of the ini file
+ @param aSection TDesC containing the name of the section
+ @param aVarName TDesC containing the name of the variable to find
+ @return ETrue if ini file variable found
+ */
+ virtual TBool FindVar(const TDesC& aSection, const TDesC &aVarName) = 0;
+
+ /** Find the value of the specified variable in the named section of the ini file.
+ @param aSection TDesC containing the name of the section
+ @param aVarName TDesC containing the name of the variable to find
+ @param aResult TInt that gets set to the value of the ini variable
+ @return ETrue if ini file variable found
+ */
+ virtual TBool FindVar(const TDesC& aSection, const TDesC &aVarName, TInt &aResult) = 0;
+
+ /** Find the value of the specified variable in the named section of the ini file.
+ @param aSection TDesC containing the name of the section
+ @param aVarName TDesC containing the name of the variable to find
+ @param aResult TPtrC that gets set to the value of the ini variable.
+ @return ETrue if ini file variable found
+ */
+ virtual TBool FindVar(const TDesC& aSection, const TDesC& aVarName, TPtrC &aResult) = 0;
+ };
+
+/** An interface that allows CRP's and CWsPlugin derived objects to handle events like anim dll's
+@publishedPartner
+@prototype
+*/
+class MWsRawEventServer : public MWsObjectProvider
+ {
+public:
+ DECLARE_WS_TYPE_ID(KMWsRawEventServer)
+
+ /** Register to be notified when some kernel events occur.
+ @return KErrNone if successful
+ @prototype */
+ virtual TInt RegisterRawEventHandler(MEventHandler* aHandler) = 0;
+ /** Unregister from events notification
+ @prototype */
+ virtual void UnregisterRawEventHandler(MEventHandler* aHandler) = 0;
+ /** Creates a new raw event
+ @prototype */
+ virtual void PostRawEvent(const TRawEvent & aEvent) = 0;
+ /** Creates a new key event
+ @prototype */
+ virtual void PostKeyEvent(const TKeyEvent & aEvent) = 0;
+ };
+
+#endif //#ifndef __WSGRAPHICDRAWERINTEFACE_H__