2 * Copyright (c) 2016 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "beat-control-impl.h"
18 #include <dali-toolkit/dali-toolkit.h>
19 #include <dali/public-api/object/type-registry-helper.h>
20 #include <dali-toolkit/devel-api/align-enums.h>
21 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
22 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
26 using namespace Dali; // Needed for macros
27 using namespace Dali::Toolkit;
38 Dali::BaseHandle Create()
40 return Demo::BeatControl::New();
43 DALI_TYPE_REGISTRATION_BEGIN( BeatControl, Dali::Toolkit::Control, Create );
45 DALI_PROPERTY_REGISTRATION( Demo, BeatControl, "bounceTransition", STRING, BOUNCE_TRANSITION );
46 DALI_PROPERTY_REGISTRATION( Demo, BeatControl, "leftTransition", STRING, LEFT_TRANSITION );
47 DALI_PROPERTY_REGISTRATION( Demo, BeatControl, "upTransition", STRING, UP_TRANSITION );
48 DALI_PROPERTY_REGISTRATION( Demo, BeatControl, "beatVisual", MAP, BEAT_VISUAL );
49 DALI_TYPE_REGISTRATION_END();
52 Toolkit::TransitionData ConvertPropertyToTransition( const Property::Value& value )
54 Toolkit::TransitionData transitionData;
56 if( value.GetType() == Property::ARRAY )
58 transitionData = Toolkit::TransitionData::New( *value.GetArray());
60 else if( value.GetType() == Property::MAP )
62 transitionData = Toolkit::TransitionData::New( *value.GetMap() );
64 return transitionData;
67 } // anonymous namespace
70 Internal::BeatControl::BeatControl()
71 : Control( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) )
75 Internal::BeatControl::~BeatControl()
79 Demo::BeatControl Internal::BeatControl::New()
81 IntrusivePtr<Internal::BeatControl> impl = new Internal::BeatControl();
82 Demo::BeatControl handle = Demo::BeatControl( *impl );
88 void BeatControl::StartBounceAnimation()
93 mAnimation.FinishedSignal().Disconnect( this, &BeatControl::OnBounceAnimationFinished );
94 OnBounceAnimationFinished(mAnimation);
97 mAnimation = CreateTransition( mBounceTransition );
98 mAnimation.FinishedSignal().Connect( this, &BeatControl::OnBounceAnimationFinished );
103 void BeatControl::StartXAnimation()
108 mXAnimation.FinishedSignal().Disconnect( this, &BeatControl::OnXAnimationFinished );
109 OnXAnimationFinished(mXAnimation);
112 mXAnimation = CreateTransition( mLeftTransition );
113 mXAnimation.FinishedSignal().Connect( this, &BeatControl::OnXAnimationFinished );
117 void BeatControl::StartYAnimation()
122 mYAnimation.FinishedSignal().Disconnect( this, &BeatControl::OnYAnimationFinished );
123 OnYAnimationFinished(mYAnimation);
126 mYAnimation = CreateTransition( mUpTransition );
127 mYAnimation.FinishedSignal().Connect( this, &BeatControl::OnYAnimationFinished );
132 void BeatControl::OnBounceAnimationFinished( Animation& src )
136 void BeatControl::OnXAnimationFinished( Animation& src )
140 void BeatControl::OnYAnimationFinished( Animation& src )
145 void BeatControl::OnInitialize()
150 void BeatControl::OnStageConnection( int depth )
152 Control::OnStageConnection( depth );
155 void BeatControl::OnStageDisconnection()
157 Control::OnStageDisconnection();
160 void BeatControl::OnSizeSet( const Vector3& targetSize )
162 Control::OnSizeSet( targetSize );
163 RelayoutVisuals( Vector2( targetSize ) );
166 void BeatControl::OnRelayout( const Vector2& targetSize, RelayoutContainer& container )
168 RelayoutVisuals( targetSize );
171 void BeatControl::RelayoutVisuals( const Vector2& targetSize )
175 Vector2 size( targetSize );
176 Property::Map transformMap;
177 // Make the visual half the size of the control, but leave
178 // origin and anchor point at center, position is relative, but Zer0
179 transformMap[ DevelVisual::Transform::Property::SIZE ] = Vector2(0.5, 0.5);
180 mVisual.SetTransformAndSize( transformMap, size );
182 // @todo We must stop this clashing with a transform animation
186 Vector3 BeatControl::GetNaturalSize()
191 mVisual.GetNaturalSize(naturalSize);
192 return Vector3(naturalSize);
194 return Vector3::ZERO;
197 void BeatControl::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange::Type change )
200 Control::OnStyleChange( styleManager, change );
204 ///////////////////////////////////////////////////////////
209 void BeatControl::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
211 Demo::BeatControl beatControl = Demo::BeatControl::DownCast( Dali::BaseHandle( object ) );
215 BeatControl& impl = GetImpl( beatControl );
216 Actor self = impl.Self();
219 case Demo::BeatControl::Property::BEAT_VISUAL:
221 Property::Map* map = value.GetMap();
224 impl.mVisual = Toolkit::VisualFactory::Get().CreateVisual( *map );
225 impl.RegisterVisual( Demo::BeatControl::Property::BEAT_VISUAL, impl.mVisual );
229 case Demo::BeatControl::Property::BOUNCE_TRANSITION:
231 impl.mBounceTransition = ConvertPropertyToTransition( value );
234 case Demo::BeatControl::Property::LEFT_TRANSITION:
236 impl.mLeftTransition = ConvertPropertyToTransition( value );
239 case Demo::BeatControl::Property::UP_TRANSITION:
241 impl.mUpTransition = ConvertPropertyToTransition( value );
248 Property::Value BeatControl::GetProperty( BaseObject* object, Property::Index propertyIndex )
250 Property::Value value;
252 Demo::BeatControl beatControl = Demo::BeatControl::DownCast( Dali::BaseHandle( object ) );
256 BeatControl& impl = GetImpl( beatControl );
257 switch ( propertyIndex )
259 case Demo::BeatControl::Property::BEAT_VISUAL:
264 impl.mVisual.CreatePropertyMap(map);
269 case Demo::BeatControl::Property::BOUNCE_TRANSITION: