diff -r 6297cdf66332 -r d39add9822e2 webengine/webkitutils/stmgesturefw/inc/stateengine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/webkitutils/stmgesturefw/inc/stateengine.h Tue Feb 02 00:56:45 2010 +0200 @@ -0,0 +1,180 @@ +/* +* 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 Engine +* +*/ +#ifndef STATEENGINE_H_ +#define STATEENGINE_H_ + +#include "rt_uievent.h" +#include "timerinterface.h" +#include "statemachine_v2.h" +#include "uieventsender.h" +#include "stateengineconfiguration.h" + +namespace stmUiEventEngine +{ + +/*! + * Define THwEvent since we need the point, the type and timestamp to be stored. + * The HW event is used also to handle the timer events so that the wrapper class calling the + * state machine will handle the starting, canceling etc. of the timers and the state machine + * sees the timers as messages. This hopefully makes it easier to keep the core state machine as + * OS agnostic as possible. + */ +class THwEvent +{ +public: + THwEvent() {} ; + THwEvent(const THwEvent& ev): + iType(ev.iType), iPosition(ev.iPosition), + iTime(ev.iTime), iTarget(ev.iTarget), iPointerNumber(ev.iPointerNumber) {} + THwEvent(TStateMachineEvent code, + const TPoint& pos, + TTime time, + void* aTarget, + TInt aPointerNr): + iType(code), iPosition(pos), + iTime(time), iTarget(aTarget), iPointerNumber(aPointerNr) + { + } + + TStateMachineEvent iType ; + TPoint iPosition ; + TTime iTime ; + void* iTarget ; + TInt iPointerNumber ; +}; + + +NONSHARABLE_CLASS( CStateEngine ) : public CBase +{ +public: + /** + * constructor and destructor + */ + CStateEngine(CStateEngineConfiguration* aConfig, MTimerInterface* timerif, int index) ; + + ~CStateEngine() ; + /** + * The methods needed for state machine + */ + void ConsumeEvent() ; + bool IsTouchTimer() ; + bool IsHoldTimer() ; + bool IsSuppressTimer() ; + bool IsTouchTimeArea() ; + bool IsTouchArea() ; + bool IsHoldArea() ; + bool InsideTouchTimeArea() ; + bool InsideTouchArea() ; + bool InsideHoldArea() ; + bool LooksLikeHold() ; + void ErrorEvent() ; + void InitTouchTimer() ; + void InitHoldTimer() ; + void RestartHoldTimer() ; + void InitTouchSuppressTimer() ; + void InitMoveSuppressTimer() ; + void ClearTouchTimer() ; + void ClearHoldTimer() ; + void ClearSuppressTimer() ; + void ProduceTouch() ; + void ProduceMove() ; + void ProduceRelease() ; + void ProduceHold() ; + void RenameToDrag() ; + void PrepareTouchTimeArea() ; + void PrepareTouchArea() ; + void PrepareHoldArea() ; + void SetCurrentPos() ; + void SetGestureStart() ; + void AddToTouch() ; + void AddDraggingPos() ; + void StoreMovePos() ; + + /** + * The event interface + */ + + THwEvent& initEvent() + { + m_hwe.iPointerNumber = m_index; + return m_hwe; + } + + // event returned by initEvent() must initialized first + bool handleStateEvent() ; + + TRect getTouchArea() ; + TRect getHoldArea() ; + bool wasLastMessageFiltered() ; + +private: + bool m_eventConsumed ; + THwEvent m_hwe ; + + bool isNewHoldingPoint() ; + RPointerArray iDragPoints; + MTimerInterface* m_timerif ; + + RArray iTouchPoints; + + // Variables for running the state machine + TStateMachineState m_currentState ; + bool m_isTimerEvent ; // We need to separate the pointer events and the timer events + TPoint m_currentTouchXY ; // This is the touching point + TPoint m_gestureStartXY ; // gesture started at this point + TPoint m_uiEventXY ; // The UI event XY point. + TPoint m_previousPointerEventPosition ; + TPoint m_deltaVector ; + TRect m_touchRect ; + TRect m_holdRect ; + + bool m_wasFiltered ; + void CalculateDelta() ; + void CalculateTouchAverage() ; + void CalculateCurrentVector() ; + TPoint calculateTouchAverageFromPoints() ; + bool InsideArea(const TPoint& point, + const TRect& rect, + TAreaShape shape, + const TPoint& tolerance); + void setTolerance(long fingersize_mm, TPoint& tolerance, TAreaShape shape) ; + + void DebugPrintState(TStateMachineState anextstate) ; + inline static TRect ToleranceRect( const TPoint& aCenterPoint, const TPoint& tolerance) ; + void turnStateMachine() ; + + TPoint m_touchCentre ; + TPoint m_holdCentre ; + + void* m_gestureTarget ; + TTimeIntervalMicroSeconds getInterval() ; + TTime m_lastMessageTime ; + CUiEvent* createUIEventL(TUiEventCode code, const TPoint& aPos) ; + TPoint getPreviousXY(const TPoint& aXY) ; + TPoint m_previousXY ; + bool isTimerMessage() ; + int m_index ; + TUiEventCode m_previousUiGenerated ; + TPoint m_lastFilteredPosition ; + TTime m_lastFilteredMessageTime ; + + CStateEngineConfiguration* m_config ; + +}; +} // namespace + +#endif /* STATEENGINE_H_ */