1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
/*
* 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);
}
|