[Tizen] Revert "Use touch consumed return to set whether we process a gesture or...
[platform/core/uifw/dali-core.git] / dali / internal / event / events / event-processor.cpp
old mode 100644 (file)
new mode 100755 (executable)
index 06250ba..611d6f7
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 // INTERNAL INCLUDES
 #include <dali/integration-api/debug.h>
 #include <dali/integration-api/events/event.h>
+#include <dali/integration-api/events/hover-event-integ.h>
 #include <dali/integration-api/events/key-event-integ.h>
-#include <dali/integration-api/events/wheel-event-integ.h>
 #include <dali/integration-api/events/touch-event-integ.h>
-#include <dali/integration-api/events/hover-event-integ.h>
-#include <dali/internal/event/events/gesture-event-processor.h>
+#include <dali/integration-api/events/wheel-event-integ.h>
 #include <dali/internal/common/core-impl.h>
 #include <dali/internal/event/common/notification-manager.h>
+#include <dali/internal/event/events/gesture-event-processor.h>
 
 using Dali::Integration::Event;
 
 namespace Dali
 {
-
 namespace Internal
 {
-
 namespace // unnamed namespace
 {
-
-static const std::size_t MAX_MESSAGE_SIZE = std::max( sizeof(Integration::TouchEvent),
-                                                      std::max( sizeof(Integration::KeyEvent), sizeof(Integration::WheelEvent) ) );
+static const std::size_t MAX_MESSAGE_SIZE = std::max(sizeof(Integration::TouchEvent),
+                                                     std::max(sizeof(Integration::KeyEvent), sizeof(Integration::WheelEvent)));
 
 static const std::size_t INITIAL_MIN_CAPACITY = 4;
 
@@ -49,88 +46,88 @@ static const std::size_t INITIAL_BUFFER_SIZE = MAX_MESSAGE_SIZE * INITIAL_MIN_CA
 
 } // unnamed namespace
 
-EventProcessor::EventProcessor( Scene& scene, GestureEventProcessor& gestureEventProcessor )
-: mScene( scene ),
-  mTouchEventProcessor( scene ),
-  mHoverEventProcessor( scene ),
-  mGestureEventProcessor( gestureEventProcessor ),
-  mKeyEventProcessor( scene ),
-  mWheelEventProcessor( scene ),
-  mEventQueue0( INITIAL_BUFFER_SIZE ),
-  mEventQueue1( INITIAL_BUFFER_SIZE ),
-  mCurrentEventQueue( &mEventQueue0 )
+EventProcessor::EventProcessor(Scene& scene, GestureEventProcessor& gestureEventProcessor)
+: mScene(scene),
+  mTouchEventProcessor(scene),
+  mHoverEventProcessor(scene),
+  mGestureEventProcessor(gestureEventProcessor),
+  mKeyEventProcessor(scene),
+  mWheelEventProcessor(scene),
+  mEventQueue0(INITIAL_BUFFER_SIZE),
+  mEventQueue1(INITIAL_BUFFER_SIZE),
+  mCurrentEventQueue(&mEventQueue0)
 {
 }
 
 EventProcessor::~EventProcessor()
 {
-  for( MessageBuffer::Iterator iter = mEventQueue0.Begin(); iter.IsValid(); iter.Next() )
+  for(MessageBuffer::Iterator iter = mEventQueue0.Begin(); iter.IsValid(); iter.Next())
   {
     // Call virtual destructor explictly; since delete will not be called after placement new
-    Event* event = reinterpret_cast< Event* >( iter.Get() );
+    Event* event = reinterpret_cast<Event*>(iter.Get());
     event->~Event();
   }
 
-  for( MessageBuffer::Iterator iter = mEventQueue1.Begin(); iter.IsValid(); iter.Next() )
+  for(MessageBuffer::Iterator iter = mEventQueue1.Begin(); iter.IsValid(); iter.Next())
   {
     // Call virtual destructor explictly; since delete will not be called after placement new
-    Event* event = reinterpret_cast< Event* >( iter.Get() );
+    Event* event = reinterpret_cast<Event*>(iter.Get());
     event->~Event();
   }
 }
 
-void EventProcessor::QueueEvent( const Event& event )
+void EventProcessor::QueueEvent(const Event& event)
 {
-  switch( event.type )
+  switch(event.type)
   {
     case Event::Touch:
     {
       typedef Integration::TouchEvent DerivedType;
 
       // Reserve some memory inside the message queue
-      uint32_t* slot = mCurrentEventQueue->ReserveMessageSlot( sizeof( DerivedType ) );
+      uint32_t* slot = mCurrentEventQueue->ReserveMessageSlot(sizeof(DerivedType));
 
       // Construct message in the message queue memory; note that delete should not be called on the return value
-      new (slot) DerivedType( static_cast<const DerivedType&>(event) );
+      new(slot) DerivedType(static_cast<const DerivedType&>(event));
 
       break;
     }
 
     case Event::Hover:
     {
-      typedef Integration::HoverEvent DerivedType;
+      using DerivedType = Integration::HoverEvent;
 
       // Reserve some memory inside the message queue
-      uint32_t* slot = mCurrentEventQueue->ReserveMessageSlot( sizeof( DerivedType ) );
+      uint32_t* slot = mCurrentEventQueue->ReserveMessageSlot(sizeof(DerivedType));
 
       // Construct message in the message queue memory; note that delete should not be called on the return value
-      new (slot) DerivedType( static_cast<const DerivedType&>(event) );
+      new(slot) DerivedType(static_cast<const DerivedType&>(event));
 
       break;
     }
 
     case Event::Key:
     {
-      typedef Integration::KeyEvent DerivedType;
+      using DerivedType = Integration::KeyEvent;
 
       // Reserve some memory inside the message queue
-      uint32_t* slot = mCurrentEventQueue->ReserveMessageSlot( sizeof( DerivedType ) );
+      uint32_t* slot = mCurrentEventQueue->ReserveMessageSlot(sizeof(DerivedType));
 
       // Construct message in the message queue memory; note that delete should not be called on the return value
-      new (slot) DerivedType( static_cast<const DerivedType&>(event) );
+      new(slot) DerivedType(static_cast<const DerivedType&>(event));
 
       break;
     }
 
     case Event::Wheel:
     {
-      typedef Integration::WheelEvent DerivedType;
+      using DerivedType = Integration::WheelEvent;
 
       // Reserve some memory inside the message queue
-      uint32_t* slot = mCurrentEventQueue->ReserveMessageSlot( sizeof( DerivedType ) );
+      uint32_t* slot = mCurrentEventQueue->ReserveMessageSlot(sizeof(DerivedType));
 
       // Construct message in the message queue memory; note that delete should not be called on the return value
-      new (slot) DerivedType( static_cast<const DerivedType&>(event) );
+      new(slot) DerivedType(static_cast<const DerivedType&>(event));
 
       break;
     }
@@ -142,36 +139,46 @@ void EventProcessor::ProcessEvents()
   MessageBuffer* queueToProcess = mCurrentEventQueue;
 
   // Switch current queue; events can be added safely while iterating through the other queue.
-  mCurrentEventQueue = ( &mEventQueue0 == mCurrentEventQueue ) ? &mEventQueue1 : &mEventQueue0;
+  mCurrentEventQueue = (&mEventQueue0 == mCurrentEventQueue) ? &mEventQueue1 : &mEventQueue0;
 
-  for( MessageBuffer::Iterator iter = queueToProcess->Begin(); iter.IsValid(); iter.Next() )
+  for(MessageBuffer::Iterator iter = queueToProcess->Begin(); iter.IsValid(); iter.Next())
   {
-    Event* event = reinterpret_cast< Event* >( iter.Get() );
+    Event* event = reinterpret_cast<Event*>(iter.Get());
 
-    switch( event->type )
+    switch(event->type)
     {
       case Event::Touch:
       {
-        mTouchEventProcessor.ProcessTouchEvent( static_cast<const Integration::TouchEvent&>(*event) );
-        mGestureEventProcessor.ProcessTouchEvent(mScene, static_cast<const Integration::TouchEvent&>(*event));
+        Integration::TouchEvent& touchEvent = static_cast<Integration::TouchEvent&>(*event);
+        const bool               consumed   = mTouchEventProcessor.ProcessTouchEvent(touchEvent);
+
+        // If touch is consumed, then gestures should be cancelled
+        // Do this by sending an interrupted event to the GestureEventProcessor
+        if(consumed)
+        {
+          // Integration::Point& point = touchEvent.GetPoint(0);
+          // point.SetState(PointState::INTERRUPTED);
+        }
+
+        mGestureEventProcessor.ProcessTouchEvent(mScene, touchEvent);
         break;
       }
 
       case Event::Hover:
       {
-        mHoverEventProcessor.ProcessHoverEvent( static_cast<const Integration::HoverEvent&>(*event) );
+        mHoverEventProcessor.ProcessHoverEvent(static_cast<const Integration::HoverEvent&>(*event));
         break;
       }
 
       case Event::Key:
       {
-        mKeyEventProcessor.ProcessKeyEvent( static_cast<const Integration::KeyEvent&>(*event) );
+        mKeyEventProcessor.ProcessKeyEvent(static_cast<const Integration::KeyEvent&>(*event));
         break;
       }
 
       case Event::Wheel:
       {
-        mWheelEventProcessor.ProcessWheelEvent( static_cast<const Integration::WheelEvent&>(*event) );
+        mWheelEventProcessor.ProcessWheelEvent(static_cast<const Integration::WheelEvent&>(*event));
         break;
       }
     }