mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-04 09:42:40 +02:00
62 lines
1.7 KiB
C++
62 lines
1.7 KiB
C++
/*
|
|
* Scrollable.h, 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
|
|
*
|
|
*/
|
|
|
|
#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 wheel action, 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 gesture(bool on, const Point & initialPosition, const Point & finalPosition) override;
|
|
void wheelScrolled(int distance) override;
|
|
void gesturePanning(const Point & initialPosition, const Point & currentPosition, const Point & lastUpdateDistance) 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);
|
|
};
|