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/internal/event/actors/actor-property-handler.h>
22 #include <dali/public-api/math/vector2.h>
23 #include <dali/public-api/math/vector3.h>
24 #include <dali/devel-api/actors/actor-devel.h>
25 #include <dali/internal/event/actors/actor-impl.h>
26 #include <dali/internal/event/common/property-helper.h>
27 #include <dali/internal/update/nodes/node-messages.h>
28 #include <dali/internal/update/nodes/node-declarations.h>
30 using Dali::Internal::SceneGraph::Node;
31 using Dali::Internal::SceneGraph::AnimatableProperty;
32 using Dali::Internal::SceneGraph::PropertyBase;
40 namespace // unnamed namespace
49 DALI_ENUM_TO_STRING_TABLE_BEGIN_WITH_TYPE( AnchorValue, ANCHOR_CONSTANT )
50 DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, TOP_LEFT )
51 DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, TOP_CENTER )
52 DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, TOP_RIGHT )
53 DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, CENTER_LEFT )
54 DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, CENTER )
55 DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, CENTER_RIGHT )
56 DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, BOTTOM_LEFT )
57 DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, BOTTOM_CENTER )
58 DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, BOTTOM_RIGHT )
59 DALI_ENUM_TO_STRING_TABLE_END( ANCHOR_CONSTANT )
61 DALI_ENUM_TO_STRING_TABLE_BEGIN( COLOR_MODE )
62 DALI_ENUM_TO_STRING( USE_OWN_COLOR )
63 DALI_ENUM_TO_STRING( USE_PARENT_COLOR )
64 DALI_ENUM_TO_STRING( USE_OWN_MULTIPLY_PARENT_COLOR )
65 DALI_ENUM_TO_STRING( USE_OWN_MULTIPLY_PARENT_ALPHA )
66 DALI_ENUM_TO_STRING_TABLE_END( COLOR_MODE )
68 DALI_ENUM_TO_STRING_TABLE_BEGIN( DRAW_MODE )
69 DALI_ENUM_TO_STRING_WITH_SCOPE( DrawMode, NORMAL )
70 DALI_ENUM_TO_STRING_WITH_SCOPE( DrawMode, OVERLAY_2D )
71 DALI_ENUM_TO_STRING_TABLE_END( DRAW_MODE )
73 DALI_ENUM_TO_STRING_TABLE_BEGIN( RESIZE_POLICY )
74 DALI_ENUM_TO_STRING_WITH_SCOPE( ResizePolicy, FIXED )
75 DALI_ENUM_TO_STRING_WITH_SCOPE( ResizePolicy, USE_NATURAL_SIZE )
76 DALI_ENUM_TO_STRING_WITH_SCOPE( ResizePolicy, FILL_TO_PARENT )
77 DALI_ENUM_TO_STRING_WITH_SCOPE( ResizePolicy, SIZE_RELATIVE_TO_PARENT )
78 DALI_ENUM_TO_STRING_WITH_SCOPE( ResizePolicy, SIZE_FIXED_OFFSET_FROM_PARENT )
79 DALI_ENUM_TO_STRING_WITH_SCOPE( ResizePolicy, FIT_TO_CHILDREN )
80 DALI_ENUM_TO_STRING_WITH_SCOPE( ResizePolicy, DIMENSION_DEPENDENCY )
81 DALI_ENUM_TO_STRING_WITH_SCOPE( ResizePolicy, USE_ASSIGNED_SIZE )
82 DALI_ENUM_TO_STRING_TABLE_END( RESIZE_POLICY )
84 DALI_ENUM_TO_STRING_TABLE_BEGIN( SIZE_SCALE_POLICY )
85 DALI_ENUM_TO_STRING_WITH_SCOPE( SizeScalePolicy, USE_SIZE_SET )
86 DALI_ENUM_TO_STRING_WITH_SCOPE( SizeScalePolicy, FIT_WITH_ASPECT_RATIO )
87 DALI_ENUM_TO_STRING_WITH_SCOPE( SizeScalePolicy, FILL_WITH_ASPECT_RATIO )
88 DALI_ENUM_TO_STRING_TABLE_END( SIZE_SCALE_POLICY )
90 DALI_ENUM_TO_STRING_TABLE_BEGIN( CLIPPING_MODE )
91 DALI_ENUM_TO_STRING_WITH_SCOPE( ClippingMode, DISABLED )
92 DALI_ENUM_TO_STRING_WITH_SCOPE( ClippingMode, CLIP_CHILDREN )
93 DALI_ENUM_TO_STRING_TABLE_END( CLIPPING_MODE )
95 DALI_ENUM_TO_STRING_TABLE_BEGIN( LAYOUT_DIRECTION )
96 DALI_ENUM_TO_STRING_WITH_SCOPE( LayoutDirection, LEFT_TO_RIGHT )
97 DALI_ENUM_TO_STRING_WITH_SCOPE( LayoutDirection, RIGHT_TO_LEFT )
98 DALI_ENUM_TO_STRING_TABLE_END( LAYOUT_DIRECTION )
100 bool GetAnchorPointConstant( const std::string& value, Vector3& anchor )
102 for( uint32_t i = 0; i < ANCHOR_CONSTANT_TABLE_COUNT; ++i )
104 uint32_t sizeIgnored = 0;
105 if( CompareTokens( value.c_str(), ANCHOR_CONSTANT_TABLE[ i ].name, sizeIgnored ) )
107 anchor = ANCHOR_CONSTANT_TABLE[ i ].value;
114 inline bool GetParentOriginConstant( const std::string& value, Vector3& parentOrigin )
116 // Values are the same so just use the same table as anchor-point
117 return GetAnchorPointConstant( value, parentOrigin );
120 } // unnamed namespace
122 void Actor::PropertyHandler::SetDefaultProperty( Internal::Actor& actor, Property::Index index, const Property::Value& property )
126 case Dali::Actor::Property::PARENT_ORIGIN:
128 Property::Type type = property.GetType();
129 if( type == Property::VECTOR3 )
131 actor.SetParentOrigin( property.Get< Vector3 >() );
133 else if ( type == Property::STRING )
135 std::string parentOriginString;
136 property.Get( parentOriginString );
137 Vector3 parentOrigin;
138 if( GetParentOriginConstant( parentOriginString, parentOrigin ) )
140 actor.SetParentOrigin( parentOrigin );
146 case Dali::Actor::Property::PARENT_ORIGIN_X:
148 const Vector3& current = actor.GetCurrentParentOrigin();
149 actor.SetParentOrigin( Vector3( property.Get< float >(), current.y, current.z ) );
153 case Dali::Actor::Property::PARENT_ORIGIN_Y:
155 const Vector3& current = actor.GetCurrentParentOrigin();
156 actor.SetParentOrigin( Vector3( current.x, property.Get< float >(), current.z ) );
160 case Dali::Actor::Property::PARENT_ORIGIN_Z:
162 const Vector3& current = actor.GetCurrentParentOrigin();
163 actor.SetParentOrigin( Vector3( current.x, current.y, property.Get< float >() ) );
167 case Dali::Actor::Property::ANCHOR_POINT:
169 Property::Type type = property.GetType();
170 if( type == Property::VECTOR3 )
172 actor.SetAnchorPoint( property.Get< Vector3 >() );
174 else if ( type == Property::STRING )
176 std::string anchorPointString;
177 property.Get( anchorPointString );
179 if( GetAnchorPointConstant( anchorPointString, anchor ) )
181 actor.SetAnchorPoint( anchor );
187 case Dali::Actor::Property::ANCHOR_POINT_X:
189 const Vector3& current = actor.GetCurrentAnchorPoint();
190 actor.SetAnchorPoint( Vector3( property.Get< float >(), current.y, current.z ) );
194 case Dali::Actor::Property::ANCHOR_POINT_Y:
196 const Vector3& current = actor.GetCurrentAnchorPoint();
197 actor.SetAnchorPoint( Vector3( current.x, property.Get< float >(), current.z ) );
201 case Dali::Actor::Property::ANCHOR_POINT_Z:
203 const Vector3& current = actor.GetCurrentAnchorPoint();
204 actor.SetAnchorPoint( Vector3( current.x, current.y, property.Get< float >() ) );
208 case Dali::Actor::Property::SIZE:
210 Property::Type type = property.GetType();
211 if( type == Property::VECTOR2 )
213 actor.SetSize( property.Get< Vector2 >() );
215 else if ( type == Property::VECTOR3 )
217 actor.SetSize( property.Get< Vector3 >() );
222 case Dali::Actor::Property::SIZE_WIDTH:
224 actor.SetWidth( property.Get< float >() );
228 case Dali::Actor::Property::SIZE_HEIGHT:
230 actor.SetHeight( property.Get< float >() );
234 case Dali::Actor::Property::SIZE_DEPTH:
236 actor.SetDepth( property.Get< float >() );
240 case Dali::Actor::Property::POSITION:
242 Property::Type type = property.GetType();
243 if( type == Property::VECTOR2 )
245 Vector2 position = property.Get< Vector2 >();
246 actor.SetPosition( Vector3( position.x, position.y, 0.0f ) );
248 else if ( type == Property::VECTOR3 )
250 actor.SetPosition( property.Get< Vector3 >() );
255 case Dali::Actor::Property::POSITION_X:
257 actor.SetX( property.Get< float >() );
261 case Dali::Actor::Property::POSITION_Y:
263 actor.SetY( property.Get< float >() );
267 case Dali::Actor::Property::POSITION_Z:
269 actor.SetZ( property.Get< float >() );
273 case Dali::Actor::Property::ORIENTATION:
275 actor.SetOrientation( property.Get< Quaternion >() );
279 case Dali::Actor::Property::SCALE:
281 Property::Type type = property.GetType();
282 if( type == Property::FLOAT )
284 float scale = property.Get< float >();
285 actor.SetScale( scale, scale, scale );
287 else if ( type == Property::VECTOR3 )
289 actor.SetScale( property.Get< Vector3 >() );
294 case Dali::Actor::Property::SCALE_X:
296 actor.SetScaleX( property.Get< float >() );
300 case Dali::Actor::Property::SCALE_Y:
302 actor.SetScaleY( property.Get< float >() );
306 case Dali::Actor::Property::SCALE_Z:
308 actor.SetScaleZ( property.Get< float >() );
312 case Dali::Actor::Property::VISIBLE:
314 actor.SetVisible( property.Get< bool >() );
318 case Dali::Actor::Property::COLOR:
320 Property::Type type = property.GetType();
321 if( type == Property::VECTOR3 )
323 Vector3 color = property.Get< Vector3 >();
324 actor.SetColor( Vector4( color.r, color.g, color.b, 1.0f ) );
326 else if( type == Property::VECTOR4 )
328 actor.SetColor( property.Get< Vector4 >() );
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:
355 if( property.Get( value ) )
357 actor.SetOpacity( value );
362 case Dali::Actor::Property::NAME:
364 actor.SetName( property.Get< std::string >() );
368 case Dali::Actor::Property::SENSITIVE:
370 actor.SetSensitive( property.Get< bool >() );
374 case Dali::Actor::Property::LEAVE_REQUIRED:
376 actor.SetLeaveRequired( property.Get< bool >() );
380 case Dali::Actor::Property::INHERIT_POSITION:
382 actor.SetInheritPosition( property.Get< bool >() );
386 case Dali::Actor::Property::INHERIT_ORIENTATION:
388 actor.SetInheritOrientation( property.Get< bool >() );
392 case Dali::Actor::Property::INHERIT_SCALE:
394 actor.SetInheritScale( property.Get< bool >() );
398 case Dali::Actor::Property::COLOR_MODE:
400 ColorMode mode = actor.mColorMode;
401 if ( Scripting::GetEnumerationProperty< ColorMode >( property, COLOR_MODE_TABLE, COLOR_MODE_TABLE_COUNT, mode ) )
403 actor.SetColorMode( mode );
408 case Dali::Actor::Property::DRAW_MODE:
410 DrawMode::Type mode = actor.mDrawMode;
411 if( Scripting::GetEnumerationProperty< DrawMode::Type >( property, DRAW_MODE_TABLE, DRAW_MODE_TABLE_COUNT, mode ) )
413 actor.SetDrawMode( mode );
418 case Dali::Actor::Property::SIZE_MODE_FACTOR:
420 actor.SetSizeModeFactor( property.Get< Vector3 >() );
424 case Dali::Actor::Property::WIDTH_RESIZE_POLICY:
426 ResizePolicy::Type type = actor.GetResizePolicy( Dimension::WIDTH );
427 if( Scripting::GetEnumerationProperty< ResizePolicy::Type >( property, RESIZE_POLICY_TABLE, RESIZE_POLICY_TABLE_COUNT, type ) )
429 actor.SetResizePolicy( type, Dimension::WIDTH );
434 case Dali::Actor::Property::HEIGHT_RESIZE_POLICY:
436 ResizePolicy::Type type = actor.GetResizePolicy( Dimension::HEIGHT );
437 if( Scripting::GetEnumerationProperty< ResizePolicy::Type >( property, RESIZE_POLICY_TABLE, RESIZE_POLICY_TABLE_COUNT, type ) )
439 actor.SetResizePolicy( type, Dimension::HEIGHT );
444 case Dali::Actor::Property::SIZE_SCALE_POLICY:
446 SizeScalePolicy::Type type = actor.GetSizeScalePolicy();
447 if( Scripting::GetEnumerationProperty< SizeScalePolicy::Type >( property, SIZE_SCALE_POLICY_TABLE, SIZE_SCALE_POLICY_TABLE_COUNT, type ) )
449 actor.SetSizeScalePolicy( type );
454 case Dali::Actor::Property::WIDTH_FOR_HEIGHT:
456 if( property.Get< bool >() )
458 actor.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::WIDTH );
463 case Dali::Actor::Property::HEIGHT_FOR_WIDTH:
465 if( property.Get< bool >() )
467 actor.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT );
472 case Dali::Actor::Property::PADDING:
474 Vector4 padding = property.Get< Vector4 >();
475 actor.SetPadding( Vector2( padding.x, padding.y ), Dimension::WIDTH );
476 actor.SetPadding( Vector2( padding.z, padding.w ), Dimension::HEIGHT );
480 case Dali::Actor::Property::MINIMUM_SIZE:
482 Vector2 size = property.Get< Vector2 >();
483 actor.SetMinimumSize( size.x, Dimension::WIDTH );
484 actor.SetMinimumSize( size.y, Dimension::HEIGHT );
488 case Dali::Actor::Property::MAXIMUM_SIZE:
490 Vector2 size = property.Get< Vector2 >();
491 actor.SetMaximumSize( size.x, Dimension::WIDTH );
492 actor.SetMaximumSize( size.y, Dimension::HEIGHT );
496 case Dali::DevelActor::Property::SIBLING_ORDER:
500 if( property.Get( value ) )
502 actor.SetSiblingOrder( 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.InheritLayoutDirectionRecursively( &actor, direction, true );
541 case Dali::Actor::Property::INHERIT_LAYOUT_DIRECTION:
544 if( property.Get( value ) )
546 actor.SetInheritLayoutDirection( value );
551 case Dali::Actor::Property::KEYBOARD_FOCUSABLE:
554 if( property.Get( value ) )
556 actor.SetKeyboardFocusable( value );
561 case Dali::DevelActor::Property::UPDATE_SIZE_HINT:
563 actor.SetUpdateSizeHint( property.Get< Vector2 >() );
567 case Dali::DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START:
569 bool boolValue = false;
570 if ( property.Get( boolValue ) )
572 actor.mCaptureAllTouchAfterStart = boolValue;
579 // this can happen in the case of a non-animatable default property so just do nothing
585 void Actor::PropertyHandler::SetSceneGraphProperty(
586 Property::Index index,
587 const PropertyMetadata& entry,
588 const Property::Value& value,
589 EventThreadServices& eventThreadServices,
590 const SceneGraph::Node& node)
592 switch( entry.GetType() )
594 case Property::BOOLEAN:
596 const AnimatableProperty< bool >* property = dynamic_cast< const AnimatableProperty< bool >* >( entry.GetSceneGraphProperty() );
597 DALI_ASSERT_DEBUG( NULL != property );
599 // property is being used in a separate thread; queue a message to set the property
600 SceneGraph::NodePropertyMessage<bool>::Send( eventThreadServices, &node, property, &AnimatableProperty<bool>::Bake, value.Get<bool>() );
605 case Property::INTEGER:
607 const AnimatableProperty< int >* property = dynamic_cast< const AnimatableProperty< int >* >( entry.GetSceneGraphProperty() );
608 DALI_ASSERT_DEBUG( NULL != property );
610 // property is being used in a separate thread; queue a message to set the property
611 SceneGraph::NodePropertyMessage<int>::Send( eventThreadServices, &node, property, &AnimatableProperty<int>::Bake, value.Get<int>() );
616 case Property::FLOAT:
618 const AnimatableProperty< float >* property = dynamic_cast< const AnimatableProperty< float >* >( entry.GetSceneGraphProperty() );
619 DALI_ASSERT_DEBUG( NULL != property );
621 // property is being used in a separate thread; queue a message to set the property
622 SceneGraph::NodePropertyMessage<float>::Send( eventThreadServices, &node, property, &AnimatableProperty<float>::Bake, value.Get<float>() );
627 case Property::VECTOR2:
629 const AnimatableProperty< Vector2 >* property = dynamic_cast< const AnimatableProperty< Vector2 >* >( entry.GetSceneGraphProperty() );
630 DALI_ASSERT_DEBUG( NULL != property );
632 // property is being used in a separate thread; queue a message to set the property
633 if(entry.componentIndex == 0)
635 SceneGraph::NodePropertyComponentMessage<Vector2>::Send( eventThreadServices, &node, property, &AnimatableProperty<Vector2>::BakeX, value.Get<float>() );
637 else if(entry.componentIndex == 1)
639 SceneGraph::NodePropertyComponentMessage<Vector2>::Send( eventThreadServices, &node, property, &AnimatableProperty<Vector2>::BakeY, value.Get<float>() );
643 SceneGraph::NodePropertyMessage<Vector2>::Send( eventThreadServices, &node, property, &AnimatableProperty<Vector2>::Bake, value.Get<Vector2>() );
649 case Property::VECTOR3:
651 const AnimatableProperty< Vector3 >* property = dynamic_cast< const AnimatableProperty< Vector3 >* >( entry.GetSceneGraphProperty() );
652 DALI_ASSERT_DEBUG( NULL != property );
654 // property is being used in a separate thread; queue a message to set the property
655 if(entry.componentIndex == 0)
657 SceneGraph::NodePropertyComponentMessage<Vector3>::Send( eventThreadServices, &node, property, &AnimatableProperty<Vector3>::BakeX, value.Get<float>() );
659 else if(entry.componentIndex == 1)
661 SceneGraph::NodePropertyComponentMessage<Vector3>::Send( eventThreadServices, &node, property, &AnimatableProperty<Vector3>::BakeY, value.Get<float>() );
663 else if(entry.componentIndex == 2)
665 SceneGraph::NodePropertyComponentMessage<Vector3>::Send( eventThreadServices, &node, property, &AnimatableProperty<Vector3>::BakeZ, value.Get<float>() );
669 SceneGraph::NodePropertyMessage<Vector3>::Send( eventThreadServices, &node, property, &AnimatableProperty<Vector3>::Bake, value.Get<Vector3>() );
675 case Property::VECTOR4:
677 const AnimatableProperty< Vector4 >* property = dynamic_cast< const AnimatableProperty< Vector4 >* >( entry.GetSceneGraphProperty() );
678 DALI_ASSERT_DEBUG( NULL != property );
680 // property is being used in a separate thread; queue a message to set the property
681 if(entry.componentIndex == 0)
683 SceneGraph::NodePropertyComponentMessage<Vector4>::Send( eventThreadServices, &node, property, &AnimatableProperty<Vector4>::BakeX, value.Get<float>() );
685 else if(entry.componentIndex == 1)
687 SceneGraph::NodePropertyComponentMessage<Vector4>::Send( eventThreadServices, &node, property, &AnimatableProperty<Vector4>::BakeY, value.Get<float>() );
689 else if(entry.componentIndex == 2)
691 SceneGraph::NodePropertyComponentMessage<Vector4>::Send( eventThreadServices, &node, property, &AnimatableProperty<Vector4>::BakeZ, value.Get<float>() );
693 else if(entry.componentIndex == 3)
695 SceneGraph::NodePropertyComponentMessage<Vector4>::Send( eventThreadServices, &node, property, &AnimatableProperty<Vector4>::BakeW, value.Get<float>() );
699 SceneGraph::NodePropertyMessage<Vector4>::Send( eventThreadServices, &node, property, &AnimatableProperty<Vector4>::Bake, value.Get<Vector4>() );
705 case Property::ROTATION:
707 const AnimatableProperty< Quaternion >* property = dynamic_cast< const AnimatableProperty< Quaternion >* >( entry.GetSceneGraphProperty() );
708 DALI_ASSERT_DEBUG( NULL != property );
710 // property is being used in a separate thread; queue a message to set the property
711 SceneGraph::NodePropertyMessage<Quaternion>::Send( eventThreadServices, &node, property,&AnimatableProperty<Quaternion>::Bake, value.Get<Quaternion>() );
716 case Property::MATRIX:
718 const AnimatableProperty< Matrix >* property = dynamic_cast< const AnimatableProperty< Matrix >* >( entry.GetSceneGraphProperty() );
719 DALI_ASSERT_DEBUG( NULL != property );
721 // property is being used in a separate thread; queue a message to set the property
722 SceneGraph::NodePropertyMessage<Matrix>::Send( eventThreadServices, &node, property,&AnimatableProperty<Matrix>::Bake, value.Get<Matrix>() );
727 case Property::MATRIX3:
729 const AnimatableProperty< Matrix3 >* property = dynamic_cast< const AnimatableProperty< Matrix3 >* >( entry.GetSceneGraphProperty() );
730 DALI_ASSERT_DEBUG( NULL != property );
732 // property is being used in a separate thread; queue a message to set the property
733 SceneGraph::NodePropertyMessage<Matrix3>::Send( eventThreadServices, &node, property,&AnimatableProperty<Matrix3>::Bake, value.Get<Matrix3>() );
740 // nothing to do for other types
745 void Actor::PropertyHandler::OnNotifyDefaultPropertyAnimation(Internal::Actor& actor, Animation& animation, Property::Index index, const Property::Value& value, Animation::Type animationType)
747 switch( animationType )
750 case Animation::BETWEEN:
754 case Dali::Actor::Property::SIZE:
756 if( value.Get( actor.mTargetSize ) )
758 actor.mAnimatedSize = actor.mTargetSize;
759 actor.mUseAnimatedSize = AnimatedSizeFlag::WIDTH | AnimatedSizeFlag::HEIGHT | AnimatedSizeFlag::DEPTH;
761 // Notify deriving classes
762 actor.OnSizeAnimation( animation, actor.mTargetSize );
767 case Dali::Actor::Property::SIZE_WIDTH:
769 if( value.Get( actor.mTargetSize.width ) )
771 actor.mAnimatedSize.width = actor.mTargetSize.width;
772 actor.mUseAnimatedSize |= AnimatedSizeFlag::WIDTH;
774 // Notify deriving classes
775 actor.OnSizeAnimation( animation, actor.mTargetSize );
780 case Dali::Actor::Property::SIZE_HEIGHT:
782 if( value.Get( actor.mTargetSize.height ) )
784 actor.mAnimatedSize.height = actor.mTargetSize.height;
785 actor.mUseAnimatedSize |= AnimatedSizeFlag::HEIGHT;
787 // Notify deriving classes
788 actor.OnSizeAnimation( animation, actor.mTargetSize );
793 case Dali::Actor::Property::SIZE_DEPTH:
795 if( value.Get( actor.mTargetSize.depth ) )
797 actor.mAnimatedSize.depth = actor.mTargetSize.depth;
798 actor.mUseAnimatedSize |= AnimatedSizeFlag::DEPTH;
800 // Notify deriving classes
801 actor.OnSizeAnimation( animation, actor.mTargetSize );
806 case Dali::Actor::Property::POSITION:
808 value.Get( actor.mTargetPosition );
812 case Dali::Actor::Property::POSITION_X:
814 value.Get( actor.mTargetPosition.x );
818 case Dali::Actor::Property::POSITION_Y:
820 value.Get( actor.mTargetPosition.y );
824 case Dali::Actor::Property::POSITION_Z:
826 value.Get( actor.mTargetPosition.z );
830 case Dali::Actor::Property::ORIENTATION:
832 value.Get( actor.mTargetOrientation );
836 case Dali::Actor::Property::SCALE:
838 value.Get( actor.mTargetScale );
842 case Dali::Actor::Property::SCALE_X:
844 value.Get( actor.mTargetScale.x );
848 case Dali::Actor::Property::SCALE_Y:
850 value.Get( actor.mTargetScale.y );
854 case Dali::Actor::Property::SCALE_Z:
856 value.Get( actor.mTargetScale.z );
860 case Dali::Actor::Property::VISIBLE:
862 actor.SetVisibleInternal( value.Get< bool >(), SendMessage::FALSE );
866 case Dali::Actor::Property::COLOR:
868 value.Get( actor.mTargetColor );
872 case Dali::Actor::Property::COLOR_RED:
874 value.Get( actor.mTargetColor.r );
878 case Dali::Actor::Property::COLOR_GREEN:
880 value.Get( actor.mTargetColor.g );
884 case Dali::Actor::Property::COLOR_BLUE:
886 value.Get( actor.mTargetColor.b );
890 case Dali::Actor::Property::COLOR_ALPHA:
891 case Dali::Actor::Property::OPACITY:
893 value.Get( actor.mTargetColor.a );
899 // Not an animatable property. Do nothing.
910 case Dali::Actor::Property::SIZE:
912 if( AdjustValue< Vector3 >( actor.mTargetSize, value ) )
914 actor.mAnimatedSize = actor.mTargetSize;
915 actor.mUseAnimatedSize = AnimatedSizeFlag::WIDTH | AnimatedSizeFlag::HEIGHT | AnimatedSizeFlag::DEPTH;
917 // Notify deriving classes
918 actor.OnSizeAnimation( animation, actor.mTargetSize );
923 case Dali::Actor::Property::SIZE_WIDTH:
925 if( AdjustValue< float >( actor.mTargetSize.width, value ) )
927 actor.mAnimatedSize.width = actor.mTargetSize.width;
928 actor.mUseAnimatedSize |= AnimatedSizeFlag::WIDTH;
930 // Notify deriving classes
931 actor.OnSizeAnimation( animation, actor.mTargetSize );
936 case Dali::Actor::Property::SIZE_HEIGHT:
938 if( AdjustValue< float >( actor.mTargetSize.height, value ) )
940 actor.mAnimatedSize.height = actor.mTargetSize.height;
941 actor.mUseAnimatedSize |= AnimatedSizeFlag::HEIGHT;
943 // Notify deriving classes
944 actor.OnSizeAnimation( animation, actor.mTargetSize );
949 case Dali::Actor::Property::SIZE_DEPTH:
951 if( AdjustValue< float >( actor.mTargetSize.depth, value ) )
953 actor.mAnimatedSize.depth = actor.mTargetSize.depth;
954 actor.mUseAnimatedSize |= AnimatedSizeFlag::DEPTH;
956 // Notify deriving classes
957 actor.OnSizeAnimation( animation, actor.mTargetSize );
962 case Dali::Actor::Property::POSITION:
964 AdjustValue< Vector3 >( actor.mTargetPosition, value );
968 case Dali::Actor::Property::POSITION_X:
970 AdjustValue< float >( actor.mTargetPosition.x, value );
974 case Dali::Actor::Property::POSITION_Y:
976 AdjustValue< float >( actor.mTargetPosition.y, value );
980 case Dali::Actor::Property::POSITION_Z:
982 AdjustValue< float >( actor.mTargetPosition.z, value );
986 case Dali::Actor::Property::ORIENTATION:
988 Quaternion relativeValue;
989 if( value.Get( relativeValue ) )
991 actor.mTargetOrientation *= relativeValue;
996 case Dali::Actor::Property::SCALE:
998 AdjustValue< Vector3 >( actor.mTargetScale, value );
1002 case Dali::Actor::Property::SCALE_X:
1004 AdjustValue< float >( actor.mTargetScale.x, value );
1008 case Dali::Actor::Property::SCALE_Y:
1010 AdjustValue< float >( actor.mTargetScale.y, value );
1014 case Dali::Actor::Property::SCALE_Z:
1016 AdjustValue< float >( actor.mTargetScale.z, value );
1020 case Dali::Actor::Property::VISIBLE:
1022 bool relativeValue = false;
1023 if( value.Get( relativeValue ) )
1025 bool visible = actor.mVisible || relativeValue;
1026 actor.SetVisibleInternal( visible, SendMessage::FALSE );
1031 case Dali::Actor::Property::COLOR:
1033 AdjustValue< Vector4 >( actor.mTargetColor, value );
1037 case Dali::Actor::Property::COLOR_RED:
1039 AdjustValue< float >( actor.mTargetColor.r, value );
1043 case Dali::Actor::Property::COLOR_GREEN:
1045 AdjustValue< float >( actor.mTargetColor.g, value );
1049 case Dali::Actor::Property::COLOR_BLUE:
1051 AdjustValue< float >( actor.mTargetColor.b, value );
1055 case Dali::Actor::Property::COLOR_ALPHA:
1056 case Dali::Actor::Property::OPACITY:
1058 AdjustValue< float >( actor.mTargetColor.a, value );
1064 // Not an animatable property. Do nothing.
1073 const PropertyBase* Actor::PropertyHandler::GetSceneObjectAnimatableProperty(Property::Index index, const SceneGraph::Node& node)
1075 const PropertyBase* property( nullptr );
1079 case Dali::Actor::Property::SIZE: // FALLTHROUGH
1080 case Dali::Actor::Property::SIZE_WIDTH: // FALLTHROUGH
1081 case Dali::Actor::Property::SIZE_HEIGHT: // FALLTHROUGH
1082 case Dali::Actor::Property::SIZE_DEPTH:
1084 property = &node.mSize;
1087 case Dali::Actor::Property::POSITION: // FALLTHROUGH
1088 case Dali::Actor::Property::POSITION_X: // FALLTHROUGH
1089 case Dali::Actor::Property::POSITION_Y: // FALLTHROUGH
1090 case Dali::Actor::Property::POSITION_Z:
1092 property = &node.mPosition;
1095 case Dali::Actor::Property::ORIENTATION:
1097 property = &node.mOrientation;
1100 case Dali::Actor::Property::SCALE: // FALLTHROUGH
1101 case Dali::Actor::Property::SCALE_X: // FALLTHROUGH
1102 case Dali::Actor::Property::SCALE_Y: // FALLTHROUGH
1103 case Dali::Actor::Property::SCALE_Z:
1105 property = &node.mScale;
1108 case Dali::Actor::Property::VISIBLE:
1110 property = &node.mVisible;
1113 case Dali::Actor::Property::COLOR: // FALLTHROUGH
1114 case Dali::Actor::Property::COLOR_RED: // FALLTHROUGH
1115 case Dali::Actor::Property::COLOR_GREEN: // FALLTHROUGH
1116 case Dali::Actor::Property::COLOR_BLUE: // FALLTHROUGH
1117 case Dali::Actor::Property::COLOR_ALPHA: // FALLTHROUGH
1118 case Dali::Actor::Property::OPACITY:
1120 property = &node.mColor;
1132 const PropertyInputImpl* Actor::PropertyHandler::GetSceneObjectInputProperty(Property::Index index, const SceneGraph::Node& node)
1134 const PropertyInputImpl* property( nullptr );
1138 case Dali::Actor::Property::PARENT_ORIGIN: // FALLTHROUGH
1139 case Dali::Actor::Property::PARENT_ORIGIN_X: // FALLTHROUGH
1140 case Dali::Actor::Property::PARENT_ORIGIN_Y: // FALLTHROUGH
1141 case Dali::Actor::Property::PARENT_ORIGIN_Z:
1143 property = &node.mParentOrigin;
1146 case Dali::Actor::Property::ANCHOR_POINT: // FALLTHROUGH
1147 case Dali::Actor::Property::ANCHOR_POINT_X: // FALLTHROUGH
1148 case Dali::Actor::Property::ANCHOR_POINT_Y: // FALLTHROUGH
1149 case Dali::Actor::Property::ANCHOR_POINT_Z:
1151 property = &node.mAnchorPoint;
1154 case Dali::Actor::Property::WORLD_POSITION: // FALLTHROUGH
1155 case Dali::Actor::Property::WORLD_POSITION_X: // FALLTHROUGH
1156 case Dali::Actor::Property::WORLD_POSITION_Y: // FALLTHROUGH
1157 case Dali::Actor::Property::WORLD_POSITION_Z:
1159 property = &node.mWorldPosition;
1162 case Dali::Actor::Property::WORLD_ORIENTATION:
1164 property = &node.mWorldOrientation;
1167 case Dali::Actor::Property::WORLD_SCALE:
1169 property = &node.mWorldScale;
1172 case Dali::Actor::Property::WORLD_COLOR:
1174 property = &node.mWorldColor;
1177 case Dali::Actor::Property::WORLD_MATRIX:
1179 property = &node.mWorldMatrix;
1182 case Dali::Actor::Property::CULLED:
1184 property = &node.mCulled;
1196 int32_t Actor::PropertyHandler::GetPropertyComponentIndex(Property::Index index)
1198 int32_t componentIndex = Property::INVALID_COMPONENT_INDEX;
1202 case Dali::Actor::Property::PARENT_ORIGIN_X:
1203 case Dali::Actor::Property::ANCHOR_POINT_X:
1204 case Dali::Actor::Property::SIZE_WIDTH:
1205 case Dali::Actor::Property::POSITION_X:
1206 case Dali::Actor::Property::WORLD_POSITION_X:
1207 case Dali::Actor::Property::SCALE_X:
1208 case Dali::Actor::Property::COLOR_RED:
1214 case Dali::Actor::Property::PARENT_ORIGIN_Y:
1215 case Dali::Actor::Property::ANCHOR_POINT_Y:
1216 case Dali::Actor::Property::SIZE_HEIGHT:
1217 case Dali::Actor::Property::POSITION_Y:
1218 case Dali::Actor::Property::WORLD_POSITION_Y:
1219 case Dali::Actor::Property::SCALE_Y:
1220 case Dali::Actor::Property::COLOR_GREEN:
1226 case Dali::Actor::Property::PARENT_ORIGIN_Z:
1227 case Dali::Actor::Property::ANCHOR_POINT_Z:
1228 case Dali::Actor::Property::SIZE_DEPTH:
1229 case Dali::Actor::Property::POSITION_Z:
1230 case Dali::Actor::Property::WORLD_POSITION_Z:
1231 case Dali::Actor::Property::SCALE_Z:
1232 case Dali::Actor::Property::COLOR_BLUE:
1238 case Dali::Actor::Property::COLOR_ALPHA:
1239 case Dali::Actor::Property::OPACITY:
1252 return componentIndex;
1255 bool Actor::PropertyHandler::GetCachedPropertyValue(const Internal::Actor& actor, Property::Index index, Property::Value& value)
1257 bool valueSet = true;
1261 case Dali::Actor::Property::PARENT_ORIGIN:
1263 value = actor.GetCurrentParentOrigin();
1267 case Dali::Actor::Property::PARENT_ORIGIN_X:
1269 value = actor.GetCurrentParentOrigin().x;
1273 case Dali::Actor::Property::PARENT_ORIGIN_Y:
1275 value = actor.GetCurrentParentOrigin().y;
1279 case Dali::Actor::Property::PARENT_ORIGIN_Z:
1281 value = actor.GetCurrentParentOrigin().z;
1285 case Dali::Actor::Property::ANCHOR_POINT:
1287 value = actor.GetCurrentAnchorPoint();
1291 case Dali::Actor::Property::ANCHOR_POINT_X:
1293 value = actor.GetCurrentAnchorPoint().x;
1297 case Dali::Actor::Property::ANCHOR_POINT_Y:
1299 value = actor.GetCurrentAnchorPoint().y;
1303 case Dali::Actor::Property::ANCHOR_POINT_Z:
1305 value = actor.GetCurrentAnchorPoint().z;
1309 case Dali::Actor::Property::SIZE:
1311 value = actor.GetTargetSize();
1315 case Dali::Actor::Property::SIZE_WIDTH:
1317 value = actor.GetTargetSize().width;
1321 case Dali::Actor::Property::SIZE_HEIGHT:
1323 value = actor.GetTargetSize().height;
1327 case Dali::Actor::Property::SIZE_DEPTH:
1329 value = actor.GetTargetSize().depth;
1333 case Dali::Actor::Property::POSITION:
1335 value = actor.GetTargetPosition();
1339 case Dali::Actor::Property::POSITION_X:
1341 value = actor.GetTargetPosition().x;
1345 case Dali::Actor::Property::POSITION_Y:
1347 value = actor.GetTargetPosition().y;
1351 case Dali::Actor::Property::POSITION_Z:
1353 value = actor.GetTargetPosition().z;
1357 case Dali::Actor::Property::ORIENTATION:
1359 value = actor.mTargetOrientation;
1363 case Dali::Actor::Property::SCALE:
1365 value = actor.mTargetScale;
1369 case Dali::Actor::Property::SCALE_X:
1371 value = actor.mTargetScale.x;
1375 case Dali::Actor::Property::SCALE_Y:
1377 value = actor.mTargetScale.y;
1381 case Dali::Actor::Property::SCALE_Z:
1383 value = actor.mTargetScale.z;
1387 case Dali::Actor::Property::VISIBLE:
1389 value = actor.mVisible;
1393 case Dali::Actor::Property::COLOR:
1395 value = actor.mTargetColor;
1399 case Dali::Actor::Property::COLOR_RED:
1401 value = actor.mTargetColor.r;
1405 case Dali::Actor::Property::COLOR_GREEN:
1407 value = actor.mTargetColor.g;
1411 case Dali::Actor::Property::COLOR_BLUE:
1413 value = actor.mTargetColor.b;
1417 case Dali::Actor::Property::COLOR_ALPHA:
1418 case Dali::Actor::Property::OPACITY:
1420 value = actor.mTargetColor.a;
1424 case Dali::Actor::Property::NAME:
1426 value = actor.GetName();
1430 case Dali::Actor::Property::SENSITIVE:
1432 value = actor.IsSensitive();
1436 case Dali::Actor::Property::LEAVE_REQUIRED:
1438 value = actor.GetLeaveRequired();
1442 case Dali::Actor::Property::INHERIT_POSITION:
1444 value = actor.IsPositionInherited();
1448 case Dali::Actor::Property::INHERIT_ORIENTATION:
1450 value = actor.IsOrientationInherited();
1454 case Dali::Actor::Property::INHERIT_SCALE:
1456 value = actor.IsScaleInherited();
1460 case Dali::Actor::Property::COLOR_MODE:
1462 value = actor.GetColorMode();
1466 case Dali::Actor::Property::DRAW_MODE:
1468 value = actor.GetDrawMode();
1472 case Dali::Actor::Property::SIZE_MODE_FACTOR:
1474 value = actor.GetSizeModeFactor();
1478 case Dali::Actor::Property::WIDTH_RESIZE_POLICY:
1480 value = Scripting::GetLinearEnumerationName< ResizePolicy::Type >( actor.GetResizePolicy( Dimension::WIDTH ), RESIZE_POLICY_TABLE, RESIZE_POLICY_TABLE_COUNT );
1484 case Dali::Actor::Property::HEIGHT_RESIZE_POLICY:
1486 value = Scripting::GetLinearEnumerationName< ResizePolicy::Type >( actor.GetResizePolicy( Dimension::HEIGHT ), RESIZE_POLICY_TABLE, RESIZE_POLICY_TABLE_COUNT );
1490 case Dali::Actor::Property::SIZE_SCALE_POLICY:
1492 value = actor.GetSizeScalePolicy();
1496 case Dali::Actor::Property::WIDTH_FOR_HEIGHT:
1498 value = ( actor.GetResizePolicy( Dimension::WIDTH ) == ResizePolicy::DIMENSION_DEPENDENCY ) && ( actor.GetDimensionDependency( Dimension::WIDTH ) == Dimension::HEIGHT );
1502 case Dali::Actor::Property::HEIGHT_FOR_WIDTH:
1504 value = ( actor.GetResizePolicy( Dimension::HEIGHT ) == ResizePolicy::DIMENSION_DEPENDENCY ) && ( actor.GetDimensionDependency( Dimension::HEIGHT ) == Dimension::WIDTH );
1508 case Dali::Actor::Property::PADDING:
1510 Vector2 widthPadding = actor.GetPadding( Dimension::WIDTH );
1511 Vector2 heightPadding = actor.GetPadding( Dimension::HEIGHT );
1512 value = Vector4( widthPadding.x, widthPadding.y, heightPadding.x, heightPadding.y );
1516 case Dali::Actor::Property::MINIMUM_SIZE:
1518 value = Vector2( actor.GetMinimumSize( Dimension::WIDTH ), actor.GetMinimumSize( Dimension::HEIGHT ) );
1522 case Dali::Actor::Property::MAXIMUM_SIZE:
1524 value = Vector2( actor.GetMaximumSize( Dimension::WIDTH ), actor.GetMaximumSize( Dimension::HEIGHT ) );
1528 case Dali::Actor::Property::CLIPPING_MODE:
1530 value = actor.mClippingMode;
1534 case Dali::DevelActor::Property::SIBLING_ORDER:
1536 value = static_cast<int>( actor.GetSiblingOrder() );
1540 case Dali::Actor::Property::SCREEN_POSITION:
1542 value = actor.GetCurrentScreenPosition();
1546 case Dali::Actor::Property::POSITION_USES_ANCHOR_POINT:
1548 value = actor.mPositionUsesAnchorPoint;
1552 case Dali::Actor::Property::LAYOUT_DIRECTION:
1554 value = actor.mLayoutDirection;
1558 case Dali::Actor::Property::INHERIT_LAYOUT_DIRECTION:
1560 value = actor.IsLayoutDirectionInherited();
1564 case Dali::Actor::Property::ID:
1566 value = static_cast<int>( actor.GetId() );
1570 case Dali::Actor::Property::HIERARCHY_DEPTH:
1572 value = actor.GetHierarchyDepth();
1576 case Dali::Actor::Property::IS_ROOT:
1578 value = actor.IsRoot();
1582 case Dali::Actor::Property::IS_LAYER:
1584 value = actor.IsLayer();
1588 case Dali::Actor::Property::CONNECTED_TO_SCENE:
1590 value = actor.OnScene();
1594 case Dali::Actor::Property::KEYBOARD_FOCUSABLE:
1596 value = actor.IsKeyboardFocusable();
1600 case Dali::DevelActor::Property::CAPTURE_ALL_TOUCH_AFTER_START:
1602 value = actor.mCaptureAllTouchAfterStart;
1608 // Must be a scene-graph only property
1617 bool Actor::PropertyHandler::GetCurrentPropertyValue(const Internal::Actor& actor, Property::Index index, Property::Value& value)
1619 bool valueSet = true;
1623 case Dali::Actor::Property::SIZE:
1625 value = actor.GetCurrentSize();
1629 case Dali::Actor::Property::SIZE_WIDTH:
1631 value = actor.GetCurrentSize().width;
1635 case Dali::Actor::Property::SIZE_HEIGHT:
1637 value = actor.GetCurrentSize().height;
1641 case Dali::Actor::Property::SIZE_DEPTH:
1643 value = actor.GetCurrentSize().depth;
1647 case Dali::Actor::Property::POSITION:
1649 value = actor.GetCurrentPosition();
1653 case Dali::Actor::Property::POSITION_X:
1655 value = actor.GetCurrentPosition().x;
1659 case Dali::Actor::Property::POSITION_Y:
1661 value = actor.GetCurrentPosition().y;
1665 case Dali::Actor::Property::POSITION_Z:
1667 value = actor.GetCurrentPosition().z;
1671 case Dali::Actor::Property::WORLD_POSITION:
1673 value = actor.GetCurrentWorldPosition();
1677 case Dali::Actor::Property::WORLD_POSITION_X:
1679 value = actor.GetCurrentWorldPosition().x;
1683 case Dali::Actor::Property::WORLD_POSITION_Y:
1685 value = actor.GetCurrentWorldPosition().y;
1689 case Dali::Actor::Property::WORLD_POSITION_Z:
1691 value = actor.GetCurrentWorldPosition().z;
1695 case Dali::Actor::Property::ORIENTATION:
1697 value = actor.GetCurrentOrientation();
1701 case Dali::Actor::Property::WORLD_ORIENTATION:
1703 value = actor.GetCurrentWorldOrientation();
1707 case Dali::Actor::Property::SCALE:
1709 value = actor.GetCurrentScale();
1713 case Dali::Actor::Property::SCALE_X:
1715 value = actor.GetCurrentScale().x;
1719 case Dali::Actor::Property::SCALE_Y:
1721 value = actor.GetCurrentScale().y;
1725 case Dali::Actor::Property::SCALE_Z:
1727 value = actor.GetCurrentScale().z;
1731 case Dali::Actor::Property::WORLD_SCALE:
1733 value = actor.GetCurrentWorldScale();
1737 case Dali::Actor::Property::COLOR:
1739 value = actor.GetCurrentColor();
1743 case Dali::Actor::Property::COLOR_RED:
1745 value = actor.GetCurrentColor().r;
1749 case Dali::Actor::Property::COLOR_GREEN:
1751 value = actor.GetCurrentColor().g;
1755 case Dali::Actor::Property::COLOR_BLUE:
1757 value = actor.GetCurrentColor().b;
1761 case Dali::Actor::Property::COLOR_ALPHA:
1762 case Dali::Actor::Property::OPACITY:
1764 value = actor.GetCurrentColor().a;
1768 case Dali::Actor::Property::WORLD_COLOR:
1770 value = actor.GetCurrentWorldColor();
1774 case Dali::Actor::Property::WORLD_MATRIX:
1776 value = actor.GetCurrentWorldMatrix();
1780 case Dali::Actor::Property::VISIBLE:
1782 value = actor.IsVisible();
1786 case Dali::Actor::Property::CULLED:
1788 value = actor.GetNode().IsCulled( actor.GetEventThreadServices().GetEventBufferIndex() );
1792 case Dali::DevelActor::Property::UPDATE_SIZE_HINT:
1794 // node is being used in a separate thread, the value from the previous update is the same, set by user
1795 value = Vector2( actor.GetNode().GetUpdateSizeHint() );
1801 // Must be an event-side only property
1810 } // namespace Internal