X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fscrollable%2Fscroll-view%2Fscroll-view-impl.cpp;h=6d37417ec0d6d239204f6873c6787cabfeb92bcb;hb=a1143092d6f139734fdc39aec5d9da680eb1be57;hp=67ce127579167715881ad7e20f2b53c86e991521;hpb=b37e6b5903fdb34007b3493cceab42f73db8f74b;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git 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 67ce127..6d37417 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 @@ -34,6 +34,7 @@ #include #include #include +#include //#define ENABLED_SCROLL_STATE_LOGGING @@ -76,6 +77,17 @@ const float DEFAULT_SCROLL_UPDATE_DISTANCE( 30.0f ); ///< Default const std::string INTERNAL_MAX_POSITION_PROPERTY_NAME( "internalMaxPosition" ); +// The following properties are not in the public-api yet. +enum +{ + /** + * @brief True if scroll-bar should be automatically show/hidden during/after panning. + * @details name "transientScrollBar", type bool. + */ + TRANSIENT_SCROLL_BAR = Toolkit::ScrollView::Property::WHEEL_SCROLL_DISTANCE_STEP + 1 +}; + + // Helpers //////////////////////////////////////////////////////////////////////////////////////// /** @@ -249,6 +261,9 @@ DALI_PROPERTY_REGISTRATION( Toolkit, ScrollView, "panningEnabled", B DALI_PROPERTY_REGISTRATION( Toolkit, ScrollView, "axisAutoLockEnabled", BOOLEAN, AXIS_AUTO_LOCK_ENABLED ) DALI_PROPERTY_REGISTRATION( Toolkit, ScrollView, "wheelScrollDistanceStep", VECTOR2, WHEEL_SCROLL_DISTANCE_STEP ) +Dali::PropertyRegistration manualProperty1( typeRegistration, "transientScrollBar", TRANSIENT_SCROLL_BAR, + Property::BOOLEAN, Dali::Toolkit::Internal::ScrollView::SetProperty, Dali::Toolkit::Internal::ScrollView::GetProperty ); + 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) @@ -624,7 +639,7 @@ Dali::Toolkit::ScrollView ScrollView::New() } ScrollView::ScrollView() -: ScrollBase( ControlBehaviour( REQUIRES_WHEEL_EVENTS ) ), // Enable size negotiation +: ScrollBase( ControlBehaviour( REQUIRES_WHEEL_EVENTS | DISABLE_STYLE_CHANGE_SIGNALS ) ), // Enable size negotiation mTouchDownTime(0u), mGestureStackDepth(0), mScrollStateFlags(0), @@ -658,7 +673,8 @@ ScrollView::ScrollView() mAlterChild(false), mDefaultMaxOvershoot(true), mCanScrollHorizontal(true), - mCanScrollVertical(true) + mCanScrollVertical(true), + mTransientScrollBar(false) { } @@ -1153,6 +1169,22 @@ Vector2 ScrollView::GetWheelScrollDistanceStep() const return mWheelScrollDistanceStep; } +void ScrollView::SetTransientScrollBar( bool transient ) +{ + if( transient != mTransientScrollBar ) + { + mTransientScrollBar = transient; + + Toolkit::ScrollBar scrollBar = mScrollBar.GetHandle(); + if( mTransientScrollBar && scrollBar ) + { + // Show the scroll-indicator for a brief period + scrollBar.SetVisible( true ); + GetImpl(scrollBar).ShowTransientIndicator(); + } + } +} + unsigned int ScrollView::GetCurrentPage() const { // in case animation is currently taking place. @@ -1780,6 +1812,15 @@ void ScrollView::RemoveOverlay(Actor actor) mInternalActor.Remove( actor ); } +void ScrollView::SetOvershootSize( const Vector2& size ) +{ + mOvershootSize = size; + if( IsOvershootEnabled() && mOvershootIndicator ) + { + mOvershootIndicator->AttachToScrollable(*this); + } +} + void ScrollView::SetOvershootEffectColor( const Vector4& color ) { mOvershootEffectColor = color; @@ -1948,24 +1989,38 @@ void ScrollView::OnChildAdd(Actor& child) ScrollBase::OnChildAdd( child ); Dali::Toolkit::ScrollBar scrollBar = Dali::Toolkit::ScrollBar::DownCast(child); - if(scrollBar) + if( scrollBar ) { - mInternalActor.Add(scrollBar); - if(scrollBar.GetScrollDirection() == Toolkit::ScrollBar::Horizontal) + mScrollBar = scrollBar; + scrollBar.SetName("ScrollBar"); + + mInternalActor.Add( scrollBar ); + if( scrollBar.GetScrollDirection() == Toolkit::ScrollBar::Horizontal ) { - scrollBar.SetScrollPropertySource(Self(), - Toolkit::ScrollView::Property::SCROLL_PRE_POSITION_X, - Toolkit::Scrollable::Property::SCROLL_POSITION_MIN_X, - Toolkit::ScrollView::Property::SCROLL_PRE_POSITION_MAX_X, - Toolkit::ScrollView::Property::SCROLL_DOMAIN_SIZE_X); + scrollBar.SetScrollPropertySource( Self(), + Toolkit::ScrollView::Property::SCROLL_PRE_POSITION_X, + Toolkit::Scrollable::Property::SCROLL_POSITION_MIN_X, + Toolkit::ScrollView::Property::SCROLL_PRE_POSITION_MAX_X, + Toolkit::ScrollView::Property::SCROLL_DOMAIN_SIZE_X ); } else { - scrollBar.SetScrollPropertySource(Self(), - Toolkit::ScrollView::Property::SCROLL_PRE_POSITION_Y, - Toolkit::Scrollable::Property::SCROLL_POSITION_MIN_Y, - Toolkit::ScrollView::Property::SCROLL_PRE_POSITION_MAX_Y, - Toolkit::ScrollView::Property::SCROLL_DOMAIN_SIZE_Y); + scrollBar.SetScrollPropertySource( Self(), + Toolkit::ScrollView::Property::SCROLL_PRE_POSITION_Y, + Toolkit::Scrollable::Property::SCROLL_POSITION_MIN_Y, + Toolkit::ScrollView::Property::SCROLL_PRE_POSITION_MAX_Y, + Toolkit::ScrollView::Property::SCROLL_DOMAIN_SIZE_Y ); + } + + if( mTransientScrollBar ) + { + // Show the scroll-indicator for a brief period + GetImpl(scrollBar).ShowTransientIndicator(); + } + else + { + scrollBar.SetVisible( false ); + scrollBar.HideIndicator(); } } else if(mAlterChild) @@ -2464,6 +2519,19 @@ void ScrollView::OnPan( const PanGesture& gesture ) self.SetProperty( Toolkit::ScrollView::Property::START_PAGE_POSITION, Vector3(gesture.position.x, gesture.position.y, 0.0f) ); UpdateMainInternalConstraint(); + Toolkit::ScrollBar scrollBar = mScrollBar.GetHandle(); + if( scrollBar && mTransientScrollBar ) + { + Vector3 size = Self().GetCurrentSize(); + const Toolkit::RulerDomain& rulerDomainX = mRulerX->GetDomain(); + const Toolkit::RulerDomain& rulerDomainY = mRulerY->GetDomain(); + + if( ( rulerDomainX.max > size.width ) || ( rulerDomainY.max > size.height ) ) + { + scrollBar.SetVisible( true ); + scrollBar.ShowIndicator(); + } + } break; } @@ -2498,6 +2566,12 @@ void ScrollView::OnPan( const PanGesture& gesture ) { mScrollMainInternalPrePositionConstraint.Remove(); } + + Toolkit::ScrollBar scrollBar = mScrollBar.GetHandle(); + if( scrollBar && mTransientScrollBar ) + { + scrollBar.HideIndicator(); + } } else { @@ -2863,6 +2937,11 @@ void ScrollView::SetProperty( BaseObject* object, Property::Index index, const P scrollViewImpl.SetWheelScrollDistanceStep( value.Get() ); break; } + case TRANSIENT_SCROLL_BAR: + { + scrollViewImpl.SetTransientScrollBar( value.Get() ); + break; + } } } } @@ -2898,6 +2977,11 @@ Property::Value ScrollView::GetProperty( BaseObject* object, Property::Index ind value = scrollViewImpl.GetWheelScrollDistanceStep(); break; } + case TRANSIENT_SCROLL_BAR: + { + value = scrollViewImpl.mTransientScrollBar; + break; + } } }