2
0
Эх сурвалжийг харах

Implemented Scrollable class, to server as common base for such classes

Ivan Savenko 2 жил өмнө
parent
commit
052d0d314a

+ 2 - 2
client/lobby/CSelectionBase.cpp

@@ -202,7 +202,7 @@ void InfoCard::changeSelection()
 
 	mapDescription->label->scrollTextTo(0, false);
 	if(mapDescription->slider)
-		mapDescription->slider->moveToMin();
+		mapDescription->slider->scrollToMin();
 
 	if(SEL->screenType == ESelectionScreen::campaignList)
 		return;
@@ -337,7 +337,7 @@ void CChatBox::addNewMessage(const std::string & text)
 	CCS->soundh->playSound("CHAT");
 	chatHistory->setText(chatHistory->label->getText() + text + "\n");
 	if(chatHistory->slider)
-		chatHistory->slider->moveToMax();
+		chatHistory->slider->scrollToMax();
 }
 
 CFlagBox::CFlagBox(const Rect & rect)

+ 1 - 1
client/lobby/OptionsTab.cpp

@@ -72,7 +72,7 @@ void OptionsTab::recreate()
 
 	if(sliderTurnDuration)
 	{
-		sliderTurnDuration->moveTo(vstd::find_pos(GameConstants::POSSIBLE_TURNTIME, SEL->getStartInfo()->turnTime));
+		sliderTurnDuration->scrollTo(vstd::find_pos(GameConstants::POSSIBLE_TURNTIME, SEL->getStartInfo()->turnTime));
 		labelTurnDurationValue->setText(CGI->generaltexth->turnDurations[sliderTurnDuration->getValue()]);
 	}
 }

+ 4 - 4
client/lobby/SelectionTab.cpp

@@ -351,7 +351,7 @@ void SelectionTab::filter(int size, bool selectFirst)
 		sort();
 		if(selectFirst)
 		{
-			slider->moveTo(0);
+			slider->scrollTo(0);
 			callOnSelect(curItems[0]);
 			selectAbs(0);
 		}
@@ -406,9 +406,9 @@ void SelectionTab::select(int position)
 	selectionPos = py;
 
 	if(position < 0)
-		slider->moveBy(position);
+		slider->scrollBy(position);
 	else if(position >= listItems.size())
-		slider->moveBy(position - (int)listItems.size() + 1);
+		slider->scrollBy(position - (int)listItems.size() + 1);
 
 	rememberCurrentSelection();
 
@@ -482,7 +482,7 @@ void SelectionTab::selectFileName(std::string fname)
 	{
 		if(curItems[i]->fileURI == fname)
 		{
-			slider->moveTo(i);
+			slider->scrollTo(i);
 			selectAbs(i);
 			return;
 		}

+ 1 - 1
client/widgets/ObjectLists.cpp

@@ -113,7 +113,7 @@ void CListBox::updatePositions()
 	{
 		redraw();
 		if (slider)
-			slider->moveTo((int)first);
+			slider->scrollTo((int)first);
 	}
 }
 

+ 82 - 0
client/widgets/Scrollable.cpp

@@ -10,3 +10,85 @@
 
 #include "StdInc.h"
 #include "Scrollable.h"
+
+Scrollable::Scrollable(int used, Point position, Orientation orientation)
+	: CIntObject(used | WHEEL | GESTURE_PANNING, position)
+	, scrollStep(1)
+	, panningDistanceSingle(32)
+	, panningDistanceAccumulated(0)
+	, orientation(orientation)
+{
+}
+
+void Scrollable::panning(bool on)
+{
+	panningDistanceAccumulated = 0;
+}
+
+void Scrollable::wheelScrolled(int distance)
+{
+	if (orientation == Orientation::HORIZONTAL)
+		scrollBy(distance * 3);
+	else
+		scrollBy(-distance * 3);
+}
+
+void Scrollable::gesturePanning(const Point & distanceDelta)
+{
+	if (orientation == Orientation::HORIZONTAL)
+		panningDistanceAccumulated += -distanceDelta.x;
+	else
+		panningDistanceAccumulated += distanceDelta.y;
+
+	if (-panningDistanceAccumulated > panningDistanceSingle )
+	{
+		int scrollAmount = (-panningDistanceAccumulated) / panningDistanceSingle;
+		scrollBy(-scrollAmount);
+		panningDistanceAccumulated += scrollAmount * panningDistanceSingle;
+	}
+
+	if (panningDistanceAccumulated > panningDistanceSingle )
+	{
+		int scrollAmount = panningDistanceAccumulated / panningDistanceSingle;
+		scrollBy(scrollAmount);
+		panningDistanceAccumulated += -scrollAmount * panningDistanceSingle;
+	}
+}
+
+int Scrollable::getScrollStep() const
+{
+	return scrollStep;
+}
+
+Orientation Scrollable::getOrientation() const
+{
+	return orientation;
+}
+
+void Scrollable::scrollNext()
+{
+	scrollBy(+1);
+}
+
+void Scrollable::scrollPrev()
+{
+	scrollBy(-1);
+}
+
+void Scrollable::setScrollStep(int to)
+{
+	scrollStep = to;
+}
+
+void Scrollable::setPanningStep(int to)
+{
+	panningDistanceSingle = to;
+}
+
+void Scrollable::setScrollingEnabled(bool on)
+{
+	if (on)
+		addUsedEvents(WHEEL | GESTURE_PANNING);
+	else
+		removeUsedEvents(WHEEL | GESTURE_PANNING);
+}

+ 48 - 0
client/widgets/Scrollable.h

@@ -11,3 +11,51 @@
 #pragma once
 
 #include "../gui/CIntObject.h"
+
+enum class Orientation
+{
+	HORIZONTAL,
+	VERTICAL
+};
+
+/// Simple class that provides scrolling functionality via either mouse wheel or touchscreen gesture
+class Scrollable : public CIntObject
+{
+	/// how many elements will be scrolled via one click, default = 1
+	int scrollStep;
+	/// How far player must move finger/mouse to move slider by 1 via gesture
+	int panningDistanceSingle;
+	/// How far have player moved finger/mouse via gesture so far.
+	int panningDistanceAccumulated;
+
+	Orientation orientation;
+
+protected:
+	Scrollable(int used, Point position, Orientation orientation);
+
+	void panning(bool on) override;
+	void wheelScrolled(int distance) override;
+	void gesturePanning(const Point & distanceDelta) override;
+
+	int getScrollStep() const;
+	Orientation getOrientation() const;
+
+public:
+	/// Scrolls view by specified number of items
+	virtual void scrollBy(int distance) = 0;
+
+	/// Scrolls view by 1 item, identical to scrollBy(+1)
+	virtual void scrollNext();
+
+	/// Scrolls view by 1 item, identical to scrollBy(-1)
+	virtual void scrollPrev();
+
+	/// Controls how many items wil be scrolled via one click
+	void setScrollStep(int to);
+
+	/// Controls size of panning step needed to move list by 1 item
+	void setPanningStep(int to);
+
+	/// Enables or disabled scrolling
+	void setScrollingEnabled(bool on);
+};

+ 33 - 96
client/widgets/Slider.cpp

@@ -26,7 +26,7 @@ void CSlider::sliderClicked()
 void CSlider::mouseMoved (const Point & cursorPosition)
 {
 	double v = 0;
-	if(horizontal)
+	if(getOrientation() == Orientation::HORIZONTAL)
 	{
 		if(	std::abs(cursorPosition.y-(pos.y+pos.h/2)) > pos.h/2+40  ||  std::abs(cursorPosition.x-(pos.x+pos.w/2)) > pos.w/2  )
 			return;
@@ -45,15 +45,10 @@ void CSlider::mouseMoved (const Point & cursorPosition)
 	v += 0.5;
 	if(v!=value)
 	{
-		moveTo(static_cast<int>(v));
+		scrollTo(static_cast<int>(v));
 	}
 }
 
-void CSlider::setScrollStep(int to)
-{
-	scrollStep = to;
-}
-
 void CSlider::setScrollBounds(const Rect & bounds )
 {
 	scrollBounds = bounds;
@@ -79,24 +74,14 @@ int CSlider::getCapacity() const
 	return capacity;
 }
 
-void CSlider::moveLeft()
-{
-	moveTo(value-1);
-}
-
-void CSlider::moveRight()
+void CSlider::scrollBy(int amount)
 {
-	moveTo(value+1);
-}
-
-void CSlider::moveBy(int amount)
-{
-	moveTo(value + amount);
+	scrollTo(value + amount);
 }
 
 void CSlider::updateSliderPos()
 {
-	if(horizontal)
+	if(getOrientation() == Orientation::HORIZONTAL)
 	{
 		if(positions)
 		{
@@ -122,7 +107,7 @@ void CSlider::updateSliderPos()
 	}
 }
 
-void CSlider::moveTo(int to)
+void CSlider::scrollTo(int to)
 {
 	vstd::amax(to, 0);
 	vstd::amin(to, positions);
@@ -143,7 +128,7 @@ void CSlider::clickLeft(tribool down, bool previousState)
 	{
 		double pw = 0;
 		double rw = 0;
-		if(horizontal)
+		if(getOrientation() == Orientation::HORIZONTAL)
 		{
 			pw = GH.getCursorPosition().x-pos.x-25;
 			rw = pw / static_cast<double>(pos.w - 48);
@@ -153,12 +138,12 @@ void CSlider::clickLeft(tribool down, bool previousState)
 			pw = GH.getCursorPosition().y-pos.y-24;
 			rw = pw / (pos.h-48);
 		}
-		if(pw < -8  ||  pw > (horizontal ? pos.w : pos.h) - 40)
+		if(pw < -8  ||  pw > (getOrientation() == Orientation::HORIZONTAL ? pos.w : pos.h) - 40)
 			return;
 		// 		if (rw>1) return;
 		// 		if (rw<0) return;
 		slider->clickLeft(true, slider->isMouseButtonPressed(MouseButton::LEFT));
-		moveTo((int)(rw * positions  +  0.5));
+		scrollTo((int)(rw * positions  +  0.5));
 		return;
 	}
 	removeUsedEvents(MOVE);
@@ -179,60 +164,21 @@ bool CSlider::receiveEvent(const Point &position, int eventType) const
 	return testTarget.isInside(position);
 }
 
-void CSlider::setPanningStep(int to)
-{
-	panningDistanceSingle = to;
-}
-
-void CSlider::panning(bool on)
-{
-	panningDistanceAccumulated = 0;
-}
-
-void CSlider::gesturePanning(const Point & distanceDelta)
-{
-	if (horizontal)
-		panningDistanceAccumulated += -distanceDelta.x;
-	else
-		panningDistanceAccumulated += distanceDelta.y;
-
-	if (-panningDistanceAccumulated > panningDistanceSingle )
-	{
-		int scrollAmount = (-panningDistanceAccumulated) / panningDistanceSingle;
-		moveBy(-scrollAmount);
-		panningDistanceAccumulated += scrollAmount * panningDistanceSingle;
-	}
-
-	if (panningDistanceAccumulated > panningDistanceSingle )
-	{
-		int scrollAmount = panningDistanceAccumulated / panningDistanceSingle;
-		moveBy(scrollAmount);
-		panningDistanceAccumulated += -scrollAmount * panningDistanceSingle;
-	}
-}
-
 CSlider::CSlider(Point position, int totalw, std::function<void(int)> Moved, int Capacity, int Amount, int Value, bool Horizontal, CSlider::EStyle style)
-	: CIntObject(LCLICK | RCLICK | WHEEL | GESTURE_PANNING ),
+	: Scrollable(LCLICK, position, Horizontal ? Orientation::HORIZONTAL : Orientation::VERTICAL ),
 	capacity(Capacity),
-	horizontal(Horizontal),
 	amount(Amount),
 	value(Value),
-	scrollStep(1),
-	moved(Moved),
-	panningDistanceAccumulated(0),
-	panningDistanceSingle(32)
+	moved(Moved)
 {
 	OBJECT_CONSTRUCTION_CAPTURING(255-DISPOSE);
 	setAmount(amount);
 	vstd::amax(value, 0);
 	vstd::amin(value, positions);
 
-	pos.x += position.x;
-	pos.y += position.y;
-
 	if(style == BROWN)
 	{
-		std::string name = horizontal ? "IGPCRDIV.DEF" : "OVBUTN2.DEF";
+		std::string name = getOrientation() == Orientation::HORIZONTAL ? "IGPCRDIV.DEF" : "OVBUTN2.DEF";
 		//NOTE: this images do not have "blocked" frames. They should be implemented somehow (e.g. palette transform or something...)
 
 		left = std::make_shared<CButton>(Point(), name, CButton::tooltip());
@@ -245,8 +191,8 @@ CSlider::CSlider(Point position, int totalw, std::function<void(int)> Moved, int
 	}
 	else
 	{
-		left = std::make_shared<CButton>(Point(), horizontal ? "SCNRBLF.DEF" : "SCNRBUP.DEF", CButton::tooltip());
-		right = std::make_shared<CButton>(Point(), horizontal ? "SCNRBRT.DEF" : "SCNRBDN.DEF", CButton::tooltip());
+		left = std::make_shared<CButton>(Point(), getOrientation() == Orientation::HORIZONTAL ? "SCNRBLF.DEF" : "SCNRBUP.DEF", CButton::tooltip());
+		right = std::make_shared<CButton>(Point(), getOrientation() == Orientation::HORIZONTAL ? "SCNRBRT.DEF" : "SCNRBDN.DEF", CButton::tooltip());
 		slider = std::make_shared<CButton>(Point(), "SCNRBSL.DEF", CButton::tooltip());
 	}
 	slider->actOnDown = true;
@@ -254,16 +200,16 @@ CSlider::CSlider(Point position, int totalw, std::function<void(int)> Moved, int
 	left->soundDisabled = true;
 	right->soundDisabled = true;
 
-	if (horizontal)
+	if (getOrientation() == Orientation::HORIZONTAL)
 		right->moveBy(Point(totalw - right->pos.w, 0));
 	else
 		right->moveBy(Point(0, totalw - right->pos.h));
 
-	left->addCallback(std::bind(&CSlider::moveLeft,this));
-	right->addCallback(std::bind(&CSlider::moveRight,this));
+	left->addCallback(std::bind(&CSlider::scrollPrev,this));
+	right->addCallback(std::bind(&CSlider::scrollNext,this));
 	slider->addCallback(std::bind(&CSlider::sliderClicked,this));
 
-	if(horizontal)
+	if(getOrientation() == Orientation::HORIZONTAL)
 	{
 		pos.h = slider->pos.h;
 		pos.w = totalw;
@@ -299,41 +245,32 @@ void CSlider::showAll(Canvas & to)
 	CIntObject::showAll(to);
 }
 
-void CSlider::wheelScrolled(int distance)
-{
-	// vertical slider -> scrolling up move slider upwards
-	// horizontal slider -> scrolling up moves slider towards right
-	bool positive = ((distance < 0) != horizontal);
-
-	moveTo(value + 3 * (positive ? +scrollStep : -scrollStep));
-}
-
 void CSlider::keyPressed(EShortcut key)
 {
 	int moveDest = value;
 	switch(key)
 	{
 	case EShortcut::MOVE_UP:
-		if (!horizontal)
-			moveDest = value - scrollStep;
+		if (getOrientation() == Orientation::VERTICAL)
+			moveDest = value - getScrollStep();
 		break;
 	case EShortcut::MOVE_LEFT:
-		if (horizontal)
-			moveDest = value - scrollStep;
+		if (getOrientation() == Orientation::HORIZONTAL)
+			moveDest = value - getScrollStep();
 		break;
 	case EShortcut::MOVE_DOWN:
-		if (!horizontal)
-			moveDest = value + scrollStep;
+		if (getOrientation() == Orientation::VERTICAL)
+			moveDest = value + getScrollStep();
 		break;
 	case EShortcut::MOVE_RIGHT:
-		if (horizontal)
-			moveDest = value + scrollStep;
+		if (getOrientation() == Orientation::HORIZONTAL)
+			moveDest = value + getScrollStep();
 		break;
 	case EShortcut::MOVE_PAGE_UP:
-		moveDest = value - capacity + scrollStep;
+		moveDest = value - capacity + getScrollStep();
 		break;
 	case EShortcut::MOVE_PAGE_DOWN:
-		moveDest = value + capacity - scrollStep;
+		moveDest = value + capacity - getScrollStep();
 		break;
 	case EShortcut::MOVE_FIRST:
 		moveDest = 0;
@@ -345,15 +282,15 @@ void CSlider::keyPressed(EShortcut key)
 		return;
 	}
 
-	moveTo(moveDest);
+	scrollTo(moveDest);
 }
 
-void CSlider::moveToMin()
+void CSlider::scrollToMin()
 {
-	moveTo(0);
+	scrollTo(0);
 }
 
-void CSlider::moveToMax()
+void CSlider::scrollToMax()
 {
-	moveTo(amount);
+	scrollTo(amount);
 }

+ 5 - 26
client/widgets/Slider.h

@@ -16,7 +16,7 @@
 class CButton;
 
 /// A typical slider which can be orientated horizontally/vertically.
-class CSlider : public CIntObject
+class CSlider : public Scrollable
 {
 	//if vertical then left=up
 	std::shared_ptr<CButton> left;
@@ -29,19 +29,10 @@ class CSlider : public CIntObject
 	int capacity;
 	/// number of highest position, or 0 if there is only one
 	int positions;
-	/// if true, then slider is not vertical but horizontal
-	bool horizontal;
 	/// total amount of elements in the list
 	int amount;
 	/// topmost vislble (first active) element
 	int value;
-	/// how many elements will be scrolled via one click, default = 1
-	int scrollStep;
-
-	/// How far player must move finger/mouse to move slider by 1 via gesture
-	int panningDistanceSingle;
-	/// How far have player moved finger/mouse via gesture so far.
-	int panningDistanceAccumulated;
 
 	CFunctionList<void(int)> moved;
 
@@ -57,23 +48,15 @@ public:
 
 	void block(bool on);
 
-	/// Controls how many items wil be scrolled via one click
-	void setScrollStep(int to);
-
-	/// Controls size of panning step needed to move list by 1 item
-	void setPanningStep(int to);
-
 	/// If set, mouse scroll will only scroll slider when inside of this area
 	void setScrollBounds(const Rect & bounds );
 	void clearScrollBounds();
 
 	/// Value modifiers
-	void moveLeft();
-	void moveRight();
-	void moveTo(int value);
-	void moveBy(int amount);
-	void moveToMin();
-	void moveToMax();
+	void scrollTo(int value);
+	void scrollBy(int amount) override;
+	void scrollToMin();
+	void scrollToMax();
 
 	/// Amount modifier
 	void setAmount(int to);
@@ -86,14 +69,10 @@ public:
 	void addCallback(std::function<void(int)> callback);
 
 	bool receiveEvent(const Point & position, int eventType) const override;
-
 	void keyPressed(EShortcut key) override;
-	void wheelScrolled(int distance) override;
-	void gesturePanning(const Point & distanceDelta) override;
 	void clickLeft(tribool down, bool previousState) override;
 	void mouseMoved (const Point & cursorPosition) override;
 	void showAll(Canvas & to) override;
-	void panning(bool on) override;
 
 	 /// @param position coordinates of slider
 	 /// @param length length of slider ribbon, including left/right buttons

+ 3 - 3
client/windows/CQuestLog.cpp

@@ -194,12 +194,12 @@ void CQuestLog::recreateLabelList()
 	if (currentLabel > QUEST_COUNT)
 	{
 		slider->block(false);
-		slider->moveToMax();
+		slider->scrollToMax();
 	}
 	else
 	{
 		slider->block(true);
-		slider->moveToMin();
+		slider->scrollToMin();
 	}
 }
 
@@ -239,7 +239,7 @@ void CQuestLog::selectQuest(int which, int labelId)
 	std::vector<Component> components;
 	currentQuest->quest->getVisitText (text, components, currentQuest->quest->isCustomFirst, true);
 	if(description->slider)
-		description->slider->moveToMin(); // scroll text to start position
+		description->slider->scrollToMin(); // scroll text to start position
 	description->setText(text.toString()); //TODO: use special log entry text
 
 	componentsBox.reset();

+ 7 - 7
client/windows/CTradeWindow.cpp

@@ -785,7 +785,7 @@ CMarketplaceWindow::~CMarketplaceWindow() = default;
 
 void CMarketplaceWindow::setMax()
 {
-	slider->moveToMax();
+	slider->scrollToMax();
 }
 
 void CMarketplaceWindow::makeDeal()
@@ -825,7 +825,7 @@ void CMarketplaceWindow::makeDeal()
 		if(slider)
 		{
 			LOCPLINT->cb->trade(market, mode, leftIdToSend, hRight->id, slider->getValue() * r1, hero);
-			slider->moveTo(0);
+			slider->scrollTo(0);
 		}
 		else
 		{
@@ -869,7 +869,7 @@ void CMarketplaceWindow::selectionChanged(bool side)
 				assert(0);
 
 			slider->setAmount(newAmount / r1);
-			slider->moveTo(0);
+			slider->scrollTo(0);
 			max->block(false);
 			deal->block(false);
 		}
@@ -886,7 +886,7 @@ void CMarketplaceWindow::selectionChanged(bool side)
 		{
 			max->block(true);
 			slider->setAmount(0);
-			slider->moveTo(0);
+			slider->scrollTo(0);
 		}
 		deal->block(true);
 	}
@@ -1121,7 +1121,7 @@ CAltarWindow::CAltarWindow(const IMarket * Market, const CGHeroInstance * Hero,
 		new CTextBox(CGI->generaltexth->allTexts[480], Rect(320, 56, 256, 40), 0, FONT_SMALL, ETextAlignment::CENTER, Colors::YELLOW);
 
 		slider = std::make_shared<CSlider>(Point(231,481),137,std::bind(&CAltarWindow::sliderMoved,this,_1),0,0);
-		max = std::make_shared<CButton>(Point(147, 520), "IRCBTNS.DEF", CGI->generaltexth->zelp[578], std::bind(&CSlider::moveToMax, slider));
+		max = std::make_shared<CButton>(Point(147, 520), "IRCBTNS.DEF", CGI->generaltexth->zelp[578], std::bind(&CSlider::scrollToMax, slider));
 
 		sacrificedUnits.resize(GameConstants::ARMY_SIZE, 0);
 		sacrificeAll = std::make_shared<CButton>(Point(393, 520), "ALTARMY.DEF", CGI->generaltexth->zelp[579], std::bind(&CAltarWindow::SacrificeAll,this));
@@ -1214,7 +1214,7 @@ void CAltarWindow::makeDeal()
 	if(mode == EMarketMode::CREATURE_EXP)
 	{
 		blockTrade();
-		slider->moveTo(0);
+		slider->scrollTo(0);
 
 		std::vector<ui32> ids;
 		std::vector<ui32> toSacrifice;
@@ -1311,7 +1311,7 @@ void CAltarWindow::selectionChanged(bool side)
 
 	slider->setAmount(hero->getStackCount(SlotID(hLeft->serial)) - (stackCount == 1));
 	slider->block(!slider->getAmount());
-	slider->moveTo(sacrificedUnits[hLeft->serial]);
+	slider->scrollTo(sacrificedUnits[hLeft->serial]);
 	max->block(!slider->getAmount());
 	selectOppositeItem(side);
 	readyToTrade = true;

+ 2 - 2
client/windows/CreaturePurchaseCard.cpp

@@ -35,12 +35,12 @@ void CreaturePurchaseCard::initButtons()
 
 void CreaturePurchaseCard::initMaxButton()
 {
-	maxButton = std::make_shared<CButton>(Point(pos.x + 52, pos.y + 180), "QuickRecruitmentWindow/QuickRecruitmentAllButton.def", CButton::tooltip(), std::bind(&CSlider::moveToMax,slider), EShortcut::RECRUITMENT_MAX);
+	maxButton = std::make_shared<CButton>(Point(pos.x + 52, pos.y + 180), "QuickRecruitmentWindow/QuickRecruitmentAllButton.def", CButton::tooltip(), std::bind(&CSlider::scrollToMax,slider), EShortcut::RECRUITMENT_MAX);
 }
 
 void CreaturePurchaseCard::initMinButton()
 {
-	minButton = std::make_shared<CButton>(Point(pos.x, pos.y + 180), "QuickRecruitmentWindow/QuickRecruitmentNoneButton.def", CButton::tooltip(), std::bind(&CSlider::moveToMin,slider), EShortcut::RECRUITMENT_MIN);
+	minButton = std::make_shared<CButton>(Point(pos.x, pos.y + 180), "QuickRecruitmentWindow/QuickRecruitmentNoneButton.def", CButton::tooltip(), std::bind(&CSlider::scrollToMin,slider), EShortcut::RECRUITMENT_MIN);
 }
 
 void CreaturePurchaseCard::initCreatureSwitcherButton()

+ 4 - 4
client/windows/GUIClasses.cpp

@@ -134,7 +134,7 @@ void CRecruitmentWindow::select(std::shared_ptr<CCreatureCard> card)
 		slider->setAmount(maxAmount);
 
 		if(slider->getValue() != maxAmount)
-			slider->moveTo(maxAmount);
+			slider->scrollTo(maxAmount);
 		else // if slider already at 0 - emulate call to sliderMoved()
 			sliderMoved(maxAmount);
 
@@ -215,7 +215,7 @@ CRecruitmentWindow::CRecruitmentWindow(const CGDwelling * Dwelling, int Level, c
 
 	slider = std::make_shared<CSlider>(Point(176,279),135,std::bind(&CRecruitmentWindow::sliderMoved,this, _1),0,0,0,true);
 
-	maxButton = std::make_shared<CButton>(Point(134, 313), "IRCBTNS.DEF", CGI->generaltexth->zelp[553], std::bind(&CSlider::moveToMax, slider), EShortcut::RECRUITMENT_MAX);
+	maxButton = std::make_shared<CButton>(Point(134, 313), "IRCBTNS.DEF", CGI->generaltexth->zelp[553], std::bind(&CSlider::scrollToMax, slider), EShortcut::RECRUITMENT_MAX);
 	buyButton = std::make_shared<CButton>(Point(212, 313), "IBY6432.DEF", CGI->generaltexth->zelp[554], std::bind(&CRecruitmentWindow::buy, this), EShortcut::GLOBAL_ACCEPT);
 	cancelButton = std::make_shared<CButton>(Point(290, 313), "ICN6432.DEF", CGI->generaltexth->zelp[555], std::bind(&CRecruitmentWindow::close, this), EShortcut::GLOBAL_CANCEL);
 
@@ -287,7 +287,7 @@ void CRecruitmentWindow::availableCreaturesChanged()
 	select(cards[selectedIndex]);
 
 	if(slider->getValue() == slider->getAmount())
-		slider->moveToMax();
+		slider->scrollToMax();
 	else // if slider already at 0 - emulate call to sliderMoved()
 		sliderMoved(slider->getAmount());
 }
@@ -363,7 +363,7 @@ void CSplitWindow::setAmountText(std::string text, bool left)
 	}
 
 	setAmount(amount, left);
-	slider->moveTo(rightAmount - rightMin);
+	slider->scrollTo(rightAmount - rightMin);
 }
 
 void CSplitWindow::setAmount(int value, bool left)

+ 3 - 3
client/windows/QuickRecruitmentWindow.cpp

@@ -89,11 +89,11 @@ void QuickRecruitmentWindow::maxAllCards(std::vector<std::shared_ptr<CreaturePur
 		i->slider->setAmount(maxAmount);
 
 		if(i->slider->getValue() != maxAmount)
-			i->slider->moveTo(maxAmount);
+			i->slider->scrollTo(maxAmount);
 		else
 			i->sliderMoved(maxAmount);
 
-		i->slider->moveToMax();
+		i->slider->scrollToMax();
 		allAvailableResources -= (i->creatureOnTheCard->getFullRecruitCost() * maxAmount);
 	}
 	maxButton->block(allAvailableResources == LOCPLINT->cb->getResourceAmount());
@@ -141,7 +141,7 @@ void QuickRecruitmentWindow::updateAllSliders()
 			i->slider->setAmount(i->slider->getValue() + maxAmount);
 		else
 			i->slider->setAmount(i->maxAmount);
-		i->slider->moveTo(i->slider->getValue());
+		i->slider->scrollTo(i->slider->getValue());
 	}
 	totalCost->createItems(LOCPLINT->cb->getResourceAmount() - allAvailableResources);
 	totalCost->set(LOCPLINT->cb->getResourceAmount() - allAvailableResources);

+ 2 - 2
client/windows/settings/GeneralOptionsTab.cpp

@@ -164,10 +164,10 @@ GeneralOptionsTab::GeneralOptionsTab()
 	framerateCheckbox->setSelected(settings["video"]["showfps"].Bool());
 
 	std::shared_ptr<CSlider> musicSlider = widget<CSlider>("musicSlider");
-	musicSlider->moveTo(CCS->musich->getVolume());
+	musicSlider->scrollTo(CCS->musich->getVolume());
 
 	std::shared_ptr<CSlider> volumeSlider = widget<CSlider>("soundVolumeSlider");
-	volumeSlider->moveTo(CCS->soundh->getVolume());
+	volumeSlider->scrollTo(CCS->soundh->getVolume());
 
 	std::shared_ptr<CToggleGroup> creatureGrowthAsDwellingPicker = widget<CToggleGroup>("availableCreaturesAsDwellingPicker");
 	creatureGrowthAsDwellingPicker->setSelected(settings["gameTweaks"]["availableCreaturesAsDwellingLabel"].Bool());