/*
- * 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;
{
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)
{
}
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;
}
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);
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 )
+ const Property::Map* map = value.GetMap();
+ 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:
}
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);
return value;
}
-
-} // Internal
-} // Demo
+} // namespace Internal
+} // namespace Demo