diff -r 6297cdf66332 -r d39add9822e2 webengine/webkitutils/stmgesturefw/src/gesturehelpereventsender.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/webkitutils/stmgesturefw/src/gesturehelpereventsender.cpp Tue Feb 02 00:56:45 2010 +0200 @@ -0,0 +1,127 @@ +/* +* 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: Gesture helper implementation +* +*/ + +#include "gesturehelpereventsender.h" + +const TInt KEventsQueueGranularity = 4; + +CGestureEventSender* CGestureEventSender::NewL( MStmGestureListener& aObserver ) + { + CGestureEventSender* self = new (ELeave) CGestureEventSender(aObserver); + + return self; + } + +CGestureEventSender::CGestureEventSender( MStmGestureListener& aObserver ) : + CActive(EPriorityUserInput - 1), + iObserver(aObserver), iEvents(KEventsQueueGranularity) + { + CActiveScheduler::Add(this); + } + +CGestureEventSender::~CGestureEventSender() + { + if (IsActive()) + { + Cancel(); + } + + iEvents.Close(); + } + +TInt CGestureEventSender::AddEvent(TStmGestureUid aUid, const MStmGesture* aGestureEvent) + { + TStmGestureEvent event; + if (aGestureEvent) { + event.SetCode(aGestureEvent->gestureUid()); + event.SetCurrentPos(aGestureEvent->getLocation()); + event.SetSpeed(TRealPoint(aGestureEvent->getSpeedX()*1000,aGestureEvent->getSpeedY()*1000));//App needs the speed in pixels/sec + event.SetType(TStmTapType(aGestureEvent->getType())); + event.SetDetails(aGestureEvent->getDetails()); + event.SetGestureDirection(aGestureEvent->getDirection()); + event.SetPinchEndPos(aGestureEvent->getPinchEndPos()); + event.SetGestureState(EGestureEnter); + } + else { + if (aUid != stmGesture::EGestureUidPinch) { + return iEvents.Count(); + } + event.SetCode(aUid); + event.SetGestureState(EGestureExit); + } + + iEvents.Append(event); + if (iState != EBusy) + { + iState = EEventsReady; + } + + if (!IsActive()) + { + Complete(); + } + return iEvents.Count(); + } + +void CGestureEventSender::Complete() + { + TRequestStatus* status = &iStatus; + User::RequestComplete(status, KErrNone); + SetActive(); + } + +void CGestureEventSender::RunL() + { + switch (iState) + { + case EEventsReady: + { + if (iEvents.Count() > 0) + { + TInt count = iEvents.Count(); + for (int i = 0; i < count; i++) + { + TStmGestureEvent& gst = iEvents[i]; + EmitEventL(gst); + } + } + iEvents.Reset(); + iState = ENoEvents; + Complete(); + break; + } + } + } + +void CGestureEventSender::EmitEventL( const TStmGestureEvent& aGesture ) + { + iState = EBusy; + iObserver.HandleGestureEventL(aGesture); + iState = EEventsReady; + } + +TInt CGestureEventSender::RunError(TInt aError) + { + iEvents.Reset(); + return aError; + } + +void CGestureEventSender::DoCancel() + { + iEvents.Reset(); + iState = ENoEvents; + }