X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fscrollable%2Fitem-view%2Fitem-view-impl.cpp;h=b7c1e579bba0f61169bfa7757760480bd8c337e2;hp=9403c8a4f74a6f77e8f2b8cc36a322b3f3109c2b;hb=1f316c7e8f22f1ada38dfdff44d556205bb40ca4;hpb=718ba058f59f930a7071d1d738672e7b15ab5a50 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 9403c8a..b7c1e57 100644 --- a/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp +++ b/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp @@ -26,9 +26,9 @@ #include #include #include -#include +#include #include -#include +#include // INTERNAL INCLUDES #include @@ -260,6 +260,8 @@ DALI_ANIMATABLE_PROPERTY_REGISTRATION( Toolkit, ItemView, "scrollContentSize", DALI_SIGNAL_REGISTRATION( Toolkit, ItemView, "layoutActivated", LAYOUT_ACTIVATED_SIGNAL ) +DALI_ACTION_REGISTRATION( Toolkit, ItemView, "stopScrolling", ACTION_STOP_SCROLLING ) + DALI_TYPE_REGISTRATION_END() bool FindById( const ItemContainer& items, ItemId id ) @@ -326,6 +328,7 @@ void ItemView::OnInitialize() Vector2 stageSize = Stage::GetCurrent().GetSize(); mWheelScrollDistanceStep = stageSize.y * DEFAULT_WHEEL_SCROLL_DISTANCE_STEP_PROPORTION; + self.TouchSignal().Connect( this, &ItemView::OnTouch ); EnableGestureDetection(Gesture::Type(Gesture::Pan)); mWheelEventFinishedTimer = Timer::New( WHEEL_EVENT_FINISHED_TIME_OUT ); @@ -978,37 +981,6 @@ void ItemView::OnChildAdd(Actor& child) } } -bool ItemView::OnTouchEvent(const TouchEvent& event) -{ - // Ignore events with multiple-touch points - if (event.GetPointCount() != 1) - { - return false; - } - - if (event.GetPoint(0).state == TouchPoint::Down) - { - // Cancel ongoing scrolling etc. - mGestureState = Gesture::Clear; - - mScrollDistance = 0.0f; - mScrollSpeed = 0.0f; - Self().SetProperty(Toolkit::ItemView::Property::SCROLL_SPEED, mScrollSpeed); - - mScrollOvershoot = 0.0f; - AnimateScrollOvershoot(0.0f); - - if(mScrollAnimation) - { - mScrollCompletedSignal.Emit(GetCurrentScrollPosition()); - } - - RemoveAnimation(mScrollAnimation); - } - - return true; // consume since we're potentially scrolling -} - bool ItemView::OnWheelEvent(const WheelEvent& event) { // Respond the wheel event to scroll @@ -1101,6 +1073,37 @@ float ItemView::ClampFirstItemPosition( float targetPosition, const Vector3& tar return clamppedPosition; } +bool ItemView::OnTouch( Actor actor, const TouchData& touch ) +{ + // Ignore events with multiple-touch points + if (touch.GetPointCount() != 1) + { + return false; + } + + if ( touch.GetState( 0 ) == PointState::DOWN ) + { + // Cancel ongoing scrolling etc. + mGestureState = Gesture::Clear; + + mScrollDistance = 0.0f; + mScrollSpeed = 0.0f; + Self().SetProperty(Toolkit::ItemView::Property::SCROLL_SPEED, mScrollSpeed); + + mScrollOvershoot = 0.0f; + AnimateScrollOvershoot(0.0f); + + if(mScrollAnimation) + { + mScrollCompletedSignal.Emit(GetCurrentScrollPosition()); + } + + RemoveAnimation(mScrollAnimation); + } + + return true; // consume since we're potentially scrolling +} + void ItemView::OnPan( const PanGesture& gesture ) { Actor self = Self(); @@ -1378,7 +1381,7 @@ void ItemView::ScrollToItem(unsigned int itemId, float durationSeconds) { RemoveAnimation(mScrollAnimation); mScrollAnimation = Animation::New(durationSeconds); - mScrollAnimation.AnimateTo( Property(self, Toolkit::ItemView::Property::LAYOUT_POSITION), firstItemScrollPosition, AlphaFunction::EASE_OUT ); + mScrollAnimation.AnimateTo( Property(self, Toolkit::ItemView::Property::LAYOUT_POSITION), firstItemScrollPosition, mScrollToAlphaFunction ); mScrollAnimation.FinishedSignal().Connect(this, &ItemView::OnScrollFinished); mScrollAnimation.Play(); } @@ -1438,16 +1441,6 @@ void ItemView::CalculateDomainSize(const Vector3& layoutSize) } } -Vector2 ItemView::GetDomainSize() const -{ - Actor self = Self(); - - float minScrollPosition = self.GetProperty(Toolkit::Scrollable::Property::SCROLL_POSITION_MIN_Y); - float maxScrollPosition = self.GetProperty(Toolkit::Scrollable::Property::SCROLL_POSITION_MAX_Y); - - return Vector2(0.0f, fabs(GetScrollPosition(minScrollPosition, self.GetCurrentSize()) - GetScrollPosition(-maxScrollPosition, self.GetCurrentSize()))); -} - bool ItemView::IsLayoutScrollable(const Vector3& layoutSize) { Actor self = Self(); @@ -1492,7 +1485,7 @@ void ItemView::ScrollTo(const Vector2& position, float duration) { RemoveAnimation(mScrollAnimation); mScrollAnimation = Animation::New(duration); - mScrollAnimation.AnimateTo( Property(self, Toolkit::ItemView::Property::LAYOUT_POSITION), firstItemScrollPosition, AlphaFunction::EASE_OUT ); + mScrollAnimation.AnimateTo( Property(self, Toolkit::ItemView::Property::LAYOUT_POSITION), firstItemScrollPosition, mScrollToAlphaFunction ); mScrollAnimation.FinishedSignal().Connect(this, &ItemView::OnScrollFinished); mScrollAnimation.Play(); } @@ -1778,6 +1771,31 @@ Property::Value ItemView::GetProperty( BaseObject* object, Property::Index index return value; } +bool ItemView::DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes ) +{ + Dali::BaseHandle handle( object ); + + Toolkit::ItemView itemView = Toolkit::ItemView::DownCast( handle ); + + DALI_ASSERT_ALWAYS( itemView ); + + if( 0 == strcmp( actionName.c_str(), ACTION_STOP_SCROLLING ) ) + { + GetImpl( itemView ).DoStopScrolling(); + } + + return true; +} + +void ItemView::DoStopScrolling() +{ + if( mScrollAnimation ) + { + mScrollAnimation.Stop(); + mScrollAnimation.Reset(); + } +} + } // namespace Internal } // namespace Toolkit