X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fbuttons%2Fpush-button-impl.cpp;h=1ee6b92152fde435c873f6383894d3f25044f47f;hp=3910e43af120105fcfe7e1ba6942b8d07664cd26;hb=efc136204e9a4460a7a2421e673c873e23974a80;hpb=c25b3c40178dadf12dc5e8f77c17413df0a55099 diff --git a/dali-toolkit/internal/controls/buttons/push-button-impl.cpp b/dali-toolkit/internal/controls/buttons/push-button-impl.cpp index 3910e43..1ee6b92 100644 --- a/dali-toolkit/internal/controls/buttons/push-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/push-button-impl.cpp @@ -21,6 +21,7 @@ // EXTERNAL INCLUDES #include #include +#include // INTERNAL INCLUDES #include @@ -47,6 +48,11 @@ BaseHandle Create() TypeRegistration typeRegistration( typeid(Toolkit::PushButton), typeid(Toolkit::Button), Create ); +const char* const UNSELECTED_BUTTON_IMAGE_DIR = DALI_IMAGE_DIR "button-up.9.png"; +const char* const SELECTED_BUTTON_IMAGE_DIR = DALI_IMAGE_DIR "button-down.9.png"; +const char* const DISABLED_UNSELECTED_BUTTON_IMAGE_DIR = DALI_IMAGE_DIR "button-disabled.9.png"; +const char* const DISABLED_SELECTED_BUTTON_IMAGE_DIR = DALI_IMAGE_DIR "button-down-disabled.9.png"; + } // unnamed namespace namespace @@ -62,8 +68,8 @@ void SizeOfActorIfLarger( Actor root, Vector3& size ) 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 ); } } @@ -102,7 +108,17 @@ void PushButton::OnButtonInitialize() 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 ); + + Image buttonImage = Dali::ResourceImage::New( UNSELECTED_BUTTON_IMAGE_DIR, ResourceImage::ON_DEMAND, ResourceImage::NEVER ); + Image selectedImage = Dali::ResourceImage::New( SELECTED_BUTTON_IMAGE_DIR, ResourceImage::ON_DEMAND, ResourceImage::NEVER ); + Image disabledImage = Dali::ResourceImage::New( DISABLED_UNSELECTED_BUTTON_IMAGE_DIR, ResourceImage::ON_DEMAND, ResourceImage::NEVER ); + Image disabledSelectedImage = Dali::ResourceImage::New( DISABLED_SELECTED_BUTTON_IMAGE_DIR, ResourceImage::ON_DEMAND, ResourceImage::NEVER ); + + SetButtonImage( ImageActor::New( buttonImage ) ); + SetSelectedImage( ImageActor::New( selectedImage ) ); + SetDisabledImage( ImageActor::New( disabledImage ) ); + SetDisabledSelectedImage( ImageActor::New( disabledSelectedImage ) ); } void PushButton::OnLabelSet() @@ -113,427 +129,198 @@ 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::OnDisabledSelectedImageSet() +{ + ConfigureSizeNegotiation(); RelayoutRequest(); } void PushButton::OnDisabledBackgroundImageSet() { - Actor& disabledBackgroundImage = GetDisabledBackgroundImage(); - - disabledBackgroundImage.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS ); - - disabledBackgroundImage.RelayoutRequestTree(); - + ConfigureSizeNegotiation(); RelayoutRequest(); } -bool PushButton::OnSelected() +void PushButton::OnSizeSet( const Vector3& targetSize ) { - Actor& buttonImage = GetButtonImage(); - Actor& selectedImage = GetSelectedImage(); - Actor& selectedBackgroundImage = GetSelectedBackgroundImage(); - - PaintState paintState = GetPaintState(); - - switch( paintState ) + if( targetSize != mSize ) { - case UnselectedState: - { - FadeOutImage( buttonImage ); - FadeInImage( selectedBackgroundImage ); - FadeInImage( selectedImage ); - StartTransitionAnimation(); - break; - } - case SelectedState: - { - FadeOutImage( selectedBackgroundImage ); - FadeOutImage( selectedImage ); - FadeInImage( buttonImage ); - StartTransitionAnimation(); - break; - } - case UnselectedSelectedTransition: - { - float opacity = 1.f; - if( selectedImage ) - { - opacity = selectedImage.GetCurrentOpacity(); - } + mSize = targetSize; - StopTransitionAnimation( false ); - FadeOutImage( selectedBackgroundImage, opacity ); - FadeOutImage( selectedImage, opacity ); - FadeInImage( buttonImage, 1.f - opacity ); - StartTransitionAnimation(); - break; - } - case SelectedUnselectedTransition: - { - float opacity = 0.f; - if( selectedImage ) - { - opacity = selectedImage.GetCurrentOpacity(); - } + Actor& label = GetLabel(); - StopTransitionAnimation( false ); - FadeOutImage( buttonImage, 1.f - opacity ); - FadeInImage( selectedBackgroundImage, opacity ); - FadeInImage( selectedImage, opacity ); - StartTransitionAnimation(); - break; - } - case DisabledUnselectedTransition: - { - StopTransitionAnimation(); - FadeOutImage( buttonImage ); - FadeInImage( selectedBackgroundImage ); - FadeInImage( selectedImage ); - StartTransitionAnimation(); - break; - } - case DisabledSelectedTransition: - { - StopTransitionAnimation(); - FadeOutImage( selectedBackgroundImage ); - FadeOutImage( selectedImage ); - FadeInImage( buttonImage ); - StartTransitionAnimation(); - break; - } - default: + if( label ) { - break; + label.SetSize( mSize ); } } +} - if( mTransitionAnimation ) - { - return true; - } +void PushButton::PrepareForTranstionIn( Actor actor ) +{ + actor.SetOpacity( 0.0f ); +} - return false; +void PushButton::PrepareForTranstionOut( Actor actor ) +{ + actor.SetOpacity( 1.0f ); } -bool PushButton::OnDisabled() +void PushButton::OnTransitionIn( Actor actor ) { - Actor& buttonImage = GetButtonImage(); - Actor& selectedImage = GetSelectedImage(); - Actor& selectedBackgroundImage = GetSelectedBackgroundImage(); - Actor& backgroundImage = GetBackgroundImage(); - Actor& disabledImage = GetDisabledImage(); - Actor& disabledSelectedImage = GetDisabledSelectedImage(); - Actor& disabledBackgroundImage = GetDisabledBackgroundImage(); + FadeImageTo( actor, 1.f ); +} - PaintState paintState = GetPaintState(); +void PushButton::OnTransitionOut( Actor actor ) +{ + FadeImageTo( actor, 0.0f ); +} - switch( paintState ) +void PushButton::FadeImageTo( Actor actor, float opacity ) +{ + if( actor ) { - case UnselectedState: - { - FadeOutImage( backgroundImage ); - FadeOutImage( buttonImage ); - FadeInImage( disabledBackgroundImage ); - FadeInImage( disabledImage ); - StartTransitionAnimation(); - break; - } - case SelectedState: - { - FadeOutImage( backgroundImage ); - FadeOutImage( selectedBackgroundImage ); - FadeOutImage( selectedImage ); - FadeInImage( disabledBackgroundImage ); - FadeInImage( disabledSelectedImage ); - StartTransitionAnimation(); - break; - } - case DisabledUnselectedState: - { - FadeOutImage( disabledBackgroundImage ); - FadeOutImage( disabledImage ); - FadeInImage( backgroundImage ); - FadeInImage( buttonImage ); - StartTransitionAnimation(); - break; - } - case DisabledSelectedState: - { - FadeOutImage( disabledBackgroundImage ); - FadeOutImage( disabledSelectedImage ); - FadeInImage( backgroundImage ); - FadeInImage( selectedBackgroundImage ); - FadeInImage( selectedImage ); - StartTransitionAnimation(); - break; - } - case UnselectedSelectedTransition: - { - float opacity = 1.f; - if( selectedImage ) - { - opacity = selectedImage.GetCurrentOpacity(); - } - - StopTransitionAnimation(); - FadeOutImage( backgroundImage ); - FadeOutImage( selectedBackgroundImage, opacity ); - FadeOutImage( selectedImage, opacity ); - FadeInImage( disabledBackgroundImage ); - FadeInImage( disabledSelectedImage ); - StartTransitionAnimation(); - break; - } - case SelectedUnselectedTransition: - { - float opacity = 1.f; - if( buttonImage ) - { - opacity = buttonImage.GetCurrentOpacity(); - } - - StopTransitionAnimation(); - FadeOutImage( backgroundImage ); - FadeOutImage( buttonImage, opacity ); - FadeInImage( disabledBackgroundImage ); - FadeInImage( disabledImage ); - StartTransitionAnimation(); - break; - } - case UnselectedDisabledTransition: - { - float opacity = 1.f; - if( disabledImage ) - { - opacity = disabledImage.GetCurrentOpacity(); - } + Dali::Animation transitionAnimation = GetTransitionAnimation(); + DALI_ASSERT_DEBUG( transitionAnimation ); - StopTransitionAnimation( false ); - FadeOutImage( disabledBackgroundImage, opacity ); - FadeOutImage( disabledImage, opacity ); - FadeInImage( backgroundImage, 1.f - opacity ); - FadeInImage( buttonImage, 1.f - opacity ); - StartTransitionAnimation(); - break; - } - case DisabledUnselectedTransition: + if( transitionAnimation ) { - float opacity = 1.f; - if( buttonImage ) - { - opacity = buttonImage.GetCurrentOpacity(); - } - - StopTransitionAnimation( false ); - FadeOutImage( backgroundImage, opacity ); - FadeOutImage( buttonImage, opacity ); - FadeInImage( disabledBackgroundImage, 1.f - opacity ); - FadeInImage( disabledImage, 1.f - opacity ); - StartTransitionAnimation(); - break; + transitionAnimation.AnimateTo( Property( actor, Actor::Property::COLOR_ALPHA ), opacity ); } - case SelectedDisabledTransition: - { - float opacity = 1.f; - if( disabledSelectedImage ) - { - opacity = disabledSelectedImage.GetCurrentOpacity(); - } + } +} - StopTransitionAnimation( false ); - FadeOutImage( disabledBackgroundImage, opacity ); - FadeOutImage( disabledSelectedImage, opacity ); - FadeInImage( backgroundImage, 1.f - opacity ); - FadeInImage( selectedBackgroundImage, 1.f - opacity ); - FadeInImage( selectedImage, 1.f - opacity ); - StartTransitionAnimation(); - break; - } - case DisabledSelectedTransition: - { - float opacity = 1.f; - if( selectedImage ) - { - opacity = selectedImage.GetCurrentOpacity(); - } +Vector3 PushButton::GetNaturalSize() +{ + Vector3 size; - StopTransitionAnimation( false ); - FadeOutImage( backgroundImage, opacity ); - FadeOutImage( selectedBackgroundImage, opacity ); - FadeOutImage( selectedImage, opacity ); - FadeInImage( disabledBackgroundImage, 1.f - opacity ); - FadeInImage( disabledSelectedImage, 1.f - opacity ); - StartTransitionAnimation(); - break; - } + // 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 ) ); } - - if( mTransitionAnimation ) + else { - return true; + // Check Image and Background image and use the largest size as the control's Natural size. + SizeOfActorIfLarger( GetButtonImage(), size ); + SizeOfActorIfLarger( GetBackgroundImage(), size ); } - return false; + return size; +} + +void PushButton::OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension ) +{ + ConfigureSizeNegotiation(); } -bool PushButton::OnPressed() +void PushButton::ConfigureSizeNegotiation() { - Actor& buttonImage = GetButtonImage(); - Actor& selectedImage = GetSelectedImage(); - Actor& selectedBackgroundImage = GetSelectedBackgroundImage(); + std::vector< Actor > images; + images.reserve( 7 ); - PaintState paintState = GetPaintState(); + 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() ); - switch( paintState ) + Actor label = GetLabel(); + + for( unsigned int i = 0; i < Dimension::DIMENSION_COUNT; ++i ) { - case UnselectedState: + ConfigureSizeNegotiationDimension( static_cast< Dimension::Type >( 1 << i ), images, label ); + } + + if( label ) + { + Padding padding; + + if( label.GetResizePolicy( Dimension::WIDTH ) == ResizePolicy::USE_NATURAL_SIZE ) { - FadeOutImage( buttonImage ); - FadeInImage( selectedBackgroundImage ); - FadeInImage( selectedImage ); - StartTransitionAnimation(); - break; + padding.left = TEXT_PADDING; + padding.right = TEXT_PADDING; } - case SelectedUnselectedTransition: - { - float opacity = 1.f; - if( buttonImage ) - { - opacity = buttonImage.GetCurrentOpacity(); - } - StopTransitionAnimation( false ); - FadeOutImage( buttonImage, opacity ); - FadeInImage( selectedBackgroundImage, 1.f - opacity ); - FadeInImage( selectedImage, 1.f - opacity ); - StartTransitionAnimation(); - break; - } - case DisabledUnselectedTransition: + if( label.GetResizePolicy( Dimension::HEIGHT ) == ResizePolicy::USE_NATURAL_SIZE ) { - float opacity = 1.f; - if( buttonImage ) - { - opacity = buttonImage.GetCurrentOpacity(); - } - - StopTransitionAnimation(); - FadeOutImage( buttonImage, opacity ); - FadeInImage( selectedBackgroundImage ); - FadeInImage( selectedImage ); - StartTransitionAnimation(); - break; + padding.top = TEXT_PADDING; + padding.bottom = TEXT_PADDING; } - default: - break; - } - if( mTransitionAnimation ) - { - return true; + label.SetPadding( padding ); } - - return false; } -bool PushButton::OnReleased() +void PushButton::ConfigureSizeNegotiationDimension( Dimension::Type dimension, const std::vector< Actor >& images, Actor& label ) { - Actor& buttonImage = GetButtonImage(); - Actor& selectedImage = GetSelectedImage(); - Actor& selectedBackgroundImage = GetSelectedBackgroundImage(); - - PaintState paintState = GetPaintState(); + ResizePolicy::Type imageResizePolicy = ResizePolicy::FILL_TO_PARENT; + ResizePolicy::Type labelResizePolicy = ResizePolicy::FILL_TO_PARENT; - switch( paintState ) + switch( Self().GetResizePolicy( dimension ) ) { - case SelectedState: + case ResizePolicy::FIT_TO_CHILDREN: { - FadeOutImage( selectedBackgroundImage ); - FadeOutImage( selectedImage ); - FadeInImage( buttonImage ); - StartTransitionAnimation(); + imageResizePolicy = labelResizePolicy = ResizePolicy::USE_NATURAL_SIZE; break; } - case UnselectedSelectedTransition: + case ResizePolicy::USE_NATURAL_SIZE: { - float opacity = 1.f; - if( selectedImage ) + if( label ) { - opacity = selectedImage.GetCurrentOpacity(); + labelResizePolicy = ResizePolicy::USE_NATURAL_SIZE; } - - StopTransitionAnimation( false ); - FadeOutImage( selectedBackgroundImage, opacity ); - FadeOutImage( selectedImage, opacity ); - FadeInImage( buttonImage, 1.f - opacity ); - StartTransitionAnimation(); - break; - } - case DisabledSelectedTransition: - { - float opacity = 1.f; - if( selectedImage ) + else { - opacity = selectedImage.GetCurrentOpacity(); + imageResizePolicy = ResizePolicy::USE_NATURAL_SIZE; } - - StopTransitionAnimation(); - FadeOutImage( selectedBackgroundImage, opacity ); - FadeOutImage( selectedImage, opacity ); - FadeInImage( buttonImage ); - StartTransitionAnimation(); break; } default: @@ -542,115 +329,21 @@ bool PushButton::OnReleased() } } - if( mTransitionAnimation ) - { - return true; - } - - return false; -} - -void PushButton::StopAllAnimations() -{ - StopTransitionAnimation(); -} - -void PushButton::OnControlSizeSet( const Vector3& targetSize ) -{ - if( targetSize != mSize ) - { - mSize = targetSize; - - Actor& label = GetLabel(); - - if( label ) - { - label.SetSize( mSize ); - } - } -} - -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 ); + label.SetResizePolicy( labelResizePolicy, dimension ); } - return size; -} - -void PushButton::StartTransitionAnimation() -{ - if( mTransitionAnimation ) + for( std::vector< Actor >::const_iterator it = images.begin(), itEnd = images.end(); it != itEnd; ++it ) { - mTransitionAnimation.FinishedSignal().Connect( this, &PushButton::TransitionAnimationFinished ); - mTransitionAnimation.Play(); - } -} - -void PushButton::StopTransitionAnimation( bool remove ) -{ - if( mTransitionAnimation ) - { - mTransitionAnimation.Clear(); - mTransitionAnimation.Reset(); - } - - if( remove ) - { - UpdatePaintTransitionState(); - } -} - -void PushButton::FadeInImage( Actor& image, float opacity, Vector3 scale ) -{ - if( image ) - { - image.SetOpacity( opacity ); - image.SetScale( scale ); - - if( !mTransitionAnimation ) + Actor actor = *it; + if( actor ) { - mTransitionAnimation = Dali::Animation::New( GetAnimationTime() ); + actor.SetResizePolicy( imageResizePolicy, dimension ); } - - mTransitionAnimation.AnimateTo( Property( image, Actor::Property::COLOR_ALPHA ), 1.f ); } } -void PushButton::FadeOutImage( Actor& image, float opacity, Vector3 scale ) -{ - if( image ) - { - image.SetOpacity( opacity ); - image.SetScale( scale ); - - if( !mTransitionAnimation ) - { - mTransitionAnimation = Dali::Animation::New( GetAnimationTime() ); - } - - mTransitionAnimation.AnimateTo( Property( image, Actor::Property::COLOR_ALPHA ), 0.f ); - } -} - -void PushButton::TransitionAnimationFinished( Dali::Animation& source ) -{ - StopTransitionAnimation(); -} - } // namespace Internal } // namespace Toolkit