X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fbuttons%2Fcheck-box-button-impl.cpp;h=5bf5344fae42fd085f991a60ddacbef15b0c1310;hb=refs%2Fchanges%2F49%2F88249%2F1;hp=9c898c777a3ecf8ab57b4bfde24e14b2819a491a;hpb=dc3613bb6248908c267a76e378b04962bce85664;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp b/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp index 9c898c7..5bf5344 100644 --- a/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/check-box-button-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2016 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. @@ -20,9 +20,13 @@ // EXTERNAL INCLUDES #include +#include -// INTERNAL INCLUDES -#include "check-box-button-default-painter-impl.h" +//INTERNAL INCLUDES +#include +#include +#include +#include namespace Dali { @@ -36,6 +40,9 @@ namespace Internal namespace { +const float DISTANCE_BETWEEN_IMAGE_AND_LABEL( 5.0f ); +const float ANIMATION_TIME( 0.26f ); // EFL checkbox tick time + BaseHandle Create() { return Toolkit::CheckBoxButton::New(); @@ -43,6 +50,10 @@ BaseHandle Create() TypeRegistration mType( typeid(Toolkit::CheckBoxButton), typeid(Toolkit::Button), Create ); +const char* const UNSELECTED_BUTTON_IMAGE_DIR = DALI_IMAGE_DIR "checkbox-unselected.png"; +const char* const SELECTED_BUTTON_IMAGE_DIR = DALI_IMAGE_DIR "checkbox-selected.png"; +const char* const DISABLED_UNSELECTED_BUTTON_IMAGE_DIR = DALI_IMAGE_DIR "checkbox-unselected-disabled.png"; +const char* const DISABLED_SELECTED_BUTTON_IMAGE_DIR = DALI_IMAGE_DIR "checkbox-selected-diabled.png"; } Dali::Toolkit::CheckBoxButton CheckBoxButton::New() @@ -63,16 +74,168 @@ Dali::Toolkit::CheckBoxButton CheckBoxButton::New() CheckBoxButton::CheckBoxButton() : Button() { - // Creates specific painter. - ButtonPainterPtr painter = new CheckBoxButtonDefaultPainter(); - SetPainter( painter ); - SetTogglableButton( true ); + + SetAnimationTime( ANIMATION_TIME ); } CheckBoxButton::~CheckBoxButton() { - SetPainter( NULL ); +} + +void CheckBoxButton::SetTickUVEffect() +{ + Toolkit::ImageView imageView = Toolkit::ImageView::DownCast( mSelectedImage ); + if( imageView ) + { + imageView.RegisterProperty( "uTextureRect", Vector4(0.f, 0.f, 1.f, 1.f ) ); + imageView.RegisterProperty( "uTopLeft", Vector2::ZERO ); + + Property::Map shaderMap = CreateImageRegionEffect(); + imageView.SetProperty( Toolkit::ImageView::Property::IMAGE, shaderMap ); + + GetImpl( imageView ).SetDepthIndex( DepthIndex::DECORATION ); + } +} + +void CheckBoxButton::OnInitialize() +{ + Button::OnInitialize(); + + // Wrap around all children + Self().SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); + + SetUnselectedImage( UNSELECTED_BUTTON_IMAGE_DIR ); + SetSelectedImage( SELECTED_BUTTON_IMAGE_DIR ); + SetDisabledImage( DISABLED_UNSELECTED_BUTTON_IMAGE_DIR ); + SetDisabledSelectedImage( DISABLED_SELECTED_BUTTON_IMAGE_DIR ); + + mSelectedImage = GetSelectedImage(); + SetTickUVEffect(); +} + +void CheckBoxButton::OnLabelSet( bool noPadding ) +{ + Actor& label = GetLabelActor(); + + if( label ) + { + label.SetParentOrigin( ParentOrigin::CENTER_LEFT ); + label.SetAnchorPoint( AnchorPoint::CENTER_LEFT ); + + if( IsDisabled() && GetDisabledBackgroundImage() ) + { + label.SetX( GetDisabledBackgroundImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); + } + else if ( GetBackgroundImage() ) + { + label.SetX( GetBackgroundImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); + } + else if( IsSelected() && GetSelectedImage()) + { + label.SetX( GetSelectedImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); + } + else if( GetUnselectedImage() ) + { + label.SetX( GetUnselectedImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); + } + else + { + label.SetX( DISTANCE_BETWEEN_IMAGE_AND_LABEL ); + } + } +} + +void CheckBoxButton::OnDisabled() +{ + Actor& backgroundImage = GetBackgroundImage(); + Actor& disabledBackgroundImage = GetDisabledBackgroundImage(); + + Actor& label = GetLabelActor(); + if( label ) + { + if( IsDisabled() && disabledBackgroundImage ) + { + label.SetX( disabledBackgroundImage.GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); + } + else if( backgroundImage ) + { + label.SetX( backgroundImage.GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); + } + else if( IsSelected() && GetSelectedImage()) + { + label.SetX( GetSelectedImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); + } + else if( GetUnselectedImage() ) + { + label.SetX( GetUnselectedImage().GetNaturalSize().width + DISTANCE_BETWEEN_IMAGE_AND_LABEL ); + } + else + { + label.SetX( DISTANCE_BETWEEN_IMAGE_AND_LABEL ); + } + } +} + +void CheckBoxButton::PrepareForTranstionIn( Actor actor ) +{ + Actor& selectedImage = GetSelectedImage(); + if( actor == selectedImage ) + { + actor.SetScale( Vector3( 0.0f, 1.0f, 1.0f ) ); + actor.RegisterProperty( "uBottomRight", Vector2( 0.0f, 1.0f ) ); + + if( mSelectedImage != selectedImage ) + { + mSelectedImage = selectedImage; + SetTickUVEffect(); + } + } +} + +void CheckBoxButton::PrepareForTranstionOut( Actor actor ) +{ + Actor& selectedImage = GetSelectedImage(); + if( actor == selectedImage ) + { + actor.SetScale( Vector3::ONE ); + actor.RegisterProperty( "uBottomRight", Vector2::ONE ); + + if( mSelectedImage != selectedImage ) + { + mSelectedImage = selectedImage; + SetTickUVEffect(); + } + } +} + +void CheckBoxButton::OnTransitionIn( Actor actor ) +{ + Actor& selectedImage = GetSelectedImage(); + if( actor && actor == selectedImage ) + { + if( GetPaintState() == UnselectedState ) + { + Dali::Animation transitionAnimation = GetTransitionAnimation(); + if( transitionAnimation ) + { + // UV anim + transitionAnimation.AnimateTo( Property( actor, "uBottomRight" ), Vector2::ONE ); + + // Actor size anim + transitionAnimation.AnimateTo( Property( actor, Actor::Property::SCALE_X ), 1.0f ); + } + } + else + { + //explicitly end the swipe animation + actor.SetScale( Vector3::ONE ); + if( mSelectedImage == selectedImage ) + { + actor.RegisterProperty( "uBottomRight", Vector2::ONE ); + } + } + } } } // namespace Internal