Merge of PR#12

This commit is contained in:
Bertrand Songis
2021-04-16 17:34:38 +02:00
parent a65c75859f
commit 2cc3c41505
2 changed files with 27 additions and 7 deletions
+25 -7
View File
@@ -338,6 +338,27 @@ void Window::paintChildren(BitmapBuffer * dc, std::list<Window *>::iterator it)
}
}
#if defined(HARDWARE_TOUCH)
coord_t Window::getSnapStep(coord_t relativeScrollPosition, coord_t pageSize)
{
coord_t result = 0;
if (relativeScrollPosition > pageSize / 2) {
// closer to next page
result = (pageSize - relativeScrollPosition);
}
else {
// closer to previous page
result = (0 - relativeScrollPosition);
}
// do not get too slow
if (abs(result) > 32)
result /= 2;
return result;
}
#endif
void Window::checkEvents()
{
auto copy = children;
@@ -361,18 +382,15 @@ void Window::checkEvents()
#if defined(HARDWARE_TOUCH)
if (touchState.event != TE_SLIDE && touchState.lastDeltaX == 0 && touchState.lastDeltaY == 0) {
if (pageWidth) {
coord_t relativeScrollPosition = scrollPositionX % pageWidth;
coord_t relativeScrollPosition = getScrollPositionX() % pageWidth;
if (relativeScrollPosition) {
setScrollPositionX(getScrollPositionX() - relativeScrollPosition + (relativeScrollPosition > pageWidth / 2 ? pageWidth : 0));
setScrollPositionX(getScrollPositionX() + getSnapStep(relativeScrollPosition, pageWidth));
}
}
if (pageHeight) {
coord_t relativeScrollPosition = scrollPositionY % pageHeight;
coord_t relativeScrollPosition = getScrollPositionY() % pageHeight;
if (relativeScrollPosition) {
if (relativeScrollPosition > 0)
setScrollPositionY(getScrollPositionY() - relativeScrollPosition + (relativeScrollPosition > pageHeight / 2 ? pageHeight : 0));
else
setScrollPositionY(getScrollPositionY() - relativeScrollPosition - (relativeScrollPosition > -pageHeight / 2 ? 0 : pageHeight));
setScrollPositionY(getScrollPositionY() + getSnapStep(relativeScrollPosition, pageHeight));
}
}
}
+2
View File
@@ -427,6 +427,8 @@ class Window
}
#if defined(HARDWARE_TOUCH)
static coord_t getSnapStep(coord_t relativeScrollPosition, coord_t pageSize);
virtual bool onTouchStart(coord_t x, coord_t y);
virtual bool onTouchEnd(coord_t x, coord_t y);