Updated demos to use DALi clang-format
[platform/core/uifw/dali-demo.git] / examples / visual-transitions / beat-control-impl.cpp
index ef0c56d..770b4c6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016 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.
 
 #include "beat-control-impl.h"
 #include <dali-toolkit/dali-toolkit.h>
-#include <dali/public-api/object/type-registry-helper.h>
-#include <dali-toolkit/devel-api/align-enums.h>
+#include <dali-toolkit/devel-api/controls/control-devel.h>
 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
-#include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
-
-#include <cstdio>
 
 using namespace Dali; // Needed for macros
 using namespace Dali::Toolkit;
@@ -30,52 +26,54 @@ namespace Demo
 {
 namespace Internal
 {
-
 namespace
 {
-
 const int BOUNCE_ANIMATION_RUNNING(0x0001);
-const int FADE_ANIMATION_RUNNING  (0x0002);
-const int X_ANIMATION_RUNNING     (0x0004);
-const int Y_ANIMATION_RUNNING     (0x0008);
-
+const int FADE_ANIMATION_RUNNING(0x0002);
+const int X_ANIMATION_RUNNING(0x0004);
+const int Y_ANIMATION_RUNNING(0x0008);
 
 Dali::BaseHandle Create()
 {
   return Demo::BeatControl::New();
 }
 
-DALI_TYPE_REGISTRATION_BEGIN( BeatControl, Dali::Toolkit::Control, Create );
+DALI_TYPE_REGISTRATION_BEGIN(BeatControl, Dali::Toolkit::Control, Create);
 
-DALI_PROPERTY_REGISTRATION( Demo, BeatControl, "bounceTransition", STRING, BOUNCE_TRANSITION );
-DALI_PROPERTY_REGISTRATION( Demo, BeatControl, "leftTransition", STRING, LEFT_TRANSITION );
-DALI_PROPERTY_REGISTRATION( Demo, BeatControl, "upTransition", STRING, UP_TRANSITION );
-DALI_PROPERTY_REGISTRATION( Demo, BeatControl, "fadeTransition", STRING, FADE_TRANSITION );
-DALI_PROPERTY_REGISTRATION( Demo, BeatControl, "beatVisual", MAP, BEAT_VISUAL );
+DALI_PROPERTY_REGISTRATION(Demo, BeatControl, "bounceTransition", STRING, BOUNCE_TRANSITION);
+DALI_PROPERTY_REGISTRATION(Demo, BeatControl, "leftTransition", STRING, LEFT_TRANSITION);
+DALI_PROPERTY_REGISTRATION(Demo, BeatControl, "upTransition", STRING, UP_TRANSITION);
+DALI_PROPERTY_REGISTRATION(Demo, BeatControl, "fadeTransition", STRING, FADE_TRANSITION);
+DALI_PROPERTY_REGISTRATION(Demo, BeatControl, "beatVisual", MAP, BEAT_VISUAL);
 DALI_TYPE_REGISTRATION_END();
 
-
-Toolkit::TransitionData ConvertPropertyToTransition( const Property::Value& value )
+Toolkit::TransitionData ConvertPropertyToTransition(const Property::Value& value)
 {
   Toolkit::TransitionData transitionData;
 
-  if( value.GetType() == Property::ARRAY )
+  const Property::Array* array = value.GetArray();
+  if(array)
   {
-    transitionData = Toolkit::TransitionData::New( *value.GetArray());
+    transitionData = Toolkit::TransitionData::New(*array);
   }
-  else if( value.GetType() == Property::MAP )
+  else
   {
-    transitionData = Toolkit::TransitionData::New( *value.GetMap() );
+    const Property::Map* map = value.GetMap();
+    if(map)
+    {
+      transitionData = Toolkit::TransitionData::New(*map);
+    }
   }
   return transitionData;
 }
 
 } // anonymous namespace
 
-
 Internal::BeatControl::BeatControl()
-: Control( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) ),
+: Control(ControlBehaviour(CONTROL_BEHAVIOUR_DEFAULT)),
   mTransformSize(1.0f, 1.0f),
+  mTransformOrigin(Align::CENTER),
+  mTransformAnchorPoint(Align::CENTER),
   mAnimationPlaying(0)
 {
 }
@@ -86,87 +84,85 @@ Internal::BeatControl::~BeatControl()
 
 Demo::BeatControl Internal::BeatControl::New()
 {
-  IntrusivePtr<Internal::BeatControl> impl = new Internal::BeatControl();
-  Demo::BeatControl handle = Demo::BeatControl( *impl );
+  IntrusivePtr<Internal::BeatControl> impl   = new Internal::BeatControl();
+  Demo::BeatControl                   handle = Demo::BeatControl(*impl);
   impl->Initialize();
   return handle;
 }
 
-
 void BeatControl::StartBounceAnimation()
 {
-  if( mAnimation )
+  if(mAnimation)
   {
     mAnimation.Stop();
-    mAnimation.FinishedSignal().Disconnect( this, &BeatControl::OnBounceAnimationFinished );
+    mAnimation.FinishedSignal().Disconnect(this, &BeatControl::OnBounceAnimationFinished);
     OnBounceAnimationFinished(mAnimation);
   }
 
-  mAnimation = CreateTransition( mBounceTransition );
-  mAnimation.FinishedSignal().Connect( this, &BeatControl::OnBounceAnimationFinished );
+  mAnimation = DevelControl::CreateTransition(*this, mBounceTransition);
+  mAnimation.FinishedSignal().Connect(this, &BeatControl::OnBounceAnimationFinished);
   mAnimation.Play();
   mAnimationPlaying |= BOUNCE_ANIMATION_RUNNING;
 }
 
-
 void BeatControl::StartXAnimation()
 {
-  if( mXAnimation )
+  if(mXAnimation)
   {
     mXAnimation.Stop();
-    mXAnimation.FinishedSignal().Disconnect( this, &BeatControl::OnXAnimationFinished );
+    mXAnimation.FinishedSignal().Disconnect(this, &BeatControl::OnXAnimationFinished);
     OnXAnimationFinished(mXAnimation);
   }
 
-  mXAnimation = CreateTransition( mLeftTransition );
-  mXAnimation.FinishedSignal().Connect( this, &BeatControl::OnXAnimationFinished );
+  mXAnimation = DevelControl::CreateTransition(*this, mLeftTransition);
+  mXAnimation.FinishedSignal().Connect(this, &BeatControl::OnXAnimationFinished);
   mXAnimation.Play();
   mAnimationPlaying |= X_ANIMATION_RUNNING;
 }
 
 void BeatControl::StartYAnimation()
 {
-  if( mYAnimation )
+  if(mYAnimation)
   {
     mYAnimation.Stop();
-    mYAnimation.FinishedSignal().Disconnect( this, &BeatControl::OnYAnimationFinished );
+    mYAnimation.FinishedSignal().Disconnect(this, &BeatControl::OnYAnimationFinished);
     OnYAnimationFinished(mYAnimation);
   }
 
-  mYAnimation = CreateTransition( mUpTransition );
-  mYAnimation.FinishedSignal().Connect( this, &BeatControl::OnYAnimationFinished );
+  mYAnimation = DevelControl::CreateTransition(*this, mUpTransition);
+  mYAnimation.FinishedSignal().Connect(this, &BeatControl::OnYAnimationFinished);
   mYAnimation.Play();
   mAnimationPlaying |= Y_ANIMATION_RUNNING;
 }
 
 void BeatControl::StartFadeAnimation()
 {
-  if( mFadeAnimation )
+  if(mFadeAnimation)
   {
     mFadeAnimation.Stop();
-    mFadeAnimation.FinishedSignal().Disconnect( this, &BeatControl::OnFadeAnimationFinished );
+    mFadeAnimation.FinishedSignal().Disconnect(this, &BeatControl::OnFadeAnimationFinished);
     OnFadeAnimationFinished(mFadeAnimation);
   }
 
-  mFadeAnimation = CreateTransition( mFadeTransition );
-  mFadeAnimation.FinishedSignal().Connect( this, &BeatControl::OnFadeAnimationFinished );
+  mFadeAnimation = DevelControl::CreateTransition(*this, mFadeTransition);
+  mFadeAnimation.FinishedSignal().Connect(this, &BeatControl::OnFadeAnimationFinished);
   mFadeAnimation.Play();
   mAnimationPlaying |= FADE_ANIMATION_RUNNING;
 }
 
-void BeatControl::OnBounceAnimationFinished( Animation& src )
+void BeatControl::OnBounceAnimationFinished(Animation& src)
 {
   mAnimationPlaying &= ~BOUNCE_ANIMATION_RUNNING;
 }
-void BeatControl::OnXAnimationFinished( Animation& src )
+void BeatControl::OnXAnimationFinished(Animation& src)
 {
   mAnimationPlaying &= ~X_ANIMATION_RUNNING;
 }
-void BeatControl::OnYAnimationFinished( Animation& src )
+void BeatControl::OnYAnimationFinished(Animation& src)
 {
   mAnimationPlaying &= ~Y_ANIMATION_RUNNING;
 }
-void BeatControl::OnFadeAnimationFinished( Animation& src )
+void BeatControl::OnFadeAnimationFinished(Animation& src)
 {
   mAnimationPlaying &= ~FADE_ANIMATION_RUNNING;
 }
@@ -176,46 +172,48 @@ void BeatControl::OnInitialize()
   Actor self = Self();
 }
 
-void BeatControl::OnStageConnection( int depth )
+void BeatControl::OnSceneConnection(int depth)
 {
-  Control::OnStageConnection( depth );
+  Control::OnSceneConnection(depth);
 }
 
-void BeatControl::OnStageDisconnection()
+void BeatControl::OnSceneDisconnection()
 {
-  Control::OnStageDisconnection();
+  Control::OnSceneDisconnection();
 }
 
-void BeatControl::OnSizeSet( const Vector3& targetSize )
+void BeatControl::OnSizeSet(const Vector3& targetSize)
 {
-  Control::OnSizeSet( targetSize );
-  RelayoutVisuals( Vector2( targetSize ) );
+  Control::OnSizeSet(targetSize);
+  RelayoutVisuals(Vector2(targetSize));
 }
 
-void BeatControl::OnRelayout( const Vector2& targetSize, RelayoutContainer& container )
+void BeatControl::OnRelayout(const Vector2& targetSize, RelayoutContainer& container)
 {
-  RelayoutVisuals( targetSize );
+  RelayoutVisuals(targetSize);
 }
 
-void BeatControl::RelayoutVisuals( const Vector2& targetSize )
+void BeatControl::RelayoutVisuals(const Vector2& targetSize)
 {
-  if( mVisual )
+  if(mVisual)
   {
-    if( (mAnimationPlaying & (X_ANIMATION_RUNNING | Y_ANIMATION_RUNNING)) == 0)
+    if((mAnimationPlaying & (X_ANIMATION_RUNNING | Y_ANIMATION_RUNNING)) == 0)
     {
-      Vector2 size( targetSize );
+      Vector2       size(targetSize);
       Property::Map transformMap;
       // Make the visual half the size of the control, but leave
       // origin and anchor point at center, position is relative, but Zer0
-      transformMap[ DevelVisual::Transform::Property::SIZE ] = mTransformSize;
-      mVisual.SetTransformAndSize( transformMap, size );
+      transformMap[Visual::Transform::Property::SIZE]         = mTransformSize;
+      transformMap[Visual::Transform::Property::ORIGIN]       = mTransformOrigin;
+      transformMap[Visual::Transform::Property::ANCHOR_POINT] = mTransformAnchorPoint;
+      mVisual.SetTransformAndSize(transformMap, size);
     }
   }
 }
 
 Vector3 BeatControl::GetNaturalSize()
 {
-  if( mVisual )
+  if(mVisual)
   {
     Vector2 naturalSize;
     mVisual.GetNaturalSize(naturalSize);
@@ -224,59 +222,87 @@ Vector3 BeatControl::GetNaturalSize()
   return Vector3::ZERO;
 }
 
-void BeatControl::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange::Type change )
+void BeatControl::OnStyleChange(Toolkit::StyleManager styleManager, StyleChange::Type change)
 {
   // Chain up.
-  Control::OnStyleChange( styleManager, change );
+  Control::OnStyleChange(styleManager, change);
 }
 
-
 ///////////////////////////////////////////////////////////
 //
 // Properties
 //
 
-void BeatControl::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
+void BeatControl::SetProperty(BaseObject* object, Property::Index index, const Property::Value& value)
 {
-  Demo::BeatControl beatControl = Demo::BeatControl::DownCast( Dali::BaseHandle( object ) );
+  Demo::BeatControl beatControl = Demo::BeatControl::DownCast(Dali::BaseHandle(object));
 
-  if( beatControl )
+  if(beatControl)
   {
-    BeatControl& impl = GetImpl( beatControl );
-    Actor self = impl.Self();
-    switch ( index )
+    BeatControl& impl = GetImpl(beatControl);
+    Actor        self = impl.Self();
+    switch(index)
     {
       case Demo::BeatControl::Property::BEAT_VISUAL:
       {
-        bool sizeOnly = false;
+        bool sizeAndPositionOnly = false;
 
         // Determine if a transform.size property exists in the map, and
         // save it.
         Property::Map* map = value.GetMap();
-        if( map )
+        if(map)
         {
-          Property::Value* value = map->Find( DevelVisual::Property::TRANSFORM, "transform" );
-          if( value )
+          Property::Value* value = map->Find(Visual::Property::TRANSFORM, "transform");
+          if(value)
           {
             Property::Map* transformMap = value->GetMap();
-            if( transformMap )
+            if(transformMap)
             {
-              Property::Value* sizeValue = transformMap->Find( DevelVisual::Transform::Property::SIZE, "size" );
-              if( sizeValue )
+              // We'll increment this whenever SIZE, ORIGIN or ANCHOR_POINT's are modified as we won't need to create a new visual if only these properties are used
+              // If there are more properties in the transform map, then we need to create a new visual
+              unsigned int sizeAndPositionPropertyCount = 0;
+
+              Property::Value* sizeValue = transformMap->Find(Visual::Transform::Property::SIZE, "size");
+              if(sizeValue)
               {
-                sizeValue->Get( impl.mTransformSize );
-                if( map->Count() == 1 && transformMap->Count() == 1 )
+                sizeValue->Get(impl.mTransformSize);
+                ++sizeAndPositionPropertyCount;
+              }
+
+              Property::Value* originValue = transformMap->Find(Visual::Transform::Property::ORIGIN, "origin");
+              if(originValue)
+              {
+                int intValue = 0;
+                if(originValue->Get(intValue))
+                {
+                  impl.mTransformOrigin = static_cast<Toolkit::Align::Type>(intValue);
+                  ++sizeAndPositionPropertyCount;
+                }
+              }
+
+              Property::Value* anchorPointValue = transformMap->Find(Visual::Transform::Property::ANCHOR_POINT, "anchorPoint");
+              if(anchorPointValue)
+              {
+                int intValue = 0;
+                if(anchorPointValue->Get(intValue))
                 {
-                  sizeOnly = true;
+                  impl.mTransformAnchorPoint = static_cast<Toolkit::Align::Type>(intValue);
+                  ++sizeAndPositionPropertyCount;
                 }
               }
+
+              // If the only properties that the application is overriding are the size and the position properties, then we do not need to create another visual.
+              if(map->Count() == 1 && transformMap->Count() == sizeAndPositionPropertyCount)
+              {
+                sizeAndPositionOnly = true;
+              }
             }
           }
-          if( ! sizeOnly )
+          if(!sizeAndPositionOnly)
           {
             // Only register a visual if there is more than just a size setting
-            impl.mVisual = Toolkit::VisualFactory::Get().CreateVisual( *map );
-            impl.RegisterVisual( Demo::BeatControl::Property::BEAT_VISUAL, impl.mVisual );
+            impl.mVisual = Toolkit::VisualFactory::Get().CreateVisual(*map);
+            DevelControl::RegisterVisual(impl, Demo::BeatControl::Property::BEAT_VISUAL, impl.mVisual);
 
             // We have registered a new visual: must trigger size negotiation
             // in order to call SetTransformAndSize on the visual with the right size:
@@ -287,42 +313,42 @@ void BeatControl::SetProperty( BaseObject* object, Property::Index index, const
       }
       case Demo::BeatControl::Property::BOUNCE_TRANSITION:
       {
-        impl.mBounceTransition = ConvertPropertyToTransition( value );
+        impl.mBounceTransition = ConvertPropertyToTransition(value);
         break;
       }
       case Demo::BeatControl::Property::LEFT_TRANSITION:
       {
-        impl.mLeftTransition = ConvertPropertyToTransition( value );
+        impl.mLeftTransition = ConvertPropertyToTransition(value);
         break;
       }
       case Demo::BeatControl::Property::UP_TRANSITION:
       {
-        impl.mUpTransition = ConvertPropertyToTransition( value );
+        impl.mUpTransition = ConvertPropertyToTransition(value);
         break;
       }
       case Demo::BeatControl::Property::FADE_TRANSITION:
       {
-        impl.mFadeTransition = ConvertPropertyToTransition( value );
+        impl.mFadeTransition = ConvertPropertyToTransition(value);
         break;
       }
     }
   }
 }
 
-Property::Value BeatControl::GetProperty( BaseObject* object, Property::Index propertyIndex )
+Property::Value BeatControl::GetProperty(BaseObject* object, Property::Index propertyIndex)
 {
   Property::Value value;
 
-  Demo::BeatControl beatControl = Demo::BeatControl::DownCast( Dali::BaseHandle( object ) );
+  Demo::BeatControl beatControl = Demo::BeatControl::DownCast(Dali::BaseHandle(object));
 
-  if ( beatControl )
+  if(beatControl)
   {
-    BeatControl& impl = GetImpl( beatControl );
-    switch ( propertyIndex )
+    BeatControl& impl = GetImpl(beatControl);
+    switch(propertyIndex)
     {
       case Demo::BeatControl::Property::BEAT_VISUAL:
       {
-        if( impl.mVisual )
+        if(impl.mVisual)
         {
           Property::Map map;
           impl.mVisual.CreatePropertyMap(map);
@@ -342,6 +368,5 @@ Property::Value BeatControl::GetProperty( BaseObject* object, Property::Index pr
   return value;
 }
 
-
-} // Internal
-} // Demo
+} // namespace Internal
+} // namespace Demo