--- a/htiui/HtiServicePlugins/HtiKeyEventServicePlugin/src/MultiTouchPointerEventHandler.cpp Thu Jul 15 18:39:46 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,286 +0,0 @@
-/*
-* 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: Functional implementation of advanced pointer multitouch service
-*
-*/
-
-// INCLUDE FILES
-#include "HtiKeyEventServicePlugin.h"
-#include "MultiTouchPointerEventHandler.h"
-#include "MultiTouchPointerEvent.h"
-
-#include <HtiDispatcherInterface.h>
-#include <HtiLogging.h>
-
-// CONSTANTS
-
-
-// ----------------------------------------------------------------------------
-// CMultiTouchPointerEventHandler::NewL()
-// ----------------------------------------------------------------------------
-CMultiTouchPointerEventHandler* CMultiTouchPointerEventHandler::NewL(MHtiMultiTouchObserver& aObserver)
- {
- HTI_LOG_FUNC_IN( "CMultiTouchPointerEventHandler::NewL" );
- CMultiTouchPointerEventHandler* self = new (ELeave) CMultiTouchPointerEventHandler(aObserver);
- CleanupStack::PushL ( self );
- self->ConstructL();
- CleanupStack::Pop();
- HTI_LOG_FUNC_OUT( "CMultiTouchPointerEventHandler::NewL" );
- return self;
- }
-
-// ----------------------------------------------------------------------------
-// CMultiTouchPointerEventHandler::CMultiTouchPointerEventHandler()
-// ----------------------------------------------------------------------------
-CMultiTouchPointerEventHandler::CMultiTouchPointerEventHandler(MHtiMultiTouchObserver& aObserver)
- :iFinishedCount(0), iObserver(aObserver)
- {
- HTI_LOG_TEXT( "CMultiTouchPointerEventHandler constructor" );
- }
-
-// ----------------------------------------------------------------------------
-// CMultiTouchPointerEventHandler::~CMultiTouchPointerEventHandler()
-// ----------------------------------------------------------------------------
-CMultiTouchPointerEventHandler::~CMultiTouchPointerEventHandler()
- {
- HTI_LOG_TEXT( "CMultiTouchPointerEventHandler destructor" );
- Clear();
- iWsSession.Close();
- }
-
-// ----------------------------------------------------------------------------
-// CMultiTouchPointerEventHandler::ConstructL()
-// ----------------------------------------------------------------------------
-void CMultiTouchPointerEventHandler::ConstructL()
- {
- HTI_LOG_TEXT( "CMultiTouchPointerEventHandler::ConstructL" );
- User::LeaveIfError( iWsSession.Connect() );
- }
-// ----------------------------------------------------------------------------
-// CMultiTouchPointerEventHandler::Clear()
-// ----------------------------------------------------------------------------
-void CMultiTouchPointerEventHandler::Clear()
- {
- HTI_LOG_TEXT( "CMultiTouchPointerEventHandler::Clear" );
- iTouchPointerArray.ResetAndDestroy();
- iFinishedCount=0;
- }
-// ----------------------------------------------------------------------------
-// CMultiTouchPointerEventHandler::NotifyTouchComplete()
-// ----------------------------------------------------------------------------
-void CMultiTouchPointerEventHandler::NotifyTouchComplete(TUint8 aTouchNumber)
- {
- HTI_LOG_FUNC_IN("CMultiTouchPointerEventHandler::NotifyTouchComplete");
-
- iFinishedCount++;
- HTI_LOG_FORMAT( "touch number %d finished", aTouchNumber);
- HTI_LOG_FORMAT( "%d touch finished", iFinishedCount);
-
- if(iTouchPointerArray.Count() == iFinishedCount)
- {
- // notify observer
- iObserver.NotifyMultiTouchComplete();
- }
-
- HTI_LOG_FUNC_OUT("CMultiTouchPointerEventHandler::NotifyTouchComplete");
- }
-// ----------------------------------------------------------------------------
-// CMultiTouchPointerEventHandler::ParsePoint()
-// ----------------------------------------------------------------------------
-TBool CMultiTouchPointerEventHandler::ParsePoint( const TDesC8& aData, TInt& aoffset,
- TInt& aX, TInt& aY, TInt& aZ,
- TTimeIntervalMicroSeconds32& aWait, TTimeIntervalMicroSeconds32& aHold )
- {
- HTI_LOG_FUNC_IN( "CMultiTouchPointerEventHandler::ParsePoint" );
-
- TInt dataLength = aData.Length();
- if ( dataLength-aoffset < 14 )
- return EFalse ;
-
- aX = aData[aoffset] + ( aData[aoffset+1] << 8 );
- aoffset += 2;
-
- aY = aData[aoffset] + ( aData[aoffset+1] << 8 );
- aoffset += 2;
-
- aZ = aData[aoffset] + ( aData[aoffset+1] << 8 );
- aoffset += 2;
-
- aWait = (aData[aoffset] + ( aData[aoffset+1] << 8 )
- + ( aData[aoffset+2] << 16 ) + (aData[aoffset+3] << 24) ) * 1000;
- aoffset += 4;
-
- aHold = ( aData[aoffset] + ( aData[aoffset+1] << 8 )
- + ( aData[aoffset+2] << 16 ) + (aData[aoffset+3] << 24) ) * 1000;
- aoffset += 4;
-
- HTI_LOG_FUNC_OUT( "CMultiTouchPointerEventHandler::ParsePoint" );
- return ETrue;
- }
-// ----------------------------------------------------------------------------
-// CMultiTouchPointerEventHandler::ParseMove()
-// ----------------------------------------------------------------------------
-TBool CMultiTouchPointerEventHandler::ParseMove( const TDesC8& aData, TInt& aoffset,
- TTimeIntervalMicroSeconds32& aDragTime, TInt& aStepCount )
- {
- HTI_LOG_FUNC_IN( "CMultiTouchPointerEventHandler::ParseMove" );
-
- TInt dataLength = aData.Length();
- if ( dataLength-aoffset < 6 )
- return EFalse ;
-
- aDragTime = ( aData[aoffset] + ( aData[aoffset+1] << 8 )
- + ( aData[aoffset+2] << 16 ) + (aData[aoffset+3] << 24) ) * 1000;
- aoffset += 4;
-
- aStepCount = aData[aoffset] + ( aData[aoffset+1] << 8 );
- aoffset += 2;
-
- HTI_LOG_FUNC_OUT( "CMultiTouchPointerEventHandler::ParseMove" );
- return ETrue;
- }
-// ----------------------------------------------------------------------------
-// CMultiTouchPointerEventHandler::HandleMultiTouchL()
-// ----------------------------------------------------------------------------
-TBool CMultiTouchPointerEventHandler::HandleMultiTouchL( const TDesC8& aData )
- {
- HTI_LOG_FUNC_IN( "CMultiTouchPointerEventHandler::HandleMultiTouchL" );
- TBool validparameter=EFalse;
-
- TInt dataLength = aData.Length();
- if ( dataLength < 1 )
- return validparameter;
-
- // Parse the parameters - correct length is already verified
- TInt offset = 0;
-
- TInt touchCount = aData[offset];
- offset += 1;
- HTI_LOG_FORMAT( "Number of touches: %d", touchCount );
- if (touchCount<=0)
- return validparameter;
-
- for(TInt i=0; i<touchCount; i++)
- {
- //check valid data length
- if(dataLength-offset < 3)
- return validparameter;
-
- TInt pointerNumber = aData[offset];
- offset += 1;
- HTI_LOG_FORMAT( "Pointer Number %d", pointerNumber );
-
- TInt pointerCount = aData[offset] + ( aData[offset+1] << 8 );
- offset += 2;
- HTI_LOG_FORMAT( "Number of points: %d", pointerCount );
-
- if (pointerCount == 0 )
- return validparameter;
-
- CMultiTouchPointerEvent* touch = CMultiTouchPointerEvent::NewL(pointerNumber,this);
- CleanupStack::PushL(touch);
- iTouchPointerArray.AppendL(touch);
- CleanupStack::Pop();
-
- TInt lastX, lastY, lastZ, stepCount;
- TTimeIntervalMicroSeconds32 dragTime;
-
- for (TInt j=0;j<pointerCount;j++)
- {
- // read point
- TInt X1, Y1, Z1;
- TTimeIntervalMicroSeconds32 waitTime, holdTime;
- if (!ParsePoint( aData, offset,X1, Y1, Z1, waitTime, holdTime))
- return validparameter;
-
- HTI_LOG_FORMAT( "X coord down = %d", X1 );
- HTI_LOG_FORMAT( "Y coord down = %d", Y1 );
- HTI_LOG_FORMAT( "Z coord down = %d", Z1 );
- HTI_LOG_FORMAT( "Event wait time = %d", waitTime.Int() );
- HTI_LOG_FORMAT( "Point holding time = %d", holdTime.Int() );
-
- if ( waitTime.Int() < 0 || holdTime.Int() < 0 )
- return validparameter;
-
- // add move event from last point to this point
- if (j!=0)
- {
- HTI_LOG_FORMAT( "Point dragging time = %d", dragTime.Int() );
- HTI_LOG_FORMAT( "Step count between two points = %d", stepCount );
- touch->InterpolatePointL(lastX, lastY, lastZ,X1,Y1,Z1,dragTime,stepCount);
- }
-
- // set last point
- lastX=X1;
- lastY=Y1;
- lastZ=Z1;
-
- // wait event
- touch->AddPointL(waitTime,X1,Y1,Z1,TRawEvent::EButton1Down);
-
- // hold event
- touch->AddPointL(holdTime, X1,Y1,Z1,TRawEvent::EPointerMove);
-
- if (j!=pointerCount-1)
- {
- // not last point
- if (!ParseMove(aData, offset, dragTime, stepCount))
- return validparameter;
- if (dragTime.Int() < 0 || stepCount <= 0)
- return validparameter;
- }
- else
- {
- // last point
- touch->AddPointL(0,X1,Y1,Z1,TRawEvent::EButton1Up);
- }
- }
-
- touch->PrintInfo();
-
- }
-
-
- for (TInt i=0;i<touchCount;i++)
- iTouchPointerArray[i]->StartTouch();
-
- validparameter=ETrue;
-
- HTI_LOG_FUNC_OUT( "CMultiTouchPointerEventHandler::HandleMultiTouchL" );
- return validparameter;
- }
-
-void CMultiTouchPointerEventHandler::SimulateEvent(TUint8 aTouchNumber,
- TInt aX, TInt aY, TInt aZ, TRawEvent::TType aEventType)
- {
- HTI_LOG_FUNC_IN( "CMultiTouchPointerEventHandler::SimulateEvent" );
-
- TRawEvent rawEvent;
- rawEvent.SetPointerNumber( aTouchNumber );
- rawEvent.Set( aEventType, aX, aY, aZ);
-
- HTI_LOG_FORMAT( "SimulatePointer touch number=%d ", aTouchNumber );
- HTI_LOG_FORMAT( "SimulatePointer event=%d ", aEventType );
- HTI_LOG_FORMAT( "SimulatePointer X=%d ", aX );
- HTI_LOG_FORMAT( "SimulatePointer Y=%d ", aY );
- HTI_LOG_FORMAT( "SimulatePointer Z=%d", aZ );
-
- iWsSession.SimulateRawEvent( rawEvent );
- iWsSession.Flush();
-
- HTI_LOG_FUNC_OUT( "CMultiTouchPointerEventHandler::SimulateEvent" );
-
- }
-
-// End of file