Revert "[Tizen] Revert "Changes after touch consumed behaviour change""
[platform/core/uifw/dali-demo.git] / examples / gestures / gesture-example.cpp
index 2cca96d..d04c63e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 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.
@@ -18,8 +18,6 @@
 // EXTERNAL INCLUDES
 #include <dali-toolkit/dali-toolkit.h>
 #include <string>
-#include <dali/devel-api/events/rotation-gesture.h>
-#include <dali/devel-api/events/rotation-gesture-detector.h>
 
 using namespace Dali;
 using namespace Dali::Toolkit;
@@ -80,15 +78,15 @@ const float ROTATE_BACK_ANIMATION_DURATION( 0.25f );
  * @param[in]  startTime  When to start the animators
  * @param[in]  endTime    When to end the animators
  */
-void AddHelpInfo( const std::string&& string, Actor parent, Animation animation, float startTime, float endTime )
+void AddHelpInfo( const std::string&& string, const Vector2& windowSize, Actor parent, Animation animation, float startTime, float endTime )
 {
   Actor text = TextLabel::New( std::move( string ) );
-  Vector3 position( Stage::GetCurrent().GetSize() * HELP_TEXT_POSITION_MULTIPLIER );
+  Vector3 position( windowSize * HELP_TEXT_POSITION_MULTIPLIER );
 
-  text.SetAnchorPoint( AnchorPoint::TOP_CENTER );
-  text.SetParentOrigin( ParentOrigin::TOP_CENTER );
-  text.SetPosition( position );
-  text.SetOpacity( 0.0f );
+  text.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER );
+  text.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER );
+  text.SetProperty( Actor::Property::POSITION, position );
+  text.SetProperty( Actor::Property::OPACITY, 0.0f );
   text.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, Text::HorizontalAlignment::CENTER );
   text.SetProperty( TextLabel::Property::MULTI_LINE, true );
   parent.Add( text );
@@ -140,27 +138,28 @@ private:
    */
   void Create( Application& application )
   {
-    // Get a handle to the stage & connect to the key event signal
-    Stage stage = Stage::GetCurrent();
-    stage.KeyEventSignal().Connect(this, &GestureExample::OnKeyEvent);
+    // Get a handle to the window & connect to the key event signal
+    auto window = application.GetWindow();
+    Vector2 windowSize = window.GetSize();
+    window.KeyEventSignal().Connect(this, &GestureExample::OnKeyEvent);
 
     // Create a background with a linear gradient which matches parent size & is placed in the center.
     Actor background = Control::New();
     background.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
-    background.SetParentOrigin( ParentOrigin::CENTER );
+    background.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
     background.SetProperty( Control::Property::BACKGROUND, BACKGROUND );
-    stage.Add( background );
+    window.Add( background );
 
-    // Create a control with a circular gradient that we'll use for the gestures and be a quarter of the size of the stage.
+    // Create a control with a circular gradient that we'll use for the gestures and be a quarter of the size of the window.
     Actor touchControl = Control::New();
-    touchControl.SetSize( stage.GetSize() * 0.25f );
-    touchControl.SetParentOrigin( ParentOrigin::CENTER );
+    touchControl.SetProperty( Actor::Property::SIZE, windowSize * 0.25f );
+    touchControl.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
     touchControl.SetProperty( Control::Property::BACKGROUND, CONTROL_BACKGROUND );
     background.Add( touchControl );
 
     // Connect to the touch signal
-    touchControl.TouchSignal().Connect( this, &GestureExample::OnTouch );
-    touchControl.SetLeaveRequired( true );
+    touchControl.TouchedSignal().Connect( this, &GestureExample::OnTouch );
+    touchControl.SetProperty( Actor::Property::LEAVE_REQUIRED, true );
 
     // Create a long press gesture detector, attach the actor & connect
     mLongPressDetector = LongPressGestureDetector::New();
@@ -205,10 +204,10 @@ private:
     float startTime( 0.0f );
     float endTime( startTime + HELP_ANIMATION_SEGMENT_TIME );
 
-    AddHelpInfo( "Tap image for animation",                              background, helpAnimation, startTime, endTime );
-    AddHelpInfo( "Press & Hold image to drag",                           background, helpAnimation, startTime += HELP_ANIMATION_SEGMENT_TIME, endTime += HELP_ANIMATION_SEGMENT_TIME );
-    AddHelpInfo( "Pinch image to resize",                                background, helpAnimation, startTime += HELP_ANIMATION_SEGMENT_TIME, endTime += HELP_ANIMATION_SEGMENT_TIME );
-    AddHelpInfo( "Move fingers in a circular motion on image to rotate", background, helpAnimation, startTime += HELP_ANIMATION_SEGMENT_TIME, endTime += HELP_ANIMATION_SEGMENT_TIME );
+    AddHelpInfo( "Tap image for animation",                              windowSize, background, helpAnimation, startTime, endTime );
+    AddHelpInfo( "Press & Hold image to drag",                           windowSize, background, helpAnimation, startTime += HELP_ANIMATION_SEGMENT_TIME, endTime += HELP_ANIMATION_SEGMENT_TIME );
+    AddHelpInfo( "Pinch image to resize",                                windowSize, background, helpAnimation, startTime += HELP_ANIMATION_SEGMENT_TIME, endTime += HELP_ANIMATION_SEGMENT_TIME );
+    AddHelpInfo( "Move fingers in a circular motion on image to rotate", windowSize, background, helpAnimation, startTime += HELP_ANIMATION_SEGMENT_TIME, endTime += HELP_ANIMATION_SEGMENT_TIME );
     helpAnimation.SetLooping( true );
     helpAnimation.Play();
   }
@@ -219,7 +218,7 @@ private:
    * @param[in]  actor  The touched actor
    * @param[in]  touch  The touch event
    */
-  bool OnTouch( Actor actor, const TouchData& touch )
+  bool OnTouch( Actor actor, const TouchEvent& touch )
   {
     switch( touch.GetState( 0 ) )
     {
@@ -256,7 +255,7 @@ private:
         break;
       }
     }
-    return true;
+    return false;
   }
 
   /**
@@ -267,14 +266,14 @@ private:
    */
   void OnLongPress( Actor actor, const LongPressGesture& longPress )
   {
-    if( longPress.state == Gesture::Started )
+    if( longPress.GetState() == GestureState::STARTED )
     {
       // When we first receive a long press, attach the actor to the pan detector.
       mPanDetector.Attach( actor );
 
       // Do a small animation to indicate to the user that we are in pan mode.
       Animation anim = Animation::New( PAN_MODE_CHANGE_ANIMATION_DURATION );
-      anim.AnimateTo( Property( actor, Actor::Property::SCALE ), actor.GetCurrentScale() * PAN_MODE_START_ANIMATION_SCALE, AlphaFunction::BOUNCE );
+      anim.AnimateTo( Property( actor, Actor::Property::SCALE ), actor.GetCurrentProperty< Vector3 >( Actor::Property::SCALE ) * PAN_MODE_START_ANIMATION_SCALE, AlphaFunction::BOUNCE );
       anim.Play();
 
       // Start the shake animation so the user knows when they are in pan mode.
@@ -295,36 +294,36 @@ private:
 
     // As the displacement is in local actor coords, we will have to multiply the displacement by the
     // actor's scale so that it moves the correct amount in the parent's coordinate system.
-    Vector3 scaledDisplacement( pan.displacement );
-    scaledDisplacement *= actor.GetCurrentScale();
+    Vector3 scaledDisplacement( pan.GetDisplacement() );
+    scaledDisplacement *= actor.GetCurrentProperty< Vector3 >( Actor::Property::SCALE );
 
     Vector3 currentPosition;
     actor.GetProperty( Actor::Property::POSITION ).Get( currentPosition );
 
     Vector3 newPosition = currentPosition + scaledDisplacement;
-    actor.SetPosition( newPosition );
+    actor.SetProperty( Actor::Property::POSITION, newPosition );
 
-    switch( pan.state )
+    switch( pan.GetState() )
     {
-      case Gesture::Started:
+      case GestureState::STARTED:
       {
         mPanStarted = true;
         break;
       }
 
-      case Gesture::Finished:
-      case Gesture::Cancelled:
+      case GestureState::FINISHED:
+      case GestureState::CANCELLED:
       {
         // If we cancel or finish the pan, do an animation to indicate this and stop the shake animation.
 
         Animation anim = Animation::New( PAN_MODE_CHANGE_ANIMATION_DURATION );
         anim.AnimateTo( Property( actor, Actor::Property::COLOR ), Vector4::ONE );
-        anim.AnimateTo( Property( actor, Actor::Property::SCALE ), actor.GetCurrentScale() * PAN_MODE_END_ANIMATION_SCALE, AlphaFunction::BOUNCE );
+        anim.AnimateTo( Property( actor, Actor::Property::SCALE ), actor.GetCurrentProperty< Vector3 >( Actor::Property::SCALE ) * PAN_MODE_END_ANIMATION_SCALE, AlphaFunction::BOUNCE );
 
         // Move actor back to center if we're out of bounds
-        Vector2 halfStageSize = Stage::GetCurrent().GetSize() * 0.5f;
-        if( ( abs( newPosition.x ) > halfStageSize.width  ) ||
-            ( abs( newPosition.y ) > halfStageSize.height ) )
+        Vector2 halfWindowSize = Vector2(mApplication.GetWindow().GetSize()) * 0.5f;
+        if( ( abs( newPosition.x ) > halfWindowSize.width  ) ||
+            ( abs( newPosition.y ) > halfWindowSize.height ) )
         {
           anim.AnimateTo( Property( actor, Actor::Property::POSITION ), Vector3::ZERO, AlphaFunction::EASE_IN );
         }
@@ -370,19 +369,19 @@ private:
    */
   void OnPinch( Actor actor, const PinchGesture& pinch )
   {
-    switch( pinch.state )
+    switch( pinch.GetState() )
     {
-      case Gesture::Started:
+      case GestureState::STARTED:
       {
         // Starting scale is required so that we know what to multiply the pinch.scale by.
-        mStartingScale = actor.GetCurrentScale();
+        mStartingScale = actor.GetCurrentProperty< Vector3 >( Actor::Property::SCALE );
         break;
       }
 
-      case Gesture::Finished:
-      case Gesture::Cancelled:
+      case GestureState::FINISHED:
+      case GestureState::CANCELLED:
       {
-        Vector3 scale( actor.GetCurrentScale() );
+        Vector3 scale( actor.GetCurrentProperty< Vector3 >( Actor::Property::SCALE ) );
 
         // Ensure the actor sizes itself to be within the limits defined.
         if ( scale.x < MINIMUM_SCALE.x )
@@ -407,7 +406,7 @@ private:
       }
     }
 
-    actor.SetScale( mStartingScale * pinch.scale );
+    actor.SetProperty( Actor::Property::SCALE, mStartingScale * pinch.GetScale() );
   }
 
   /**
@@ -418,17 +417,17 @@ private:
    */
   void OnRotation( Actor actor, const RotationGesture& rotation )
   {
-    switch( rotation.state )
+    switch( rotation.GetState() )
     {
-      case Gesture::Started:
+      case GestureState::STARTED:
       {
         // Starting orientation is required so that we know what to multiply the rotation.rotation by.
-        mStartingOrientation = actor.GetCurrentOrientation();
+        mStartingOrientation = actor.GetCurrentProperty< Quaternion >( Actor::Property::ORIENTATION );
         break;
       }
 
-      case Gesture::Finished:
-      case Gesture::Cancelled:
+      case GestureState::FINISHED:
+      case GestureState::CANCELLED:
       {
         // Do an animation to come back to go back to the original orientation.
         Animation anim = Animation::New( ROTATE_BACK_ANIMATION_DURATION );
@@ -443,7 +442,7 @@ private:
       }
     }
 
-    actor.SetOrientation( mStartingOrientation * Quaternion( rotation.rotation, Vector3::ZAXIS ) );
+    actor.SetProperty( Actor::Property::ORIENTATION, Quaternion( mStartingOrientation * Quaternion( rotation.GetRotation(), Vector3::ZAXIS ) ) );
   }
 
   /**
@@ -454,7 +453,7 @@ private:
    */
   void OnKeyEvent( const KeyEvent& event )
   {
-    if( event.state == KeyEvent::Down )
+    if( event.GetState() == KeyEvent::DOWN )
     {
       if( IsKey( event, Dali::DALI_KEY_ESCAPE ) || IsKey( event, Dali::DALI_KEY_BACK ) )
       {