webengine/webkitutils/stmgesturefw/src/gesturehelpereventsender.cpp
branchRCL_3
changeset 37 ac77f89b1d9e
parent 34 220a17280356
equal deleted inserted replaced
36:c711bdda59f4 37:ac77f89b1d9e
     9 * Initial Contributors:
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    10 * Nokia Corporation - initial contribution.
    11 *
    11 *
    12 * Contributors:
    12 * Contributors:
    13 *
    13 *
    14 * Description:  Gesture helper implementation
    14 * Description:  Gesture event sender implementation
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 #include "gesturehelpereventsender.h"
    18 #include "gesturehelpereventsender.h"
    19 
       
    20 const TInt KEventsQueueGranularity = 4;
       
    21 
    19 
    22 CGestureEventSender* CGestureEventSender::NewL( MStmGestureListener& aObserver )
    20 CGestureEventSender* CGestureEventSender::NewL( MStmGestureListener& aObserver )
    23     {
    21     {
    24     CGestureEventSender* self = new (ELeave) CGestureEventSender(aObserver);
    22     CGestureEventSender* self = new (ELeave) CGestureEventSender(aObserver);
    25     
    23     
    26     return self;
    24     return self;
    27     }
    25     }
    28 
    26 
    29 CGestureEventSender::CGestureEventSender( MStmGestureListener& aObserver ) : 
    27 CGestureEventSender::CGestureEventSender( MStmGestureListener& aObserver ) 
    30                                           CActive(EPriorityUserInput - 1),
    28     :iObserver(aObserver)
    31                                           iObserver(aObserver), iEvents(KEventsQueueGranularity)
       
    32     { 
    29     { 
    33     CActiveScheduler::Add(this);
       
    34     }
    30     }
    35 
    31 
    36 CGestureEventSender::~CGestureEventSender()
    32 CGestureEventSender::~CGestureEventSender()
    37     {
    33     {
    38     if (IsActive()) 
       
    39         {
       
    40         Cancel();
       
    41         }
       
    42 
       
    43     iEvents.Close();
       
    44     }
    34     }
    45 
    35 
    46 TInt CGestureEventSender::AddEvent(TStmGestureUid aUid, const MStmGesture* aGestureEvent)
    36 void CGestureEventSender::AddEvent(TStmGestureUid aUid, const MStmGesture* aGestureEvent)
    47     {
    37 {
    48     TStmGestureEvent event;
    38     TStmGestureEvent event;
    49     if (aGestureEvent) {
    39     if (aGestureEvent) {
    50         event.SetCode(aGestureEvent->gestureUid());
    40         event.SetCode(aGestureEvent->gestureUid());
    51         event.SetCurrentPos(aGestureEvent->getLocation());
    41         event.SetCurrentPos(aGestureEvent->getLocation());
    52         event.SetSpeed(TRealPoint(aGestureEvent->getSpeedX()*1000,aGestureEvent->getSpeedY()*1000));//App needs the speed in pixels/sec
    42         event.SetSpeed(TRealPoint(aGestureEvent->getSpeedX()*1000,aGestureEvent->getSpeedY()*1000));//App needs the speed in pixels/sec
    56         event.SetPinchEndPos(aGestureEvent->getPinchEndPos());
    46         event.SetPinchEndPos(aGestureEvent->getPinchEndPos());
    57         event.SetGestureState(EGestureEnter);
    47         event.SetGestureState(EGestureEnter);
    58     }
    48     }
    59     else {
    49     else {
    60         if (aUid != stmGesture::EGestureUidPinch) {
    50         if (aUid != stmGesture::EGestureUidPinch) {
    61             return iEvents.Count();
    51             return;
    62         }    
    52         }    
    63         event.SetCode(aUid);
    53         event.SetCode(aUid);
    64         event.SetGestureState(EGestureExit);
    54         event.SetGestureState(EGestureExit);
    65     }
    55     }
    66         
    56         
    67     iEvents.Append(event);
    57     EmitEventL(event);
    68     
       
    69     if (event.Code() == stmGesture::EGestureUidTap) {
    58     if (event.Code() == stmGesture::EGestureUidTap) {
    70         event.SetCode(stmGesture::EGestureUidRelease);
    59         event.SetCode(stmGesture::EGestureUidRelease);
    71         iEvents.Append(event);
    60         EmitEventL(event);
    72     }
    61     }
    73 
    62 }
    74     if (iState != EBusy)
       
    75         {
       
    76         iState = EEventsReady;
       
    77         }
       
    78     
       
    79     if (!IsActive()) 
       
    80         {
       
    81         Complete();
       
    82         }
       
    83     return iEvents.Count();
       
    84     }
       
    85 
       
    86 void CGestureEventSender::Complete()
       
    87     {
       
    88     TRequestStatus* status = &iStatus;
       
    89     User::RequestComplete(status, KErrNone);
       
    90     SetActive();
       
    91     }
       
    92 
       
    93 void CGestureEventSender::RunL()
       
    94     {
       
    95     switch (iState)
       
    96         {
       
    97         case EEventsReady:
       
    98             {
       
    99             if (iEvents.Count() > 0)
       
   100                 {
       
   101                 TInt count = iEvents.Count();
       
   102                 for (int i = 0;  i < count; i++)
       
   103                     {
       
   104                     TStmGestureEvent& gst = iEvents[i];
       
   105                     EmitEventL(gst);
       
   106                     }
       
   107                 }
       
   108             iEvents.Reset();
       
   109             iState = ENoEvents;
       
   110             break;
       
   111             }
       
   112         }
       
   113     }
       
   114 
    63 
   115 void CGestureEventSender::EmitEventL( const TStmGestureEvent& aGesture )
    64 void CGestureEventSender::EmitEventL( const TStmGestureEvent& aGesture )
   116     {
    65 {
   117     iState = EBusy;
       
   118     iObserver.HandleGestureEventL(aGesture);
    66     iObserver.HandleGestureEventL(aGesture);
   119     iState = EEventsReady;
    67 }
   120     }
       
   121 
       
   122 TInt CGestureEventSender::RunError(TInt aError)
       
   123     {
       
   124     iEvents.Reset();
       
   125     return aError;
       
   126     }
       
   127 
       
   128 void CGestureEventSender::DoCancel()
       
   129     {
       
   130     iEvents.Reset();
       
   131     iState = ENoEvents;
       
   132     }