X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Factors%2Factor-impl.cpp;h=ce9d371125d5ca9e098f7b60429e6e7b3637eda4;hb=8580a4d8cac9e232d55d8d332af0822c3449727f;hp=8ca6d3ada5c664a92650a957aa25a7c7c388c2ef;hpb=094beff24a92c2a54119e10b8a49ce129e7517a1;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/actors/actor-impl.cpp b/dali/internal/event/actors/actor-impl.cpp index 8ca6d3a..ce9d371 100644 --- a/dali/internal/event/actors/actor-impl.cpp +++ b/dali/internal/event/actors/actor-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * Copyright (c) 2016 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,15 +24,16 @@ #include // INTERNAL INCLUDES - +#include #include #include +#include #include #include #include #include +#include #include - #include #include #include @@ -58,37 +59,6 @@ using Dali::Internal::SceneGraph::PropertyBase; namespace Dali { -namespace ResizePolicy -{ - -namespace -{ -DALI_ENUM_TO_STRING_TABLE_BEGIN( Type ) -DALI_ENUM_TO_STRING( FIXED ) -DALI_ENUM_TO_STRING( USE_NATURAL_SIZE ) -DALI_ENUM_TO_STRING( FILL_TO_PARENT ) -DALI_ENUM_TO_STRING( SIZE_RELATIVE_TO_PARENT ) -DALI_ENUM_TO_STRING( SIZE_FIXED_OFFSET_FROM_PARENT ) -DALI_ENUM_TO_STRING( FIT_TO_CHILDREN ) -DALI_ENUM_TO_STRING( DIMENSION_DEPENDENCY ) -DALI_ENUM_TO_STRING( USE_ASSIGNED_SIZE ) -DALI_ENUM_TO_STRING_TABLE_END( Type ) - -} // unnamed namespace -} // ResizePolicy - -namespace SizeScalePolicy -{ -namespace -{ -// Enumeration to / from string conversion tables -DALI_ENUM_TO_STRING_TABLE_BEGIN( Type ) -DALI_ENUM_TO_STRING( USE_SIZE_SET ) -DALI_ENUM_TO_STRING( FIT_WITH_ASPECT_RATIO ) -DALI_ENUM_TO_STRING( FILL_WITH_ASPECT_RATIO ) -DALI_ENUM_TO_STRING_TABLE_END( Type ) -} // unnamed namespace -} // SizeScalePolicy namespace Internal { @@ -173,62 +143,64 @@ namespace // unnamed namespace /** * We want to discourage the use of property strings (minimize string comparisons), * particularly for the default properties. - * Name Type writable animatable constraint-input enum for index-checking + * Name Type writable animatable constraint-input enum for index-checking */ DALI_PROPERTY_TABLE_BEGIN -DALI_PROPERTY( "parentOrigin", VECTOR3, true, false, true, Dali::Actor::Property::PARENT_ORIGIN ) -DALI_PROPERTY( "parentOriginX", FLOAT, true, false, true, Dali::Actor::Property::PARENT_ORIGIN_X ) -DALI_PROPERTY( "parentOriginY", FLOAT, true, false, true, Dali::Actor::Property::PARENT_ORIGIN_Y ) -DALI_PROPERTY( "parentOriginZ", FLOAT, true, false, true, Dali::Actor::Property::PARENT_ORIGIN_Z ) -DALI_PROPERTY( "anchorPoint", VECTOR3, true, false, true, Dali::Actor::Property::ANCHOR_POINT ) -DALI_PROPERTY( "anchorPointX", FLOAT, true, false, true, Dali::Actor::Property::ANCHOR_POINT_X ) -DALI_PROPERTY( "anchorPointY", FLOAT, true, false, true, Dali::Actor::Property::ANCHOR_POINT_Y ) -DALI_PROPERTY( "anchorPointZ", FLOAT, true, false, true, Dali::Actor::Property::ANCHOR_POINT_Z ) -DALI_PROPERTY( "size", VECTOR3, true, true, true, Dali::Actor::Property::SIZE ) -DALI_PROPERTY( "sizeWidth", FLOAT, true, true, true, Dali::Actor::Property::SIZE_WIDTH ) -DALI_PROPERTY( "sizeHeight", FLOAT, true, true, true, Dali::Actor::Property::SIZE_HEIGHT ) -DALI_PROPERTY( "sizeDepth", FLOAT, true, true, true, Dali::Actor::Property::SIZE_DEPTH ) -DALI_PROPERTY( "position", VECTOR3, true, true, true, Dali::Actor::Property::POSITION ) -DALI_PROPERTY( "positionX", FLOAT, true, true, true, Dali::Actor::Property::POSITION_X ) -DALI_PROPERTY( "positionY", FLOAT, true, true, true, Dali::Actor::Property::POSITION_Y ) -DALI_PROPERTY( "positionZ", FLOAT, true, true, true, Dali::Actor::Property::POSITION_Z ) -DALI_PROPERTY( "worldPosition", VECTOR3, false, false, true, Dali::Actor::Property::WORLD_POSITION ) -DALI_PROPERTY( "worldPositionX", FLOAT, false, false, true, Dali::Actor::Property::WORLD_POSITION_X ) -DALI_PROPERTY( "worldPositionY", FLOAT, false, false, true, Dali::Actor::Property::WORLD_POSITION_Y ) -DALI_PROPERTY( "worldPositionZ", FLOAT, false, false, true, Dali::Actor::Property::WORLD_POSITION_Z ) -DALI_PROPERTY( "orientation", ROTATION, true, true, true, Dali::Actor::Property::ORIENTATION ) -DALI_PROPERTY( "worldOrientation", ROTATION, false, false, true, Dali::Actor::Property::WORLD_ORIENTATION ) -DALI_PROPERTY( "scale", VECTOR3, true, true, true, Dali::Actor::Property::SCALE ) -DALI_PROPERTY( "scaleX", FLOAT, true, true, true, Dali::Actor::Property::SCALE_X ) -DALI_PROPERTY( "scaleY", FLOAT, true, true, true, Dali::Actor::Property::SCALE_Y ) -DALI_PROPERTY( "scaleZ", FLOAT, true, true, true, Dali::Actor::Property::SCALE_Z ) -DALI_PROPERTY( "worldScale", VECTOR3, false, false, true, Dali::Actor::Property::WORLD_SCALE ) -DALI_PROPERTY( "visible", BOOLEAN, true, true, true, Dali::Actor::Property::VISIBLE ) -DALI_PROPERTY( "color", VECTOR4, true, true, true, Dali::Actor::Property::COLOR ) -DALI_PROPERTY( "colorRed", FLOAT, true, true, true, Dali::Actor::Property::COLOR_RED ) -DALI_PROPERTY( "colorGreen", FLOAT, true, true, true, Dali::Actor::Property::COLOR_GREEN ) -DALI_PROPERTY( "colorBlue", FLOAT, true, true, true, Dali::Actor::Property::COLOR_BLUE ) -DALI_PROPERTY( "colorAlpha", FLOAT, true, true, true, Dali::Actor::Property::COLOR_ALPHA ) -DALI_PROPERTY( "worldColor", VECTOR4, false, false, true, Dali::Actor::Property::WORLD_COLOR ) -DALI_PROPERTY( "worldMatrix", MATRIX, false, false, true, Dali::Actor::Property::WORLD_MATRIX ) -DALI_PROPERTY( "name", STRING, true, false, false, Dali::Actor::Property::NAME ) -DALI_PROPERTY( "sensitive", BOOLEAN, true, false, false, Dali::Actor::Property::SENSITIVE ) -DALI_PROPERTY( "leaveRequired", BOOLEAN, true, false, false, Dali::Actor::Property::LEAVE_REQUIRED ) -DALI_PROPERTY( "inheritOrientation", BOOLEAN, true, false, false, Dali::Actor::Property::INHERIT_ORIENTATION ) -DALI_PROPERTY( "inheritScale", BOOLEAN, true, false, false, Dali::Actor::Property::INHERIT_SCALE ) -DALI_PROPERTY( "colorMode", STRING, true, false, false, Dali::Actor::Property::COLOR_MODE ) -DALI_PROPERTY( "positionInheritance", STRING, true, false, false, Dali::Actor::Property::POSITION_INHERITANCE ) -DALI_PROPERTY( "drawMode", STRING, true, false, false, Dali::Actor::Property::DRAW_MODE ) -DALI_PROPERTY( "sizeModeFactor", VECTOR3, true, false, false, Dali::Actor::Property::SIZE_MODE_FACTOR ) -DALI_PROPERTY( "widthResizePolicy", STRING, true, false, false, Dali::Actor::Property::WIDTH_RESIZE_POLICY ) -DALI_PROPERTY( "heightResizePolicy", STRING, true, false, false, Dali::Actor::Property::HEIGHT_RESIZE_POLICY ) -DALI_PROPERTY( "sizeScalePolicy", STRING, true, false, false, Dali::Actor::Property::SIZE_SCALE_POLICY ) -DALI_PROPERTY( "widthForHeight", BOOLEAN, true, false, false, Dali::Actor::Property::WIDTH_FOR_HEIGHT ) -DALI_PROPERTY( "heightForWidth", BOOLEAN, true, false, false, Dali::Actor::Property::HEIGHT_FOR_WIDTH ) -DALI_PROPERTY( "padding", VECTOR4, true, false, false, Dali::Actor::Property::PADDING ) -DALI_PROPERTY( "minimumSize", VECTOR2, true, false, false, Dali::Actor::Property::MINIMUM_SIZE ) -DALI_PROPERTY( "maximumSize", VECTOR2, true, false, false, Dali::Actor::Property::MAXIMUM_SIZE ) -DALI_PROPERTY( "inheritPosition", BOOLEAN, true, false, false, Dali::Actor::Property::INHERIT_POSITION ) +DALI_PROPERTY( "parentOrigin", VECTOR3, true, false, true, Dali::Actor::Property::PARENT_ORIGIN ) +DALI_PROPERTY( "parentOriginX", FLOAT, true, false, true, Dali::Actor::Property::PARENT_ORIGIN_X ) +DALI_PROPERTY( "parentOriginY", FLOAT, true, false, true, Dali::Actor::Property::PARENT_ORIGIN_Y ) +DALI_PROPERTY( "parentOriginZ", FLOAT, true, false, true, Dali::Actor::Property::PARENT_ORIGIN_Z ) +DALI_PROPERTY( "anchorPoint", VECTOR3, true, false, true, Dali::Actor::Property::ANCHOR_POINT ) +DALI_PROPERTY( "anchorPointX", FLOAT, true, false, true, Dali::Actor::Property::ANCHOR_POINT_X ) +DALI_PROPERTY( "anchorPointY", FLOAT, true, false, true, Dali::Actor::Property::ANCHOR_POINT_Y ) +DALI_PROPERTY( "anchorPointZ", FLOAT, true, false, true, Dali::Actor::Property::ANCHOR_POINT_Z ) +DALI_PROPERTY( "size", VECTOR3, true, true, true, Dali::Actor::Property::SIZE ) +DALI_PROPERTY( "sizeWidth", FLOAT, true, true, true, Dali::Actor::Property::SIZE_WIDTH ) +DALI_PROPERTY( "sizeHeight", FLOAT, true, true, true, Dali::Actor::Property::SIZE_HEIGHT ) +DALI_PROPERTY( "sizeDepth", FLOAT, true, true, true, Dali::Actor::Property::SIZE_DEPTH ) +DALI_PROPERTY( "position", VECTOR3, true, true, true, Dali::Actor::Property::POSITION ) +DALI_PROPERTY( "positionX", FLOAT, true, true, true, Dali::Actor::Property::POSITION_X ) +DALI_PROPERTY( "positionY", FLOAT, true, true, true, Dali::Actor::Property::POSITION_Y ) +DALI_PROPERTY( "positionZ", FLOAT, true, true, true, Dali::Actor::Property::POSITION_Z ) +DALI_PROPERTY( "worldPosition", VECTOR3, false, false, true, Dali::Actor::Property::WORLD_POSITION ) +DALI_PROPERTY( "worldPositionX", FLOAT, false, false, true, Dali::Actor::Property::WORLD_POSITION_X ) +DALI_PROPERTY( "worldPositionY", FLOAT, false, false, true, Dali::Actor::Property::WORLD_POSITION_Y ) +DALI_PROPERTY( "worldPositionZ", FLOAT, false, false, true, Dali::Actor::Property::WORLD_POSITION_Z ) +DALI_PROPERTY( "orientation", ROTATION, true, true, true, Dali::Actor::Property::ORIENTATION ) +DALI_PROPERTY( "worldOrientation", ROTATION, false, false, true, Dali::Actor::Property::WORLD_ORIENTATION ) +DALI_PROPERTY( "scale", VECTOR3, true, true, true, Dali::Actor::Property::SCALE ) +DALI_PROPERTY( "scaleX", FLOAT, true, true, true, Dali::Actor::Property::SCALE_X ) +DALI_PROPERTY( "scaleY", FLOAT, true, true, true, Dali::Actor::Property::SCALE_Y ) +DALI_PROPERTY( "scaleZ", FLOAT, true, true, true, Dali::Actor::Property::SCALE_Z ) +DALI_PROPERTY( "worldScale", VECTOR3, false, false, true, Dali::Actor::Property::WORLD_SCALE ) +DALI_PROPERTY( "visible", BOOLEAN, true, true, true, Dali::Actor::Property::VISIBLE ) +DALI_PROPERTY( "color", VECTOR4, true, true, true, Dali::Actor::Property::COLOR ) +DALI_PROPERTY( "colorRed", FLOAT, true, true, true, Dali::Actor::Property::COLOR_RED ) +DALI_PROPERTY( "colorGreen", FLOAT, true, true, true, Dali::Actor::Property::COLOR_GREEN ) +DALI_PROPERTY( "colorBlue", FLOAT, true, true, true, Dali::Actor::Property::COLOR_BLUE ) +DALI_PROPERTY( "colorAlpha", FLOAT, true, true, true, Dali::Actor::Property::COLOR_ALPHA ) +DALI_PROPERTY( "worldColor", VECTOR4, false, false, true, Dali::Actor::Property::WORLD_COLOR ) +DALI_PROPERTY( "worldMatrix", MATRIX, false, false, true, Dali::Actor::Property::WORLD_MATRIX ) +DALI_PROPERTY( "name", STRING, true, false, false, Dali::Actor::Property::NAME ) +DALI_PROPERTY( "sensitive", BOOLEAN, true, false, false, Dali::Actor::Property::SENSITIVE ) +DALI_PROPERTY( "leaveRequired", BOOLEAN, true, false, false, Dali::Actor::Property::LEAVE_REQUIRED ) +DALI_PROPERTY( "inheritOrientation", BOOLEAN, true, false, false, Dali::Actor::Property::INHERIT_ORIENTATION ) +DALI_PROPERTY( "inheritScale", BOOLEAN, true, false, false, Dali::Actor::Property::INHERIT_SCALE ) +DALI_PROPERTY( "colorMode", STRING, true, false, false, Dali::Actor::Property::COLOR_MODE ) +DALI_PROPERTY( "positionInheritance", STRING, true, false, false, Dali::Actor::Property::POSITION_INHERITANCE ) +DALI_PROPERTY( "drawMode", STRING, true, false, false, Dali::Actor::Property::DRAW_MODE ) +DALI_PROPERTY( "sizeModeFactor", VECTOR3, true, false, false, Dali::Actor::Property::SIZE_MODE_FACTOR ) +DALI_PROPERTY( "widthResizePolicy", STRING, true, false, false, Dali::Actor::Property::WIDTH_RESIZE_POLICY ) +DALI_PROPERTY( "heightResizePolicy", STRING, true, false, false, Dali::Actor::Property::HEIGHT_RESIZE_POLICY ) +DALI_PROPERTY( "sizeScalePolicy", STRING, true, false, false, Dali::Actor::Property::SIZE_SCALE_POLICY ) +DALI_PROPERTY( "widthForHeight", BOOLEAN, true, false, false, Dali::Actor::Property::WIDTH_FOR_HEIGHT ) +DALI_PROPERTY( "heightForWidth", BOOLEAN, true, false, false, Dali::Actor::Property::HEIGHT_FOR_WIDTH ) +DALI_PROPERTY( "padding", VECTOR4, true, false, false, Dali::Actor::Property::PADDING ) +DALI_PROPERTY( "minimumSize", VECTOR2, true, false, false, Dali::Actor::Property::MINIMUM_SIZE ) +DALI_PROPERTY( "maximumSize", VECTOR2, true, false, false, Dali::Actor::Property::MAXIMUM_SIZE ) +DALI_PROPERTY( "inheritPosition", BOOLEAN, true, false, false, Dali::Actor::Property::INHERIT_POSITION ) +DALI_PROPERTY( "clippingMode", STRING, true, false, false, Dali::Actor::Property::CLIPPING_MODE ) +DALI_PROPERTY( "batchParent", BOOLEAN, true, false, false, Dali::DevelActor::Property::BATCH_PARENT ) DALI_PROPERTY_TABLE_END( DEFAULT_ACTOR_PROPERTY_START_INDEX ) // Signals @@ -239,6 +211,7 @@ const char* const SIGNAL_WHEEL_EVENT = "wheelEvent"; const char* const SIGNAL_ON_STAGE = "onStage"; const char* const SIGNAL_OFF_STAGE = "offStage"; const char* const SIGNAL_ON_RELAYOUT = "onRelayout"; +const char* const SIGNAL_TOUCH = "touch"; // Actions @@ -258,10 +231,92 @@ SignalConnectorType signalConnector3( mType, SIGNAL_WHEEL_EVENT, &Actor::DoConne SignalConnectorType signalConnector4( mType, SIGNAL_ON_STAGE, &Actor::DoConnectSignal ); SignalConnectorType signalConnector5( mType, SIGNAL_OFF_STAGE, &Actor::DoConnectSignal ); SignalConnectorType signalConnector6( mType, SIGNAL_ON_RELAYOUT, &Actor::DoConnectSignal ); +SignalConnectorType signalConnector7( mType, SIGNAL_TOUCH, &Actor::DoConnectSignal ); TypeAction a1( mType, ACTION_SHOW, &Actor::DoAction ); TypeAction a2( mType, ACTION_HIDE, &Actor::DoAction ); +struct AnchorValue +{ + const char* name; + const Vector3& value; +}; + +DALI_ENUM_TO_STRING_TABLE_BEGIN_WITH_TYPE( AnchorValue, ANCHOR_CONSTANT ) +DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, TOP_LEFT ) +DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, TOP_CENTER ) +DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, TOP_RIGHT ) +DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, CENTER_LEFT ) +DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, CENTER ) +DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, CENTER_RIGHT ) +DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, BOTTOM_LEFT ) +DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, BOTTOM_CENTER ) +DALI_ENUM_TO_STRING_WITH_SCOPE( AnchorPoint, BOTTOM_RIGHT ) +DALI_ENUM_TO_STRING_TABLE_END( ANCHOR_CONSTANT ) + +DALI_ENUM_TO_STRING_TABLE_BEGIN( COLOR_MODE ) +DALI_ENUM_TO_STRING( USE_OWN_COLOR ) +DALI_ENUM_TO_STRING( USE_PARENT_COLOR ) +DALI_ENUM_TO_STRING( USE_OWN_MULTIPLY_PARENT_COLOR ) +DALI_ENUM_TO_STRING( USE_OWN_MULTIPLY_PARENT_ALPHA ) +DALI_ENUM_TO_STRING_TABLE_END( COLOR_MODE ) + +DALI_ENUM_TO_STRING_TABLE_BEGIN( POSITION_INHERITANCE_MODE ) +DALI_ENUM_TO_STRING( INHERIT_PARENT_POSITION ) +DALI_ENUM_TO_STRING( USE_PARENT_POSITION ) +DALI_ENUM_TO_STRING( USE_PARENT_POSITION_PLUS_LOCAL_POSITION ) +DALI_ENUM_TO_STRING( DONT_INHERIT_POSITION ) +DALI_ENUM_TO_STRING_TABLE_END( POSITION_INHERITANCE_MODE ) + +DALI_ENUM_TO_STRING_TABLE_BEGIN( DRAW_MODE ) +DALI_ENUM_TO_STRING_WITH_SCOPE( DrawMode, NORMAL ) +DALI_ENUM_TO_STRING_WITH_SCOPE( DrawMode, OVERLAY_2D ) +DALI_ENUM_TO_STRING_WITH_SCOPE( DrawMode, STENCIL ) +DALI_ENUM_TO_STRING_TABLE_END( DRAW_MODE ) + +DALI_ENUM_TO_STRING_TABLE_BEGIN( RESIZE_POLICY ) +DALI_ENUM_TO_STRING_WITH_SCOPE( ResizePolicy, FIXED ) +DALI_ENUM_TO_STRING_WITH_SCOPE( ResizePolicy, USE_NATURAL_SIZE ) +DALI_ENUM_TO_STRING_WITH_SCOPE( ResizePolicy, FILL_TO_PARENT ) +DALI_ENUM_TO_STRING_WITH_SCOPE( ResizePolicy, SIZE_RELATIVE_TO_PARENT ) +DALI_ENUM_TO_STRING_WITH_SCOPE( ResizePolicy, SIZE_FIXED_OFFSET_FROM_PARENT ) +DALI_ENUM_TO_STRING_WITH_SCOPE( ResizePolicy, FIT_TO_CHILDREN ) +DALI_ENUM_TO_STRING_WITH_SCOPE( ResizePolicy, DIMENSION_DEPENDENCY ) +DALI_ENUM_TO_STRING_WITH_SCOPE( ResizePolicy, USE_ASSIGNED_SIZE ) +DALI_ENUM_TO_STRING_TABLE_END( RESIZE_POLICY ) + +DALI_ENUM_TO_STRING_TABLE_BEGIN( SIZE_SCALE_POLICY ) +DALI_ENUM_TO_STRING_WITH_SCOPE( SizeScalePolicy, USE_SIZE_SET ) +DALI_ENUM_TO_STRING_WITH_SCOPE( SizeScalePolicy, FIT_WITH_ASPECT_RATIO ) +DALI_ENUM_TO_STRING_WITH_SCOPE( SizeScalePolicy, FILL_WITH_ASPECT_RATIO ) +DALI_ENUM_TO_STRING_TABLE_END( SIZE_SCALE_POLICY ) + +DALI_ENUM_TO_STRING_TABLE_BEGIN( CLIPPING_MODE ) +DALI_ENUM_TO_STRING_WITH_SCOPE( ClippingMode, DISABLED ) +DALI_ENUM_TO_STRING_WITH_SCOPE( ClippingMode, CLIP_CHILDREN ) +DALI_ENUM_TO_STRING_TABLE_END( CLIPPING_MODE ) + + +bool GetAnchorPointConstant( const std::string& value, Vector3& anchor ) +{ + for( unsigned int i = 0; i < ANCHOR_CONSTANT_TABLE_COUNT; ++i ) + { + size_t sizeIgnored = 0; + if( CompareTokens( value.c_str(), ANCHOR_CONSTANT_TABLE[ i ].name, sizeIgnored ) ) + { + anchor = ANCHOR_CONSTANT_TABLE[ i ].value; + return true; + } + } + return false; +} + +inline bool GetParentOriginConstant( const std::string& value, Vector3& parentOrigin ) +{ + // Values are the same so just use the same table as anchor-point + return GetAnchorPointConstant( value, parentOrigin ); +} + /** * @brief Extract a given dimension from a Vector2 * @@ -301,6 +356,10 @@ float GetDimensionValue( const Vector3& values, Dimension::Type dimension ) return GetDimensionValue( values.GetVectorXY(), dimension ); } +unsigned int GetDepthIndex( uint16_t depth, uint16_t siblingOrder ) +{ + return depth * Dali::DevelLayer::TREE_DEPTH_MULTIPLIER + siblingOrder * Dali::DevelLayer::SIBLING_ORDER_MULTIPLIER; +} } // unnamed namespace @@ -952,6 +1011,11 @@ float Actor::GetCurrentOpacity() const return 1.0f; } +ClippingMode::Type Actor::GetClippingMode() const +{ + return mClippingMode; +} + const Vector4& Actor::GetCurrentWorldColor() const { if( NULL != mNode ) @@ -1328,6 +1392,8 @@ void Actor::SetRelayoutEnabled( bool relayoutEnabled ) { EnsureRelayoutData(); + DALI_ASSERT_DEBUG( mRelayoutData && "mRelayoutData not created" ); + mRelayoutData->relayoutEnabled = relayoutEnabled; } } @@ -1447,15 +1513,6 @@ void Actor::RemoveRenderer( unsigned int index ) } } -void Actor::SetOverlay( bool enable ) -{ - // Setting STENCIL will override OVERLAY_2D - if( DrawMode::STENCIL != mDrawMode ) - { - SetDrawMode( enable ? DrawMode::OVERLAY_2D : DrawMode::NORMAL ); - } -} - bool Actor::IsOverlay() const { return ( DrawMode::OVERLAY_2D == mDrawMode ); @@ -1465,7 +1522,7 @@ void Actor::SetDrawMode( DrawMode::Type drawMode ) { // this flag is not animatable so keep the value mDrawMode = drawMode; - if( NULL != mNode ) + if( ( NULL != mNode ) && ( drawMode != DrawMode::STENCIL ) ) { // mNode is being used in a separate thread; queue a message to set the value SetDrawModeMessage( GetEventThreadServices(), *mNode, drawMode ); @@ -1668,12 +1725,11 @@ bool Actor::RaySphereTest( const Vector4& rayOrigin, const Vector4& rayDir ) con return ( b2 * b2 - a * c ) >= 0.f; } -bool Actor::RayActorTest( const Vector4& rayOrigin, const Vector4& rayDir, Vector4& hitPointLocal, float& distance ) const +bool Actor::RayActorTest( const Vector4& rayOrigin, const Vector4& rayDir, Vector2& hitPointLocal, float& distance ) const { bool hit = false; - if( OnStage() && - NULL != mNode ) + if( OnStage() && NULL != mNode ) { // Transforms the ray to the local reference system. // Calculate the inverse of Model matrix @@ -1731,7 +1787,7 @@ bool Actor::IsKeyboardFocusable() const bool Actor::GetTouchRequired() const { - return !mTouchedSignal.Empty() || mDerivedRequiresTouch; + return !mTouchedSignal.Empty() || !mTouchSignal.Empty() || mDerivedRequiresTouch; } bool Actor::GetHoverRequired() const @@ -1765,20 +1821,26 @@ bool Actor::IsGestureRequred( Gesture::Type type ) const return mGestureData && mGestureData->IsGestureRequred( type ); } -bool Actor::EmitTouchEventSignal( const TouchEvent& event ) +bool Actor::EmitTouchEventSignal( const TouchEvent& event, const Dali::TouchData& touch ) { bool consumed = false; + if( !mTouchSignal.Empty() ) + { + Dali::Actor handle( this ); + consumed = mTouchSignal.Emit( handle, touch ); + } + if( !mTouchedSignal.Empty() ) { Dali::Actor handle( this ); - consumed = mTouchedSignal.Emit( handle, event ); + consumed |= mTouchedSignal.Emit( handle, event ); } if( !consumed ) { // Notification for derived classes - consumed = OnTouchEvent( event ); + consumed = OnTouchEvent( event ); // TODO } return consumed; @@ -1824,9 +1886,15 @@ bool Actor::EmitWheelEventSignal( const WheelEvent& event ) Dali::Actor::TouchSignalType& Actor::TouchedSignal() { + DALI_LOG_WARNING( "Deprecated: Use TouchSignal() instead\n" ); return mTouchedSignal; } +Dali::Actor::TouchDataSignalType& Actor::TouchSignal() +{ + return mTouchSignal; +} + Dali::Actor::HoverSignalType& Actor::HoveredSignal() { return mHoveredSignal; @@ -1855,7 +1923,7 @@ Dali::Actor::OnRelayoutSignalType& Actor::OnRelayoutSignal() bool Actor::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor ) { bool connected( true ); - Actor* actor = dynamic_cast< Actor* >( object ); + Actor* actor = static_cast< Actor* >( object ); // TypeRegistry guarantees that this is the correct type. if( 0 == signalName.compare( SIGNAL_TOUCHED ) ) { @@ -1881,6 +1949,10 @@ bool Actor::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tra { actor->OnRelayoutSignal().Connect( tracker, functor ); } + else if( 0 == signalName.compare( SIGNAL_TOUCH ) ) + { + actor->TouchSignal().Connect( tracker, functor ); + } else { // signalName does not match any signal @@ -1903,6 +1975,7 @@ Actor::Actor( DerivedType derivedType ) mName(), mId( ++mActorCounter ), // actor ID is initialised to start from 1, and 0 is reserved mDepth( 0u ), + mSiblingOrder(0u), mIsRoot( ROOT_LAYER == derivedType ), mIsLayer( LAYER == derivedType || ROOT_LAYER == derivedType ), mIsOnStage( false ), @@ -1919,7 +1992,9 @@ Actor::Actor( DerivedType derivedType ) mInheritScale( true ), mDrawMode( DrawMode::NORMAL ), mPositionInheritanceMode( Node::DEFAULT_POSITION_INHERITANCE_MODE ), - mColorMode( Node::DEFAULT_COLOR_MODE ) + mColorMode( Node::DEFAULT_COLOR_MODE ), + mClippingMode( ClippingMode::DISABLED ), + mIsBatchParent( false ) { } @@ -2002,6 +2077,7 @@ void Actor::RecursiveConnectToStage( ActorContainer& connectionList, unsigned in mIsOnStage = true; mDepth = depth; + SetDepthIndexMessage( GetEventThreadServices(), *mNode, GetDepthIndex( mDepth, mSiblingOrder ) ); ConnectToSceneGraph(); @@ -2261,7 +2337,21 @@ void Actor::SetDefaultProperty( Property::Index index, const Property::Value& pr { case Dali::Actor::Property::PARENT_ORIGIN: { - SetParentOrigin( property.Get< Vector3 >() ); + Property::Type type = property.GetType(); + if( type == Property::VECTOR3 ) + { + SetParentOrigin( property.Get< Vector3 >() ); + } + else if ( type == Property::STRING ) + { + std::string parentOriginString; + property.Get( parentOriginString ); + Vector3 parentOrigin; + if( GetParentOriginConstant( parentOriginString, parentOrigin ) ) + { + SetParentOrigin( parentOrigin ); + } + } break; } @@ -2285,7 +2375,21 @@ void Actor::SetDefaultProperty( Property::Index index, const Property::Value& pr case Dali::Actor::Property::ANCHOR_POINT: { - SetAnchorPoint( property.Get< Vector3 >() ); + Property::Type type = property.GetType(); + if( type == Property::VECTOR3 ) + { + SetAnchorPoint( property.Get< Vector3 >() ); + } + else if ( type == Property::STRING ) + { + std::string anchorPointString; + property.Get( anchorPointString ); + Vector3 anchor; + if( GetAnchorPointConstant( anchorPointString, anchor ) ) + { + SetAnchorPoint( anchor ); + } + } break; } @@ -2459,19 +2563,31 @@ void Actor::SetDefaultProperty( Property::Index index, const Property::Value& pr case Dali::Actor::Property::COLOR_MODE: { - SetColorMode( Scripting::GetColorMode( property.Get< std::string >() ) ); + ColorMode mode; + if ( Scripting::GetEnumeration< ColorMode >( property.Get< std::string >().c_str(), COLOR_MODE_TABLE, COLOR_MODE_TABLE_COUNT, mode ) ) + { + SetColorMode( mode ); + } break; } case Dali::Actor::Property::POSITION_INHERITANCE: { - SetPositionInheritanceMode( Scripting::GetPositionInheritanceMode( property.Get< std::string >() ) ); + PositionInheritanceMode mode; + if( Scripting::GetEnumeration< PositionInheritanceMode >( property.Get< std::string >().c_str(), POSITION_INHERITANCE_MODE_TABLE, POSITION_INHERITANCE_MODE_TABLE_COUNT, mode ) ) + { + SetPositionInheritanceMode( mode ); + } break; } case Dali::Actor::Property::DRAW_MODE: { - SetDrawMode( Scripting::GetDrawMode( property.Get< std::string >() ) ); + DrawMode::Type mode; + if( Scripting::GetEnumeration< DrawMode::Type >( property.Get< std::string >().c_str(), DRAW_MODE_TABLE, DRAW_MODE_TABLE_COUNT, mode ) ) + { + SetDrawMode( mode ); + } break; } @@ -2484,7 +2600,7 @@ void Actor::SetDefaultProperty( Property::Index index, const Property::Value& pr case Dali::Actor::Property::WIDTH_RESIZE_POLICY: { ResizePolicy::Type type; - if( Scripting::GetEnumeration< ResizePolicy::Type >( property.Get< std::string >().c_str(), ResizePolicy::TypeTable, ResizePolicy::TypeTableCount, type ) ) + if( Scripting::GetEnumeration< ResizePolicy::Type >( property.Get< std::string >().c_str(), RESIZE_POLICY_TABLE, RESIZE_POLICY_TABLE_COUNT, type ) ) { SetResizePolicy( type, Dimension::WIDTH ); } @@ -2494,7 +2610,7 @@ void Actor::SetDefaultProperty( Property::Index index, const Property::Value& pr case Dali::Actor::Property::HEIGHT_RESIZE_POLICY: { ResizePolicy::Type type; - if( Scripting::GetEnumeration< ResizePolicy::Type >( property.Get< std::string >().c_str(), ResizePolicy::TypeTable, ResizePolicy::TypeTableCount, type ) ) + if( Scripting::GetEnumeration< ResizePolicy::Type >( property.Get< std::string >().c_str(), RESIZE_POLICY_TABLE, RESIZE_POLICY_TABLE_COUNT, type ) ) { SetResizePolicy( type, Dimension::HEIGHT ); } @@ -2504,7 +2620,7 @@ void Actor::SetDefaultProperty( Property::Index index, const Property::Value& pr case Dali::Actor::Property::SIZE_SCALE_POLICY: { SizeScalePolicy::Type type; - if( Scripting::GetEnumeration< SizeScalePolicy::Type >( property.Get< std::string >().c_str(), SizeScalePolicy::TypeTable, SizeScalePolicy::TypeTableCount, type ) ) + if( Scripting::GetEnumeration< SizeScalePolicy::Type >( property.Get< std::string >().c_str(), SIZE_SCALE_POLICY_TABLE, SIZE_SCALE_POLICY_TABLE_COUNT, type ) ) { SetSizeScalePolicy( type ); } @@ -2553,6 +2669,53 @@ void Actor::SetDefaultProperty( Property::Index index, const Property::Value& pr break; } + case Dali::DevelActor::Property::BATCH_PARENT: + { + bool value; + + if( property.Get( value ) ) + { + if( value != mIsBatchParent ) + { + mIsBatchParent = value; + SetIsBatchParentMessage( GetEventThreadServices(), *mNode, mIsBatchParent ); + } + } + break; + } + + case Dali::DevelActor::Property::SIBLING_ORDER: + { + int value; + + if( property.Get( value ) ) + { + if( static_cast(value) != mSiblingOrder ) + { + mSiblingOrder = value; + if( mIsOnStage ) + { + SetDepthIndexMessage( GetEventThreadServices(), *mNode, GetDepthIndex( mDepth, mSiblingOrder ) ); + } + } + } + break; + } + + case Dali::Actor::Property::CLIPPING_MODE: + { + ClippingMode::Type convertedValue = mClippingMode; + if( Scripting::GetEnumerationProperty< ClippingMode::Type >( property, CLIPPING_MODE_TABLE, CLIPPING_MODE_TABLE_COUNT, convertedValue ) ) + { + mClippingMode = convertedValue; + if( NULL != mNode ) + { + SetClippingModeMessage( GetEventThreadServices(), *mNode, mClippingMode ); + } + } + break; + } + default: { // this can happen in the case of a non-animatable default property so just do nothing @@ -2712,8 +2875,7 @@ void Actor::SetSceneGraphProperty( Property::Index index, const PropertyMetadata default: { - DALI_ASSERT_ALWAYS( false && "Property type enumeration out of bounds" ); // should not come here - break; + // nothing to do for other types } } // entry.GetType } @@ -2972,19 +3134,19 @@ Property::Value Actor::GetDefaultProperty( Property::Index index ) const case Dali::Actor::Property::COLOR_MODE: { - value = Scripting::GetColorMode( GetColorMode() ); + value = Scripting::GetLinearEnumerationName< ColorMode >( GetColorMode(), COLOR_MODE_TABLE, COLOR_MODE_TABLE_COUNT ); break; } case Dali::Actor::Property::POSITION_INHERITANCE: { - value = Scripting::GetPositionInheritanceMode( GetPositionInheritanceMode() ); + value = Scripting::GetLinearEnumerationName< PositionInheritanceMode >( GetPositionInheritanceMode(), POSITION_INHERITANCE_MODE_TABLE, POSITION_INHERITANCE_MODE_TABLE_COUNT ); break; } case Dali::Actor::Property::DRAW_MODE: { - value = Scripting::GetDrawMode( GetDrawMode() ); + value = Scripting::GetEnumerationName< DrawMode::Type >( GetDrawMode(), DRAW_MODE_TABLE, DRAW_MODE_TABLE_COUNT ); break; } @@ -2996,19 +3158,19 @@ Property::Value Actor::GetDefaultProperty( Property::Index index ) const case Dali::Actor::Property::WIDTH_RESIZE_POLICY: { - value = Scripting::GetLinearEnumerationName< ResizePolicy::Type >( GetResizePolicy( Dimension::WIDTH ), ResizePolicy::TypeTable, ResizePolicy::TypeTableCount ); + value = Scripting::GetLinearEnumerationName< ResizePolicy::Type >( GetResizePolicy( Dimension::WIDTH ), RESIZE_POLICY_TABLE, RESIZE_POLICY_TABLE_COUNT ); break; } case Dali::Actor::Property::HEIGHT_RESIZE_POLICY: { - value = Scripting::GetLinearEnumerationName< ResizePolicy::Type >( GetResizePolicy( Dimension::HEIGHT ), ResizePolicy::TypeTable, ResizePolicy::TypeTableCount ); + value = Scripting::GetLinearEnumerationName< ResizePolicy::Type >( GetResizePolicy( Dimension::HEIGHT ), RESIZE_POLICY_TABLE, RESIZE_POLICY_TABLE_COUNT ); break; } case Dali::Actor::Property::SIZE_SCALE_POLICY: { - value = Scripting::GetLinearEnumerationName< SizeScalePolicy::Type >( GetSizeScalePolicy(), SizeScalePolicy::TypeTable, SizeScalePolicy::TypeTableCount ); + value = Scripting::GetLinearEnumerationName< SizeScalePolicy::Type >( GetSizeScalePolicy(), SIZE_SCALE_POLICY_TABLE, SIZE_SCALE_POLICY_TABLE_COUNT ); break; } @@ -3044,9 +3206,21 @@ Property::Value Actor::GetDefaultProperty( Property::Index index ) const break; } - default: + case Dali::DevelActor::Property::BATCH_PARENT: { - DALI_ASSERT_ALWAYS( false && "Actor Property index invalid" ); // should not come here + value = mIsBatchParent; + break; + } + + case Dali::DevelActor::Property::SIBLING_ORDER: + { + value = static_cast(mSiblingOrder); + break; + } + + case Dali::Actor::Property::CLIPPING_MODE: + { + value = mClippingMode; break; } } @@ -3084,7 +3258,8 @@ const PropertyBase* Actor::GetSceneObjectAnimatableProperty( Property::Index ind property = animatable->GetSceneGraphProperty(); } - else if ( index >= DEFAULT_PROPERTY_MAX_COUNT ) + else if ( ( index >= CHILD_PROPERTY_REGISTRATION_START_INDEX ) && // Child properties are also stored as custom properties + ( index <= PROPERTY_CUSTOM_MAX_INDEX ) ) { CustomPropertyMetadata* custom = FindCustomProperty( index ); DALI_ASSERT_ALWAYS( custom && "Property index is invalid" ); @@ -3196,7 +3371,8 @@ const PropertyInputImpl* Actor::GetSceneObjectInputProperty( Property::Index ind property = animatable->GetSceneGraphProperty(); } - else if ( index >= DEFAULT_PROPERTY_MAX_COUNT ) + else if ( ( index >= CHILD_PROPERTY_REGISTRATION_START_INDEX ) && // Child properties are also stored as custom properties + ( index <= PROPERTY_CUSTOM_MAX_INDEX ) ) { CustomPropertyMetadata* custom = FindCustomProperty( index ); DALI_ASSERT_ALWAYS( custom && "Property index is invalid" ); @@ -3438,6 +3614,9 @@ void Actor::SetParent( Actor* parent ) // Instruct each actor to create a corresponding node in the scene graph ConnectToStage( parent->GetHierarchyDepth() ); } + + // Resolve the name and index for the child properties if any + ResolveChildProperties(); } else // parent being set to NULL { @@ -4194,6 +4373,11 @@ float Actor::GetMaximumSize( Dimension::Type dimension ) const return FLT_MAX; // Default } +Object* Actor::GetParentObject() const +{ + return mParent; +} + } // namespace Internal } // namespace Dali