2 * Copyright (c) 2023 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/actors/actor-property-handler.h>
22 #include <dali/public-api/math/vector2.h>
23 #include <dali/public-api/math/vector3.h>
25 #include <dali/devel-api/actors/actor-devel.h>
27 #include <dali/internal/event/actors/actor-impl.h>
28 #include <dali/internal/event/actors/actor-relayouter.h>
29 #include <dali/internal/event/actors/actor-sizer.h>
30 #include <dali/internal/event/common/property-helper.h>
31 #include <dali/internal/update/nodes/node-declarations.h>
32 #include <dali/internal/update/nodes/node-messages.h>
34 using Dali::Internal::SceneGraph::AnimatableProperty;
35 using Dali::Internal::SceneGraph::Node;
36 using Dali::Internal::SceneGraph::PropertyBase;
42 namespace // unnamed namespace
50 DALI_ENUM_TO_STRING_TABLE_BEGIN_WITH_TYPE(AnchorValue, ANCHOR_CONSTANT)
51 DALI_ENUM_TO_STRING_WITH_SCOPE(AnchorPoint, TOP_LEFT)
52 DALI_ENUM_TO_STRING_WITH_SCOPE(AnchorPoint, TOP_CENTER)
53 DALI_ENUM_TO_STRING_WITH_SCOPE(AnchorPoint, TOP_RIGHT)
54 DALI_ENUM_TO_STRING_WITH_SCOPE(AnchorPoint, CENTER_LEFT)
55 DALI_ENUM_TO_STRING_WITH_SCOPE(AnchorPoint, CENTER)
56 DALI_ENUM_TO_STRING_WITH_SCOPE(AnchorPoint, CENTER_RIGHT)
57 DALI_ENUM_TO_STRING_WITH_SCOPE(AnchorPoint, BOTTOM_LEFT)
58 DALI_ENUM_TO_STRING_WITH_SCOPE(AnchorPoint, BOTTOM_CENTER)
59 DALI_ENUM_TO_STRING_WITH_SCOPE(AnchorPoint, BOTTOM_RIGHT)
60 DALI_ENUM_TO_STRING_TABLE_END(ANCHOR_CONSTANT)
62 DALI_ENUM_TO_STRING_TABLE_BEGIN(COLOR_MODE)
63 DALI_ENUM_TO_STRING(USE_OWN_COLOR)
64 DALI_ENUM_TO_STRING(USE_PARENT_COLOR)
65 DALI_ENUM_TO_STRING(USE_OWN_MULTIPLY_PARENT_COLOR)
66 DALI_ENUM_TO_STRING(USE_OWN_MULTIPLY_PARENT_ALPHA)
67 DALI_ENUM_TO_STRING_TABLE_END(COLOR_MODE)
69 DALI_ENUM_TO_STRING_TABLE_BEGIN(DRAW_MODE)
70 DALI_ENUM_TO_STRING_WITH_SCOPE(DrawMode, NORMAL)
71 DALI_ENUM_TO_STRING_WITH_SCOPE(DrawMode, OVERLAY_2D)
72 DALI_ENUM_TO_STRING_TABLE_END(DRAW_MODE)
74 DALI_ENUM_TO_STRING_TABLE_BEGIN(RESIZE_POLICY)
75 DALI_ENUM_TO_STRING_WITH_SCOPE(ResizePolicy, FIXED)
76 DALI_ENUM_TO_STRING_WITH_SCOPE(ResizePolicy, USE_NATURAL_SIZE)
77 DALI_ENUM_TO_STRING_WITH_SCOPE(ResizePolicy, FILL_TO_PARENT)
78 DALI_ENUM_TO_STRING_WITH_SCOPE(ResizePolicy, SIZE_RELATIVE_TO_PARENT)
79 DALI_ENUM_TO_STRING_WITH_SCOPE(ResizePolicy, SIZE_FIXED_OFFSET_FROM_PARENT)
80 DALI_ENUM_TO_STRING_WITH_SCOPE(ResizePolicy, FIT_TO_CHILDREN)
81 DALI_ENUM_TO_STRING_WITH_SCOPE(ResizePolicy, DIMENSION_DEPENDENCY)
82 DALI_ENUM_TO_STRING_WITH_SCOPE(ResizePolicy, USE_ASSIGNED_SIZE)
83 DALI_ENUM_TO_STRING_TABLE_END(RESIZE_POLICY)
85 DALI_ENUM_TO_STRING_TABLE_BEGIN(SIZE_SCALE_POLICY)
86 DALI_ENUM_TO_STRING_WITH_SCOPE(SizeScalePolicy, USE_SIZE_SET)
87 DALI_ENUM_TO_STRING_WITH_SCOPE(SizeScalePolicy, FIT_WITH_ASPECT_RATIO)
88 DALI_ENUM_TO_STRING_WITH_SCOPE(SizeScalePolicy, FILL_WITH_ASPECT_RATIO)
89 DALI_ENUM_TO_STRING_TABLE_END(SIZE_SCALE_POLICY)
91 DALI_ENUM_TO_STRING_TABLE_BEGIN(CLIPPING_MODE)
92 DALI_ENUM_TO_STRING_WITH_SCOPE(ClippingMode, DISABLED)
93 DALI_ENUM_TO_STRING_WITH_SCOPE(ClippingMode, CLIP_CHILDREN)
94 DALI_ENUM_TO_STRING_TABLE_END(CLIPPING_MODE)
96 DALI_ENUM_TO_STRING_TABLE_BEGIN(LAYOUT_DIRECTION)
97 DALI_ENUM_TO_STRING_WITH_SCOPE(LayoutDirection, LEFT_TO_RIGHT)
98 DALI_ENUM_TO_STRING_WITH_SCOPE(LayoutDirection, RIGHT_TO_LEFT)
99 DALI_ENUM_TO_STRING_TABLE_END(LAYOUT_DIRECTION)
101 bool GetAnchorPointParentOriginConstant(const std::string& value, Vector3& anchor)
103 for(uint32_t i = 0; i < ANCHOR_CONSTANT_TABLE_COUNT; ++i)
105 uint32_t sizeIgnored = 0;
106 if(CompareTokens(value.c_str(), ANCHOR_CONSTANT_TABLE[i].name, sizeIgnored))
108 anchor = ANCHOR_CONSTANT_TABLE[i].value;
115 bool GetVector3Value(const Property::Value& property, Vector3& vector3)
117 if(property.Get(vector3))
123 std::string stringConstant;
124 if(property.Get(stringConstant))
126 return GetAnchorPointParentOriginConstant(stringConstant, vector3);
131 if(property.Get(value))
133 vector3.x = vector3.y = vector3.z = value;
141 void DetermineVector3ValueAndSet(const Property::Value& property, Actor& actor, void (Actor::*member)(const Vector3&))
144 if(GetVector3Value(property, value))
146 (actor.*member)(value);
150 template<typename ParameterType>
151 void CheckValidAndSet(const Property::Value& property, Actor& actor, void (Actor::*member)(ParameterType))
154 if(property.Get(value))
156 (actor.*member)(value);
160 template<typename ParameterType>
161 void CheckValidAndSet(const Property::Value& property, Actor& actor, void (Actor::*member)(const ParameterType&))
164 if(property.Get(value))
166 (actor.*member)(value);
170 template<typename ParameterType, typename Function>
171 void CheckValidAndSet(const Property::Value& property, Function function)
174 if(property.Get(value))
179 } // unnamed namespace
181 void Actor::PropertyHandler::SetDefaultProperty(Internal::Actor& actor, Property::Index index, const Property::Value& property)
185 case Dali::Actor::Property::PARENT_ORIGIN:
187 DetermineVector3ValueAndSet(property, actor, &Actor::SetParentOrigin);
191 case Dali::Actor::Property::PARENT_ORIGIN_X:
193 const Vector3& current = actor.GetCurrentParentOrigin();
194 actor.SetParentOrigin(Vector3(property.Get<float>(), current.y, current.z));
198 case Dali::Actor::Property::PARENT_ORIGIN_Y:
200 const Vector3& current = actor.GetCurrentParentOrigin();
201 actor.SetParentOrigin(Vector3(current.x, property.Get<float>(), current.z));
205 case Dali::Actor::Property::PARENT_ORIGIN_Z:
207 const Vector3& current = actor.GetCurrentParentOrigin();
208 actor.SetParentOrigin(Vector3(current.x, current.y, property.Get<float>()));
212 case Dali::Actor::Property::ANCHOR_POINT:
214 DetermineVector3ValueAndSet(property, actor, &Actor::SetAnchorPoint);
218 case Dali::Actor::Property::ANCHOR_POINT_X:
220 const Vector3& current = actor.GetCurrentAnchorPoint();
221 actor.SetAnchorPoint(Vector3(property.Get<float>(), current.y, current.z));
225 case Dali::Actor::Property::ANCHOR_POINT_Y:
227 const Vector3& current = actor.GetCurrentAnchorPoint();
228 actor.SetAnchorPoint(Vector3(current.x, property.Get<float>(), current.z));
232 case Dali::Actor::Property::ANCHOR_POINT_Z:
234 const Vector3& current = actor.GetCurrentAnchorPoint();
235 actor.SetAnchorPoint(Vector3(current.x, current.y, property.Get<float>()));
239 case Dali::Actor::Property::SIZE:
241 DetermineVector3ValueAndSet(property, actor, &Actor::SetSize);
245 case Dali::Actor::Property::SIZE_WIDTH:
247 actor.SetWidth(property.Get<float>());
251 case Dali::Actor::Property::SIZE_HEIGHT:
253 actor.SetHeight(property.Get<float>());
257 case Dali::Actor::Property::SIZE_DEPTH:
259 actor.SetDepth(property.Get<float>());
263 case Dali::Actor::Property::POSITION:
265 DetermineVector3ValueAndSet(property, actor, &Actor::SetPosition);
269 case Dali::Actor::Property::POSITION_X:
271 actor.SetX(property.Get<float>());
275 case Dali::Actor::Property::POSITION_Y:
277 actor.SetY(property.Get<float>());
281 case Dali::Actor::Property::POSITION_Z:
283 actor.SetZ(property.Get<float>());
287 case Dali::Actor::Property::ORIENTATION:
289 actor.SetOrientation(property.Get<Quaternion>());
293 case Dali::Actor::Property::SCALE:
295 DetermineVector3ValueAndSet(property, actor, &Actor::SetScale);
299 case Dali::Actor::Property::SCALE_X:
301 actor.SetScaleX(property.Get<float>());
305 case Dali::Actor::Property::SCALE_Y:
307 actor.SetScaleY(property.Get<float>());
311 case Dali::Actor::Property::SCALE_Z:
313 actor.SetScaleZ(property.Get<float>());
317 case Dali::Actor::Property::VISIBLE:
319 actor.SetVisible(property.Get<bool>());
323 case Dali::Actor::Property::COLOR:
325 CheckValidAndSet<Vector4>(property,
326 [&property, &actor](Vector4& color) {
327 color.a = (property.GetType() == Property::VECTOR4) ? color.a : 1.0f;
328 actor.SetColor(color);
333 case Dali::Actor::Property::COLOR_RED:
335 actor.SetColorRed(property.Get<float>());
339 case Dali::Actor::Property::COLOR_GREEN:
341 actor.SetColorGreen(property.Get<float>());
345 case Dali::Actor::Property::COLOR_BLUE:
347 actor.SetColorBlue(property.Get<float>());
351 case Dali::Actor::Property::COLOR_ALPHA:
352 case Dali::Actor::Property::OPACITY:
354 CheckValidAndSet(property, actor, &Actor::SetOpacity);
358 case Dali::Actor::Property::NAME:
360 actor.SetName(property.Get<std::string>());
364 case Dali::Actor::Property::SENSITIVE:
366 actor.SetSensitive(property.Get<bool>());
370 case Dali::Actor::Property::LEAVE_REQUIRED:
372 actor.SetLeaveRequired(property.Get<bool>());
376 case Dali::Actor::Property::INHERIT_POSITION:
378 actor.SetInheritPosition(property.Get<bool>());
382 case Dali::Actor::Property::INHERIT_ORIENTATION:
384 actor.SetInheritOrientation(property.Get<bool>());
388 case Dali::Actor::Property::INHERIT_SCALE:
390 actor.SetInheritScale(property.Get<bool>());
394 case Dali::Actor::Property::COLOR_MODE:
396 ColorMode mode = actor.mColorMode;
397 if(Scripting::GetEnumerationProperty<ColorMode>(property, COLOR_MODE_TABLE, COLOR_MODE_TABLE_COUNT, mode))
399 actor.SetColorMode(mode);
404 case Dali::Actor::Property::DRAW_MODE:
406 DrawMode::Type mode = actor.mDrawMode;
407 if(Scripting::GetEnumerationProperty<DrawMode::Type>(property, DRAW_MODE_TABLE, DRAW_MODE_TABLE_COUNT, mode))
409 actor.SetDrawMode(mode);
414 case Dali::Actor::Property::SIZE_MODE_FACTOR:
416 actor.SetSizeModeFactor(property.Get<Vector3>());
420 case Dali::Actor::Property::WIDTH_RESIZE_POLICY:
422 ResizePolicy::Type type = actor.mSizer.GetResizePolicy(Dimension::WIDTH);
423 if(Scripting::GetEnumerationProperty<ResizePolicy::Type>(property, RESIZE_POLICY_TABLE, RESIZE_POLICY_TABLE_COUNT, type))
425 actor.mSizer.SetResizePolicy(type, Dimension::WIDTH);
430 case Dali::Actor::Property::HEIGHT_RESIZE_POLICY:
432 ResizePolicy::Type type = actor.mSizer.GetResizePolicy(Dimension::HEIGHT);
433 if(Scripting::GetEnumerationProperty<ResizePolicy::Type>(property, RESIZE_POLICY_TABLE, RESIZE_POLICY_TABLE_COUNT, type))
435 actor.mSizer.SetResizePolicy(type, Dimension::HEIGHT);
440 case Dali::Actor::Property::SIZE_SCALE_POLICY:
442 SizeScalePolicy::Type type = actor.mSizer.GetSizeScalePolicy();
443 if(Scripting::GetEnumerationProperty<SizeScalePolicy::Type>(property, SIZE_SCALE_POLICY_TABLE, SIZE_SCALE_POLICY_TABLE_COUNT, type))
445 actor.mSizer.SetSizeScalePolicy(type);
450 case Dali::Actor::Property::WIDTH_FOR_HEIGHT:
452 if(property.Get<bool>())
454 actor.mSizer.SetResizePolicy(ResizePolicy::DIMENSION_DEPENDENCY, Dimension::WIDTH);
459 case Dali::Actor::Property::HEIGHT_FOR_WIDTH:
461 if(property.Get<bool>())
463 actor.mSizer.SetResizePolicy(ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT);
468 case Dali::Actor::Property::PADDING:
470 Vector4 padding = property.Get<Vector4>();
471 actor.SetPadding(Vector2(padding.x, padding.y), Dimension::WIDTH);
472 actor.SetPadding(Vector2(padding.z, padding.w), Dimension::HEIGHT);
476 case Dali::Actor::Property::MINIMUM_SIZE:
478 Vector2 size = property.Get<Vector2>();
479 actor.SetMinimumSize(size.x, Dimension::WIDTH);
480 actor.SetMinimumSize(size.y, Dimension::HEIGHT);
484 case Dali::Actor::Property::MAXIMUM_SIZE:
486 Vector2 size = property.Get<Vector2>();
487 actor.SetMaximumSize(size.x, Dimension::WIDTH);
488 actor.SetMaximumSize(size.y, Dimension::HEIGHT);
492 case Dali::DevelActor::Property::SIBLING_ORDER:
496 if(property.Get(value))
498 Actor* parent = actor.GetParent();
501 parent->SetSiblingOrderOfChild(actor, value);
507 case Dali::Actor::Property::CLIPPING_MODE:
509 ClippingMode::Type convertedValue = actor.mClippingMode;
510 if(Scripting::GetEnumerationProperty<ClippingMode::Type>(property, CLIPPING_MODE_TABLE, CLIPPING_MODE_TABLE_COUNT, convertedValue))
512 actor.mClippingMode = convertedValue;
513 SetClippingModeMessage(actor.GetEventThreadServices(), actor.GetNode(), actor.mClippingMode);
518 case Dali::Actor::Property::POSITION_USES_ANCHOR_POINT:
521 if(property.Get(value) && value != actor.mPositionUsesAnchorPoint)
523 actor.mPositionUsesAnchorPoint = value;
524 SetPositionUsesAnchorPointMessage(actor.GetEventThreadServices(), actor.GetNode(), actor.mPositionUsesAnchorPoint);
529 case Dali::Actor::Property::LAYOUT_DIRECTION:
531 Dali::LayoutDirection::Type direction = actor.mLayoutDirection;
532 actor.mInheritLayoutDirection = false;
534 if(Scripting::GetEnumerationProperty<LayoutDirection::Type>(property, LAYOUT_DIRECTION_TABLE, LAYOUT_DIRECTION_TABLE_COUNT, direction))
536 actor.mParentImpl.InheritLayoutDirectionRecursively(direction, true);
541 case Dali::Actor::Property::INHERIT_LAYOUT_DIRECTION:
543 CheckValidAndSet(property, actor, &Actor::SetInheritLayoutDirection);
547 case Dali::Actor::Property::KEYBOARD_FOCUSABLE:
549 CheckValidAndSet(property, actor, &Actor::SetKeyboardFocusable);
553 case Dali::Actor::Property::UPDATE_AREA_HINT:
555 CheckValidAndSet(property, actor, &Actor::SetUpdateAreaHint);
559 case Dali::DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START:
561 CheckValidAndSet<bool>(property, [&actor](bool value) { actor.mCaptureAllTouchAfterStart = value; });
565 case Dali::DevelActor::Property::TOUCH_AREA_OFFSET:
567 CheckValidAndSet(property, actor, &Actor::SetTouchAreaOffset);
571 case Dali::DevelActor::Property::BLEND_EQUATION:
573 CheckValidAndSet(property, actor, &Actor::SetBlendEquation);
577 case Dali::DevelActor::Property::TOUCH_FOCUSABLE:
579 CheckValidAndSet(property, actor, &Actor::SetTouchFocusable);
583 case Dali::DevelActor::Property::KEYBOARD_FOCUSABLE_CHILDREN:
585 CheckValidAndSet(property, actor, &Actor::SetKeyboardFocusableChildren);
589 case Dali::DevelActor::Property::USER_INTERACTION_ENABLED:
591 CheckValidAndSet(property, actor, &Actor::SetUserInteractionEnabled);
595 case Dali::DevelActor::Property::ALLOW_ONLY_OWN_TOUCH:
597 CheckValidAndSet<bool>(property, [&actor](bool value) { actor.mAllowOnlyOwnTouch = value; });
601 case Dali::DevelActor::Property::USE_TEXTURE_UPDATE_AREA:
603 CheckValidAndSet<bool>(property,
604 [&actor](bool value) {
605 actor.mUseTextureUpdateArea = value;
606 UseTextureUpdateAreaMessage(actor.GetEventThreadServices(), actor.GetNode(), value);
611 case Dali::DevelActor::Property::DISPATCH_TOUCH_MOTION:
613 CheckValidAndSet<bool>(property, [&actor](bool value) { actor.mDispatchTouchMotion = value; });
617 case Dali::DevelActor::Property::DISPATCH_HOVER_MOTION:
619 CheckValidAndSet<bool>(property, [&actor](bool value) { actor.mDispatchHoverMotion = value; });
625 // this can happen in the case of a non-animatable default property so just do nothing
631 void Actor::PropertyHandler::SetSceneGraphProperty(
632 Property::Index index,
633 const PropertyMetadata& entry,
634 const Property::Value& value,
635 EventThreadServices& eventThreadServices,
636 const SceneGraph::Node& node)
638 switch(entry.GetType())
640 case Property::BOOLEAN:
642 const AnimatableProperty<bool>* property = dynamic_cast<const AnimatableProperty<bool>*>(entry.GetSceneGraphProperty());
643 DALI_ASSERT_DEBUG(NULL != property);
645 // property is being used in a separate thread; queue a message to set the property
646 SceneGraph::NodePropertyMessage<bool>::Send(eventThreadServices, &node, property, &AnimatableProperty<bool>::Bake, value.Get<bool>());
651 case Property::INTEGER:
653 const AnimatableProperty<int>* property = dynamic_cast<const AnimatableProperty<int>*>(entry.GetSceneGraphProperty());
654 DALI_ASSERT_DEBUG(NULL != property);
656 // property is being used in a separate thread; queue a message to set the property
657 SceneGraph::NodePropertyMessage<int>::Send(eventThreadServices, &node, property, &AnimatableProperty<int>::Bake, value.Get<int>());
662 case Property::FLOAT:
664 const AnimatableProperty<float>* property = dynamic_cast<const AnimatableProperty<float>*>(entry.GetSceneGraphProperty());
665 DALI_ASSERT_DEBUG(NULL != property);
667 // property is being used in a separate thread; queue a message to set the property
668 SceneGraph::NodePropertyMessage<float>::Send(eventThreadServices, &node, property, &AnimatableProperty<float>::Bake, value.Get<float>());
673 case Property::VECTOR2:
675 const AnimatableProperty<Vector2>* property = dynamic_cast<const AnimatableProperty<Vector2>*>(entry.GetSceneGraphProperty());
676 DALI_ASSERT_DEBUG(NULL != property);
678 // property is being used in a separate thread; queue a message to set the property
679 if(entry.componentIndex == 0)
681 SceneGraph::NodePropertyComponentMessage<Vector2>::Send(eventThreadServices, &node, property, &AnimatableProperty<Vector2>::BakeX, value.Get<float>());
683 else if(entry.componentIndex == 1)
685 SceneGraph::NodePropertyComponentMessage<Vector2>::Send(eventThreadServices, &node, property, &AnimatableProperty<Vector2>::BakeY, value.Get<float>());
689 SceneGraph::NodePropertyMessage<Vector2>::Send(eventThreadServices, &node, property, &AnimatableProperty<Vector2>::Bake, value.Get<Vector2>());
695 case Property::VECTOR3:
697 const AnimatableProperty<Vector3>* property = dynamic_cast<const AnimatableProperty<Vector3>*>(entry.GetSceneGraphProperty());
698 DALI_ASSERT_DEBUG(NULL != property);
700 // property is being used in a separate thread; queue a message to set the property
701 if(entry.componentIndex == 0)
703 SceneGraph::NodePropertyComponentMessage<Vector3>::Send(eventThreadServices, &node, property, &AnimatableProperty<Vector3>::BakeX, value.Get<float>());
705 else if(entry.componentIndex == 1)
707 SceneGraph::NodePropertyComponentMessage<Vector3>::Send(eventThreadServices, &node, property, &AnimatableProperty<Vector3>::BakeY, value.Get<float>());
709 else if(entry.componentIndex == 2)
711 SceneGraph::NodePropertyComponentMessage<Vector3>::Send(eventThreadServices, &node, property, &AnimatableProperty<Vector3>::BakeZ, value.Get<float>());
715 SceneGraph::NodePropertyMessage<Vector3>::Send(eventThreadServices, &node, property, &AnimatableProperty<Vector3>::Bake, value.Get<Vector3>());
721 case Property::VECTOR4:
723 const AnimatableProperty<Vector4>* property = dynamic_cast<const AnimatableProperty<Vector4>*>(entry.GetSceneGraphProperty());
724 DALI_ASSERT_DEBUG(NULL != property);
726 // property is being used in a separate thread; queue a message to set the property
727 if(entry.componentIndex == 0)
729 SceneGraph::NodePropertyComponentMessage<Vector4>::Send(eventThreadServices, &node, property, &AnimatableProperty<Vector4>::BakeX, value.Get<float>());
731 else if(entry.componentIndex == 1)
733 SceneGraph::NodePropertyComponentMessage<Vector4>::Send(eventThreadServices, &node, property, &AnimatableProperty<Vector4>::BakeY, value.Get<float>());
735 else if(entry.componentIndex == 2)
737 SceneGraph::NodePropertyComponentMessage<Vector4>::Send(eventThreadServices, &node, property, &AnimatableProperty<Vector4>::BakeZ, value.Get<float>());
739 else if(entry.componentIndex == 3)
741 SceneGraph::NodePropertyComponentMessage<Vector4>::Send(eventThreadServices, &node, property, &AnimatableProperty<Vector4>::BakeW, value.Get<float>());
745 SceneGraph::NodePropertyMessage<Vector4>::Send(eventThreadServices, &node, property, &AnimatableProperty<Vector4>::Bake, value.Get<Vector4>());
751 case Property::ROTATION:
753 const AnimatableProperty<Quaternion>* property = dynamic_cast<const AnimatableProperty<Quaternion>*>(entry.GetSceneGraphProperty());
754 DALI_ASSERT_DEBUG(NULL != property);
756 // property is being used in a separate thread; queue a message to set the property
757 SceneGraph::NodePropertyMessage<Quaternion>::Send(eventThreadServices, &node, property, &AnimatableProperty<Quaternion>::Bake, value.Get<Quaternion>());
762 case Property::MATRIX:
764 const AnimatableProperty<Matrix>* property = dynamic_cast<const AnimatableProperty<Matrix>*>(entry.GetSceneGraphProperty());
765 DALI_ASSERT_DEBUG(NULL != property);
767 // property is being used in a separate thread; queue a message to set the property
768 SceneGraph::NodePropertyMessage<Matrix>::Send(eventThreadServices, &node, property, &AnimatableProperty<Matrix>::Bake, value.Get<Matrix>());
773 case Property::MATRIX3:
775 const AnimatableProperty<Matrix3>* property = dynamic_cast<const AnimatableProperty<Matrix3>*>(entry.GetSceneGraphProperty());
776 DALI_ASSERT_DEBUG(NULL != property);
778 // property is being used in a separate thread; queue a message to set the property
779 SceneGraph::NodePropertyMessage<Matrix3>::Send(eventThreadServices, &node, property, &AnimatableProperty<Matrix3>::Bake, value.Get<Matrix3>());
786 // nothing to do for other types
791 void Actor::PropertyHandler::OnNotifyDefaultPropertyAnimation(Internal::Actor& actor, Animation& animation, Property::Index index, const Property::Value& value, Animation::Type animationType)
793 switch(animationType)
796 case Animation::BETWEEN:
800 case Dali::Actor::Property::SIZE:
803 if(value.Get(targetSize))
805 actor.mSizer.OnAnimateSize(animation, targetSize, false);
810 case Dali::Actor::Property::SIZE_WIDTH:
815 actor.mSizer.OnAnimateWidth(animation, width, false);
820 case Dali::Actor::Property::SIZE_HEIGHT:
823 if(value.Get(height))
825 actor.mSizer.OnAnimateHeight(animation, height, false);
830 case Dali::Actor::Property::SIZE_DEPTH:
835 actor.mSizer.OnAnimateDepth(animation, depth, false);
840 case Dali::Actor::Property::POSITION:
842 value.Get(actor.mTargetPosition);
846 case Dali::Actor::Property::POSITION_X:
848 value.Get(actor.mTargetPosition.x);
852 case Dali::Actor::Property::POSITION_Y:
854 value.Get(actor.mTargetPosition.y);
858 case Dali::Actor::Property::POSITION_Z:
860 value.Get(actor.mTargetPosition.z);
864 case Dali::Actor::Property::ORIENTATION:
866 value.Get(actor.mTargetOrientation);
870 case Dali::Actor::Property::SCALE:
872 value.Get(actor.mTargetScale);
876 case Dali::Actor::Property::SCALE_X:
878 value.Get(actor.mTargetScale.x);
882 case Dali::Actor::Property::SCALE_Y:
884 value.Get(actor.mTargetScale.y);
888 case Dali::Actor::Property::SCALE_Z:
890 value.Get(actor.mTargetScale.z);
894 case Dali::Actor::Property::VISIBLE:
896 actor.SetVisibleInternal(value.Get<bool>(), SendMessage::FALSE);
900 case Dali::Actor::Property::COLOR:
902 value.Get(actor.mTargetColor);
906 case Dali::Actor::Property::COLOR_RED:
908 value.Get(actor.mTargetColor.r);
912 case Dali::Actor::Property::COLOR_GREEN:
914 value.Get(actor.mTargetColor.g);
918 case Dali::Actor::Property::COLOR_BLUE:
920 value.Get(actor.mTargetColor.b);
924 case Dali::Actor::Property::COLOR_ALPHA:
925 case Dali::Actor::Property::OPACITY:
927 value.Get(actor.mTargetColor.a);
933 // Not an animatable property. Do nothing.
944 case Dali::Actor::Property::SIZE:
947 if(value.Get(targetSize))
949 actor.mSizer.OnAnimateSize(animation, targetSize, true);
954 case Dali::Actor::Property::SIZE_WIDTH:
959 actor.mSizer.OnAnimateWidth(animation, width, true);
964 case Dali::Actor::Property::SIZE_HEIGHT:
967 if(value.Get(height))
969 actor.mSizer.OnAnimateHeight(animation, height, true);
974 case Dali::Actor::Property::SIZE_DEPTH:
979 actor.mSizer.OnAnimateDepth(animation, depth, true);
984 case Dali::Actor::Property::POSITION:
986 AdjustValue<Vector3>(actor.mTargetPosition, value);
990 case Dali::Actor::Property::POSITION_X:
992 AdjustValue<float>(actor.mTargetPosition.x, value);
996 case Dali::Actor::Property::POSITION_Y:
998 AdjustValue<float>(actor.mTargetPosition.y, value);
1002 case Dali::Actor::Property::POSITION_Z:
1004 AdjustValue<float>(actor.mTargetPosition.z, value);
1008 case Dali::Actor::Property::ORIENTATION:
1010 Quaternion relativeValue;
1011 if(value.Get(relativeValue))
1013 actor.mTargetOrientation *= relativeValue;
1018 case Dali::Actor::Property::SCALE:
1020 AdjustValue<Vector3>(actor.mTargetScale, value);
1024 case Dali::Actor::Property::SCALE_X:
1026 AdjustValue<float>(actor.mTargetScale.x, value);
1030 case Dali::Actor::Property::SCALE_Y:
1032 AdjustValue<float>(actor.mTargetScale.y, value);
1036 case Dali::Actor::Property::SCALE_Z:
1038 AdjustValue<float>(actor.mTargetScale.z, value);
1042 case Dali::Actor::Property::VISIBLE:
1044 bool relativeValue = false;
1045 if(value.Get(relativeValue))
1047 bool visible = actor.mVisible || relativeValue;
1048 actor.SetVisibleInternal(visible, SendMessage::FALSE);
1053 case Dali::Actor::Property::COLOR:
1055 AdjustValue<Vector4>(actor.mTargetColor, value);
1059 case Dali::Actor::Property::COLOR_RED:
1061 AdjustValue<float>(actor.mTargetColor.r, value);
1065 case Dali::Actor::Property::COLOR_GREEN:
1067 AdjustValue<float>(actor.mTargetColor.g, value);
1071 case Dali::Actor::Property::COLOR_BLUE:
1073 AdjustValue<float>(actor.mTargetColor.b, value);
1077 case Dali::Actor::Property::COLOR_ALPHA:
1078 case Dali::Actor::Property::OPACITY:
1080 AdjustValue<float>(actor.mTargetColor.a, value);
1086 // Not an animatable property. Do nothing.
1095 const PropertyBase* Actor::PropertyHandler::GetSceneObjectAnimatableProperty(Property::Index index, const SceneGraph::Node& node)
1097 const PropertyBase* property(nullptr);
1101 case Dali::Actor::Property::SIZE: // FALLTHROUGH
1102 case Dali::Actor::Property::SIZE_WIDTH: // FALLTHROUGH
1103 case Dali::Actor::Property::SIZE_HEIGHT: // FALLTHROUGH
1104 case Dali::Actor::Property::SIZE_DEPTH:
1106 property = &node.mSize;
1109 case Dali::Actor::Property::POSITION: // FALLTHROUGH
1110 case Dali::Actor::Property::POSITION_X: // FALLTHROUGH
1111 case Dali::Actor::Property::POSITION_Y: // FALLTHROUGH
1112 case Dali::Actor::Property::POSITION_Z:
1114 property = &node.mPosition;
1117 case Dali::Actor::Property::ORIENTATION:
1119 property = &node.mOrientation;
1122 case Dali::Actor::Property::SCALE: // FALLTHROUGH
1123 case Dali::Actor::Property::SCALE_X: // FALLTHROUGH
1124 case Dali::Actor::Property::SCALE_Y: // FALLTHROUGH
1125 case Dali::Actor::Property::SCALE_Z:
1127 property = &node.mScale;
1130 case Dali::Actor::Property::VISIBLE:
1132 property = &node.mVisible;
1135 case Dali::Actor::Property::COLOR: // FALLTHROUGH
1136 case Dali::Actor::Property::COLOR_RED: // FALLTHROUGH
1137 case Dali::Actor::Property::COLOR_GREEN: // FALLTHROUGH
1138 case Dali::Actor::Property::COLOR_BLUE: // FALLTHROUGH
1139 case Dali::Actor::Property::COLOR_ALPHA: // FALLTHROUGH
1140 case Dali::Actor::Property::OPACITY:
1142 property = &node.mColor;
1154 const PropertyInputImpl* Actor::PropertyHandler::GetSceneObjectInputProperty(Property::Index index, const SceneGraph::Node& node)
1156 const PropertyInputImpl* property(nullptr);
1160 case Dali::Actor::Property::PARENT_ORIGIN: // FALLTHROUGH
1161 case Dali::Actor::Property::PARENT_ORIGIN_X: // FALLTHROUGH
1162 case Dali::Actor::Property::PARENT_ORIGIN_Y: // FALLTHROUGH
1163 case Dali::Actor::Property::PARENT_ORIGIN_Z:
1165 property = &node.mParentOrigin;
1168 case Dali::Actor::Property::ANCHOR_POINT: // FALLTHROUGH
1169 case Dali::Actor::Property::ANCHOR_POINT_X: // FALLTHROUGH
1170 case Dali::Actor::Property::ANCHOR_POINT_Y: // FALLTHROUGH
1171 case Dali::Actor::Property::ANCHOR_POINT_Z:
1173 property = &node.mAnchorPoint;
1176 case Dali::Actor::Property::WORLD_POSITION: // FALLTHROUGH
1177 case Dali::Actor::Property::WORLD_POSITION_X: // FALLTHROUGH
1178 case Dali::Actor::Property::WORLD_POSITION_Y: // FALLTHROUGH
1179 case Dali::Actor::Property::WORLD_POSITION_Z:
1181 property = &node.mWorldPosition;
1184 case Dali::Actor::Property::WORLD_ORIENTATION:
1186 property = &node.mWorldOrientation;
1189 case Dali::Actor::Property::WORLD_SCALE:
1191 property = &node.mWorldScale;
1194 case Dali::Actor::Property::WORLD_COLOR:
1196 property = &node.mWorldColor;
1199 case Dali::Actor::Property::WORLD_MATRIX:
1201 property = &node.mWorldMatrix;
1204 case Dali::Actor::Property::CULLED:
1206 property = &node.mCulled;
1218 int32_t Actor::PropertyHandler::GetPropertyComponentIndex(Property::Index index)
1220 int32_t componentIndex = Property::INVALID_COMPONENT_INDEX;
1224 case Dali::Actor::Property::PARENT_ORIGIN_X:
1225 case Dali::Actor::Property::ANCHOR_POINT_X:
1226 case Dali::Actor::Property::SIZE_WIDTH:
1227 case Dali::Actor::Property::POSITION_X:
1228 case Dali::Actor::Property::WORLD_POSITION_X:
1229 case Dali::Actor::Property::SCALE_X:
1230 case Dali::Actor::Property::COLOR_RED:
1236 case Dali::Actor::Property::PARENT_ORIGIN_Y:
1237 case Dali::Actor::Property::ANCHOR_POINT_Y:
1238 case Dali::Actor::Property::SIZE_HEIGHT:
1239 case Dali::Actor::Property::POSITION_Y:
1240 case Dali::Actor::Property::WORLD_POSITION_Y:
1241 case Dali::Actor::Property::SCALE_Y:
1242 case Dali::Actor::Property::COLOR_GREEN:
1248 case Dali::Actor::Property::PARENT_ORIGIN_Z:
1249 case Dali::Actor::Property::ANCHOR_POINT_Z:
1250 case Dali::Actor::Property::SIZE_DEPTH:
1251 case Dali::Actor::Property::POSITION_Z:
1252 case Dali::Actor::Property::WORLD_POSITION_Z:
1253 case Dali::Actor::Property::SCALE_Z:
1254 case Dali::Actor::Property::COLOR_BLUE:
1260 case Dali::Actor::Property::COLOR_ALPHA:
1261 case Dali::Actor::Property::OPACITY:
1274 return componentIndex;
1277 bool Actor::PropertyHandler::GetCachedPropertyValue(const Internal::Actor& actor, Property::Index index, Property::Value& value)
1279 bool valueSet = true;
1283 case Dali::Actor::Property::PARENT_ORIGIN:
1285 value = actor.GetCurrentParentOrigin();
1289 case Dali::Actor::Property::PARENT_ORIGIN_X:
1291 value = actor.GetCurrentParentOrigin().x;
1295 case Dali::Actor::Property::PARENT_ORIGIN_Y:
1297 value = actor.GetCurrentParentOrigin().y;
1301 case Dali::Actor::Property::PARENT_ORIGIN_Z:
1303 value = actor.GetCurrentParentOrigin().z;
1307 case Dali::Actor::Property::ANCHOR_POINT:
1309 value = actor.GetCurrentAnchorPoint();
1313 case Dali::Actor::Property::ANCHOR_POINT_X:
1315 value = actor.GetCurrentAnchorPoint().x;
1319 case Dali::Actor::Property::ANCHOR_POINT_Y:
1321 value = actor.GetCurrentAnchorPoint().y;
1325 case Dali::Actor::Property::ANCHOR_POINT_Z:
1327 value = actor.GetCurrentAnchorPoint().z;
1331 case Dali::Actor::Property::SIZE:
1333 value = actor.GetTargetSize();
1337 case Dali::Actor::Property::SIZE_WIDTH:
1339 value = actor.GetTargetSize().width;
1343 case Dali::Actor::Property::SIZE_HEIGHT:
1345 value = actor.GetTargetSize().height;
1349 case Dali::Actor::Property::SIZE_DEPTH:
1351 value = actor.GetTargetSize().depth;
1355 case Dali::Actor::Property::POSITION:
1357 value = actor.GetTargetPosition();
1361 case Dali::Actor::Property::POSITION_X:
1363 value = actor.GetTargetPosition().x;
1367 case Dali::Actor::Property::POSITION_Y:
1369 value = actor.GetTargetPosition().y;
1373 case Dali::Actor::Property::POSITION_Z:
1375 value = actor.GetTargetPosition().z;
1379 case Dali::Actor::Property::ORIENTATION:
1381 value = actor.mTargetOrientation;
1385 case Dali::Actor::Property::SCALE:
1387 value = actor.mTargetScale;
1391 case Dali::Actor::Property::SCALE_X:
1393 value = actor.mTargetScale.x;
1397 case Dali::Actor::Property::SCALE_Y:
1399 value = actor.mTargetScale.y;
1403 case Dali::Actor::Property::SCALE_Z:
1405 value = actor.mTargetScale.z;
1409 case Dali::Actor::Property::VISIBLE:
1411 value = actor.mVisible;
1415 case Dali::Actor::Property::COLOR:
1417 value = actor.mTargetColor;
1421 case Dali::Actor::Property::COLOR_RED:
1423 value = actor.mTargetColor.r;
1427 case Dali::Actor::Property::COLOR_GREEN:
1429 value = actor.mTargetColor.g;
1433 case Dali::Actor::Property::COLOR_BLUE:
1435 value = actor.mTargetColor.b;
1439 case Dali::Actor::Property::COLOR_ALPHA:
1440 case Dali::Actor::Property::OPACITY:
1442 value = actor.mTargetColor.a;
1446 case Dali::Actor::Property::NAME:
1448 value = std::string(actor.GetName());
1452 case Dali::Actor::Property::SENSITIVE:
1454 value = actor.IsSensitive();
1458 case Dali::Actor::Property::LEAVE_REQUIRED:
1460 value = actor.GetLeaveRequired();
1464 case Dali::Actor::Property::INHERIT_POSITION:
1466 value = actor.IsPositionInherited();
1470 case Dali::Actor::Property::INHERIT_ORIENTATION:
1472 value = actor.IsOrientationInherited();
1476 case Dali::Actor::Property::INHERIT_SCALE:
1478 value = actor.IsScaleInherited();
1482 case Dali::Actor::Property::COLOR_MODE:
1484 value = actor.GetColorMode();
1488 case Dali::Actor::Property::DRAW_MODE:
1490 value = actor.GetDrawMode();
1494 case Dali::Actor::Property::SIZE_MODE_FACTOR:
1496 value = actor.GetSizeModeFactor();
1500 case Dali::Actor::Property::WIDTH_RESIZE_POLICY:
1502 value = Scripting::GetLinearEnumerationName<ResizePolicy::Type>(actor.mSizer.GetResizePolicy(Dimension::WIDTH), RESIZE_POLICY_TABLE, RESIZE_POLICY_TABLE_COUNT);
1506 case Dali::Actor::Property::HEIGHT_RESIZE_POLICY:
1508 value = Scripting::GetLinearEnumerationName<ResizePolicy::Type>(actor.mSizer.GetResizePolicy(Dimension::HEIGHT), RESIZE_POLICY_TABLE, RESIZE_POLICY_TABLE_COUNT);
1512 case Dali::Actor::Property::SIZE_SCALE_POLICY:
1514 value = actor.mSizer.GetSizeScalePolicy();
1518 case Dali::Actor::Property::WIDTH_FOR_HEIGHT:
1520 value = (actor.mSizer.GetResizePolicy(Dimension::WIDTH) == ResizePolicy::DIMENSION_DEPENDENCY) && (actor.mSizer.GetDimensionDependency(Dimension::WIDTH) == Dimension::HEIGHT);
1524 case Dali::Actor::Property::HEIGHT_FOR_WIDTH:
1526 value = (actor.mSizer.GetResizePolicy(Dimension::HEIGHT) == ResizePolicy::DIMENSION_DEPENDENCY) && (actor.mSizer.GetDimensionDependency(Dimension::HEIGHT) == Dimension::WIDTH);
1530 case Dali::Actor::Property::PADDING:
1532 Vector2 widthPadding = actor.GetPadding(Dimension::WIDTH);
1533 Vector2 heightPadding = actor.GetPadding(Dimension::HEIGHT);
1534 value = Vector4(widthPadding.x, widthPadding.y, heightPadding.x, heightPadding.y);
1538 case Dali::Actor::Property::MINIMUM_SIZE:
1540 value = Vector2(actor.GetMinimumSize(Dimension::WIDTH), actor.GetMinimumSize(Dimension::HEIGHT));
1544 case Dali::Actor::Property::MAXIMUM_SIZE:
1546 value = Vector2(actor.GetMaximumSize(Dimension::WIDTH), actor.GetMaximumSize(Dimension::HEIGHT));
1550 case Dali::Actor::Property::CLIPPING_MODE:
1552 value = actor.mClippingMode;
1556 case Dali::DevelActor::Property::SIBLING_ORDER:
1558 Actor* parent = actor.GetParent();
1561 value = static_cast<int>(parent->GetSiblingOrderOfChild(actor));
1570 case Dali::Actor::Property::SCREEN_POSITION:
1572 value = actor.GetCurrentScreenPosition();
1576 case Dali::Actor::Property::POSITION_USES_ANCHOR_POINT:
1578 value = actor.mPositionUsesAnchorPoint;
1582 case Dali::Actor::Property::LAYOUT_DIRECTION:
1584 value = actor.mLayoutDirection;
1588 case Dali::Actor::Property::INHERIT_LAYOUT_DIRECTION:
1590 value = actor.IsLayoutDirectionInherited();
1594 case Dali::Actor::Property::ID:
1596 value = static_cast<int>(actor.GetId());
1600 case Dali::Actor::Property::HIERARCHY_DEPTH:
1602 value = actor.GetHierarchyDepth();
1606 case Dali::Actor::Property::IS_ROOT:
1608 value = actor.IsRoot();
1612 case Dali::Actor::Property::IS_LAYER:
1614 value = actor.IsLayer();
1618 case Dali::Actor::Property::CONNECTED_TO_SCENE:
1620 value = actor.OnScene();
1624 case Dali::Actor::Property::KEYBOARD_FOCUSABLE:
1626 value = actor.IsKeyboardFocusable();
1630 case Dali::DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START:
1632 value = actor.mCaptureAllTouchAfterStart;
1636 case Dali::DevelActor::Property::TOUCH_AREA_OFFSET:
1638 value = actor.GetTouchAreaOffset();
1642 case Dali::DevelActor::Property::BLEND_EQUATION:
1644 value = actor.GetBlendEquation();
1648 case Dali::DevelActor::Property::TOUCH_FOCUSABLE:
1650 value = actor.IsTouchFocusable();
1654 case Dali::DevelActor::Property::KEYBOARD_FOCUSABLE_CHILDREN:
1656 value = actor.AreChildrenKeyBoardFocusable();
1660 case Dali::DevelActor::Property::USER_INTERACTION_ENABLED:
1662 value = actor.IsUserInteractionEnabled();
1666 case Dali::DevelActor::Property::ALLOW_ONLY_OWN_TOUCH:
1668 value = actor.mAllowOnlyOwnTouch;
1672 case Dali::DevelActor::Property::USE_TEXTURE_UPDATE_AREA:
1674 value = actor.mUseTextureUpdateArea;
1678 case Dali::DevelActor::Property::DISPATCH_TOUCH_MOTION:
1680 value = actor.mDispatchTouchMotion;
1684 case Dali::DevelActor::Property::DISPATCH_HOVER_MOTION:
1686 value = actor.mDispatchHoverMotion;
1692 // Must be a scene-graph only property
1701 bool Actor::PropertyHandler::GetCurrentPropertyValue(const Internal::Actor& actor, Property::Index index, Property::Value& value)
1703 bool valueSet = true;
1707 case Dali::Actor::Property::SIZE:
1709 value = actor.GetCurrentSize();
1713 case Dali::Actor::Property::SIZE_WIDTH:
1715 value = actor.GetCurrentSize().width;
1719 case Dali::Actor::Property::SIZE_HEIGHT:
1721 value = actor.GetCurrentSize().height;
1725 case Dali::Actor::Property::SIZE_DEPTH:
1727 value = actor.GetCurrentSize().depth;
1731 case Dali::Actor::Property::POSITION:
1733 value = actor.GetCurrentPosition();
1737 case Dali::Actor::Property::POSITION_X:
1739 value = actor.GetCurrentPosition().x;
1743 case Dali::Actor::Property::POSITION_Y:
1745 value = actor.GetCurrentPosition().y;
1749 case Dali::Actor::Property::POSITION_Z:
1751 value = actor.GetCurrentPosition().z;
1755 case Dali::Actor::Property::WORLD_POSITION:
1757 value = actor.GetCurrentWorldPosition();
1761 case Dali::Actor::Property::WORLD_POSITION_X:
1763 value = actor.GetCurrentWorldPosition().x;
1767 case Dali::Actor::Property::WORLD_POSITION_Y:
1769 value = actor.GetCurrentWorldPosition().y;
1773 case Dali::Actor::Property::WORLD_POSITION_Z:
1775 value = actor.GetCurrentWorldPosition().z;
1779 case Dali::Actor::Property::ORIENTATION:
1781 value = actor.GetCurrentOrientation();
1785 case Dali::Actor::Property::WORLD_ORIENTATION:
1787 value = actor.GetCurrentWorldOrientation();
1791 case Dali::Actor::Property::SCALE:
1793 value = actor.GetCurrentScale();
1797 case Dali::Actor::Property::SCALE_X:
1799 value = actor.GetCurrentScale().x;
1803 case Dali::Actor::Property::SCALE_Y:
1805 value = actor.GetCurrentScale().y;
1809 case Dali::Actor::Property::SCALE_Z:
1811 value = actor.GetCurrentScale().z;
1815 case Dali::Actor::Property::WORLD_SCALE:
1817 value = actor.GetCurrentWorldScale();
1821 case Dali::Actor::Property::COLOR:
1823 value = actor.GetCurrentColor();
1827 case Dali::Actor::Property::COLOR_RED:
1829 value = actor.GetCurrentColor().r;
1833 case Dali::Actor::Property::COLOR_GREEN:
1835 value = actor.GetCurrentColor().g;
1839 case Dali::Actor::Property::COLOR_BLUE:
1841 value = actor.GetCurrentColor().b;
1845 case Dali::Actor::Property::COLOR_ALPHA:
1846 case Dali::Actor::Property::OPACITY:
1848 value = actor.GetCurrentColor().a;
1852 case Dali::Actor::Property::WORLD_COLOR:
1854 value = actor.GetCurrentWorldColor();
1858 case Dali::Actor::Property::WORLD_MATRIX:
1860 value = actor.GetCurrentWorldMatrix();
1864 case Dali::Actor::Property::VISIBLE:
1866 value = actor.IsVisible();
1870 case Dali::Actor::Property::CULLED:
1872 value = actor.GetNode().IsCulled(actor.GetEventThreadServices().GetEventBufferIndex());
1876 case Dali::Actor::Property::UPDATE_AREA_HINT:
1878 // node is being used in a separate thread, the value from the previous update is the same, set by user
1879 value = Vector4(actor.GetNode().GetUpdateAreaHint());
1883 case Dali::DevelActor::Property::USE_TEXTURE_UPDATE_AREA:
1885 // node is being used in a separate thread, the value from the previous update is the same, set by user
1886 value = actor.GetNode().IsTextureUpdateAreaUsed();
1891 // Must be an event-side only property
1900 } // namespace Internal