// INTERNAL INCLUDES
#include <dali/public-api/events/mouse-wheel-event.h>
#include <dali-toolkit/public-api/controls/scrollable/item-view/item-factory.h>
+#include <dali-toolkit/internal/controls/scrollable/scroll-connector-impl.h>
using namespace std;
using namespace Dali;
mOvershootOverlay.SetPixelArea(OVERSHOOT_BOUNCE_IMAGE_1_PIXEL_AREA);
self.Add(mOvershootOverlay);
- mPropertyLayoutPosition = self.RegisterProperty(LAYOUT_POSITION_PROPERTY_NAME, 0.0f);
+ mScrollConnector = Dali::Toolkit::ScrollConnector::New();
+ mScrollPositionObject = mScrollConnector.GetScrollPositionObject();
+
mPropertyMinimumLayoutPosition = self.RegisterProperty(MINIMUM_LAYOUT_POSITION_PROPERTY_NAME, 0.0f);
mPropertyPosition = self.RegisterProperty(POSITION_PROPERTY_NAME, 0.0f);
mPropertyScrollSpeed = self.RegisterProperty(SCROLL_SPEED_PROPERTY_NAME, 0.0f);
{
}
+Dali::Toolkit::ScrollConnector ItemView::GetScrollConnector() const
+{
+ return mScrollConnector;
+}
+
unsigned int ItemView::GetLayoutCount() const
{
return mLayouts.size();
float ItemView::GetCurrentLayoutPosition(unsigned int itemId) const
{
- return Self().GetProperty<float>(mPropertyLayoutPosition) + static_cast<float>(itemId);
+ return mScrollPositionObject.GetProperty<float>( ScrollConnector::SCROLL_POSITION ) + static_cast<float>( itemId );
}
void ItemView::ActivateLayout(unsigned int layoutIndex, const Vector3& targetSize, float durationSeconds)
bool scrollAnimationNeeded(false);
float firstItemScrollPosition(0.0f);
- float current = self.GetProperty<float>(mPropertyLayoutPosition);
+ float current = GetCurrentLayoutPosition(0);
float minimum = ClampFirstItemPosition(current, targetSize, *mActiveLayout);
self.SetProperty(mPropertyPosition, GetScrollPosition(current, targetSize));
{
RemoveAnimation(mScrollAnimation);
mScrollAnimation = Animation::New(mAnchoringDuration);
- mScrollAnimation.AnimateTo( Property(self, mPropertyLayoutPosition), firstItemScrollPosition, AlphaFunctions::EaseOut );
+ mScrollAnimation.AnimateTo( Property( mScrollPositionObject, ScrollConnector::SCROLL_POSITION ), firstItemScrollPosition, AlphaFunctions::EaseOut );
mScrollAnimation.AnimateTo( Property(self, mPropertyPosition), GetScrollPosition(firstItemScrollPosition, targetSize), AlphaFunctions::EaseOut );
mScrollAnimation.Play();
}
ItemRange available(0u, itemCount);
- ItemRange range = layout.GetItemsWithinArea(Self().GetProperty<float>(mPropertyLayoutPosition), layoutSize);
+ ItemRange range = layout.GetItemsWithinArea( GetCurrentLayoutPosition(0), layoutSize );
if (reserveExtra)
{
{
Actor self = Self();
const Vector3 layoutSize = Self().GetCurrentSize();
- float layoutPositionDelta = self.GetProperty<float>(mPropertyLayoutPosition) + (event.z * mMouseWheelScrollDistanceStep * mActiveLayout->GetScrollSpeedFactor());
+ float layoutPositionDelta = GetCurrentLayoutPosition(0) + (event.z * mMouseWheelScrollDistanceStep * mActiveLayout->GetScrollSpeedFactor());
float firstItemScrollPosition = ClampFirstItemPosition(layoutPositionDelta, layoutSize, *mActiveLayout);
- self.SetProperty(mPropertyLayoutPosition, firstItemScrollPosition);
+
+ mScrollPositionObject.SetProperty( ScrollConnector::SCROLL_POSITION, firstItemScrollPosition );
self.SetProperty(mPropertyPosition, GetScrollPosition(firstItemScrollPosition, layoutSize));
mScrollStartedSignalV2.Emit(GetCurrentScrollPosition());
StartRefreshTimer();
WrappedVector3Constraint wrapped(positionConstraint, itemId);
Constraint constraint = Constraint::New<Vector3>( Actor::POSITION,
- ParentSource( mPropertyLayoutPosition ),
+ Source( mScrollPositionObject, ScrollConnector::SCROLL_POSITION ),
ParentSource( mPropertyScrollSpeed ),
ParentSource( Actor::SIZE ),
wrapped );
WrappedQuaternionConstraint wrapped(rotationConstraint, itemId);
Constraint constraint = Constraint::New<Quaternion>( Actor::ROTATION,
- ParentSource( mPropertyLayoutPosition ),
+ Source( mScrollPositionObject, ScrollConnector::SCROLL_POSITION ),
ParentSource( mPropertyScrollSpeed ),
ParentSource( Actor::SIZE ),
wrapped );
WrappedVector3Constraint wrapped(scaleConstraint, itemId);
Constraint constraint = Constraint::New<Vector3>( Actor::SCALE,
- ParentSource( mPropertyLayoutPosition ),
+ Source( mScrollPositionObject, ScrollConnector::SCROLL_POSITION ),
ParentSource( mPropertyScrollSpeed ),
ParentSource( Actor::SIZE ),
wrapped );
WrappedVector4Constraint wrapped(colorConstraint, itemId);
Constraint constraint = Constraint::New<Vector4>( Actor::COLOR,
- ParentSource( mPropertyLayoutPosition ),
+ Source( mScrollPositionObject, ScrollConnector::SCROLL_POSITION ),
ParentSource( mPropertyScrollSpeed ),
ParentSource( Actor::SIZE ),
wrapped );
WrappedBoolConstraint wrapped(visibilityConstraint, itemId);
Constraint constraint = Constraint::New<bool>( Actor::VISIBLE,
- ParentSource( mPropertyLayoutPosition ),
+ Source( mScrollPositionObject, ScrollConnector::SCROLL_POSITION ),
ParentSource( mPropertyScrollSpeed ),
ParentSource( Actor::SIZE ),
wrapped );
mRefreshOrderHint = true;
- float currentLayoutPosition = self.GetProperty<float>(mPropertyLayoutPosition);
+ float currentLayoutPosition = GetCurrentLayoutPosition(0);
float firstItemScrollPosition = ClampFirstItemPosition(currentLayoutPosition + mScrollSpeed * direction,
layoutSize,
*mActiveLayout);
float flickAnimationDuration = mActiveLayout->GetItemFlickAnimationDuration() * max(1.0f, fabsf(firstItemScrollPosition - GetCurrentLayoutPosition(0)));
mScrollAnimation = Animation::New(flickAnimationDuration);
- mScrollAnimation.AnimateTo( Property(self, mPropertyLayoutPosition), firstItemScrollPosition, AlphaFunctions::EaseOut );
+ mScrollAnimation.AnimateTo( Property( mScrollPositionObject, ScrollConnector::SCROLL_POSITION ), firstItemScrollPosition, AlphaFunctions::EaseOut );
mScrollAnimation.AnimateTo( Property(self, mPropertyPosition), GetScrollPosition(firstItemScrollPosition, layoutSize), AlphaFunctions::EaseOut );
mScrollAnimation.AnimateTo( Property(self, mPropertyScrollSpeed), 0.0f, AlphaFunctions::EaseOut );
mScrollSpeedAnimation.AnimateTo( Property(self, mPropertyScrollSpeed), mScrollSpeed, AlphaFunctions::Linear );
mScrollSpeedAnimation.Play();
- float layoutPositionDelta = self.GetProperty<float>(mPropertyLayoutPosition) + (mScrollDistance * mActiveLayout->GetScrollSpeedFactor());
+ float layoutPositionDelta = GetCurrentLayoutPosition(0) + (mScrollDistance * mActiveLayout->GetScrollSpeedFactor());
float firstItemScrollPosition = ClampFirstItemPosition(layoutPositionDelta, layoutSize, *mActiveLayout);
- self.SetProperty(mPropertyLayoutPosition, firstItemScrollPosition);
+ mScrollPositionObject.SetProperty( ScrollConnector::SCROLL_POSITION, firstItemScrollPosition );
self.SetProperty(mPropertyPosition, GetScrollPosition(firstItemScrollPosition, layoutSize));
mScrollStartedSignalV2.Emit(GetCurrentScrollPosition());
return nextFocusActor;
}
}
- float layoutPosition = mActiveLayout->GetClosestAnchorPosition(Self().GetProperty<float>(mPropertyLayoutPosition));
+ float layoutPosition = mActiveLayout->GetClosestAnchorPosition( GetCurrentLayoutPosition(0) );
Vector3 layoutSize = Self().GetCurrentSize();
if(!nextFocusActor)
{
if(commitedFocusableActor)
{
int nextItemID = GetItemId(commitedFocusableActor);
- float layoutPosition = Self().GetProperty<float>(mPropertyLayoutPosition);
+ float layoutPosition = GetCurrentLayoutPosition(0);
Vector3 layoutSize = Self().GetCurrentSize();
Vector3 focusItemPosition = Vector3::ZERO;
ItemLayout::Vector3Function itemPositionConstraint;
if (mActiveLayout && mAnchoringEnabled)
{
- float anchorPosition = mActiveLayout->GetClosestAnchorPosition(Self().GetProperty<float>(mPropertyLayoutPosition));
+ float anchorPosition = mActiveLayout->GetClosestAnchorPosition( GetCurrentLayoutPosition(0) );
anchoringAnimation = Animation::New(mAnchoringDuration);
- anchoringAnimation.AnimateTo( Property(self, mPropertyLayoutPosition), anchorPosition, AlphaFunctions::EaseOut );
+ anchoringAnimation.AnimateTo( Property( mScrollPositionObject, ScrollConnector::SCROLL_POSITION ), anchorPosition, AlphaFunctions::EaseOut );
anchoringAnimation.AnimateTo( Property(self, mPropertyPosition), GetScrollPosition(anchorPosition, self.GetCurrentSize()), AlphaFunctions::EaseOut );
anchoringAnimation.AnimateTo( Property(self, mPropertyScrollSpeed), 0.0f, AlphaFunctions::EaseOut );
if(!mIsFlicking)
{
RemoveAnimation(mScrollAnimation);
mScrollAnimation = Animation::New(durationSeconds);
- mScrollAnimation.AnimateTo( Property(self, mPropertyLayoutPosition), firstItemScrollPosition, AlphaFunctions::EaseOut );
+ mScrollAnimation.AnimateTo( Property( mScrollPositionObject, ScrollConnector::SCROLL_POSITION ), firstItemScrollPosition, AlphaFunctions::EaseOut );
mScrollAnimation.AnimateTo( Property(self, mPropertyPosition), GetScrollPosition(firstItemScrollPosition, layoutSize), AlphaFunctions::EaseOut );
mScrollAnimation.FinishedSignal().Connect(this, &ItemView::OnScrollFinished);
mScrollAnimation.Play();
}
else
{
- self.SetProperty(mPropertyLayoutPosition, firstItemScrollPosition);
+ mScrollPositionObject.SetProperty( ScrollConnector::SCROLL_POSITION, firstItemScrollPosition );
AnimateScrollOvershoot(0.0f);
}
{
Actor self = Self();
- float currentLayoutPosition = ClampFirstItemPosition(self.GetProperty<float>(mPropertyLayoutPosition), layoutSize, *mActiveLayout);
+ float currentLayoutPosition = ClampFirstItemPosition( GetCurrentLayoutPosition(0), layoutSize, *mActiveLayout );
float forwardClampedPosition = ClampFirstItemPosition(currentLayoutPosition + 1.0, layoutSize, *mActiveLayout);
float backwardClampedPosition = ClampFirstItemPosition(currentLayoutPosition - 1.0, layoutSize, *mActiveLayout);
Vector3 ItemView::GetCurrentScrollPosition() const
{
- float currentLayoutPosition = Self().GetProperty<float>(mPropertyLayoutPosition);
+ float currentLayoutPosition = GetCurrentLayoutPosition(0);
return Vector3(0.0f, GetScrollPosition(currentLayoutPosition, Self().GetCurrentSize()), 0.0f);
}
{
RemoveAnimation(mScrollAnimation);
mScrollAnimation = Animation::New(duration);
- mScrollAnimation.AnimateTo( Property(self, mPropertyLayoutPosition), firstItemScrollPosition, AlphaFunctions::EaseOut );
+ mScrollAnimation.AnimateTo( Property( mScrollPositionObject, ScrollConnector::SCROLL_POSITION ), firstItemScrollPosition, AlphaFunctions::EaseOut );
mScrollAnimation.AnimateTo( Property(self, mPropertyPosition), GetScrollPosition(firstItemScrollPosition, layoutSize), AlphaFunctions::EaseOut );
mScrollAnimation.FinishedSignal().Connect(this, &ItemView::OnScrollFinished);
mScrollAnimation.Play();
}
else
{
- self.SetProperty(mPropertyLayoutPosition, firstItemScrollPosition);
+ mScrollPositionObject.SetProperty( ScrollConnector::SCROLL_POSITION, firstItemScrollPosition );
AnimateScrollOvershoot(0.0f);
}
// since the pan gesture starts.
Actor self = Self();
float scrollDistance = CalculateScrollDistance(mTotalPanDisplacement, *mActiveLayout) * mActiveLayout->GetScrollSpeedFactor();
- float positionDelta = self.GetProperty<float>(mPropertyLayoutPosition) + scrollDistance;
+ float positionDelta = GetCurrentLayoutPosition(0) + scrollDistance;
float minLayoutPosition = mActiveLayout->GetMinimumLayoutPosition(mItemFactory.GetNumberOfItems(), Self().GetCurrentSize());
self.SetProperty(mPropertyMinimumLayoutPosition, minLayoutPosition);
float clamppedPosition = min(0.0f, max(minLayoutPosition, positionDelta));