if ( root )
{
// RelayoutSize retreived for Actor to use any padding set to it.
- size.width = std::max( root.GetRelayoutSize( WIDTH ), size.width );
- size.height = std::max( root.GetRelayoutSize( HEIGHT ), size.height );
+ size.width = std::max( root.GetRelayoutSize( Dimension::WIDTH ), size.width );
+ size.height = std::max( root.GetRelayoutSize( Dimension::HEIGHT ), size.height );
}
}
self.SetLeaveRequired( true );
// Set resize policy to natural size so that buttons will resize to background images
- self.SetResizePolicy( USE_NATURAL_SIZE, ALL_DIMENSIONS );
+ self.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
}
void PushButton::OnLabelSet()
{
label.SetAnchorPoint( AnchorPoint::CENTER );
label.SetParentOrigin( ParentOrigin::CENTER );
- label.SetSize( mSize );
+
+ Toolkit::TextLabel textLabel = Toolkit::TextLabel::DownCast( label );
+ if( textLabel )
+ {
+ textLabel.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
+ textLabel.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
+ textLabel.SetProperty( Toolkit::TextLabel::Property::MULTI_LINE, true );
+ }
+
+ ConfigureSizeNegotiation();
}
}
void PushButton::OnButtonImageSet()
{
- Actor& buttonImage = GetButtonImage();
-
- buttonImage.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
-
- buttonImage.RelayoutRequestTree();
-
+ ConfigureSizeNegotiation();
RelayoutRequest();
}
void PushButton::OnSelectedImageSet()
{
- Actor& selectedImage = GetSelectedImage();
-
- selectedImage.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
-
- selectedImage.RelayoutRequestTree();
-
+ ConfigureSizeNegotiation();
RelayoutRequest();
}
void PushButton::OnBackgroundImageSet()
{
- Actor& backgroundImage = GetBackgroundImage();
-
- backgroundImage.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
-
- backgroundImage.RelayoutRequestTree();
-
+ ConfigureSizeNegotiation();
RelayoutRequest();
}
void PushButton::OnSelectedBackgroundImageSet()
{
- Actor& selectedBackgroundImage = GetSelectedBackgroundImage();
-
- selectedBackgroundImage.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+ ConfigureSizeNegotiation();
+ RelayoutRequest();
}
void PushButton::OnDisabledImageSet()
{
- Actor& disabledImage = GetDisabledImage();
-
- disabledImage.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
-
- disabledImage.RelayoutRequestTree();
-
+ ConfigureSizeNegotiation();
RelayoutRequest();
}
void PushButton::OnDisabledBackgroundImageSet()
{
- Actor& disabledBackgroundImage = GetDisabledBackgroundImage();
-
- disabledBackgroundImage.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
-
- disabledBackgroundImage.RelayoutRequestTree();
-
+ ConfigureSizeNegotiation();
RelayoutRequest();
}
}
}
-Vector3 PushButton::GetNaturalSize()
-{
- Vector3 size;
-
- // Check Image and Background image and use the largest size as the control's Natural size.
- SizeOfActorIfLarger( GetButtonImage(), size );
- SizeOfActorIfLarger( GetBackgroundImage(), size );
-
- // If label, test against it's size
- Toolkit::TextLabel label = Toolkit::TextLabel::DownCast( GetLabel() );
- if( label )
- {
- Vector3 labelSize = label.GetNaturalSize();
-
- size.width = std::max( size.width, labelSize.width + TEXT_PADDING * 2.0f );
- size.height = std::max( size.height, labelSize.height + TEXT_PADDING * 2.0f );
- }
-
- return size;
-}
-
void PushButton::StartTransitionAnimation()
{
if( mTransitionAnimation )
StopTransitionAnimation();
}
+Vector3 PushButton::GetNaturalSize()
+{
+ Vector3 size;
+
+ // If label, test against it's size
+ Toolkit::TextLabel label = Toolkit::TextLabel::DownCast( GetLabel() );
+ if( label )
+ {
+ size.width = std::max( size.width, label.GetRelayoutSize( Dimension::WIDTH ) );
+ size.height = std::max( size.height, label.GetRelayoutSize( Dimension::HEIGHT ) );
+ }
+ else
+ {
+ // Check Image and Background image and use the largest size as the control's Natural size.
+ SizeOfActorIfLarger( GetButtonImage(), size );
+ SizeOfActorIfLarger( GetBackgroundImage(), size );
+ }
+
+ return size;
+}
+
+void PushButton::OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension )
+{
+ ConfigureSizeNegotiation();
+}
+
+void PushButton::ConfigureSizeNegotiation()
+{
+ std::vector< Actor > images;
+ images.reserve( 7 );
+
+ images.push_back( GetButtonImage() );
+ images.push_back( GetSelectedImage() );
+ images.push_back( GetSelectedBackgroundImage() );
+ images.push_back( GetBackgroundImage() );
+ images.push_back( GetDisabledImage() );
+ images.push_back( GetDisabledSelectedImage() );
+ images.push_back( GetDisabledBackgroundImage() );
+
+ Actor label = GetLabel();
+
+ for( unsigned int i = 0; i < Dimension::DIMENSION_COUNT; ++i )
+ {
+ ConfigureSizeNegotiationDimension( static_cast< Dimension::Type >( 1 << i ), images, label );
+ }
+
+ if( label )
+ {
+ Padding padding;
+
+ if( label.GetResizePolicy( Dimension::WIDTH ) == ResizePolicy::USE_NATURAL_SIZE )
+ {
+ padding.left = TEXT_PADDING;
+ padding.right = TEXT_PADDING;
+ }
+
+ if( label.GetResizePolicy( Dimension::HEIGHT ) == ResizePolicy::USE_NATURAL_SIZE )
+ {
+ padding.top = TEXT_PADDING;
+ padding.bottom = TEXT_PADDING;
+ }
+
+ label.SetPadding( padding );
+ }
+}
+
+void PushButton::ConfigureSizeNegotiationDimension( Dimension::Type dimension, const std::vector< Actor >& images, Actor& label )
+{
+ ResizePolicy::Type imageResizePolicy = ResizePolicy::FILL_TO_PARENT;
+ ResizePolicy::Type labelResizePolicy = ResizePolicy::FILL_TO_PARENT;
+
+ switch( Self().GetResizePolicy( dimension ) )
+ {
+ case ResizePolicy::FIT_TO_CHILDREN:
+ {
+ imageResizePolicy = labelResizePolicy = ResizePolicy::USE_NATURAL_SIZE;
+ break;
+ }
+ case ResizePolicy::USE_NATURAL_SIZE:
+ {
+ if( label )
+ {
+ labelResizePolicy = ResizePolicy::USE_NATURAL_SIZE;
+ }
+ else
+ {
+ imageResizePolicy = ResizePolicy::USE_NATURAL_SIZE;
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ if( label )
+ {
+ label.SetResizePolicy( labelResizePolicy, dimension );
+ }
+
+ for( std::vector< Actor >::const_iterator it = images.begin(), itEnd = images.end(); it != itEnd; ++it )
+ {
+ Actor actor = *it;
+ if( actor )
+ {
+ actor.SetResizePolicy( imageResizePolicy, dimension );
+ }
+ }
+}
+
} // namespace Internal
} // namespace Toolkit