diff -r 6297cdf66332 -r d39add9822e2 webengine/webkitutils/stmgesturefw/inc/pinchgesturerecogniser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/webkitutils/stmgesturefw/inc/pinchgesturerecogniser.h Tue Feb 02 00:56:45 2010 +0200 @@ -0,0 +1,87 @@ +/* +* 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:Pinch Gesture Recognizer +* +*/ + +#ifndef PINCHGESTURERECOGNISER_H_ +#define PINCHGESTURERECOGNISER_H_ + +#include "rt_gestureengineif.h" +#include +#include + +class CCoeControl ; + +namespace stmGesture +{ +/*! + * Recognise pinching gesture. !!! very experimental !!! + * It seems that in capacitive touch in Symbian 9.4 touching with two + * fingers causes fast EDrag events which are far from each other. + * This gesture recogniser tries to use that feature + * to determine when the gestures looks like a pinch. + * Would requires a lot of tuning to be really useful, if at all possible. + * With current implementation it is easy to zoom in but + * almost impossible to zoom out. + */ +NONSHARABLE_CLASS( CPinchGestureRecogniser ): public CGestureRecogniser +{ +public: + static const TGestureUid KUid = EGestureUidPinch; + + static CPinchGestureRecogniser* NewL(MGestureListener* aListener); + + virtual ~CPinchGestureRecogniser(); + /*! + * MGestureRecogniserIf methods + */ + virtual TGestureRecognitionState recognise(int numOfActiveStreams, MGestureEngineIf* ge) ; + virtual void release(MGestureEngineIf* ge) ; + + virtual TGestureUid gestureUid() const + { + return KUid; + } + + /* define the pinch triggering as speed value */ + /* after EHold has been seen, then any move which is faster than this will enter pinch gesture */ + /* note that the value varies depending on techology, speed is measured as pixels / ms */ + void setPinchingSpeed(float aSpeed) __SOFTFP; + +private: + CPinchGestureRecogniser(MGestureListener* aListener) ; + + void calculateZoomingLine() ; + float calculateDistance() ; + int adjustPinchMove(float& aPreviousDistance, float aNewDistance) ; + +private: + bool m_pinching ; + float m_pinchingspeed ; + TPoint m_pinchstart ; + TPoint m_pinchend ; + + float m_m ; + float m_b ; + + float m_ddistance ; + bool m_holdseen ; + TPoint m_holdseenAtPos ; + TTime m_holdseenAtTime ; +}; + +} + +#endif /* PINCHGESTURERECOGNISER_H_ */