2 * Copyright (c) 2020 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.
19 #include <dali/public-api/animation/constraint.h>
22 #include <dali/internal/event/animation/constraint-impl.h>
23 #include <dali/internal/event/animation/constraint-source-impl.h>
24 #include <dali/internal/event/animation/property-constraint-ptr.h>
25 #include <dali/internal/event/animation/property-constraint.h>
30 namespace // unnamed namespace
34 Internal::PropertyConstraint< P >* CreatePropertyConstraint( CallbackBase* func )
36 return new Internal::PropertyConstraint< P >( reinterpret_cast< Dali::Constraint::Function< P >* >( func ) );
39 } // unnamed namespace
41 const Constraint::RemoveAction Constraint::DEFAULT_REMOVE_ACTION = Constraint::Bake;
43 Constraint::Constraint()
47 Constraint Constraint::Clone( Handle object )
49 return Constraint( GetImplementation( *this ).Clone( GetImplementation( object ) ) );
52 Constraint::~Constraint()
56 Constraint::Constraint( const Constraint& constraint ) = default;
58 Constraint& Constraint::operator=( const Constraint& rhs ) = default;
60 Constraint::Constraint( Constraint&& rhs ) = default;
62 Constraint& Constraint::operator=( Constraint&& rhs ) = default;
64 Constraint Constraint::DownCast( BaseHandle baseHandle )
66 return Constraint( dynamic_cast< Dali::Internal::ConstraintBase* >( baseHandle.GetObjectPtr() ) );
69 void Constraint::AddSource( ConstraintSource source )
71 GetImplementation( *this ).AddSource( Internal::Source( source ) );
74 void Constraint::Apply()
76 GetImplementation( *this ).Apply();
79 void Constraint::Remove()
81 GetImplementation( *this ).Remove();
84 Handle Constraint::GetTargetObject()
86 return GetImplementation(*this).GetTargetObject();
89 Property::Index Constraint::GetTargetProperty()
91 return GetImplementation(*this).GetTargetProperty();
94 void Constraint::SetRemoveAction(Constraint::RemoveAction action)
96 GetImplementation(*this).SetRemoveAction(action);
99 Constraint::RemoveAction Constraint::GetRemoveAction() const
101 return GetImplementation(*this).GetRemoveAction();
104 void Constraint::SetTag( const uint32_t tag )
106 GetImplementation(*this).SetTag( tag );
109 uint32_t Constraint::GetTag() const
111 return GetImplementation(*this).GetTag();
114 Constraint::Constraint( Internal::ConstraintBase* constraint )
115 : BaseHandle( constraint )
119 Constraint Constraint::New( Handle handle, Property::Index targetIndex, Property::Type targetType, CallbackBase* function )
121 Constraint constraint;
122 Internal::SourceContainer sources;
123 Internal::Object& object = GetImplementation( handle );
125 switch ( targetType )
127 case Property::BOOLEAN:
129 Internal::PropertyConstraintPtr< bool >::Type funcPtr( CreatePropertyConstraint< bool >( function ) );
131 constraint = Dali::Constraint( Internal::Constraint< bool >::New( object,
138 case Property::FLOAT:
140 Internal::PropertyConstraintPtr< float >::Type funcPtr( CreatePropertyConstraint< float >( function ) );
142 constraint = Dali::Constraint( Internal::Constraint< float >::New( object,
149 case Property::INTEGER:
151 Internal::PropertyConstraintPtr< int >::Type funcPtr( CreatePropertyConstraint< int >( function ) );
153 constraint = Dali::Constraint( Internal::Constraint< int >::New( object,
160 case Property::VECTOR2:
162 Internal::PropertyConstraintPtr< Vector2 >::Type funcPtr( CreatePropertyConstraint< Vector2 >( function ) );
164 constraint = Dali::Constraint( Internal::Constraint< Vector2 >::New( object,
171 case Property::VECTOR3:
173 Internal::PropertyConstraintPtr< Vector3 >::Type funcPtr( CreatePropertyConstraint< Vector3 >( function ) );
175 constraint = Dali::Constraint( Internal::Constraint< Vector3 >::New( object,
182 case Property::VECTOR4:
184 Internal::PropertyConstraintPtr< Vector4 >::Type funcPtr( CreatePropertyConstraint< Vector4 >( function ) );
186 constraint = Dali::Constraint( Internal::Constraint< Vector4 >::New( object,
193 case Property::ROTATION:
195 Internal::PropertyConstraintPtr< Quaternion >::Type funcPtr( CreatePropertyConstraint< Quaternion >( function ) );
197 constraint = Dali::Constraint( Internal::Constraint< Quaternion >::New( object,
204 case Property::MATRIX:
206 Internal::PropertyConstraintPtr< Matrix >::Type funcPtr( CreatePropertyConstraint< Matrix >( function ) );
208 constraint = Dali::Constraint( Internal::Constraint< Matrix >::New( object,
215 case Property::MATRIX3:
217 Internal::PropertyConstraintPtr<Matrix3>::Type funcPtr( CreatePropertyConstraint<Matrix3>( function ) );
219 constraint = Dali::Constraint( Internal::Constraint< Matrix3 >::New( object,
228 DALI_ABORT( "Property not constrainable" );