X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fscrollable%2Fscroll-view%2Fscroll-view-impl.cpp;h=1d53111b0bf05be12a7fc1a42cad426c50ee0128;hp=929cab2694cb4d2bde3b21c63969c1d7f3a4fca5;hb=0b98fd2bb35714d1b888ca2de530f8d6be8050f8;hpb=6da8438e9ac7350d9cc6f69b35cbcc4ab3987da1 diff --git a/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp b/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp index 929cab2..1d53111 100644 --- a/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp +++ b/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp @@ -23,9 +23,9 @@ #include #include #include -#include +#include #include -#include +#include #include // INTERNAL INCLUDES @@ -74,7 +74,7 @@ const unsigned long MINIMUM_TIME_BETWEEN_DOWN_AND_UP_FOR_RESET( 150u ); const float TOUCH_DOWN_TIMER_INTERVAL = 100.0f; const float DEFAULT_SCROLL_UPDATE_DISTANCE( 30.0f ); ///< Default distance to travel in pixels for scroll update signal -const std::string INTERNAL_MAX_POSITION_PROPERTY_NAME( "internal-max-position" ); +const std::string INTERNAL_MAX_POSITION_PROPERTY_NAME( "internalMaxPosition" ); // Helpers //////////////////////////////////////////////////////////////////////////////////////// @@ -244,29 +244,34 @@ BaseHandle Create() // Setup properties, signals and actions using the type-registry. DALI_TYPE_REGISTRATION_BEGIN( Toolkit::ScrollView, Toolkit::Scrollable, Create ) -DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "scroll-position", VECTOR2, SCROLL_POSITION) -DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "scroll-pre-position", VECTOR2, SCROLL_PRE_POSITION) -DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, ScrollView, "scroll-pre-position-x", SCROLL_PRE_POSITION_X, SCROLL_PRE_POSITION, 0) -DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, ScrollView, "scroll-pre-position-y", SCROLL_PRE_POSITION_Y, SCROLL_PRE_POSITION, 1) -DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "scroll-pre-position-max", VECTOR2, SCROLL_PRE_POSITION_MAX) -DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, ScrollView, "scroll-pre-position-max-x", SCROLL_PRE_POSITION_MAX_X, SCROLL_PRE_POSITION_MAX, 0) -DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, ScrollView, "scroll-pre-position-max-y", SCROLL_PRE_POSITION_MAX_Y, SCROLL_PRE_POSITION_MAX, 1) -DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "overshoot-x", FLOAT, OVERSHOOT_X) -DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "overshoot-y", FLOAT, OVERSHOOT_Y) -DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "scroll-final", VECTOR2, SCROLL_FINAL) -DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, ScrollView, "scroll-final-x", SCROLL_FINAL_X, SCROLL_FINAL,0) -DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, ScrollView, "scroll-final-y", SCROLL_FINAL_Y, SCROLL_FINAL,1) +DALI_PROPERTY_REGISTRATION( Toolkit, ScrollView, "wrapEnabled", BOOLEAN, WRAP_ENABLED ) +DALI_PROPERTY_REGISTRATION( Toolkit, ScrollView, "panningEnabled", BOOLEAN, PANNING_ENABLED ) +DALI_PROPERTY_REGISTRATION( Toolkit, ScrollView, "axisAutoLockEnabled", BOOLEAN, AXIS_AUTO_LOCK_ENABLED ) +DALI_PROPERTY_REGISTRATION( Toolkit, ScrollView, "wheelScrollDistanceStep", VECTOR2, WHEEL_SCROLL_DISTANCE_STEP ) + +DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "scrollPosition", VECTOR2, SCROLL_POSITION) +DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "scrollPrePosition", VECTOR2, SCROLL_PRE_POSITION) +DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, ScrollView, "scrollPrePositionX", SCROLL_PRE_POSITION_X, SCROLL_PRE_POSITION, 0) +DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, ScrollView, "scrollPrePositionY", SCROLL_PRE_POSITION_Y, SCROLL_PRE_POSITION, 1) +DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "scrollPrePositionMax", VECTOR2, SCROLL_PRE_POSITION_MAX) +DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, ScrollView, "scrollPrePositionMaxX", SCROLL_PRE_POSITION_MAX_X, SCROLL_PRE_POSITION_MAX, 0) +DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, ScrollView, "scrollPrePositionMaxY", SCROLL_PRE_POSITION_MAX_Y, SCROLL_PRE_POSITION_MAX, 1) +DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "overshootX", FLOAT, OVERSHOOT_X) +DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "overshootY", FLOAT, OVERSHOOT_Y) +DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "scrollFinal", VECTOR2, SCROLL_FINAL) +DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, ScrollView, "scrollFinalX", SCROLL_FINAL_X, SCROLL_FINAL,0) +DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, ScrollView, "scrollFinalY", SCROLL_FINAL_Y, SCROLL_FINAL,1) DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "wrap", BOOLEAN, WRAP) DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "panning", BOOLEAN, PANNING) DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "scrolling", BOOLEAN, SCROLLING) -DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "scroll-domain-size", VECTOR2, SCROLL_DOMAIN_SIZE) -DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, ScrollView, "scroll-domain-size-x", SCROLL_DOMAIN_SIZE_X, SCROLL_DOMAIN_SIZE, 0) -DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, ScrollView, "scroll-domain-size-y", SCROLL_DOMAIN_SIZE_Y, SCROLL_DOMAIN_SIZE, 1) -DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "scroll-domain-offset", VECTOR2, SCROLL_DOMAIN_OFFSET) -DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "scroll-position-delta", VECTOR2, SCROLL_POSITION_DELTA) -DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "start-page-position", VECTOR3, START_PAGE_POSITION) +DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "scrollDomainSize", VECTOR2, SCROLL_DOMAIN_SIZE) +DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, ScrollView, "scrollDomainSizeX", SCROLL_DOMAIN_SIZE_X, SCROLL_DOMAIN_SIZE, 0) +DALI_ANIMATABLE_PROPERTY_COMPONENT_REGISTRATION( Toolkit, ScrollView, "scrollDomainSizeY", SCROLL_DOMAIN_SIZE_Y, SCROLL_DOMAIN_SIZE, 1) +DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "scrollDomainOffset", VECTOR2, SCROLL_DOMAIN_OFFSET) +DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "scrollPositionDelta", VECTOR2, SCROLL_POSITION_DELTA) +DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ScrollView, "startPagePosition", VECTOR3, START_PAGE_POSITION) -DALI_SIGNAL_REGISTRATION( Toolkit, ScrollView, "value-changed", SIGNAL_SNAP_STARTED ) +DALI_SIGNAL_REGISTRATION( Toolkit, ScrollView, "valueChanged", SIGNAL_SNAP_STARTED ) DALI_TYPE_REGISTRATION_END() @@ -678,6 +683,7 @@ void ScrollView::OnInitialize() mGestureStackDepth = 0; + self.TouchSignal().Connect( this, &ScrollView::OnTouch ); EnableGestureDetection( Gesture::Type( Gesture::Pan ) ); // By default we'll allow the user to freely drag the scroll view, @@ -966,6 +972,11 @@ void ScrollView::UpdatePropertyDomain() } } +bool ScrollView::GetScrollSensitive() +{ + return mSensitive; +} + void ScrollView::SetScrollSensitive(bool sensitive) { Actor self = Self(); @@ -1011,11 +1022,21 @@ void ScrollView::SetSnapOvershootAlphaFunction(AlphaFunction alpha) mSnapOvershootAlphaFunction = alpha; } +float ScrollView::GetSnapOvershootDuration() +{ + return mSnapOvershootDuration; +} + void ScrollView::SetSnapOvershootDuration(float duration) { mSnapOvershootDuration = duration; } +bool ScrollView::GetActorAutoSnap() +{ + return mActorAutoSnapEnabled; +} + void ScrollView::SetActorAutoSnap(bool enable) { mActorAutoSnapEnabled = enable; @@ -1155,19 +1176,6 @@ Vector2 ScrollView::GetCurrentScrollPosition() const return -GetPropertyPosition(); } -Vector2 ScrollView::GetDomainSize() const -{ - Vector3 size = Self().GetCurrentSize(); - - const RulerDomain& xDomain = GetRulerX()->GetDomain(); - const RulerDomain& yDomain = GetRulerY()->GetDomain(); - - Vector2 domainSize; - domainSize.x = xDomain.max - xDomain.min - size.x; - domainSize.y = yDomain.max - yDomain.min - size.y; - return domainSize; -} - void ScrollView::TransformTo(const Vector2& position, DirectionBias horizontalBias, DirectionBias verticalBias) { @@ -1936,6 +1944,8 @@ void ScrollView::OnSizeSet( const Vector3& size ) void ScrollView::OnChildAdd(Actor& child) { + ScrollBase::OnChildAdd( child ); + Dali::Toolkit::ScrollBar scrollBar = Dali::Toolkit::ScrollBar::DownCast(child); if(scrollBar) { @@ -1967,6 +1977,8 @@ void ScrollView::OnChildRemove(Actor& child) { // TODO: Actor needs a RemoveConstraint method to take out an individual constraint. UnbindActor(child); + + ScrollBase::OnChildRemove( child ); } void ScrollView::StartTouchDownTimer() @@ -2019,7 +2031,7 @@ bool ScrollView::OnTouchDownTimeout() return false; } -bool ScrollView::OnTouchEvent(const TouchEvent& event) +bool ScrollView::OnTouch( Actor actor, const TouchData& touch ) { if(!mSensitive) { @@ -2030,21 +2042,21 @@ bool ScrollView::OnTouchEvent(const TouchEvent& event) } // Ignore events with multiple-touch points - if (event.GetPointCount() != 1) + if (touch.GetPointCount() != 1) { DALI_LOG_SCROLL_STATE("[0x%X], multiple touch, ignoring", this); return false; } - const TouchPoint::State pointState = event.GetPoint(0).state; - if( pointState == TouchPoint::Down ) + const PointState::Type pointState = touch.GetState( 0 ); + if( pointState == PointState::DOWN ) { DALI_LOG_SCROLL_STATE("[0x%X] Down", this); if(mGestureStackDepth==0) { - mTouchDownTime = event.time; + mTouchDownTime = touch.GetTime(); // This allows time for a pan-gesture to start, to avoid breaking snap-animation behavior with fast flicks. // If touch-down does not become a pan (after timeout interval), then snap-animation can be interrupted. @@ -2053,8 +2065,8 @@ bool ScrollView::OnTouchEvent(const TouchEvent& event) StartTouchDownTimer(); } } - else if( ( pointState == TouchPoint::Up ) || - ( ( pointState == TouchPoint::Interrupted ) && ( event.GetPoint(0).hitActor == Self() ) ) ) + else if( ( pointState == PointState::UP ) || + ( ( pointState == PointState::INTERRUPTED ) && ( touch.GetHitActor( 0 )== Self() ) ) ) { DALI_LOG_SCROLL_STATE("[0x%X] %s", this, ( ( pointState == TouchPoint::Up ) ? "Up" : "Interrupted" ) ); @@ -2065,8 +2077,8 @@ bool ScrollView::OnTouchEvent(const TouchEvent& event) // otherwise our scroll could be stopped (interrupted) half way through an animation. if(mGestureStackDepth==0 && mTouchDownTimeoutReached) { - if( ( event.GetPoint(0).state == TouchPoint::Interrupted ) || - ( ( event.time - mTouchDownTime ) >= MINIMUM_TIME_BETWEEN_DOWN_AND_UP_FOR_RESET ) ) + if( ( pointState == PointState::INTERRUPTED ) || + ( ( touch.GetTime() - mTouchDownTime ) >= MINIMUM_TIME_BETWEEN_DOWN_AND_UP_FOR_RESET ) ) { // Reset the velocity only if down was received a while ago mLastVelocity = Vector2( 0.0f, 0.0f ); @@ -2821,6 +2833,76 @@ void ScrollView::SetInternalConstraints() ApplyConstraintToBoundActors(constraint); } +void ScrollView::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value ) +{ + Toolkit::ScrollView scrollView = Toolkit::ScrollView::DownCast( Dali::BaseHandle( object ) ); + + if( scrollView ) + { + ScrollView& scrollViewImpl( GetImpl( scrollView ) ); + switch( index ) + { + case Toolkit::ScrollView::Property::WRAP_ENABLED: + { + scrollViewImpl.SetWrapMode( value.Get() ); + break; + } + case Toolkit::ScrollView::Property::PANNING_ENABLED: + { + scrollViewImpl.SetScrollSensitive( value.Get() ); + break; + } + case Toolkit::ScrollView::Property::AXIS_AUTO_LOCK_ENABLED: + { + scrollViewImpl.SetAxisAutoLock( value.Get() ); + break; + } + case Toolkit::ScrollView::Property::WHEEL_SCROLL_DISTANCE_STEP: + { + scrollViewImpl.SetWheelScrollDistanceStep( value.Get() ); + break; + } + } + } +} + +Property::Value ScrollView::GetProperty( BaseObject* object, Property::Index index ) +{ + Property::Value value; + + Toolkit::ScrollView scrollView = Toolkit::ScrollView::DownCast( Dali::BaseHandle( object ) ); + + if( scrollView ) + { + ScrollView& scrollViewImpl( GetImpl( scrollView ) ); + switch( index ) + { + case Toolkit::ScrollView::Property::WRAP_ENABLED: + { + value = scrollViewImpl.GetWrapMode(); + break; + } + case Toolkit::ScrollView::Property::PANNING_ENABLED: + { + value = scrollViewImpl.GetScrollSensitive(); + break; + } + case Toolkit::ScrollView::Property::AXIS_AUTO_LOCK_ENABLED: + { + value = scrollViewImpl.GetAxisAutoLock(); + break; + } + case Toolkit::ScrollView::Property::WHEEL_SCROLL_DISTANCE_STEP: + { + value = scrollViewImpl.GetWheelScrollDistanceStep(); + break; + } + } + } + + return value; +} + } // namespace Internal } // namespace Toolkit