X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Fpublic-api%2Fcontrols%2Fcontrol-impl.cpp;h=0d7a2f0483dee34e51aa7b4081c54485c13d2f98;hp=de6e4f02cee6f6e6cd3b7bd4e69b4ed294aa3723;hb=64184de859e515190adf28466fa9f9dd8f8437e9;hpb=70fc28a8c9ad04e29cb4a69c856bac3e96e2301d diff --git a/dali-toolkit/public-api/controls/control-impl.cpp b/dali-toolkit/public-api/controls/control-impl.cpp index de6e4f0..0d7a2f0 100644 --- a/dali-toolkit/public-api/controls/control-impl.cpp +++ b/dali-toolkit/public-api/controls/control-impl.cpp @@ -34,7 +34,7 @@ #include // INTERNAL INCLUDES -#include +#include #include #include #include @@ -49,8 +49,6 @@ namespace Toolkit namespace { -const float BACKGROUND_ACTOR_Z_POSITION( -0.1f ); - /** * Creates control through type registry */ @@ -67,7 +65,7 @@ BaseHandle Create() * @return true if action has been accepted by this control */ const char* ACTION_CONTROL_ACTIVATED = "control-activated"; -static bool DoAction( BaseObject* object, const std::string& actionName, const PropertyValueContainer& attributes ) +static bool DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes ) { bool ret = false; @@ -77,7 +75,7 @@ static bool DoAction( BaseObject* object, const std::string& actionName, const P if( control ) { // if cast succeeds there is an implementation so no need to check - Internal::GetImplementation( control ).OnAccessibilityActivated(); + ret = Internal::GetImplementation( control ).OnAccessibilityActivated(); } } @@ -143,11 +141,6 @@ static bool DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tra controlImpl.EnableGestureDetection( Gesture::LongPress ); controlImpl.GetLongPressGestureDetector().DetectedSignal().Connect( tracker, functor ); } - else - { - // signalName does not match any signal - connected = false; - } } return connected; } @@ -229,7 +222,6 @@ void SetupBackgroundActor( Actor actor, const Vector4& color ) actor.SetColor( color ); actor.SetPositionInheritanceMode( USE_PARENT_POSITION_PLUS_LOCAL_POSITION ); actor.SetColorMode( USE_OWN_MULTIPLY_PARENT_COLOR ); - actor.SetZ( BACKGROUND_ACTOR_Z_POSITION ); actor.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); } @@ -245,7 +237,6 @@ void SetupBackgroundActorConstrained( Actor actor, Property::Index constrainingI actor.SetColor( color ); actor.SetPositionInheritanceMode( USE_PARENT_POSITION_PLUS_LOCAL_POSITION ); actor.SetColorMode( USE_OWN_MULTIPLY_PARENT_COLOR ); - actor.SetZ( BACKGROUND_ACTOR_Z_POSITION ); Constraint constraint = Constraint::New( actor, constrainingIndex, @@ -276,7 +267,8 @@ public: mLongPressGestureDetector(), mFlags( Control::ControlBehaviour( ACTOR_BEHAVIOUR_NONE ) ), mIsKeyboardNavigationSupported( false ), - mIsKeyboardFocusGroup( false ) + mIsKeyboardFocusGroup( false ), + mAddRemoveBackgroundChild( false ) { } @@ -471,6 +463,7 @@ public: ControlBehaviour mFlags :CONTROL_BEHAVIOUR_FLAG_COUNT; ///< Flags passed in from constructor. bool mIsKeyboardNavigationSupported :1; ///< Stores whether keyboard navigation is supported by the control. bool mIsKeyboardFocusGroup :1; ///< Stores whether the control is a focus group. + bool mAddRemoveBackgroundChild:1; ///< Flag to know when we are adding or removing our own actor to avoid call to OnControlChildAdd // Properties - these need to be members of Internal::Control::Impl as they need to function within this class. static PropertyRegistration PROPERTY_1; @@ -538,9 +531,12 @@ void Control::SetBackgroundColor( const Vector4& color ) SetupBackgroundActorConstrained( meshActor, Actor::Property::SCALE, color ); - // Set the background actor before adding so that we do not inform deriving classes background.actor = meshActor; - Self().Add( meshActor ); + // Set the flag to avoid notifying children + mImpl->mAddRemoveBackgroundChild = true; + // use insert to guarantee its the first child (so that OVERLAY mode works) + Self().Insert( 0, meshActor ); + mImpl->mAddRemoveBackgroundChild = false; } background.color = color; @@ -561,8 +557,10 @@ void Control::SetBackgroundImage( Image image ) if ( background.actor ) { - // Remove Current actor, unset AFTER removal so that we do not inform deriving classes + // Remove Current actor, unset AFTER removal + mImpl->mAddRemoveBackgroundChild = true; Self().Remove( background.actor ); + mImpl->mAddRemoveBackgroundChild = false; background.actor.Reset(); } @@ -571,7 +569,10 @@ void Control::SetBackgroundImage( Image image ) // Set the background actor before adding so that we do not inform derived classes background.actor = imageActor; - Self().Add( imageActor ); + mImpl->mAddRemoveBackgroundChild = true; + // use insert to guarantee its the first child (so that OVERLAY mode works) + Self().Insert( 0, imageActor ); + mImpl->mAddRemoveBackgroundChild = false; } void Control::ClearBackground() @@ -579,7 +580,9 @@ void Control::ClearBackground() if ( mImpl->mBackground ) { Background& background( mImpl->GetBackground() ); + mImpl->mAddRemoveBackgroundChild = true; Self().Remove( background.actor ); + mImpl->mAddRemoveBackgroundChild = false; delete mImpl->mBackground; mImpl->mBackground = NULL; @@ -719,8 +722,9 @@ void Control::AccessibilityActivate() OnAccessibilityActivated(); } -void Control::OnAccessibilityActivated() +bool Control::OnAccessibilityActivated() { + return false; // Accessibility activation is not handled by default } bool Control::OnAccessibilityPan(PanGesture gesture) @@ -738,7 +742,7 @@ bool Control::OnAccessibilityValueChange(bool isIncrease) return false; // Accessibility value change action is not handled by default } -Actor Control::GetNextKeyboardFocusableActor(Actor currentFocusedActor, Toolkit::Control::KeyboardFocusNavigationDirection direction, bool loopEnabled) +Actor Control::GetNextKeyboardFocusableActor(Actor currentFocusedActor, Toolkit::Control::KeyboardFocus::Direction direction, bool loopEnabled) { return Actor(); } @@ -793,6 +797,9 @@ Control::Control( ControlBehaviour behaviourFlags ) void Control::Initialize() { + // Call deriving classes so initialised before styling is applied to them. + OnInitialize(); + if( mImpl->mFlags & REQUIRES_STYLE_CHANGE_SIGNALS ) { Toolkit::StyleManager styleManager = Toolkit::StyleManager::Get(); @@ -800,7 +807,7 @@ void Control::Initialize() // Register for style changes styleManager.StyleChangeSignal().Connect( this, &Control::OnStyleChange ); - // SetTheme + // Apply the current style GetImpl( styleManager ).ApplyThemeStyle( Toolkit::Control( GetOwner() ) ); } @@ -808,9 +815,6 @@ void Control::Initialize() { SetKeyboardNavigationSupport( true ); } - - // Calling deriving classes - OnInitialize(); } void Control::OnInitialize() @@ -904,8 +908,8 @@ void Control::OnKeyInputFocusLost() void Control::OnChildAdd(Actor& child) { - // If this is the background actor, then we do not want to relayout or inform deriving classes - if ( mImpl->mBackground && ( child == mImpl->mBackground->actor ) ) + // If this is the background actor, then we do not want to inform deriving classes + if ( mImpl->mAddRemoveBackgroundChild ) { return; } @@ -916,8 +920,8 @@ void Control::OnChildAdd(Actor& child) void Control::OnChildRemove(Actor& child) { - // If this is the background actor, then we do not want to relayout or inform deriving classes - if ( mImpl->mBackground && ( child == mImpl->mBackground->actor ) ) + // If this is the background actor, then we do not want to inform deriving classes + if ( mImpl->mAddRemoveBackgroundChild ) { return; } @@ -951,7 +955,7 @@ bool Control::OnKeyEvent(const KeyEvent& event) return false; // Do not consume } -bool Control::OnMouseWheelEvent(const MouseWheelEvent& event) +bool Control::OnWheelEvent(const WheelEvent& event) { return false; // Do not consume }