2 * Copyright (c) 2014 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/internal/event/object/custom-object-internal.h>
22 #include <dali/internal/event/common/stage-impl.h>
23 #include <dali/internal/update/common/animatable-property.h>
24 #include <dali/internal/update/common/property-owner.h>
25 #include <dali/internal/update/common/property-owner-messages.h>
26 #include <dali/internal/update/manager/update-manager.h>
27 #include <dali/internal/update/animation/scene-graph-constraint-base.h>
29 using Dali::Internal::SceneGraph::PropertyOwner;
30 using Dali::Internal::SceneGraph::PropertyBase;
31 using Dali::Internal::SceneGraph::UpdateManager;
32 using Dali::Internal::SceneGraph::AnimatableProperty;
40 CustomObject* CustomObject::New()
42 return new CustomObject();
45 const SceneGraph::PropertyOwner* CustomObject::GetSceneObject() const
50 const PropertyBase* CustomObject::GetSceneObjectAnimatableProperty( Property::Index index ) const
52 CustomProperty* custom = FindCustomProperty( index );
53 DALI_ASSERT_ALWAYS( custom && "Property index is invalid" );
54 return custom->GetSceneGraphProperty();
57 const PropertyInputImpl* CustomObject::GetSceneObjectInputProperty( Property::Index index ) const
59 return GetSceneObjectAnimatableProperty( index );
62 unsigned int CustomObject::GetDefaultPropertyCount() const
67 void CustomObject::GetDefaultPropertyIndices( Property::IndexContainer& indices ) const
71 const char* CustomObject::GetDefaultPropertyName( Property::Index index ) const
76 Property::Index CustomObject::GetDefaultPropertyIndex(const std::string& name) const
78 return Property::INVALID_INDEX;
81 bool CustomObject::IsDefaultPropertyWritable(Property::Index index) const
86 bool CustomObject::IsDefaultPropertyAnimatable(Property::Index index) const
91 bool CustomObject::IsDefaultPropertyAConstraintInput( Property::Index index ) const
96 Property::Type CustomObject::GetDefaultPropertyType(Property::Index index) const
98 return Property::NONE;
101 void CustomObject::SetDefaultProperty( Property::Index index, const Property::Value& property )
106 Property::Value CustomObject::GetDefaultProperty(Property::Index index) const
108 return Property::Value();
111 void CustomObject::InstallSceneObjectProperty( PropertyBase& newProperty, const std::string& name, unsigned int index )
113 if( NULL != mUpdateObject )
115 // mUpdateObject is being used in a separate thread; queue a message to add the property
116 InstallCustomPropertyMessage( Stage::GetCurrent()->GetUpdateInterface(), *mUpdateObject, newProperty ); // Message takes ownership
120 CustomObject::~CustomObject()
122 // Guard to allow handle destruction after Core has been destroyed
123 if( Stage::IsInstalled() )
125 if( NULL != mUpdateObject )
127 RemoveObjectMessage( Stage::GetCurrent()->GetUpdateManager(), mUpdateObject );
128 mUpdateObject = NULL; // object is about to be destroyed
133 CustomObject::CustomObject()
135 PropertyOwner* updateObject = PropertyOwner::New();
137 // Pass ownership to the update-thread
138 AddObjectMessage( Stage::GetCurrent()->GetUpdateManager(), updateObject );
140 // Keep as const since this should only be modified from update-thread
141 mUpdateObject = updateObject;
144 } // namespace Internal