Ejemplo n.º 1
0
	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();
		}
	}
Ejemplo n.º 2
0
	void VScroll::notifyMouseDrag(Widget* _sender, int _left, int _top)
	{
		TrackMove(_left, _top);
	}