Change-Id: Idd12ce47c9c961e67d30563a8e55a13930e6cd61
ScrollBar::ScrollBar(Toolkit::ScrollBar::Direction direction)
: Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS | REQUIRES_STYLE_CHANGE_SIGNALS ) ),
mDirection(direction),
ScrollBar::ScrollBar(Toolkit::ScrollBar::Direction direction)
: Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS | REQUIRES_STYLE_CHANGE_SIGNALS ) ),
mDirection(direction),
- mScrollableObject(Handle()),
+ mScrollableObject(WeakHandleBase()),
mPropertyScrollPosition(Property::INVALID_INDEX),
mPropertyMinScrollPosition(Property::INVALID_INDEX),
mPropertyMaxScrollPosition(Property::INVALID_INDEX),
mPropertyScrollPosition(Property::INVALID_INDEX),
mPropertyMinScrollPosition(Property::INVALID_INDEX),
mPropertyMaxScrollPosition(Property::INVALID_INDEX),
&& propertyMaxScrollPosition != Property::INVALID_INDEX
&& propertyScrollContentSize != Property::INVALID_INDEX )
{
&& propertyMaxScrollPosition != Property::INVALID_INDEX
&& propertyScrollContentSize != Property::INVALID_INDEX )
{
- mScrollableObject = handle;
+ mScrollableObject = WeakHandleBase(handle);
mPropertyScrollPosition = propertyScrollPosition;
mPropertyMinScrollPosition = propertyMinScrollPosition;
mPropertyMaxScrollPosition = propertyMaxScrollPosition;
mPropertyScrollPosition = propertyScrollPosition;
mPropertyMinScrollPosition = propertyMinScrollPosition;
mPropertyMaxScrollPosition = propertyMaxScrollPosition;
void ScrollBar::ApplyConstraints()
{
void ScrollBar::ApplyConstraints()
{
- if( mScrollableObject )
+ Handle scrollableHandle = mScrollableObject.GetBaseHandle();
+
+ if( scrollableHandle )
{
if(mIndicatorSizeConstraint)
{
{
if(mIndicatorSizeConstraint)
{
{
mIndicatorSizeConstraint = Constraint::New<Vector3>( mIndicator, Actor::Property::SIZE, IndicatorSizeConstraint() );
mIndicatorSizeConstraint.AddSource( ParentSource( Actor::Property::SIZE ) );
{
mIndicatorSizeConstraint = Constraint::New<Vector3>( mIndicator, Actor::Property::SIZE, IndicatorSizeConstraint() );
mIndicatorSizeConstraint.AddSource( ParentSource( Actor::Property::SIZE ) );
- mIndicatorSizeConstraint.AddSource( Source( mScrollableObject, mPropertyScrollContentSize ) );
+ mIndicatorSizeConstraint.AddSource( Source( scrollableHandle, mPropertyScrollContentSize ) );
mIndicatorSizeConstraint.Apply();
}
mIndicatorSizeConstraint.Apply();
}
mIndicatorPositionConstraint = Constraint::New<Vector3>( mIndicator, Actor::Property::POSITION, IndicatorPositionConstraint() );
mIndicatorPositionConstraint.AddSource( LocalSource( Actor::Property::SIZE ) );
mIndicatorPositionConstraint.AddSource( ParentSource( Actor::Property::SIZE ) );
mIndicatorPositionConstraint = Constraint::New<Vector3>( mIndicator, Actor::Property::POSITION, IndicatorPositionConstraint() );
mIndicatorPositionConstraint.AddSource( LocalSource( Actor::Property::SIZE ) );
mIndicatorPositionConstraint.AddSource( ParentSource( Actor::Property::SIZE ) );
- mIndicatorPositionConstraint.AddSource( Source( mScrollableObject, mPropertyScrollPosition ) );
- mIndicatorPositionConstraint.AddSource( Source( mScrollableObject, mPropertyMinScrollPosition ) );
- mIndicatorPositionConstraint.AddSource( Source( mScrollableObject, mPropertyMaxScrollPosition ) );
+ mIndicatorPositionConstraint.AddSource( Source( scrollableHandle, mPropertyScrollPosition ) );
+ mIndicatorPositionConstraint.AddSource( Source( scrollableHandle, mPropertyMinScrollPosition ) );
+ mIndicatorPositionConstraint.AddSource( Source( scrollableHandle, mPropertyMaxScrollPosition ) );
mIndicatorPositionConstraint.Apply();
}
}
mIndicatorPositionConstraint.Apply();
}
}
{
mScrollPositionIntervals = positions;
{
mScrollPositionIntervals = positions;
- if( mScrollableObject )
+ Handle scrollableHandle = mScrollableObject.GetBaseHandle();
+
+ if( scrollableHandle )
{
if( mPositionNotification )
{
{
if( mPositionNotification )
{
- mScrollableObject.RemovePropertyNotification(mPositionNotification);
+ scrollableHandle.RemovePropertyNotification(mPositionNotification);
- mPositionNotification = mScrollableObject.AddPropertyNotification( mPropertyScrollPosition, VariableStepCondition(mScrollPositionIntervals) );
+ mPositionNotification = scrollableHandle.AddPropertyNotification( mPropertyScrollPosition, VariableStepCondition(mScrollPositionIntervals) );
mPositionNotification.NotifySignal().Connect( this, &ScrollBar::OnScrollPositionIntervalReached );
}
}
mPositionNotification.NotifySignal().Connect( this, &ScrollBar::OnScrollPositionIntervalReached );
}
}
void ScrollBar::OnScrollPositionIntervalReached(PropertyNotification& source)
{
// Emit the signal to notify the scroll position crossing
void ScrollBar::OnScrollPositionIntervalReached(PropertyNotification& source)
{
// Emit the signal to notify the scroll position crossing
+ Handle scrollableHandle = mScrollableObject.GetBaseHandle();
+ if(scrollableHandle)
- mScrollPositionIntervalReachedSignal.Emit(mScrollableObject.GetProperty<float>(mPropertyScrollPosition));
+ mScrollPositionIntervalReachedSignal.Emit(scrollableHandle.GetProperty<float>(mPropertyScrollPosition));
bool ScrollBar::OnPanGestureProcessTick()
{
// Update the scroll position property.
bool ScrollBar::OnPanGestureProcessTick()
{
// Update the scroll position property.
- if( mScrollableObject )
+ Handle scrollableHandle = mScrollableObject.GetBaseHandle();
+ if( scrollableHandle )
- mScrollableObject.SetProperty(mPropertyScrollPosition, mCurrentScrollPosition);
+ scrollableHandle.SetProperty(mPropertyScrollPosition, mCurrentScrollPosition);
void ScrollBar::OnPan( const PanGesture& gesture )
{
void ScrollBar::OnPan( const PanGesture& gesture )
{
+ Handle scrollableHandle = mScrollableObject.GetBaseHandle();
+
+ if(scrollableHandle)
- Dali::Toolkit::ItemView itemView = Dali::Toolkit::ItemView::DownCast(mScrollableObject);
+ Dali::Toolkit::ItemView itemView = Dali::Toolkit::ItemView::DownCast(scrollableHandle);
- mScrollStart = mScrollableObject.GetProperty<float>(mPropertyScrollPosition);
+ mScrollStart = scrollableHandle.GetProperty<float>(mPropertyScrollPosition);
mGestureDisplacement = Vector3::ZERO;
mIsPanning = true;
mGestureDisplacement = Vector3::ZERO;
mIsPanning = true;
mGestureDisplacement+=delta;
Vector3 span = Self().GetCurrentSize() - mIndicator.GetCurrentSize();
mGestureDisplacement+=delta;
Vector3 span = Self().GetCurrentSize() - mIndicator.GetCurrentSize();
- float minScrollPosition = mScrollableObject.GetProperty<float>(mPropertyMinScrollPosition);
- float maxScrollPosition = mScrollableObject.GetProperty<float>(mPropertyMaxScrollPosition);
+ float minScrollPosition = scrollableHandle.GetProperty<float>(mPropertyMinScrollPosition);
+ float maxScrollPosition = scrollableHandle.GetProperty<float>(mPropertyMaxScrollPosition);
float domainSize = maxScrollPosition - minScrollPosition;
mCurrentScrollPosition = mScrollStart - mGestureDisplacement.y * domainSize / span.y;
float domainSize = maxScrollPosition - minScrollPosition;
mCurrentScrollPosition = mScrollStart - mGestureDisplacement.y * domainSize / span.y;
#include <dali/public-api/animation/animation.h>
#include <dali/public-api/common/dali-vector.h>
#include <dali/public-api/object/property-notification.h>
#include <dali/public-api/animation/animation.h>
#include <dali/public-api/common/dali-vector.h>
#include <dali/public-api/object/property-notification.h>
+#include <dali/devel-api/object/weak-handle.h>
// INTERNAL INCLUDES
#include <dali-toolkit/public-api/controls/control-impl.h>
// INTERNAL INCLUDES
#include <dali-toolkit/public-api/controls/control-impl.h>
Toolkit::ScrollBar::Direction mDirection; ///< The direction of scroll bar (vertical or horizontal)
Toolkit::ScrollBar::Direction mDirection; ///< The direction of scroll bar (vertical or horizontal)
- Handle mScrollableObject; ///< Object to be scrolled
+ WeakHandleBase mScrollableObject; ///< Object to be scrolled
Property::Index mPropertyScrollPosition; ///< Index of scroll position property owned by the object to be scrolled
Property::Index mPropertyMinScrollPosition; ///< Index of minimum scroll position property owned by the object to be scrolled
Property::Index mPropertyScrollPosition; ///< Index of scroll position property owned by the object to be scrolled
Property::Index mPropertyMinScrollPosition; ///< Index of minimum scroll position property owned by the object to be scrolled