diff -r 6297cdf66332 -r d39add9822e2 webengine/webkitutils/stmgesturefw/inc/statemachine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/webkitutils/stmgesturefw/inc/statemachine.h Tue Feb 02 00:56:45 2010 +0200 @@ -0,0 +1,177 @@ +/* +* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: State Machine implementation +* +*/ + +#ifndef STATEMACHINE_H +#define STATEMACHINE_H + +// INCLUDES +#include +#include + +#include +#include "timerinterface.h" +#include "statemachine_v2.h" + +class CCoeEnv; + +namespace stmUiEventEngine +{ + +class CCallbackTimer; +class CStateEngine; +class THwEvent; +class CStateEngineConfiguration; + + +int Distance(int dx, int dy); + +inline int Distance(const TPoint& aP1, const TPoint& aP2) +{ + return Distance(aP1.iX - aP2.iX, aP1.iY - aP2.iY); +} + +// CLASS DECLARATION +/** + * CStateMachine + * + */ +NONSHARABLE_CLASS( CStateMachine ): public CBase, + public MTimerInterface, + public MAknWsEventObserver, + public MStateMachine +{ +public: + /** + * The MStateMachine interface methods + */ + virtual TRect getTouchArea(TInt aPointerNumber) ; + virtual void setTouchTimeArea(long fingersize_mm) ; + virtual void setTouchArea(long fingersize_mm) ; + virtual TAreaShape getTouchAreaShape() ; + virtual void setTouchAreaShape(const TAreaShape shape) ; + virtual unsigned int getTouchTimeout() ; + virtual void setTouchTimeout(unsigned int) ; + virtual TRect getHoldArea(TInt aPointerNumber) ; + virtual void setHoldArea(long fingersize_mm) ; + virtual TAreaShape getHoldAreaShape() ; + virtual void setHoldAreaShape(const TAreaShape shape) ; + virtual unsigned int getHoldTimeout(); + virtual void setHoldTimeout(unsigned int a); + virtual unsigned int getTouchSuppressTimeout() ; + virtual void setTouchSuppressTimeout(unsigned int a) ; + virtual unsigned int getMoveSuppressTimeout() ; + virtual void setMoveSuppressTimeout(unsigned int a) ; + virtual bool addUiEventObserver(MUiEventObserver* observer) ; + virtual bool removeUiEventObserver(MUiEventObserver* observer) ; + virtual bool wasLastMessageFiltered(TInt aPointerNumber) ; + virtual void enableCapacitiveUp(bool enable) ; + virtual void enableLogging(bool aEnable) ; + virtual void enableYadjustment(bool aEnable) ; + virtual int getNumberOfPointers() ; + + /** + * MAknWsEventObserver methods + */ + virtual void HandleWsEventL(const TWsEvent& aEvent, CCoeControl* aDestination) ; + + /* other methods */ + /** + * Pointer event handling in case the messaging should be handled that way, note that the target CCoeControl needs to be givem + */ + void HandlePointerEventL(const TPointerEvent& aPointerEvent, void* target) ; + /** + * Simple toggle changes from handling the messages using ...WsEventL or ...PointerEventL + */ + void EnableWsEventMonitoring(bool aEnable) ; + /** + * Method to handle the TPointerEvent + */ + bool HandleStateEvent(const TPointerEvent& aPointerEvent, void* aTarget, const TTime& aTime) ; + /*! + * Setting the Y adjustment useful in capacitive touch + * Note that there are problems with the adjustment if done at this level, + * the most proper place would be the window server. + */ + + /** + * MTimerInterface methods, these are internal and do not need to be exported + */ + virtual void startTouchTimer(TInt aDelay, TInt aPointerNumber) ; + virtual void cancelTouchTimer(TInt aPointerNumber) ; + virtual void startHoldTimer(TInt aDelay, TInt aPointerNumber) ; + virtual void cancelHoldTimer(TInt aPointerNumber) ; + virtual void startSuppressTimer(TInt aDelay, TInt aPointerNumber) ; + virtual void cancelSuppressTimer(TInt aPointerNumber) ; + +public: + ~CStateMachine(); + static CStateMachine* NewL(); + static CStateMachine* NewLC(); + +private: + CStateMachine(); + void ConstructL(); + + inline static TInt PointerIndex(const TPointerEvent& aPointerEvent); + + /** + * Convert pointer event into our own event format (including timestamp) + */ + void CreateHwEvent(THwEvent& aEvent, + const TPointerEvent& aPointerEvent, + void* aTarget, + const TTime& aTime) ; + + void CreateTimerEvent(THwEvent& aEvent, TStateMachineEvent aEventCode) ; + + /** + * the actual state machines implementing the transitions etc. + */ + CStateEngine* m_impl[KMaxNumberOfPointers] ; + /* + * The configuration for state machines + */ + CStateEngineConfiguration* m_config ; + /*! + * convert window coordinates to screen coordinates. + */ + TPoint screenCoordinates(const TPoint& aPos, void* aGestureTarget) ; + + CCoeEnv* m_coeEnv; + + bool m_WasMessageFiltered ; + bool m_wseventmonitoringenabled ; + bool m_loggingenabled ; + bool m_capacitiveup ; + + int m_3mminpixels ; + bool m_adjustYposition ; + // Use same naming scheme with the timers, and variables and methods + // using macro expansion tricks (with multitouch support starts to look quite ugly): +#define DECLARE_TIMER(x) \ + void start##x##Timer(TInt aPointerNumber) ;\ + CCallbackTimer* m_##x##Timer[KMaxNumberOfPointers] ;\ + void handle##x##Timer(TInt aPointerNumber) ;\ + void cancel##x##Timer(TInt aPointerNumber) + + DECLARE_TIMER(touch) ; + DECLARE_TIMER(hold) ; + DECLARE_TIMER(suppress) ; + +}; +} // namespace +#endif // STATEMACHINE_H