X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fbuttons%2Fbutton-impl.cpp;h=3207f9ba259a85b78b0f86675ac836c71c6bd3f7;hp=0c7005b4e0d346c00de716389a6033f6d136937f;hb=7665477736c0187ee978a0358ae9be2c04e353ed;hpb=6c664b09beef66ee4e223cf30fb17ecdd6889bf7 diff --git a/dali-toolkit/internal/controls/buttons/button-impl.cpp b/dali-toolkit/internal/controls/buttons/button-impl.cpp index 0c7005b..3207f9b 100644 --- a/dali-toolkit/internal/controls/buttons/button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/button-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2017 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. @@ -35,12 +35,14 @@ #include #include #include -#include +#include #include +#include #include #include -#include -#include +#include +#include +#include #if defined(DEBUG_ENABLED) Debug::Filter* gLogButtonFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_BUTTON_CONTROL"); @@ -120,7 +122,7 @@ const Scripting::StringEnum ALIGNMENT_STRING_TABLE[] = const unsigned int ALIGNMENT_STRING_TABLE_COUNT = sizeof( ALIGNMENT_STRING_TABLE ) / sizeof( ALIGNMENT_STRING_TABLE[0] ); -const Property::Index GET_VISUAL_INDEX_FOR_STATE[][Button::STATE_COUNT] = +const Property::Index VISUAL_INDEX_FOR_STATE[][Button::STATE_COUNT] = { { Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, Toolkit::DevelButton::Property::UNSELECTED_VISUAL }, { Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL, Toolkit::DevelButton::Property::SELECTED_VISUAL }, @@ -298,19 +300,6 @@ bool Button::ValidateState( State requestedState ) return transitionTable[mButtonState][requestedState]; } -void Button::PerformFunctionOnVisualsInState( void(Button::*functionPtr)( Property::Index visualIndex), State state ) -{ - DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "Button::PerformFunctionOnVisualsInState BACKROUND visual(%d) for state (%d)\n", - GET_VISUAL_INDEX_FOR_STATE[state][BACKGROUND], state ); - DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "Button::PerformFunctionOnVisualsInState FOREGROUND visuals(%d) for state (%d)\n", - GET_VISUAL_INDEX_FOR_STATE[state][FOREGROUND], state ); - - (this->*functionPtr)( GET_VISUAL_INDEX_FOR_STATE[state][BACKGROUND] ); - (this->*functionPtr)( GET_VISUAL_INDEX_FOR_STATE[state][FOREGROUND] ); - - RelayoutRequest(); -} - void Button::ChangeState( State requestedState ) { DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "Button::ChangeState ReuestedState(%d)\n", requestedState ); @@ -329,10 +318,14 @@ void Button::ChangeState( State requestedState ) if ( Self().OnStage() ) { OnStateChange( mButtonState ); // Notify derived buttons - PerformFunctionOnVisualsInState( &Button::SelectRequiredVisual, mButtonState ); + SelectRequiredVisual( VISUAL_INDEX_FOR_STATE[ mButtonState ][ BACKGROUND ] ); + SelectRequiredVisual( VISUAL_INDEX_FOR_STATE[ mButtonState ][ FOREGROUND ] ); // If animation supported then visual removal should be performed after any transition animation has completed. // If Required Visual is not loaded before current visual is removed then a flickering will be evident. - PerformFunctionOnVisualsInState( &Button::OnButtonVisualRemoval, mPreviousButtonState ); // Derived button can override OnButtonVisualRemoval + // Derived button can override OnButtonVisualRemoval + OnButtonVisualRemoval( VISUAL_INDEX_FOR_STATE[ mPreviousButtonState ][ BACKGROUND ] ); + OnButtonVisualRemoval( VISUAL_INDEX_FOR_STATE[ mPreviousButtonState ][ FOREGROUND ] ); + RelayoutRequest(); } Toolkit::Button handle( GetOwner() ); @@ -348,11 +341,7 @@ bool Button::IsSelected() const void Button::SetLabelText( const std::string& label ) { - Property::Map labelProperty; - labelProperty.Add( Toolkit::Visual::Property::TYPE, Toolkit::DevelVisual::TEXT) - .Add( Toolkit::TextVisual::Property::TEXT, label ); - - Self().SetProperty( Toolkit::Button::Property::LABEL, labelProperty ); + Self().SetProperty( Toolkit::Button::Property::LABEL, label ); } std::string Button::GetLabelText() const @@ -366,13 +355,16 @@ std::string Button::GetLabelText() const if ( labelProperty ) { Property::Value* value = labelProperty->Find( Toolkit::TextVisual::Property::TEXT ); - value->Get( textLabel ); + if( value ) + { + value->Get( textLabel ); + } } return textLabel; } -void Button::MergeLabelProperties( const Property::Map& inMap, Property::Map& outMap ) +void Button::MergeWithExistingLabelProperties( const Property::Map& inMap, Property::Map& outMap ) { DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "MergeLabelProperties with %d properties\n", inMap.Count() ); @@ -385,7 +377,7 @@ void Button::MergeLabelProperties( const Property::Map& inMap, Property::Map& ou * 3) Merge with new properties ( settings ) * 4) Return new merged map */ - Toolkit::Visual::Base visual = GetVisual( Toolkit::Button::Property::LABEL ); + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, Toolkit::Button::Property::LABEL ); if ( visual ) { DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "MergeLabelProperties Visual already exists, retrieving existing map\n"); @@ -420,8 +412,7 @@ Button::Align Button::GetLabelAlignment() * 3) Register visual with control with false for enable flag. Button will later enable visual when needed ( Button::SelectRequiredVisual ) * 4) Unregister visual if empty map was provided. This is the method to remove a visual */ - -void Button::CreateVisualsForComponent( Property::Index index, const Property::Value& value, const float visualDepth ) +void Button::CreateVisualsForComponent( Property::Index index, const Property::Value& value, const int visualDepth ) { DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "CreateVisualsForComponent index(%d)\n", index ); Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get(); @@ -451,23 +442,26 @@ void Button::CreateVisualsForComponent( Property::Index index, const Property::V if ( buttonVisual ) { DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "CreateVisualsForComponent RegisterVisual index(%d) enabled(%s)\n", - index, IsVisualEnabled( index )?"true":"false" ); - buttonVisual.SetDepthIndex( visualDepth ); - RegisterVisual( index, buttonVisual, IsVisualEnabled( index ) ); + index, DevelControl::IsVisualEnabled( *this, index )?"true":"false" ); + // enable the visual if needed for current state + const bool enabled = ( ( index == VISUAL_INDEX_FOR_STATE[ mButtonState ][ BACKGROUND ] )|| + ( index == VISUAL_INDEX_FOR_STATE[ mButtonState ][ FOREGROUND ] )|| + ( index == Toolkit::Button::Property::LABEL ) ); + DevelControl::RegisterVisual( *this, index, buttonVisual, enabled, visualDepth ); } else { - UnregisterVisual( index ); + DevelControl::UnregisterVisual( *this, index ); DALI_LOG_INFO( gLogButtonFilter, Debug::General, "CreateVisualsForComponent Visual not created or empty map (clearing visual).(%d)\n", index); } - PerformFunctionOnVisualsInState( &Button::SelectRequiredVisual, mButtonState ); + RelayoutRequest(); } bool Button::GetPropertyMapForVisual( Property::Index visualIndex, Property::Map& retreivedMap ) const { DALI_LOG_INFO( gLogButtonFilter, Debug::General, "GetPropertyMapForVisual visual(%d)\n", visualIndex); bool success = false; - Toolkit::Visual::Base visual = GetVisual( visualIndex ); + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, visualIndex ); if ( visual ) { visual.CreatePropertyMap( retreivedMap ); @@ -689,50 +683,53 @@ bool Button::OnAccessibilityActivated() bool Button::OnTouch( Actor actor, const TouchData& touch ) { - // Only events are processed when the button is not disabled and the touch event has only - // one touch point. + // Only events are processed when the button is not disabled + auto result( false ); - if( !IsDisabled() && ( 1 == touch.GetPointCount() ) ) + if( !IsDisabled() ) { - switch( touch.GetState( 0 ) ) + if ( 1 == touch.GetPointCount() ) { - case PointState::DOWN: - { - ButtonDown(); - break; - } - case PointState::UP: - { - ButtonUp(); - break; - } - case PointState::INTERRUPTED: + switch( touch.GetState( 0 ) ) { - OnTouchPointInterrupted(); - break; - } - case PointState::LEAVE: - { - OnTouchPointLeave(); - break; - } - case PointState::MOTION: - case PointState::STATIONARY: // FALLTHROUGH - { - // Nothing to do - break; + case PointState::DOWN: + { + ButtonDown(); + break; + } + case PointState::UP: + { + ButtonUp(); + break; + } + case PointState::INTERRUPTED: + { + OnTouchPointInterrupted(); + break; + } + case PointState::LEAVE: + { + OnTouchPointLeave(); + break; + } + case PointState::MOTION: + case PointState::STATIONARY: // FALLTHROUGH + { + // Nothing to do + break; + } } } - } - else if( 1 < touch.GetPointCount() ) - { - OnTouchPointLeave(); // Notification for derived classes. + else if( 1 < touch.GetPointCount() ) + { + OnTouchPointLeave(); // Notification for derived classes. - // Sets the button state to the default - mButtonPressedState = UNPRESSED; + // Sets the button state to the default + mButtonPressedState = UNPRESSED; + } + result = true; } - - return false; + return result; } bool Button::OnKeyboardEnter() @@ -767,10 +764,13 @@ void Button::OnStageDisconnection() void Button::OnStageConnection( int depth ) { DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "Button::OnStageConnection ptr(%p) \n", this ); - PerformFunctionOnVisualsInState( &Button::OnButtonVisualRemoval, mPreviousButtonState ); + OnButtonVisualRemoval( VISUAL_INDEX_FOR_STATE[ mPreviousButtonState ][ BACKGROUND ] ); + OnButtonVisualRemoval( VISUAL_INDEX_FOR_STATE[ mPreviousButtonState ][ FOREGROUND ] ); SelectRequiredVisual( Toolkit::Button::Property::LABEL ); - PerformFunctionOnVisualsInState( &Button::SelectRequiredVisual, mButtonState ); + SelectRequiredVisual( VISUAL_INDEX_FOR_STATE[ mButtonState ][ BACKGROUND ] ); + SelectRequiredVisual( VISUAL_INDEX_FOR_STATE[ mButtonState ][ FOREGROUND ] ); Control::OnStageConnection( depth ); // Enabled visuals will be put on stage + RelayoutRequest(); } Vector3 Button::GetNaturalSize() @@ -787,7 +787,7 @@ Vector3 Button::GetNaturalSize() for ( int state = Button::UNSELECTED_STATE; state < Button::STATE_COUNT; state++ ) { - Toolkit::Visual::Base visual = GetVisual( GET_VISUAL_INDEX_FOR_STATE[state][FOREGROUND] ); + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, VISUAL_INDEX_FOR_STATE[state][FOREGROUND] ); Size visualSize; if ( visual ) { @@ -802,7 +802,7 @@ Vector3 Button::GetNaturalSize() { for ( int state = Button::UNSELECTED_STATE; state < Button::STATE_COUNT; state++ ) { - Toolkit::Visual::Base visual = GetVisual( GET_VISUAL_INDEX_FOR_STATE[state][BACKGROUND] ); + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, VISUAL_INDEX_FOR_STATE[state][BACKGROUND] ); Size visualSize; if ( visual ) { @@ -830,7 +830,7 @@ Vector3 Button::GetNaturalSize() // Get natural size of label if text has been set if ( mTextStringSetFlag ) { - Toolkit::Visual::Base visual = GetVisual( Toolkit::Button::Property::LABEL ); + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, Toolkit::Button::Property::LABEL ); if ( visual ) { @@ -883,9 +883,8 @@ void Button::OnRelayout( const Vector2& size, RelayoutContainer& container ) { DALI_LOG_INFO( gLogButtonFilter, Debug::General, "OnRelayout targetSize(%f,%f) ptr(%p) state[%d]\n", size.width, size.height, this, mButtonState ); - Toolkit::Visual::Base currentVisual = GetVisual( GET_VISUAL_INDEX_FOR_STATE[mButtonState][FOREGROUND] ); - - Toolkit::Visual::Base currentBackGroundVisual = GetVisual( GET_VISUAL_INDEX_FOR_STATE[mButtonState][BACKGROUND] ); + Toolkit::Visual::Base currentVisual = DevelControl::GetVisual( *this, VISUAL_INDEX_FOR_STATE[mButtonState][FOREGROUND] ); + Toolkit::Visual::Base currentBackGroundVisual = DevelControl::GetVisual( *this, VISUAL_INDEX_FOR_STATE[mButtonState][BACKGROUND] ); // Sizes and padding set to zero, if not present then values will no effect calculations. Vector2 visualPosition = Vector2::ZERO; @@ -982,8 +981,8 @@ void Button::OnRelayout( const Vector2& size, RelayoutContainer& container ) Property::Map visualTransform; - visualTransform.Add( Toolkit::DevelVisual::Transform::Property::SIZE, size ) - .Add( Toolkit::DevelVisual::Transform::Property::OFFSET_SIZE_MODE, Vector4( 0.0f, 0.0f, 1.0f, 1.0f) ); // Use relative size + visualTransform.Add( Toolkit::Visual::Transform::Property::SIZE, size ) + .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ); currentBackGroundVisual.SetTransformAndSize( visualTransform, size ); } @@ -994,18 +993,19 @@ void Button::OnRelayout( const Vector2& size, RelayoutContainer& container ) Property::Map visualTransform; - visualTransform.Add( Toolkit::DevelVisual::Transform::Property::SIZE, visualSize ) - .Add( Toolkit::DevelVisual::Transform::Property::OFFSET, visualPosition ) - .Add( Toolkit::DevelVisual::Transform::Property::OFFSET_SIZE_MODE, Vector4( 1.0f, 1.0f, 1.0f, 1.0f) ) // Use absolute size - .Add( Toolkit::DevelVisual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN ) - .Add( Toolkit::DevelVisual::Transform::Property::ANCHOR_POINT, visualAnchorPoint ); + visualTransform.Add( Toolkit::Visual::Transform::Property::SIZE, visualSize ) + .Add( Toolkit::Visual::Transform::Property::OFFSET, visualPosition ) + .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ) + .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ) + .Add( Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN ) + .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, visualAnchorPoint ); currentVisual.SetTransformAndSize( visualTransform, size ); } if ( mTextStringSetFlag ) { - Toolkit::Visual::Base textVisual = GetVisual( Toolkit::Button::Property::LABEL ); // No need to search for Label visual if no text set. + Toolkit::Visual::Base textVisual = DevelControl::GetVisual( *this, Toolkit::Button::Property::LABEL ); // No need to search for Label visual if no text set. if ( textVisual ) { @@ -1024,11 +1024,12 @@ void Button::OnRelayout( const Vector2& size, RelayoutContainer& container ) Property::Map textVisualTransform; - textVisualTransform.Add( Toolkit::DevelVisual::Transform::Property::SIZE, preSize ) - .Add( Toolkit::DevelVisual::Transform::Property::OFFSET, labelPosition ) - .Add( Toolkit::DevelVisual::Transform::Property::OFFSET_SIZE_MODE, Vector4( 1.0f, 1.0f, 1.0f,1.0f ) ) // Use absolute size - .Add( Toolkit::DevelVisual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN ) - .Add( Toolkit::DevelVisual::Transform::Property::ANCHOR_POINT, visualAnchorPoint ); + textVisualTransform.Add( Toolkit::Visual::Transform::Property::SIZE, preSize ) + .Add( Toolkit::Visual::Transform::Property::OFFSET, labelPosition ) + .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ) + .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ) + .Add( Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN ) + .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, visualAnchorPoint ); textVisual.SetTransformAndSize( textVisualTransform, size ); } @@ -1098,8 +1099,11 @@ void Button::Released() void Button::SelectRequiredVisual( Property::Index visualIndex ) { DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "Button::SelectRequiredVisual index(%d) state(%d)\n", visualIndex, mButtonState ); - - EnableVisual( visualIndex, true ); + // only enable visuals that exist + if( DevelControl::GetVisual( *this, visualIndex ) ) + { + DevelControl::EnableVisual( *this, visualIndex, true ); + } } void Button::RemoveVisual( Property::Index visualIndex ) @@ -1107,11 +1111,11 @@ void Button::RemoveVisual( Property::Index visualIndex ) // Use OnButtonVisualRemoval if want button developer to have the option to override removal. DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "Button::RemoveVisual index(%d) state(%d)\n", visualIndex, mButtonState ); - Toolkit::Visual::Base visual = GetVisual( visualIndex ); + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, visualIndex ); if( visual ) { - EnableVisual( visualIndex, false ); + DevelControl::EnableVisual( *this, visualIndex, false ); } } @@ -1224,14 +1228,33 @@ void Button::SetProperty( BaseObject* object, Property::Index index, const Prope case Toolkit::Button::Property::LABEL: { - // Get a Property::Map from the property if possible. - Property::Map* setPropertyMap = value.GetMap(); - if( setPropertyMap ) + Property::Map outTextVisualProperties; + std::string textString; + + if ( value.Get( textString ) ) + { + DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "Button::SetProperty Setting TextVisual with string[%s]\n", textString.c_str() ); + + Property::Map setPropertyMap; + setPropertyMap.Add( Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT ) + .Add( Toolkit::TextVisual::Property::TEXT, textString ); + + GetImplementation( button ).MergeWithExistingLabelProperties( setPropertyMap, outTextVisualProperties ); + } + else { - Property::Map textVisualProperties; - GetImplementation( button ).MergeLabelProperties( *setPropertyMap, textVisualProperties ); - GetImplementation( button ).CreateVisualsForComponent( index, textVisualProperties, DepthIndex::CONTENT ); - GetImplementation( button ).RelayoutRequest(); + // Get a Property::Map from the property if possible. + Property::Map* setPropertyMap = value.GetMap(); + if( setPropertyMap ) + { + TextVisual::ConvertStringKeysToIndexKeys( *setPropertyMap ); + GetImplementation( button ).MergeWithExistingLabelProperties( *setPropertyMap, outTextVisualProperties ); + } + } + + if( !outTextVisualProperties.Empty() ) + { + GetImplementation( button ).CreateVisualsForComponent( index, outTextVisualProperties, DepthIndex::CONTENT ); } break; } @@ -1244,7 +1267,6 @@ void Button::SetProperty( BaseObject* object, Property::Index index, const Prope labelAlignment ); GetImplementation( button ).SetLabelAlignment( labelAlignment ); - GetImplementation( button ).RelayoutRequest(); break; } @@ -1259,7 +1281,6 @@ void Button::SetProperty( BaseObject* object, Property::Index index, const Prope { Vector4 padding ( value.Get< Vector4 >() ); GetImplementation( button ).SetForegroundPadding( Padding( padding.x, padding.y, padding.z, padding.w ) ); - GetImplementation( button ).RelayoutRequest(); break; } } @@ -1489,7 +1510,7 @@ void Button::SetBackgroundImage( const std::string& filename ) } else { - UnregisterVisual( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL ); + DevelControl::UnregisterVisual( *this, Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL ); } } @@ -1506,7 +1527,7 @@ void Button::SetSelectedBackgroundImage( const std::string& filename ) } else { - UnregisterVisual( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL ); + DevelControl::UnregisterVisual( *this, Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL ); } } @@ -1537,7 +1558,7 @@ void Button::SetDisabledSelectedImage( const std::string& filename ) // Used by Deprecated Properties which don't use the Visual Property maps for setting and getting std::string Button::GetUrlForImageVisual( const Property::Index index ) const { - Toolkit::Visual::Base visual = GetVisual( index ); + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, index ); std::string result; if ( visual ) @@ -1578,27 +1599,52 @@ void Button::SetButtonImage( Image image ) { DALI_LOG_WARNING("Button::SetButtonImage @DEPRECATED_1_0.50\n"); SetUnselectedImage( GetUrlFromImage( image ) ); + mSetButtonImage = image; } void Button::SetSelectedImage( Image image ) { DALI_LOG_WARNING("Button::SetSelectedImage @DEPRECATED_1_0.50\n"); SetSelectedImage( GetUrlFromImage( image ) ); + mSetSelectedImage = image; } Actor Button::GetButtonImage() const { + // When deprecated ImageView API removed then this button API can be removed too. DALI_LOG_WARNING("Button::GetButtonImage @DEPRECATED_1_0.50\n"); - Actor imageView = Toolkit::ImageView::New( GetUrlForImageVisual( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL ) ); + + Actor imageView; + + if ( mSetButtonImage ) + { + imageView = Toolkit::ImageView::New( mSetButtonImage ); + } + else + { + ResourceImage image = ResourceImage::New( GetUrlForImageVisual( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL ) ); + imageView = Toolkit::ImageView::New( image ); + } return imageView; } Actor Button::GetSelectedImage() const { + // When deprecated ImageView API removed then this button API can be removed too. DALI_LOG_WARNING("Button::GetSelectedImage @DEPRECATED_1_0.50\n"); - Actor imageView = Toolkit::ImageView::New( GetUrlForImageVisual( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL ) ); + Actor imageView; + + if ( mSetSelectedImage ) + { + imageView = Toolkit::ImageView::New( mSetSelectedImage ); + } + else + { + ResourceImage image = ResourceImage::New( GetUrlForImageVisual( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL ) ); + imageView = Toolkit::ImageView::New( image ); + } return imageView; }