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>
29 namespace // unnamed namespace
32 Internal::PropertyConstraint<P>* CreatePropertyConstraint(CallbackBase* func)
34 return new Internal::PropertyConstraint<P>(reinterpret_cast<Dali::Constraint::Function<P>*>(func));
37 } // unnamed namespace
39 const Constraint::RemoveAction Constraint::DEFAULT_REMOVE_ACTION = Constraint::BAKE;
41 Constraint::Constraint() = default;
43 Constraint Constraint::Clone(Handle object)
45 return Constraint(GetImplementation(*this).Clone(GetImplementation(object)));
48 Constraint::~Constraint() = default;
50 Constraint::Constraint(const Constraint& constraint) = default;
52 Constraint& Constraint::operator=(const Constraint& rhs) = default;
54 Constraint::Constraint(Constraint&& rhs) noexcept = default;
56 Constraint& Constraint::operator=(Constraint&& rhs) noexcept = default;
58 Constraint Constraint::DownCast(BaseHandle baseHandle)
60 return Constraint(dynamic_cast<Dali::Internal::ConstraintBase*>(baseHandle.GetObjectPtr()));
63 void Constraint::AddSource(ConstraintSource source)
65 GetImplementation(*this).AddSource(Internal::Source(source));
68 void Constraint::Apply()
70 GetImplementation(*this).Apply();
73 void Constraint::ApplyPost()
75 GetImplementation(*this).ApplyPost();
78 void Constraint::Remove()
80 GetImplementation(*this).Remove();
83 Handle Constraint::GetTargetObject()
85 return GetImplementation(*this).GetTargetObject();
88 Property::Index Constraint::GetTargetProperty()
90 return GetImplementation(*this).GetTargetProperty();
93 void Constraint::SetRemoveAction(Constraint::RemoveAction action)
95 GetImplementation(*this).SetRemoveAction(action);
98 Constraint::RemoveAction Constraint::GetRemoveAction() const
100 return GetImplementation(*this).GetRemoveAction();
103 void Constraint::SetTag(const uint32_t tag)
105 GetImplementation(*this).SetTag(tag);
108 uint32_t Constraint::GetTag() const
110 return GetImplementation(*this).GetTag();
113 Constraint::Constraint(Internal::ConstraintBase* constraint)
114 : BaseHandle(constraint)
118 Constraint Constraint::New(Handle handle, Property::Index targetIndex, Property::Type targetType, CallbackBase* function)
120 Constraint constraint;
121 Internal::SourceContainer sources;
122 Internal::Object& object = GetImplementation(handle);
126 case Property::BOOLEAN:
128 Internal::PropertyConstraintPtr<bool>::Type funcPtr(CreatePropertyConstraint<bool>(function));
130 constraint = Dali::Constraint(Internal::Constraint<bool>::New(object,
137 case Property::FLOAT:
139 Internal::PropertyConstraintPtr<float>::Type funcPtr(CreatePropertyConstraint<float>(function));
141 constraint = Dali::Constraint(Internal::Constraint<float>::New(object,
148 case Property::INTEGER:
150 Internal::PropertyConstraintPtr<int>::Type funcPtr(CreatePropertyConstraint<int>(function));
152 constraint = Dali::Constraint(Internal::Constraint<int>::New(object,
159 case Property::VECTOR2:
161 Internal::PropertyConstraintPtr<Vector2>::Type funcPtr(CreatePropertyConstraint<Vector2>(function));
163 constraint = Dali::Constraint(Internal::Constraint<Vector2>::New(object,
170 case Property::VECTOR3:
172 Internal::PropertyConstraintPtr<Vector3>::Type funcPtr(CreatePropertyConstraint<Vector3>(function));
174 constraint = Dali::Constraint(Internal::Constraint<Vector3>::New(object,
181 case Property::VECTOR4:
183 Internal::PropertyConstraintPtr<Vector4>::Type funcPtr(CreatePropertyConstraint<Vector4>(function));
185 constraint = Dali::Constraint(Internal::Constraint<Vector4>::New(object,
192 case Property::ROTATION:
194 Internal::PropertyConstraintPtr<Quaternion>::Type funcPtr(CreatePropertyConstraint<Quaternion>(function));
196 constraint = Dali::Constraint(Internal::Constraint<Quaternion>::New(object,
203 case Property::MATRIX:
205 Internal::PropertyConstraintPtr<Matrix>::Type funcPtr(CreatePropertyConstraint<Matrix>(function));
207 constraint = Dali::Constraint(Internal::Constraint<Matrix>::New(object,
214 case Property::MATRIX3:
216 Internal::PropertyConstraintPtr<Matrix3>::Type funcPtr(CreatePropertyConstraint<Matrix3>(function));
218 constraint = Dali::Constraint(Internal::Constraint<Matrix3>::New(object,
227 DALI_ABORT("Property not constrainable");