X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fpopup%2Fpopup-impl.cpp;h=ffd79e460a3aa9d5eee2ea087bb0546e7a8f6810;hp=1134b6e665cc30882bcdc88a03d9d12723e6ab7c;hb=refs%2Ftags%2Fsubmit%2Ftizen%2F20150309.074330;hpb=2ddfbb9e23a7c3fc30e604236c41e0ef6d2ed6a2 diff --git a/dali-toolkit/internal/controls/popup/popup-impl.cpp b/dali-toolkit/internal/controls/popup/popup-impl.cpp index 1134b6e..ffd79e4 100755 --- a/dali-toolkit/internal/controls/popup/popup-impl.cpp +++ b/dali-toolkit/internal/controls/popup/popup-impl.cpp @@ -25,21 +25,50 @@ #include #include #include +#include #include +#include #include // INTERNAL INCLUDES #include -#include #include +#include +#include #include #include -#include using namespace Dali; +namespace Dali +{ + +namespace Toolkit +{ + +namespace Internal +{ + namespace { + +BaseHandle Create() +{ + return Toolkit::Popup::New(); +} + +// Setup properties, signals and actions using the type-registry. +DALI_TYPE_REGISTRATION_BEGIN( Toolkit::Popup, Toolkit::Control, Create ) + +DALI_SIGNAL_REGISTRATION( Popup, "touched-outside", SIGNAL_TOUCHED_OUTSIDE ) +DALI_SIGNAL_REGISTRATION( Popup, "hidden", SIGNAL_HIDDEN ) + +DALI_TYPE_REGISTRATION_END() + +// Properties +const char* const PROPERTY_TITLE = "title"; +const char* const PROPERTY_STATE = "state"; + const float CONTENT_DEPTH = 1.0f; ///< 3D Effect of buttons/title etc. appearing off the popup. const float POPUP_ANIMATION_DURATION = 0.5f; ///< Duration of hide/show animations const float BACKING_DEPTH = -1.0f; ///< Depth of backing (positioned just behind dialog, so dialog catches hit events first) @@ -52,109 +81,41 @@ const float POPUP_BUTTON_BG_HEIGHT = 96.f; ///< Height of But const Vector3 DEFAULT_DIALOG_SIZE = Vector3(POPUP_TITLE_WIDTH/POPUP_WIDTH, 0.5f, 0.0f); const Vector3 DEFAULT_BOTTOM_SIZE = Vector3(1.0f, 0.2f, 0.0f); -const char* const PROPERTY_TITLE = "title"; -const char* const PROPERTY_STATE = "state"; - -// Constraints /////////////////////////////////////////////////////////////////////////// - /** - * BackgroundSizeConstraint - * * The background size should be at least as big as the Dialog. * In some cases a background may have graphics which are visible * outside of the Dialog, e.g. A Shadow. For this we need to alter * the size of Background. + * + * @param[in] outerBorder The border to extend beyond parent's Size. + * @param[in] parentSize The parent's size */ -struct BackgroundSizeConstraint +Vector3 BackgroundSize(const Vector4& outerBoarder, const Vector3& parentSize) { - /** - * Constraint that sets size to parent's size plus a border. - * - * @param[in] outerBorder The border to extend beyond parent's Size. - */ - BackgroundSizeConstraint( Vector4 outerBorder ) - : mOuterBorder( outerBorder ) - { - } - - /** - * (render thread code) - * @param[in] current The current size. - * @param[in] parentSizeProperty The parent's size - */ - Vector3 operator()( const Vector3& current, - const PropertyInput& parentSizeProperty ) - { - Vector3 size = parentSizeProperty.GetVector3(); - - size.width += mOuterBorder.x + mOuterBorder.y; - size.height += mOuterBorder.z + mOuterBorder.w; + Vector3 size( parentSize ); + size.width += outerBoarder.x + outerBoarder.y; + size.height += outerBoarder.z + outerBoarder.w; - return size; - } - - const Vector4 mOuterBorder; ///< The size of the outer-border (Set to 0.0, 0.0f, 0.0f, 0.0f if doesn't exist). -}; + return size; +} -struct ButtonAreaSizeConstraint -{ /** - * Constraint that sets size to parent's size plus a border. + * sets button area size to parent's size plus a border. * * @param[in] outerBorder The border to extend beyond parent's Size. + * @param[in] parentSize The parent's size */ - ButtonAreaSizeConstraint( Vector4 outerBorder ) - : mOuterBorder( outerBorder ) - { - } - - /** - * (render thread code) - * @param[in] current The current size. - * @param[in] parentSizeProperty The parent's size - */ - Vector3 operator()( const Vector3& current, - const PropertyInput& parentSizeProperty ) - { - Vector3 size = parentSizeProperty.GetVector3(); - - size.width += mOuterBorder.x + mOuterBorder.y; - size.width -= (POPUP_OUT_MARGIN_WIDTH + POPUP_OUT_MARGIN_WIDTH); - size.height = POPUP_BUTTON_BG_HEIGHT; - - return size; - } - - const Vector4 mOuterBorder; ///< The size of the outer-border (Set to 0.0, 0.0f, 0.0f, 0.0f if doesn't exist). -}; - -} // unnamed namespace - -namespace Dali -{ - -namespace Toolkit -{ - -namespace Internal -{ - -namespace -{ - -BaseHandle Create() +Vector3 ButtonAreaSize( const Vector4& outBoarder, const Vector3& parentSize ) { - return Toolkit::Popup::New(); -} - -TypeRegistration typeRegistration( typeid(Toolkit::Popup), typeid(Toolkit::Control), Create ); - -SignalConnectorType signalConnector1( typeRegistration, Toolkit::Popup::SIGNAL_TOUCHED_OUTSIDE, &Popup::DoConnectSignal ); -SignalConnectorType signalConnector2( typeRegistration, Toolkit::Popup::SIGNAL_HIDDEN, &Popup::DoConnectSignal ); - + Vector3 size( parentSize ); + size.width += outBoarder.x + outBoarder.y; + size.width -= (POPUP_OUT_MARGIN_WIDTH + POPUP_OUT_MARGIN_WIDTH); + size.height = POPUP_BUTTON_BG_HEIGHT; + return size; } +} // unnamed namespace /////////////////////////////////////////////////////////////////////////////////////////////////// // Popup @@ -199,13 +160,11 @@ void Popup::OnInitialize() mLayer.SetParentOrigin(ParentOrigin::CENTER); mLayer.SetAnchorPoint(AnchorPoint::CENTER); mLayer.RaiseToTop(); - mLayer.ApplyConstraint( Constraint::New( Actor::SIZE, ParentSource( Actor::SIZE ), EqualToConstraint() ) ); self.Add(mLayer); mPopupBg = Actor::New(); mPopupBg.SetParentOrigin(ParentOrigin::CENTER); mPopupBg.SetAnchorPoint(AnchorPoint::CENTER); - mPopupBg.ApplyConstraint( Constraint::New( Actor::SIZE, ParentSource( Actor::SIZE ), EqualToConstraint() ) ); mLayer.Add(mPopupBg); // Any content after this point which is added to Self() will be reparented to @@ -381,9 +340,9 @@ void Popup::ShowTail(const Vector3& position) if(image != "") { - Image tail = Image::New( image ); + Image tail = ResourceImage::New( image ); mTailImage = ImageActor::New(tail); - const Vector3 anchorPoint = AnchorPoint::FRONT_BOTTOM_RIGHT - position; + const Vector3 anchorPoint = AnchorPoint::BOTTOM_RIGHT - position; mTailImage.SetParentOrigin(position); mTailImage.SetAnchorPoint(anchorPoint); @@ -410,12 +369,12 @@ PopupStylePtr Popup::GetStyle() const void Popup::SetDefaultBackgroundImage() { - Image bg = Image::New( mPopupStyle->backgroundImage ); + Image bg = ResourceImage::New( mPopupStyle->backgroundImage ); ImageActor bgImage = ImageActor::New( bg ); bgImage.SetStyle( ImageActor::STYLE_NINE_PATCH ); bgImage.SetNinePatchBorder( mPopupStyle->backgroundScale9Border ); - Image buttonBg = Image::New( mPopupStyle->buttonAreaImage ); + Image buttonBg = ResourceImage::New( mPopupStyle->buttonAreaImage ); ImageActor buttonBgImage = ImageActor::New( buttonBg ); buttonBgImage.SetStyle( ImageActor::STYLE_NINE_PATCH ); buttonBgImage.SetNinePatchBorder( mPopupStyle->buttonArea9PatchBorder ); @@ -542,13 +501,13 @@ void Popup::HandleStateChange( Toolkit::Popup::PopupState state, float duration if(mShowing) { - mAnimation.AnimateTo( Property(mBacking, Actor::COLOR_ALPHA), targetBackingAlpha, AlphaFunctions::EaseInOut, TimePeriod(0.0f, duration * 0.5f) ); - mAnimation.AnimateTo( Property(mPopupBg, Actor::SCALE), targetSize, AlphaFunctions::EaseInOut, TimePeriod(duration * 0.5f, duration * 0.5f) ); + mAnimation.AnimateTo( Property(mBacking, Actor::Property::COLOR_ALPHA), targetBackingAlpha, AlphaFunctions::EaseInOut, TimePeriod(0.0f, duration * 0.5f) ); + mAnimation.AnimateTo( Property(mPopupBg, Actor::Property::SCALE), targetSize, AlphaFunctions::EaseInOut, TimePeriod(duration * 0.5f, duration * 0.5f) ); } else { - mAnimation.AnimateTo( Property(mBacking, Actor::COLOR_ALPHA), targetBackingAlpha, AlphaFunctions::EaseInOut, TimePeriod(0.0f, duration * 0.5f) ); - mAnimation.AnimateTo( Property(mPopupBg, Actor::SCALE), targetSize, AlphaFunctions::EaseInOut, TimePeriod(0.0f, duration * 0.5f) ); + mAnimation.AnimateTo( Property(mBacking, Actor::Property::COLOR_ALPHA), targetBackingAlpha, AlphaFunctions::EaseInOut, TimePeriod(0.0f, duration * 0.5f) ); + mAnimation.AnimateTo( Property(mPopupBg, Actor::Property::SCALE), targetSize, AlphaFunctions::EaseInOut, TimePeriod(0.0f, duration * 0.5f) ); } mAnimation.Play(); mAnimation.FinishedSignal().Connect(this, &Popup::OnStateAnimationFinished); @@ -591,13 +550,13 @@ bool Popup::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tra Dali::BaseHandle handle( object ); bool connected( true ); - Toolkit::Popup popup = Toolkit::Popup::DownCast(handle); + Toolkit::Popup popup = Toolkit::Popup::DownCast( handle ); - if( Dali::Toolkit::Popup::SIGNAL_TOUCHED_OUTSIDE == signalName ) + if( 0 == strcmp( signalName.c_str(), SIGNAL_TOUCHED_OUTSIDE ) ) { popup.OutsideTouchedSignal().Connect( tracker, functor ); } - else if( Dali::Toolkit::Popup::SIGNAL_HIDDEN == signalName ) + else if( 0 == strcmp( signalName.c_str(), SIGNAL_HIDDEN ) ) { popup.HiddenSignal().Connect( tracker, functor ); } @@ -666,6 +625,23 @@ void Popup::OnControlChildAdd( Actor& child ) } } +void Popup::OnControlSizeSet( const Vector3& targetSize ) +{ + mLayer.SetSize( targetSize ); + mPopupBg.SetSize( targetSize ); + + const Vector4 outerBorder = mPopupStyle->backgroundOuterBorder; + if( mBackgroundImage ) + { + mBackgroundImage.SetSize( BackgroundSize( outerBorder,targetSize ) ); + } + if( mButtonAreaImage ) + { + mButtonAreaImage.SetSize( ButtonAreaSize( outerBorder, targetSize ) ); + } + +} + void Popup::OnRelayout( const Vector2& size, ActorSizeContainer& container ) { // Set the popup size @@ -683,13 +659,7 @@ void Popup::OnRelayout( const Vector2& size, ActorSizeContainer& container ) if( mBackgroundImage ) { - Constraint constraint = Constraint::New( Actor::SIZE, - ParentSource( Actor::SIZE ), - BackgroundSizeConstraint(outerBorder) ); - - mBackgroundImage.RemoveConstraints(); - mBackgroundImage.ApplyConstraint( constraint ); - + mBackgroundImage.SetSize(BackgroundSize(outerBorder, Vector3(size))); mBackgroundImage.SetAnchorPoint( AnchorPoint::TOP_LEFT ); mBackgroundImage.SetParentOrigin( ParentOrigin::TOP_LEFT ); mBackgroundImage.SetPosition( -outerBorder.x, -outerBorder.y, 0.0f ); @@ -704,13 +674,7 @@ void Popup::OnRelayout( const Vector2& size, ActorSizeContainer& container ) } else { - Constraint constraint = Constraint::New( Actor::SIZE, - ParentSource( Actor::SIZE ), - ButtonAreaSizeConstraint(outerBorder) ); - - mButtonAreaImage.RemoveConstraints(); - mButtonAreaImage.ApplyConstraint( constraint ); - + mButtonAreaImage.SetSize( ButtonAreaSize(outerBorder, Vector3(size)) ); mButtonAreaImage.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); mButtonAreaImage.SetParentOrigin( ParentOrigin::BOTTOM_CENTER ); mButtonAreaImage.SetY( -outerBorder.z - POPUP_OUT_MARGIN_HEIGHT ); @@ -865,6 +829,11 @@ Vector3 Popup::GetNaturalSize() Vector3 contentSize = RelayoutHelper::GetNaturalSize( mContent ); // Choose the biggest width naturalSize.width = std::max( naturalSize.width, contentSize.width ); + if( naturalSize.width > maxWidth ) + { + naturalSize.width = maxWidth; + contentSize.height = RelayoutHelper::GetHeightForWidth( mContent, maxWidth ); + } naturalSize.height += contentSize.height + mPopupStyle->margin; }