diff -r 000000000000 -r 5d03bc08d59c windowing/windowserver/nonnga/SERVER/pointer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/windowing/windowserver/nonnga/SERVER/pointer.h Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,165 @@ +// Copyright (c) 2006-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: +// WsPointer and associated classes definitions +// +// + +#ifndef __POINTER_H__ +#define __POINTER_H__ + +#include "server.h" + +class CWsPointerTimer : public CTimer + { +public: + CWsPointerTimer(); + void ConstructL(); +private: + void RunL(); + }; + +class WsPointer + { + enum {EPointerUpdateGapInMicroSeconds=50000}; +public: + static void InitStaticsL(); + static void DeleteStatics(); + static inline TPointerCursorMode PointerCursorMode(); + static inline void SetPointerCursorMode(TPointerCursorMode aMode); + static inline TPoint PointerCursorPos(); + static void SetPointerCursorPos(TPoint aPos); + static void ReLogCurrentWindow(); + static void ReLogCurrentWindow(TPoint &aPos, TPoint &aParentPos, const CWsWindowGroup *aForceInGroup); + static void ReLogWindow(const CWsWindow *aWin); + static void WindowDisconected(const CWsWindow *deletedWindow); + static void ClaimGrab(const CWsWindow *aWindow, TBool aSendUpEvent); +#if defined(__WINS__) + static TBool PreProcessEvent(TRawEvent &aRawEvent,TBool aFromHardware=EFalse); +#else + static TBool PreProcessEvent(TRawEvent &aRawEvent); +#endif + static void ProcessEvent(TPointerEvent::TType type, const TPoint &aPos, TUint aModifiers + ,const CWsWindowGroup *aForceInGroup,TBool aNatural); + static void GetDoubleClickSettings(TTimeIntervalMicroSeconds32 &aTime, TInt &aDistance); + static void SetDoubleClick(const TTimeIntervalMicroSeconds32 &aTime, TInt aDistance); + static void UpdatePointerCursor(); + static void RequestPointerRepeatEvent(CWsWindow *aWindow, TTimeIntervalMicroSeconds32 aTime,const TRect &aRect); + static void CancelPointerRepeatEventRequest(); + static void RepeatTimerCompleted(); + static TEventQueueWalkRet PointerRepeatPurgeCheck(const TWsEvent *aEvent); + static void UnmatchedDownPurged(TPointerEvent::TType aPointerType, TUint aHandle); + static void TimerExpired(); + static inline TBool XyInput(); +#if defined(__WINS__) + static void SetXyInputType(TXYInputType aXyInputType); +#endif +private: + static void PointerCursorUpdateCheck(); + static void ProcessForegroundCheck(); + static void RestrictPos(TPoint& aPos,TBool aWithinDrawableArea=ETrue); + static void ProcessEvent(TWsEvent& aEvent); + static TBool PointerEventRepeatCheck(const TWsEvent *aEvent, TUint32 aHandle); + static void SendEnterExitEvent(TEventCode aType); + static void SetCurrentWindow(const CWsWindow *aWin); + static void ProcessPointerEvent(TWsEvent& aEvent); + static TBool QueuePointerEvent(const CWsWindow *aWindow, TWsEvent &event); + static TBool CheckDownEventPurged(TPointerEvent::TType aType); + static void UpdatePointerCursorTo(CWsPointerCursor* aNewCursor); + static CWsPointerCursor* CalculatePointerCursor(); + static inline TBool MovesAvailable(); + static inline TBool DeltaMouse(); +private: + static TPoint iCurrentPos; + static TBool iPointerDown; // Maps onto button1 down on multi button systems + static TXYInputType iXyInputType; + static const CWsWindow *iCurrentWindow; + static const CWsWindow *iGrabWindow; + static const CWsWindow *iActualWinPointerIsOver; + static const CWsWindow *iPrevClickWindow; + static TPoint iPrevClickPos; + static TTime iPrevClickTime; + static TPointerEvent::TType iPrevClickEventType; + static TTimeIntervalMicroSeconds32 iDoubleClickMaxInterval; + static TInt iDoubleClickMaxDistance; + static CWsPointerCursor *iCursorSprite; + static CWsPointerTimer *iRepeatTimer; + static TPointerCursorMode iPointerCursorMode; + static CWsWindow *iRepeatWindow; + static TRect iRepeatRect; + static TUint iLastUnmatchedDown1; + static TUint iLastUnmatchedDown2; + static TUint iLastUnmatchedDown3; + static TBool iTimerQueued; + static TBool iUpdateRequired; + static CPeriodic *iPeriodicTimer; + static CWsRootWindow* iRootWindow; // uses + }; + +class CWsPointerBuffer : public CBase + { +public: + ~CWsPointerBuffer(); + static void ConnectL(CWsClientWindow *aWindow, TInt aMaxPoints, TUint aFlags); + static void Disconnect(CWsClientWindow *aWindow); + static void PointerEvent(CWsClientWindow *aWindow,const TPoint &aPoint); + static void RetrievePointerMoveBuffer(CWsClientWindow *aWindow,TInt aMaxPoints); + static void DiscardPointerMoveBuffer(CWsClientWindow *aWindow); + static void DiscardPointerMoveBuffer(TUint aHandle); +private: + static void AdjustMaxSizeL(); + static void Reset(); + static void SignalBufferReady(); +private: + CWsClientWindow *iWindow; + TInt iMaxPoints; + TInt iFlags; + TSglQueLink iQue; + static TBool iSignalled; + static CWsPointerBuffer *iCurrentBuffer; + static CCirBuf *iPointerBuffer; + static TSglQue iList; + }; + + +inline void WsPointer::SetPointerCursorMode(TPointerCursorMode aMode) + { + iPointerCursorMode=aMode; + } + +inline TPointerCursorMode WsPointer::PointerCursorMode() + { + return iPointerCursorMode; + } + +inline TPoint WsPointer::PointerCursorPos() + { + return iCurrentPos; + } + +inline TBool WsPointer::XyInput() + { + return iXyInputType!=EXYInputNone; + } + +inline TBool WsPointer::MovesAvailable() + { + return (iXyInputType!=EXYInputNone && iXyInputType!=EXYInputPointer); + } + +inline TBool WsPointer::DeltaMouse() + { + return (iXyInputType==EXYInputDeltaMouse); + } + +#endif