diff -r 000000000000 -r 2f259fa3e83a uifw/AvKon/aknphysics/src/aknphysicsdragobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/AvKon/aknphysics/src/aknphysicsdragobserver.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,235 @@ +/* +* Copyright (c) 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: AknPhysics drag event observer +* +*/ + + +#include + +#include "aknphysicsdragobserver.h" +#include "aknphysicsflicktracker.h" +#include "aknphysicsparameterprovider.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// CAknPhysicsDragObserver::NewL +// --------------------------------------------------------------------------- +// +CAknPhysicsDragObserver* CAknPhysicsDragObserver::NewL( + CAknPhysicsParameterProvider* aProvider ) + { + CAknPhysicsDragObserver* self = + CAknPhysicsDragObserver::NewLC( aProvider ); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// CAknPhysicsDragObserver::NewLC +// --------------------------------------------------------------------------- +// +CAknPhysicsDragObserver* CAknPhysicsDragObserver::NewLC( + CAknPhysicsParameterProvider* aProvider ) + { + CAknPhysicsDragObserver* self + = new ( ELeave ) CAknPhysicsDragObserver(); + CleanupStack::PushL( self ); + self->ConstructL( aProvider ); + return self; + } + + +// --------------------------------------------------------------------------- +// CAknPhysicsDragObserver::~CAknPhysicsDragObserver +// --------------------------------------------------------------------------- +// +CAknPhysicsDragObserver::~CAknPhysicsDragObserver() + { + delete iVerticalTracker; + delete iHorizontalTracker; + } + + +// --------------------------------------------------------------------------- +// CAknPhysicsDragObserver::RegisterEventPosition +// --------------------------------------------------------------------------- +// +void CAknPhysicsDragObserver::RegisterEventPosition( + const TPointerEvent* aEvent ) + { + if ( aEvent->iType == TPointerEvent::EButton1Down || + ( !iPointerDown && aEvent->iType == TPointerEvent::EDrag ) ) + { + HandlePointerDownEvent( aEvent->iPosition ); + iPointerDown = ETrue; + } + else if ( aEvent->iType == TPointerEvent::EDrag ) + { + HandlePointerDragEvent( aEvent->iPosition ); + } + else if ( aEvent->iType == TPointerEvent::EButton1Up ) + { + if ( iPointerDown ) + { + HandlePointerUpEvent( aEvent->iPosition ); + } + else + { + Reset(); + } + iPointerDown = EFalse; + } + } + + +// --------------------------------------------------------------------------- +// CAknPhysicsDragObserver::ChangedDragDistance +// --------------------------------------------------------------------------- +// +TPoint CAknPhysicsDragObserver::ChangedDragDistance() const + { + TPoint dragDistance; + dragDistance.iY = iVerticalTracker->FlickStartCoordinate() - iUpPosition.iY; + dragDistance.iX = iHorizontalTracker->FlickStartCoordinate() - iUpPosition.iX; + return dragDistance; + } + + +// --------------------------------------------------------------------------- +// CAknPhysicsDragObserver::ChangedVerticalDragMoveTime +// --------------------------------------------------------------------------- +// +TInt CAknPhysicsDragObserver::ChangedVerticalDragMoveTime() const + { + if ( iVerticalTracker ) + { + return iVerticalTracker->FlickMoveTime(); + } + return 0; + } + + +// --------------------------------------------------------------------------- +// CAknPhysicsDragObserver::ChangedHorizontalDragMoveTime +// --------------------------------------------------------------------------- +// +TInt CAknPhysicsDragObserver::ChangedHorizontalDragMoveTime() const + { + if ( iHorizontalTracker ) + { + return iHorizontalTracker->FlickMoveTime(); + } + return 0; + } + + +// --------------------------------------------------------------------------- +// CAknPhysicsDragObserver::DragChanged +// --------------------------------------------------------------------------- +// +TInt CAknPhysicsDragObserver::DragChanged() const + { + TBool changed( EFalse ); + if ( iVerticalTracker ) + { + changed = iVerticalTracker->FlickStartCoordinate() != iDownPosition.iY; + } + if ( !changed && iHorizontalTracker ) + { + changed = iHorizontalTracker->FlickStartCoordinate() != iDownPosition.iX; + } + return changed; + } + + +// --------------------------------------------------------------------------- +// CAknPhysicsDragObserver::CAknPhysicsDragObserver +// --------------------------------------------------------------------------- +// +CAknPhysicsDragObserver::CAknPhysicsDragObserver() + { + } + + +// --------------------------------------------------------------------------- +// CAknPhysicsDragObserver::ConstructL +// --------------------------------------------------------------------------- +// +void CAknPhysicsDragObserver::ConstructL( + CAknPhysicsParameterProvider* aProvider ) + { + iVerticalTracker = CAknPhysicsFlickTracker::NewL( aProvider ); + iHorizontalTracker = CAknPhysicsFlickTracker::NewL( aProvider ); + } + + +// --------------------------------------------------------------------------- +// CAknPhysicsDragObserver::HandlePointerDownEvent +// --------------------------------------------------------------------------- +// +void CAknPhysicsDragObserver::HandlePointerDownEvent( + const TPoint& aPosition ) + { + iDownPosition = aPosition; + iUpPosition = TPoint(); + iVerticalTracker->InitTracker( aPosition.iY ); + iHorizontalTracker->InitTracker( aPosition.iX ); + } + + +// --------------------------------------------------------------------------- +// CAknPhysicsDragObserver::HandlePointerDragEvent +// --------------------------------------------------------------------------- +// +void CAknPhysicsDragObserver::HandlePointerDragEvent( + const TPoint& aPosition ) + { + if ( iVerticalTracker ) + { + iVerticalTracker->DragChanged( aPosition.iY ); + } + if ( iHorizontalTracker ) + { + iHorizontalTracker->DragChanged( aPosition.iX ); + } + } + + +// --------------------------------------------------------------------------- +// CAknPhysicsDragObserver::HandlePointerUpEvent +// --------------------------------------------------------------------------- +// +void CAknPhysicsDragObserver::HandlePointerUpEvent( + const TPoint& aPosition ) + { + HandlePointerDragEvent( aPosition ); + iUpPosition = aPosition; + } + + +// --------------------------------------------------------------------------- +// CAknPhysicsDragObserver::Reset +// --------------------------------------------------------------------------- +// +void CAknPhysicsDragObserver::Reset() + { + iDownPosition.SetXY( 0, 0 ); + iUpPosition.SetXY( 0, 0 ); + iVerticalTracker->InitTracker( 0 ); + iHorizontalTracker->InitTracker( 0 ); + } +