diff -r 666f914201fb -r 2fe1408b6811 epoc32/include/mw/aknpointereventsuppressor.h --- a/epoc32/include/mw/aknpointereventsuppressor.h Tue Nov 24 13:55:44 2009 +0000 +++ b/epoc32/include/mw/aknpointereventsuppressor.h Tue Mar 16 16:12:26 2010 +0000 @@ -1,1 +1,126 @@ -aknpointereventsuppressor.h +/* +* 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 "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef AKNPOINTEREVENTSUPPRESSOR_H +#define AKNPOINTEREVENTSUPPRESSOR_H + +// INCLUDES +#include + +// CLASS DECLARATION + +/** +* Utility class for removing unwanted pointer events, for instance +* when distinguishing tap events from intended drags. +* +* Usage pattern, where iSuppressor is a CAknPointerEventSuppressor*: +* +* void CMyControl::HandlePointerEventL(const TPointerEvent& aPointerEvent) +* { +* if (iSuppressor->SuppressPointerEvent(aPointerEvent)) +* return; +* +* switch (aPointerEvent.iType) +* { +* case TPointerEvent::EButton1Down: +* iTap = ETrue; +* break; +* case TPointerEvent::EButton1Up: +* if (iTap) +* HandleTapL(aPointerEvent); +* break; +* case TPointerEvent::EDrag: +* iTap = EFalse; +* HandleDragL(aPointerEvent); +* break; +* default: +* break; +* } +* } +* +* @since S60 5.0 +*/ +NONSHARABLE_CLASS(CAknPointerEventSuppressor) : public CBase + { +public: + /** + * Factory function + * + * This creates a pointer event suppressor that will suppress + * drag events while the pointer interaction may be a tap. + */ + IMPORT_C static CAknPointerEventSuppressor* NewL(); + /** + * Destructor. + */ + IMPORT_C ~CAknPointerEventSuppressor(); + + /** + * Tests whether a pointer event should be suppressed. + * + * A control that wants pointer event suppression should feed + * all pointer events to this function. It will return ETrue if + * the pointer event should be ignored by the control. + * Only controls that have unrelated behaviour on tap and drag + * actions need to use pointer event suppression. + * + * If this class is used to suppress drag events during a possible + * tap, and this function does not suppress a drag event, the + * client can be sure that a drag action is happening. + * + * @param aPointerEvent the pointer event which may need to be suppressed. + * @return ETrue if the pointer event should be suppressed, or EFalse if it should be handled. + */ + IMPORT_C TBool SuppressPointerEvent(const TPointerEvent& aPointerEvent); + /** + * Set the maximum time period that drag events should be + * ignored during a pointer interaction. + * + * @param aDuration the maximum duration of a tap action. + */ + IMPORT_C void SetMaxTapDuration(TTimeIntervalMicroSeconds aDuration); + /** + * Set the maximum pointer movement for which drag events + * should be ignored during a pointer interaction. + * + * @param aMoveLimits the pixel movement limits within which a touch action is considered a tap + */ + IMPORT_C void SetMaxTapMove(TSize aMoveLimits); + /** + * Set the minimum time between drag events. + * This can be used to reduce the frequency of drag event reception when + * events are not desired at maximum speed. + * + * @param aInterval the minimum interval between which drag events are wanted + */ + IMPORT_C void SetMinInterDragInterval(TTimeIntervalMicroSeconds aInterval); + +private: + CAknPointerEventSuppressor(); + +private: + TTimeIntervalMicroSeconds iMaxTapDuration; + TSize iMaxTapMove; + TTimeIntervalMicroSeconds iMinInterDragInterval; + TTime iDownTime; + TPoint iDownPos; + TBool iTap; + TTime iLastEventTime; + }; + + +#endif \ No newline at end of file