X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fscrollable%2Fitem-view%2Fitem-view-impl.cpp;h=67945909225d44a18bb079620bae079d4a7eaf5c;hb=519e8598015b2c57a7ab004510bc1dd53cc48cd5;hp=a5741ab13c95e056941a30896060495b03c326f9;hpb=1e7f2e72fcc37576c754ca2ed563ece458942960;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp b/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp index a5741ab..6794590 100755 --- a/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp +++ b/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp @@ -69,6 +69,8 @@ const float OVERSHOOT_BOUNCE_ACTOR_RESIZE_THRESHOLD = 180.0f; const Vector4 OVERSHOOT_OVERLAY_NINE_PATCH_BORDER(0.0f, 0.0f, 1.0f, 12.0f); const float DEFAULT_KEYBOARD_FOCUS_SCROLL_DURATION = 0.2f; +const unsigned int OVERSHOOT_SIZE_CONSTRAINT_TAG(42); + /** * Local helper to convert pan distance (in actor coordinates) to the layout-specific scrolling direction */ @@ -291,6 +293,21 @@ bool FindById( const ItemContainer& items, ItemId id ) return false; } +/** + * Helper to apply size constraint to mOvershootOverlay + * @param[in] overshootOverlay The overshootOverlay actor + * @param[in] The required height + */ +void ApplyOvershootSizeConstraint( Actor overshootOverlay, float height ) +{ + Constraint constraint = Constraint::New( overshootOverlay, Actor::Property::SIZE, OvershootOverlaySizeConstraint( height ) ); + constraint.AddSource( ParentSource( Dali::Toolkit::ItemView::Property::SCROLL_DIRECTION ) ); + constraint.AddSource( ParentSource( Dali::Toolkit::ItemView::Property::LAYOUT_ORIENTATION ) ); + constraint.AddSource( ParentSource( Dali::Actor::Property::SIZE ) ); + constraint.SetTag( OVERSHOOT_SIZE_CONSTRAINT_TAG ); + constraint.Apply(); +} + } // unnamed namespace Dali::Toolkit::ItemView ItemView::New(ItemFactory& factory) @@ -1172,10 +1189,12 @@ void ItemView::OnPan( const PanGesture& gesture ) mScrollAnimation.AnimateTo( Property(self, Toolkit::ItemView::Property::SCROLL_SPEED), 0.0f, AlphaFunction::EASE_OUT ); mIsFlicking = true; + // Check whether it has already scrolled to the end - if(fabs(currentLayoutPosition - firstItemScrollPosition) > Math::MACHINE_EPSILON_0) + if( fabs(currentLayoutPosition - firstItemScrollPosition) < Math::MACHINE_EPSILON_0 ) { - AnimateScrollOvershoot(0.0f); + AnimateScrollOvershoot( 0.0f ); + RemoveAnimation( mScrollAnimation ); } } @@ -1519,6 +1538,18 @@ void ItemView::ScrollTo(const Vector2& position, float duration) mRefreshEnabled = true; } +void ItemView::SetOvershootSize( const Vector2& size ) +{ + mOvershootSize = size; + + if( mOvershootOverlay ) + { + // Remove old & add new size constraint + mOvershootOverlay.RemoveConstraints( OVERSHOOT_SIZE_CONSTRAINT_TAG ); + ApplyOvershootSizeConstraint( mOvershootOverlay, mOvershootSize.height ); + } +} + void ItemView::SetOvershootEffectColor( const Vector4& color ) { mOvershootEffectColor = color; @@ -1543,15 +1574,9 @@ void ItemView::EnableScrollOvershoot( bool enable ) mOvershootOverlay.SetDrawMode( DrawMode::OVERLAY_2D ); self.Add(mOvershootOverlay); - Constraint constraint = Constraint::New( mOvershootOverlay, Actor::Property::SIZE, OvershootOverlaySizeConstraint(mOvershootSize.height) ); - constraint.AddSource( ParentSource( Toolkit::ItemView::Property::SCROLL_DIRECTION ) ); - constraint.AddSource( ParentSource( Toolkit::ItemView::Property::LAYOUT_ORIENTATION ) ); - constraint.AddSource( ParentSource( Actor::Property::SIZE ) ); - constraint.Apply(); - - mOvershootOverlay.SetSize(mOvershootSize.width, mOvershootSize.height); + ApplyOvershootSizeConstraint( mOvershootOverlay, mOvershootSize.height ); - constraint = Constraint::New( mOvershootOverlay, Actor::Property::ORIENTATION, OvershootOverlayRotationConstraint ); + Constraint constraint = Constraint::New( mOvershootOverlay, Actor::Property::ORIENTATION, OvershootOverlayRotationConstraint ); constraint.AddSource( ParentSource( Toolkit::ItemView::Property::SCROLL_DIRECTION ) ); constraint.AddSource( ParentSource( Toolkit::ItemView::Property::LAYOUT_ORIENTATION ) ); constraint.AddSource( ParentSource( Toolkit::ItemView::Property::OVERSHOOT ) ); @@ -1800,6 +1825,7 @@ void ItemView::SetLayoutArray( const Property::Array& layouts ) { Internal::DepthLayoutPtr depthLayout = Internal::DepthLayout::New(); (*depthLayout).SetLayoutProperties(*layout); + (*depthLayout).SetDepthLayoutProperties(*layout); AddLayout(*depthLayout); break; } @@ -1807,6 +1833,7 @@ void ItemView::SetLayoutArray( const Property::Array& layouts ) { Internal::GridLayoutPtr gridLayout = Internal::GridLayout::New(); (*gridLayout).SetLayoutProperties(*layout); + (*gridLayout).SetGridLayoutProperties(*layout); AddLayout(*gridLayout); break; } @@ -1815,6 +1842,7 @@ void ItemView::SetLayoutArray( const Property::Array& layouts ) Internal::GridLayoutPtr listLayout = Internal::GridLayout::New(); listLayout->SetNumberOfColumns( 1 ); (*listLayout).SetLayoutProperties(*layout); + (*listLayout).SetGridLayoutProperties(*layout); AddLayout(*listLayout); break; } @@ -1822,6 +1850,7 @@ void ItemView::SetLayoutArray( const Property::Array& layouts ) { Internal::SpiralLayoutPtr spiralLayout = Internal::SpiralLayout::New(); (*spiralLayout).SetLayoutProperties(*layout); + (*spiralLayout).SetSpiralLayoutProperties(*layout); AddLayout(*spiralLayout); break; }