X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fbuttons%2Fbutton-impl.cpp;h=149cb4a329a0a37658e6473aee7c715844b87144;hb=eb3641c5f89d0ad118aff7862b1e7669ea9828d9;hp=a984156980a06a6ff44dc30f4aa0d6ea5d705de5;hpb=863244a09761c6e22a224299b6155a285e21d6ec;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/buttons/button-impl.cpp b/dali-toolkit/internal/controls/buttons/button-impl.cpp index a984156..149cb4a 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. @@ -27,17 +27,20 @@ #include #include #include +#include #include // INTERNAL INCLUDES #include #include #include -#include #include #include #include +#include +#include #include +#include #include #include @@ -79,15 +82,17 @@ DALI_PROPERTY_REGISTRATION( Toolkit, Button, "unselectedColor", DALI_PROPERTY_REGISTRATION( Toolkit, Button, "selectedColor", VECTOR4, SELECTED_COLOR ) // Deprecated property DALI_PROPERTY_REGISTRATION( Toolkit, Button, "label", MAP, LABEL ) DALI_PROPERTY_REGISTRATION( Toolkit, Button, "labelText", STRING, LABEL_TEXT ) // Deprecated property -DALI_PROPERTY_REGISTRATION( Toolkit, Button, "unselectedVisual", MAP, UNSELECTED_VISUAL ) -DALI_PROPERTY_REGISTRATION( Toolkit, Button, "selectedVisual", MAP, SELECTED_VISUAL ) -DALI_PROPERTY_REGISTRATION( Toolkit, Button, "disabledSelectedVisual", MAP, DISABLED_SELECTED_VISUAL ) -DALI_PROPERTY_REGISTRATION( Toolkit, Button, "disabledUnselectedVisual", MAP, DISABLED_UNSELECTED_VISUAL ) -DALI_PROPERTY_REGISTRATION( Toolkit, Button, "unselectedBackgroundVisual", MAP, UNSELECTED_BACKGROUND_VISUAL ) -DALI_PROPERTY_REGISTRATION( Toolkit, Button, "selectedBackgroundVisual", MAP, SELECTED_BACKGROUND_VISUAL ) -DALI_PROPERTY_REGISTRATION( Toolkit, Button, "disabledUnselectedBackgroundVisual", MAP, DISABLED_UNSELECTED_BACKGROUND_VISUAL ) -DALI_PROPERTY_REGISTRATION( Toolkit, Button, "disabledSelectedBackgroundVisual", MAP, DISABLED_SELECTED_BACKGROUND_VISUAL ) -DALI_PROPERTY_REGISTRATION( Toolkit, Button, "labelRelativeAlignment", STRING, LABEL_RELATIVE_ALIGNMENT ) +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "unselectedVisual", MAP, UNSELECTED_VISUAL ) +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "selectedVisual", MAP, SELECTED_VISUAL ) +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "disabledSelectedVisual", MAP, DISABLED_SELECTED_VISUAL ) +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "disabledUnselectedVisual", MAP, DISABLED_UNSELECTED_VISUAL ) +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "unselectedBackgroundVisual", MAP, UNSELECTED_BACKGROUND_VISUAL ) +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "selectedBackgroundVisual", MAP, SELECTED_BACKGROUND_VISUAL ) +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "disabledUnselectedBackgroundVisual", MAP, DISABLED_UNSELECTED_BACKGROUND_VISUAL ) +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "disabledSelectedBackgroundVisual", MAP, DISABLED_SELECTED_BACKGROUND_VISUAL ) +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "labelRelativeAlignment", STRING, LABEL_RELATIVE_ALIGNMENT ) +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "labelPadding", VECTOR4, LABEL_PADDING ) +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "visualPadding", VECTOR4, VISUAL_PADDING ) // Signals: DALI_SIGNAL_REGISTRATION( Toolkit, Button, "pressed", SIGNAL_PRESSED ) @@ -119,10 +124,10 @@ const unsigned int ALIGNMENT_STRING_TABLE_COUNT = sizeof( ALIGNMENT_STRING_TABLE const Property::Index GET_VISUAL_INDEX_FOR_STATE[][Button::STATE_COUNT] = { - { Toolkit::Button::Property::UNSELECTED_BACKGROUND_VISUAL, Toolkit::Button::Property::UNSELECTED_VISUAL }, - { Toolkit::Button::Property::SELECTED_BACKGROUND_VISUAL, Toolkit::Button::Property::SELECTED_VISUAL }, - { Toolkit::Button::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL, Toolkit::Button::Property::DISABLED_UNSELECTED_VISUAL }, - { Toolkit::Button::Property::DISABLED_SELECTED_BACKGROUND_VISUAL, Toolkit::Button::Property::DISABLED_SELECTED_VISUAL } + { Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, Toolkit::DevelButton::Property::UNSELECTED_VISUAL }, + { Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL, Toolkit::DevelButton::Property::SELECTED_VISUAL }, + { Toolkit::DevelButton::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL, Toolkit::DevelButton::Property::DISABLED_UNSELECTED_VISUAL }, + { Toolkit::DevelButton::Property::DISABLED_SELECTED_BACKGROUND_VISUAL, Toolkit::DevelButton::Property::DISABLED_SELECTED_VISUAL } }; /** @@ -345,11 +350,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 @@ -363,13 +364,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() ); @@ -382,7 +386,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"); @@ -418,7 +422,7 @@ Button::Align Button::GetLabelAlignment() * 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(); @@ -448,13 +452,12 @@ 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" ); + DevelControl::RegisterVisual( *this, index, buttonVisual, DevelControl::IsVisualEnabled( *this, index ), 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 ); @@ -464,7 +467,7 @@ bool Button::GetPropertyMapForVisual( Property::Index visualIndex, Property::Map { 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 ); @@ -544,13 +547,13 @@ void Button::ButtonDown() void Button::ButtonUp() { + bool emitSignalsForPressAndReleaseAction = false; + if( DEPRESSED == mButtonPressedState ) { - bool validButtonAction = false; - if( mTogglableButton ) // Button up will change state { - validButtonAction = OnToggleReleased(); // Derived toggle buttons can override this to provide custom behaviour + emitSignalsForPressAndReleaseAction = OnToggleReleased(); // Derived toggle buttons can override this to provide custom behaviour } else { @@ -559,16 +562,20 @@ void Button::ButtonUp() { mAutoRepeatingTimer.Reset(); } - validButtonAction = true; + emitSignalsForPressAndReleaseAction = true; } + } + else if ( TOGGLE_DEPRESSED == mButtonPressedState ) + { + emitSignalsForPressAndReleaseAction = true; // toggle released after being pressed, a click + } - if ( validButtonAction ) - { - // The clicked and released signals should be emitted regardless of toggle mode. - Toolkit::Button handle( GetOwner() ); - mReleasedSignal.Emit( handle ); - mClickedSignal.Emit( handle ); - } + if ( emitSignalsForPressAndReleaseAction ) + { + // The clicked and released signals should be emitted regardless of toggle mode. + Toolkit::Button handle( GetOwner() ); + mReleasedSignal.Emit( handle ); + mClickedSignal.Emit( handle ); } } @@ -773,39 +780,57 @@ Vector3 Button::GetNaturalSize() bool horizontalAlignment = mTextLabelAlignment == BEGIN || mTextLabelAlignment == END; // label and visual side by side // Get natural size of foreground ( largest of the possible visuals ) - Size largestForegroundVisual; + Size largestProvidedVisual; Size labelSize = Size::ZERO; - for ( int state = Button::UNSELECTED_STATE; state < Button::STATE_COUNT; state++) + bool foreGroundVisualUsed = false; + + 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, GET_VISUAL_INDEX_FOR_STATE[state][FOREGROUND] ); Size visualSize; if ( visual ) { visual.GetNaturalSize( visualSize ); - largestForegroundVisual.width = std::max(largestForegroundVisual.width, visualSize.width ); - largestForegroundVisual.height = std::max(largestForegroundVisual.height, visualSize.height ); + largestProvidedVisual.width = std::max(largestProvidedVisual.width, visualSize.width ); + largestProvidedVisual.height = std::max(largestProvidedVisual.height, visualSize.height ); + foreGroundVisualUsed = true; + } + } + + if ( !foreGroundVisualUsed ) // If foreground visual not supplied then use the background visual to calculate Natural size + { + for ( int state = Button::UNSELECTED_STATE; state < Button::STATE_COUNT; state++ ) + { + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, GET_VISUAL_INDEX_FOR_STATE[state][BACKGROUND] ); + Size visualSize; + if ( visual ) + { + visual.GetNaturalSize( visualSize ); + largestProvidedVisual.width = std::max(largestProvidedVisual.width, visualSize.width ); + largestProvidedVisual.height = std::max(largestProvidedVisual.height, visualSize.height ); + } } } // Get horizontal padding total - if ( largestForegroundVisual.width > 0 ) // if visual exists + if ( largestProvidedVisual.width > 0 ) // if visual exists { - size.width += largestForegroundVisual.width + mForegroundPadding.left + mForegroundPadding.right; + size.width += largestProvidedVisual.width + mForegroundPadding.left + mForegroundPadding.right; } // Get vertical padding total - if ( largestForegroundVisual.height > 0 ) + if ( largestProvidedVisual.height > 0 ) { - size.height += largestForegroundVisual.height + mForegroundPadding.top + mForegroundPadding.bottom; + size.height += largestProvidedVisual.height + mForegroundPadding.top + mForegroundPadding.bottom; } DALI_LOG_INFO( gLogButtonFilter, Debug::General, "GetNaturalSize visual Size(%f,%f)\n", - largestForegroundVisual.width, largestForegroundVisual.height ); + largestProvidedVisual.width, largestProvidedVisual.height ); // 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 ) { @@ -858,9 +883,9 @@ 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 currentVisual = DevelControl::GetVisual( *this, GET_VISUAL_INDEX_FOR_STATE[mButtonState][FOREGROUND] ); - Toolkit::Visual::Base currentBackGroundVisual = GetVisual( GET_VISUAL_INDEX_FOR_STATE[mButtonState][BACKGROUND] ); + Toolkit::Visual::Base currentBackGroundVisual = DevelControl::GetVisual( *this, GET_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; @@ -953,12 +978,12 @@ void Button::OnRelayout( const Vector2& size, RelayoutContainer& container ) if ( currentBackGroundVisual ) { - DALI_LOG_INFO( gLogButtonFilter, Debug::General, "OnRelayout Setting visual bakcground size to(%f,%f)\n", size.width, size.height); + DALI_LOG_INFO( gLogButtonFilter, Debug::General, "OnRelayout Setting visual background size to(%f,%f)\n", size.width, size.height); 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 + .Add( Toolkit::DevelVisual::Transform::Property::SIZE_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ); currentBackGroundVisual.SetTransformAndSize( visualTransform, size ); } @@ -971,7 +996,8 @@ void Button::OnRelayout( const Vector2& size, RelayoutContainer& container ) 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::OFFSET_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ) + .Add( Toolkit::DevelVisual::Transform::Property::SIZE_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ) .Add( Toolkit::DevelVisual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN ) .Add( Toolkit::DevelVisual::Transform::Property::ANCHOR_POINT, visualAnchorPoint ); @@ -980,7 +1006,7 @@ void Button::OnRelayout( const Vector2& size, RelayoutContainer& container ) 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 ) { @@ -991,12 +1017,18 @@ void Button::OnRelayout( const Vector2& size, RelayoutContainer& container ) labelPosition.y = labelVisualPadding.height; } + Vector2 preSize = Vector2( static_cast< int >( remainingSpaceForText.x ), static_cast< int >( remainingSpaceForText.y )); + DALI_LOG_INFO( gLogButtonFilter, Debug::General, "OnRelayout text Size(%f,%f) text Position(%f,%f) \n", remainingSpaceForText.width, remainingSpaceForText.height, labelPosition.x, labelPosition.y); + DALI_LOG_INFO( gLogButtonFilter, Debug::General, "OnRelayout text Size -- (%f,%f) text Position(%f,%f) \n", preSize.width, preSize.height, labelPosition.x, labelPosition.y); + + Property::Map textVisualTransform; - textVisualTransform.Add( Toolkit::DevelVisual::Transform::Property::SIZE, remainingSpaceForText) + 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::OFFSET_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ) + .Add( Toolkit::DevelVisual::Transform::Property::SIZE_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ) .Add( Toolkit::DevelVisual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN ) .Add( Toolkit::DevelVisual::Transform::Property::ANCHOR_POINT, visualAnchorPoint ); @@ -1004,6 +1036,8 @@ void Button::OnRelayout( const Vector2& size, RelayoutContainer& container ) } } + DALI_LOG_INFO( gLogButtonFilter, Debug::General, "OnRelayout selected (%s) \n", IsSelected()?"yes":"no" ); + DALI_LOG_INFO( gLogButtonFilter, Debug::General, "OnRelayout << \n"); } @@ -1067,7 +1101,7 @@ void Button::SelectRequiredVisual( Property::Index visualIndex ) { DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "Button::SelectRequiredVisual index(%d) state(%d)\n", visualIndex, mButtonState ); - EnableVisual( visualIndex, true ); + DevelControl::EnableVisual( *this, visualIndex, true ); } void Button::RemoveVisual( Property::Index visualIndex ) @@ -1075,11 +1109,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 ); } } @@ -1138,32 +1172,32 @@ void Button::SetProperty( BaseObject* object, Property::Index index, const Prope case Toolkit::Button::Property::UNSELECTED_STATE_IMAGE: // Legacy Tizen 3.0 { - GetImplementation( button ).CreateVisualsForComponent( Toolkit::Button::Property::UNSELECTED_VISUAL, value, DepthIndex::CONTENT ); + GetImplementation( button ).CreateVisualsForComponent( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, value, DepthIndex::BACKGROUND ); break; } case Toolkit::Button::Property::DISABLED_STATE_IMAGE: // Legacy Tizen 3.0 { - GetImplementation( button ).CreateVisualsForComponent( Toolkit::Button::Property::DISABLED_UNSELECTED_VISUAL, value, DepthIndex::CONTENT ); + GetImplementation( button ).CreateVisualsForComponent( Toolkit::DevelButton::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL, value, DepthIndex::BACKGROUND ); break; } case Toolkit::Button::Property::SELECTED_STATE_IMAGE: // Legacy Tizen 3.0 { - GetImplementation( button ).CreateVisualsForComponent( Toolkit::Button::Property::SELECTED_VISUAL, value, DepthIndex::CONTENT ); + GetImplementation( button ).CreateVisualsForComponent( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL, value, DepthIndex::BACKGROUND ); break; } - case Toolkit::Button::Property::UNSELECTED_VISUAL: - case Toolkit::Button::Property::SELECTED_VISUAL: - case Toolkit::Button::Property::DISABLED_SELECTED_VISUAL: - case Toolkit::Button::Property::DISABLED_UNSELECTED_VISUAL: + case Toolkit::DevelButton::Property::UNSELECTED_VISUAL: + case Toolkit::DevelButton::Property::SELECTED_VISUAL: + case Toolkit::DevelButton::Property::DISABLED_SELECTED_VISUAL: + case Toolkit::DevelButton::Property::DISABLED_UNSELECTED_VISUAL: { GetImplementation( button ).CreateVisualsForComponent( index, value, DepthIndex::CONTENT ); break; } - case Toolkit::Button::Property::UNSELECTED_BACKGROUND_VISUAL: - case Toolkit::Button::Property::SELECTED_BACKGROUND_VISUAL: - case Toolkit::Button::Property::DISABLED_SELECTED_BACKGROUND_VISUAL: - case Toolkit::Button::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL: + case Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL: + case Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL: + case Toolkit::DevelButton::Property::DISABLED_SELECTED_BACKGROUND_VISUAL: + case Toolkit::DevelButton::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL: { GetImplementation( button ).CreateVisualsForComponent( index , value, DepthIndex::BACKGROUND); break; @@ -1172,14 +1206,14 @@ void Button::SetProperty( BaseObject* object, Property::Index index, const Prope case Toolkit::Button::Property::UNSELECTED_COLOR: { DALI_LOG_WARNING("[%s] Using deprecated Property Button::Property::UNSELECTED_COLOR instead use Button::Property::UNSELECTED_BACKGROUND_VISUAL\n", __FUNCTION__); - GetImplementation( button ).SetColor( value.Get< Vector4 >(), Toolkit::Button::Property::UNSELECTED_BACKGROUND_VISUAL ); + GetImplementation( button ).SetColor( value.Get< Vector4 >(), Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL ); break; } case Toolkit::Button::Property::SELECTED_COLOR: { DALI_LOG_WARNING("[%s] Using deprecated Property Button::Property::SELECTED_COLOR instead use Button::Property::SELECTED_BACKGROUND_VISUAL\n", __FUNCTION__); - GetImplementation( button ).SetColor( value.Get< Vector4 >(), Toolkit::Button::Property::SELECTED_BACKGROUND_VISUAL ); + GetImplementation( button ).SetColor( value.Get< Vector4 >(), Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL ); break; } @@ -1192,19 +1226,39 @@ 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::DevelVisual::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 ); + // 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 ); GetImplementation( button ).RelayoutRequest(); } break; } - case Toolkit::Button::Property::LABEL_RELATIVE_ALIGNMENT: + case Toolkit::DevelButton::Property::LABEL_RELATIVE_ALIGNMENT: { Button::Align labelAlignment(END); Scripting::GetEnumeration< Button::Align> ( value.Get< std::string >().c_str(), @@ -1212,6 +1266,22 @@ void Button::SetProperty( BaseObject* object, Property::Index index, const Prope labelAlignment ); GetImplementation( button ).SetLabelAlignment( labelAlignment ); + GetImplementation( button ).RelayoutRequest(); + break; + } + + case Toolkit::DevelButton::Property::LABEL_PADDING: + { + Vector4 padding ( value.Get< Vector4 >() ); + GetImplementation( button ).SetLabelPadding( Padding( padding.x, padding.y, padding.z, padding.w ) ); + break; + } + + case Toolkit::DevelButton::Property::VISUAL_PADDING: + { + Vector4 padding ( value.Get< Vector4 >() ); + GetImplementation( button ).SetForegroundPadding( Padding( padding.x, padding.y, padding.z, padding.w ) ); + GetImplementation( button ).RelayoutRequest(); break; } } @@ -1266,30 +1336,30 @@ Property::Value Button::GetProperty( BaseObject* object, Property::Index propert case Toolkit::Button::Property::UNSELECTED_STATE_IMAGE: { - value = GetImplementation( button ).GetUrlForImageVisual( Toolkit::Button::Property::UNSELECTED_VISUAL ); + value = GetImplementation( button ).GetUrlForImageVisual( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL ); break; } case Toolkit::Button::Property::SELECTED_STATE_IMAGE: { - value = GetImplementation( button ).GetUrlForImageVisual( Toolkit::Button::Property::SELECTED_VISUAL ); + value = GetImplementation( button ).GetUrlForImageVisual( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL ); break; } case Toolkit::Button::Property::DISABLED_STATE_IMAGE: { - value = GetImplementation( button ).GetUrlForImageVisual( Toolkit::Button::Property::DISABLED_UNSELECTED_VISUAL ); + value = GetImplementation( button ).GetUrlForImageVisual( Toolkit::DevelButton::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL ); break; } - case Toolkit::Button::Property::UNSELECTED_VISUAL: - case Toolkit::Button::Property::SELECTED_VISUAL: - case Toolkit::Button::Property::DISABLED_SELECTED_VISUAL: - case Toolkit::Button::Property::DISABLED_UNSELECTED_VISUAL: - case Toolkit::Button::Property::UNSELECTED_BACKGROUND_VISUAL: - case Toolkit::Button::Property::SELECTED_BACKGROUND_VISUAL: - case Toolkit::Button::Property::DISABLED_SELECTED_BACKGROUND_VISUAL: - case Toolkit::Button::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL: + case Toolkit::DevelButton::Property::UNSELECTED_VISUAL: + case Toolkit::DevelButton::Property::SELECTED_VISUAL: + case Toolkit::DevelButton::Property::DISABLED_SELECTED_VISUAL: + case Toolkit::DevelButton::Property::DISABLED_UNSELECTED_VISUAL: + case Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL: + case Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL: + case Toolkit::DevelButton::Property::DISABLED_SELECTED_BACKGROUND_VISUAL: + case Toolkit::DevelButton::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL: case Toolkit::Button::Property::LABEL: { Property::Map visualProperty; @@ -1318,7 +1388,7 @@ Property::Value Button::GetProperty( BaseObject* object, Property::Index propert break; } - case Toolkit::Button::Property::LABEL_RELATIVE_ALIGNMENT: + case Toolkit::DevelButton::Property::LABEL_RELATIVE_ALIGNMENT: { const char* alignment = Scripting::GetEnumerationName< Button::Align >( GetImplementation( button ).GetLabelAlignment(), ALIGNMENT_STRING_TABLE, @@ -1330,6 +1400,19 @@ Property::Value Button::GetProperty( BaseObject* object, Property::Index propert break; } + + case Toolkit::DevelButton::Property::LABEL_PADDING: + { + Padding padding = GetImplementation( button ).GetLabelPadding(); + value = Vector4( padding.x, padding.y, padding.top, padding.bottom); + break; + } + + case Toolkit::DevelButton::Property::VISUAL_PADDING: + { + Padding padding = GetImplementation( button ).GetForegroundPadding(); + value = Vector4( padding.x, padding.y, padding.top, padding.bottom); + } } } @@ -1366,7 +1449,7 @@ Padding Button::GetForegroundPadding() // Legacy code needed whilst Color can be set by direct Property setting ( deprecated ) instead of setting a Visual void Button::SetColor( const Vector4& color, Property::Index visualIndex ) { - if ( visualIndex == Toolkit::Button::Property::SELECTED_BACKGROUND_VISUAL ) + if ( visualIndex == Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL ) { mSelectedColor = color; } @@ -1417,33 +1500,35 @@ void Button::SetLabel( Actor label ) void Button::SetUnselectedImage( const std::string& filename ) { - if( !filename.empty() ) - { - CreateVisualsForComponent( Toolkit::Button::Property::UNSELECTED_VISUAL, filename, DepthIndex::CONTENT ); - } + SetBackgroundImage( filename ); } void Button::SetBackgroundImage( const std::string& filename ) { if( !filename.empty() ) { - CreateVisualsForComponent( Toolkit::Button::Property::UNSELECTED_BACKGROUND_VISUAL, filename, DepthIndex::BACKGROUND ); + CreateVisualsForComponent( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, filename, DepthIndex::BACKGROUND ); + } + else + { + DevelControl::UnregisterVisual( *this, Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL ); } } void Button::SetSelectedImage( const std::string& filename ) { - if( !filename.empty() ) - { - CreateVisualsForComponent( Toolkit::Button::Property::SELECTED_VISUAL, filename, DepthIndex::CONTENT ); - } + SetSelectedBackgroundImage( filename ); } void Button::SetSelectedBackgroundImage( const std::string& filename ) { if( !filename.empty() ) { - CreateVisualsForComponent( Toolkit::Button::Property::SELECTED_BACKGROUND_VISUAL, filename, DepthIndex::BACKGROUND ); + CreateVisualsForComponent( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL, filename, DepthIndex::BACKGROUND ); + } + else + { + DevelControl::UnregisterVisual( *this, Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL ); } } @@ -1451,7 +1536,7 @@ void Button::SetDisabledBackgroundImage( const std::string& filename ) { if( !filename.empty() ) { - CreateVisualsForComponent( Toolkit::Button::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL, filename, DepthIndex::BACKGROUND ); + CreateVisualsForComponent( Toolkit::DevelButton::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL, filename, DepthIndex::BACKGROUND ); } } @@ -1459,7 +1544,7 @@ void Button::SetDisabledImage( const std::string& filename ) { if( !filename.empty() ) { - CreateVisualsForComponent( Toolkit::Button::Property::DISABLED_UNSELECTED_VISUAL, filename, DepthIndex::CONTENT ); + CreateVisualsForComponent( Toolkit::DevelButton::Property::DISABLED_UNSELECTED_VISUAL, filename, DepthIndex::CONTENT ); } } @@ -1467,14 +1552,14 @@ void Button::SetDisabledSelectedImage( const std::string& filename ) { if( !filename.empty() ) { - CreateVisualsForComponent( Toolkit::Button::Property::DISABLED_SELECTED_VISUAL, filename, DepthIndex::CONTENT ); + CreateVisualsForComponent( Toolkit::DevelButton::Property::DISABLED_SELECTED_VISUAL, filename, DepthIndex::CONTENT ); } } // 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 ) @@ -1515,27 +1600,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::Button::Property::UNSELECTED_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::Button::Property::SELECTED_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; }