void VScroll::notifyMousePressed(Widget* _sender, int _left, int _top, MouseButton _id) { // диспечерезируем нажатие своих детей как свое eventMouseButtonPressed(this, _left, _top, _id); if (MouseButton::Left != _id) return; if (mMoveToClick && mWidgetTrack != _sender) { mPreActionOffset = InputManager::getInstance().getLastLeftPressed(); const IntPoint& point = InputManager::getInstance().getMousePositionByLayer() - getAbsolutePosition(); TrackMove(point.left, point.top); } else if (_sender == mWidgetStart) { // минимальное значение if (mScrollPosition == 0) return; // расчитываем следующее положение if (mScrollPosition > mScrollPage) mScrollPosition -= mScrollPage; else mScrollPosition = 0; // оповещаем eventScrollChangePosition(this, (int)mScrollPosition); updateTrack(); } else if (_sender == mWidgetEnd) { // максимальное значение if ( (mScrollRange < 2) || (mScrollPosition >= (mScrollRange - 1)) ) return; // расчитываем следующее положение if ((mScrollPosition + mScrollPage) < (mScrollRange - 1)) mScrollPosition += mScrollPage; else mScrollPosition = mScrollRange - 1; // оповещаем eventScrollChangePosition(this, (int)mScrollPosition); updateTrack(); } else if (_sender == mWidgetFirstPart) { // минимальное значение if (mScrollPosition == 0) return; // расчитываем следующее положение if (mScrollPosition > mScrollViewPage) mScrollPosition -= mScrollViewPage; else mScrollPosition = 0; // оповещаем eventScrollChangePosition(this, (int)mScrollPosition); updateTrack(); } else if (_sender == mWidgetSecondPart) { // максимальное значение if ( (mScrollRange < 2) || (mScrollPosition >= (mScrollRange - 1)) ) return; // расчитываем следующее положение if ((mScrollPosition + mScrollViewPage) < (mScrollRange - 1)) mScrollPosition += mScrollViewPage; else mScrollPosition = mScrollRange - 1; // оповещаем eventScrollChangePosition(this, (int)mScrollPosition); updateTrack(); } else if (_sender == mWidgetTrack) { mPreActionOffset.left = _sender->getLeft(); mPreActionOffset.top = _sender->getTop(); } }
void VScroll::notifyMouseDrag(Widget* _sender, int _left, int _top) { TrackMove(_left, _top); }