1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-06-21 00:19:29 +02:00
Files
.github
AI
CI
Mods
android
client
adventureMap
battle
eventsSDL
gui
icons
ios
lobby
mainmenu
mapView
render
renderSDL
widgets
Buttons.cpp
Buttons.h
CAltar.cpp
CAltar.h
CArtifactHolder.cpp
CArtifactHolder.h
CArtifactsOfHeroAltar.cpp
CArtifactsOfHeroAltar.h
CArtifactsOfHeroBackpack.cpp
CArtifactsOfHeroBackpack.h
CArtifactsOfHeroBase.cpp
CArtifactsOfHeroBase.h
CArtifactsOfHeroKingdom.cpp
CArtifactsOfHeroKingdom.h
CArtifactsOfHeroMain.cpp
CArtifactsOfHeroMain.h
CArtifactsOfHeroMarket.cpp
CArtifactsOfHeroMarket.h
CComponent.cpp
CComponent.h
CExchangeController.cpp
CExchangeController.h
CGarrisonInt.cpp
CGarrisonInt.h
CTradeBase.cpp
CTradeBase.h
CWindowWithArtifacts.cpp
CWindowWithArtifacts.h
ComboBox.cpp
ComboBox.h
CreatureCostBox.cpp
CreatureCostBox.h
Images.cpp
Images.h
MiscWidgets.cpp
MiscWidgets.h
ObjectLists.cpp
ObjectLists.h
RadialMenu.cpp
RadialMenu.h
Scrollable.cpp
Scrollable.h
Slider.cpp
Slider.h
TextControls.cpp
TextControls.h
windows
CFocusableHelper.cpp
CFocusableHelper.h
CGameInfo.cpp
CGameInfo.h
CMT.cpp
CMT.h
CMakeLists.txt
CMusicHandler.cpp
CMusicHandler.h
CPlayerInterface.cpp
CPlayerInterface.h
CServerHandler.cpp
CServerHandler.h
CVideoHandler.cpp
CVideoHandler.h
Client.cpp
Client.h
ClientCommandManager.cpp
ClientCommandManager.h
ClientNetPackVisitors.h
HeroMovementController.cpp
HeroMovementController.h
LobbyClientNetPackVisitors.h
NetPacksClient.cpp
NetPacksLobbyClient.cpp
PlayerLocalState.cpp
PlayerLocalState.h
StdInc.cpp
StdInc.h
VCMI_client.cbp
VCMI_client.rc
VCMI_client.vcxproj
VCMI_client.vcxproj.filters
resource.h
vcmi.ico
cmake_modules
config
debian
docs
include
ios
launcher
lib
lib_server
mapeditor
osx
rpm
scripting
scripts
server
test
win
xcode
.gitattributes
.gitignore
.gitmodules
.travis.yml
AUTHORS.h
CCallback.cpp
CCallback.h
CMakeLists.txt
CMakePresets.json
ChangeLog.md
Global.h
VCMI_VS15.sln
VCMI_global.props
VCMI_global_debug.props
VCMI_global_release.props
VCMI_global_user.props
Version.cpp.in
Version.h
conanfile.py
fuzzylite.pc.in
license.txt
vcmi.workspace
vcmibuilder
vcmi/client/widgets/Scrollable.cpp

95 lines
2.0 KiB
C++
Raw Normal View History

2023-05-30 17:31:45 +03:00
/*
* Scrollable.cpp, part of VCMI engine
*
* Authors: listed in file AUTHORS in main folder
*
* License: GNU General Public License v2.0 or later
* Full text of license available in license.txt file, in main folder
*
*/
#include "StdInc.h"
#include "Scrollable.h"
Scrollable::Scrollable(int used, Point position, Orientation orientation)
: CIntObject(used | WHEEL | GESTURE, position)
, scrollStep(1)
, panningDistanceSingle(32)
, panningDistanceAccumulated(0)
, orientation(orientation)
{
}
void Scrollable::gesture(bool on, const Point & initialPosition, const Point & finalPosition)
{
panningDistanceAccumulated = 0;
}
void Scrollable::wheelScrolled(int distance)
{
if (orientation == Orientation::HORIZONTAL)
scrollBy(distance * scrollStep);
else
scrollBy(-distance * scrollStep);
}
void Scrollable::gesturePanning(const Point & initialPosition, const Point & currentPosition, const Point & lastUpdateDistance)
{
if (orientation == Orientation::HORIZONTAL)
panningDistanceAccumulated += -lastUpdateDistance.x;
else
panningDistanceAccumulated += lastUpdateDistance.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);
else
removeUsedEvents(WHEEL | GESTURE);
}