--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/ServerCore/Inc/alfsrvscreenbuffermanager.h Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,187 @@
+/*
+* Copyright (c) 2006 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: Server side screen buffer manager
+*
+*/
+
+
+
+#ifndef C_ALFSRVSCREENBUFFERMANAGER_H
+#define C_ALFSRVSCREENBUFFERMANAGER_H
+
+#include <e32base.h>
+#include <alf/alfconstants.h>
+#include <uiacceltk/HuiDisplay.h>
+
+class CAlfAppSrvSessionBase;
+class CAlfAppServer;
+
+/**
+ * Server side screen buffer manager
+ *
+ * The class handles off-screen buffer events and observers.
+ *
+ * @since S60 v5.0
+ */
+NONSHARABLE_CLASS(CAlfSrvScreenBufferManager) : public CBase, public MHuiScreenBufferObserver
+ {
+
+public:
+
+ /**
+ * Two-phased constructor.
+ *
+ * @param aAppServer Alf application server instance
+ * @return new instance of CAlfSrvScreenBufferManager.
+ */
+ static CAlfSrvScreenBufferManager* NewL(CAlfAppServer& aAppServer);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CAlfSrvScreenBufferManager();
+
+ /**
+ * Add a new observer.
+ *
+ * @param aSession Client session.
+ * @param aMessage Client message.
+ */
+ void AddScreenBufferObserver(CAlfAppSrvSessionBase* aSession, const RMessage2& aMessage);
+
+ /**
+ * Remove an observer.
+ *
+ * @param aSession Client session.
+ * @param aMessage Client message.
+ */
+ void RemoveScreenBufferObserver(CAlfAppSrvSessionBase* aSession, const RMessage2& aMessage);
+
+ /**
+ * Request a next frame and buffer from Hui display. Unlocks the display.
+ *
+ * @param aSession Client session.
+ * @param aMessage Client message.
+ */
+ void RequestNextBuffer(CAlfAppSrvSessionBase* aSession, const RMessage2& aMessage);
+
+ /**
+ * Draw an off-screen buffer to the internal window.
+ *
+ * @param aSession Client session.
+ * @param aMessage Client message.
+ */
+ void RequestBufferDraw(CAlfAppSrvSessionBase* aSession, const RMessage2& aMessage);
+
+ /**
+ * Request a general screen buffer event.
+ *
+ * @param aSession Client session.
+ * @param aMessage Client message.
+ */
+ void RequestScreenBufferEvent(CAlfAppSrvSessionBase* aSession, const RMessage2& aMessage);
+
+ /**
+ * Remove all observer items related to this client session.
+ *
+ * @param aClientId Client session.
+ */
+ void RemoveScreenBufferObservers(CAlfAppSrvSessionBase* aClientId);
+
+ /**
+ * Trigger a screen buffer event.
+ *
+ * @param aEvent Event to be triggered.
+ * @return Return true if there is a handler for the event.
+ */
+ TBool TriggerScreenBufferEvent(TAlfScreenBufferEvent& aEvent);
+
+private: // internals
+
+ CAlfSrvScreenBufferManager(CAlfAppServer& aAppServer);
+
+ void ConstructL();
+
+ TInt InitScreenBufferDisplay(TAlfScreenBufferBitmaps& aEvent, CHuiDisplay*& aFoundDisplay);
+
+ struct TScreenBufferObserverItem;
+
+ TBool TriggerScreenBufferCompleteEvent(TAlfScreenBufferEvent& aEvent);
+
+ void FindScreenBufferDisplay(TUid aBufferUid, CHuiDisplay** aDisplay);
+
+ TInt RemoveAndReturnScreenBufferObserver(TScreenBufferObserverItem& aItem);
+
+ TBool ScreenBufferObserverExists(const TUid& aScreenBufferUid);
+
+ TInt FindFromScreenBufferArray(
+ const CAlfSrvScreenBufferManager::TScreenBufferObserverItem& aItem,
+ TInt& aIndex) const;
+
+ static TInt InsertFunc(
+ const CAlfSrvScreenBufferManager::TScreenBufferObserverItem& aFirst,
+ const CAlfSrvScreenBufferManager::TScreenBufferObserverItem& aSecond );
+
+private: // From MHuiScreenBufferObserver
+
+ TBool ScreenBufferComplete(TUid aUid, TRect& aDisplayRect, TRect& aDirtyRect);
+
+ void HandleScreenBufferEvent(TUid aUid, TInt aEvent);
+
+private:
+
+ /** The array item struct for screen buffer observers */
+ struct TScreenBufferObserverItem
+ {
+ TScreenBufferObserverItem():
+ iBufferUid(KNullUid),
+ iPriority(0),
+ iFlags(0),
+ iHuiDisplay(NULL),
+ iSession(NULL),
+ iNextEventId(0) {};
+
+ TScreenBufferObserverItem(TUid aBufferUid, TInt aPriority, TInt aFlags, CHuiDisplay* aHuiDisplay, CAlfAppSrvSessionBase* aSession, TInt aNextEventId):
+ iBufferUid(aBufferUid),
+ iPriority(aPriority),
+ iFlags(aFlags),
+ iSession(aSession),
+ iHuiDisplay(aHuiDisplay),
+ iNextEventId(aNextEventId) {};
+
+ /** Screen buffer uid */
+ TUid iBufferUid;
+ /** Screen buffer priority */
+ TInt iPriority;
+ /** Flags */
+ TInt iFlags;
+ /** Pointer to the hui display */
+ CHuiDisplay* iHuiDisplay;
+ /** Session */
+ CAlfAppSrvSessionBase* iSession;
+ /** Message */
+ RMessagePtr2 iMessage;
+ /** Id of the next event, if any */
+ TInt iNextEventId;
+ };
+
+ /** Alf application server object */
+ CAlfAppServer& iAlfAppServer;
+
+ /** Array of screen buffer observers for all sessions and buffers */
+ RArray<CAlfSrvScreenBufferManager::TScreenBufferObserverItem> iScreenBufferObservers;
+
+ };
+
+#endif // C_ALFSRVSCREENBUFFERMANAGER_H