Fixed ItemView flicking to top now shows overshoot indicator 07/50107/2
authorTom Robinson <tom.robinson@samsung.com>
Fri, 23 Oct 2015 13:26:57 +0000 (14:26 +0100)
committerTom Robinson <tom.robinson@samsung.com>
Mon, 2 Nov 2015 11:28:06 +0000 (03:28 -0800)
Change-Id: I4d4e2b2ae51db8b74d76d729842011846cd84114

dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp
dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.h

index a181c9a..8caf3ff 100644 (file)
@@ -1080,14 +1080,18 @@ void ItemView::OnItemsRemoved()
   }
 }
 
-float ItemView::ClampFirstItemPosition(float targetPosition, const Vector3& targetSize, ItemLayout& layout)
+float ItemView::ClampFirstItemPosition( float targetPosition, const Vector3& targetSize, ItemLayout& layout, bool updateOvershoot )
 {
   Actor self = Self();
   float minLayoutPosition = layout.GetMinimumLayoutPosition(mItemFactory.GetNumberOfItems(), targetSize);
   float clamppedPosition = std::min(0.0f, std::max(minLayoutPosition, targetPosition));
-  mScrollOvershoot = targetPosition - clamppedPosition;
   self.SetProperty(Toolkit::Scrollable::Property::SCROLL_POSITION_MAX, Vector2(0.0f, -minLayoutPosition));
 
+  if( updateOvershoot )
+  {
+    mScrollOvershoot = targetPosition - clamppedPosition;
+  }
+
   return clamppedPosition;
 }
 
@@ -1442,9 +1446,9 @@ bool ItemView::IsLayoutScrollable(const Vector3& layoutSize)
 {
   Actor self = Self();
 
-  float currentLayoutPosition = ClampFirstItemPosition( GetCurrentLayoutPosition(0), layoutSize, *mActiveLayout );
-  float forwardClampedPosition = ClampFirstItemPosition(currentLayoutPosition + 1.0, layoutSize, *mActiveLayout);
-  float backwardClampedPosition = ClampFirstItemPosition(currentLayoutPosition - 1.0, layoutSize, *mActiveLayout);
+  float currentLayoutPosition = ClampFirstItemPosition( GetCurrentLayoutPosition(0), layoutSize, *mActiveLayout, false );
+  float forwardClampedPosition = ClampFirstItemPosition( currentLayoutPosition + 1.0, layoutSize, *mActiveLayout, false );
+  float backwardClampedPosition = ClampFirstItemPosition( currentLayoutPosition - 1.0, layoutSize, *mActiveLayout, false );
 
   return (fabs(forwardClampedPosition - backwardClampedPosition) > Math::MACHINE_EPSILON_0);
 }
index 2fe5e09..a18618d 100644 (file)
@@ -464,9 +464,10 @@ private:
    * @param[in] targetPosition The target position of the drag etc.
    * @param[in] targetSize The target ItemView & layout size.
    * @param[in] layout The current layout.
+   * @param[in] updateOvershoot False stops the current overshoot value from being clamped also.
    * @return The clamped first-item position.
    */
-  float ClampFirstItemPosition(float targetPosition, const Vector3& targetSize, ItemLayout& layout);
+  float ClampFirstItemPosition(float targetPosition, const Vector3& targetSize, ItemLayout& layout, bool updateOvershoot = true);
 
   /**
    * Called upon pan gesture event.