homescreens/folio: Homescreen page snapping position Bugfix

This fixes an issue where if the device is rotated on the 2nd or further page, the page would not snap immediately back to the right position, but would instead animate.
This commit is contained in:
Micah Stanley 2024-11-07 05:12:47 +00:00 committed by Devin Lin
parent df7aae2b4e
commit f5728e1a21
3 changed files with 13 additions and 31 deletions

View file

@ -590,7 +590,7 @@ void DragState::onChangePageTimerFinished()
// if we are at the left edge, go left
int page = m_state->currentPage() - 1;
if (page >= 0) {
m_state->goToPage(page);
m_state->goToPage(page, false);
}
} else if (qAbs(rightPagePosition - x) <= PAGE_CHANGE_THRESHOLD) {
@ -604,7 +604,7 @@ void DragState::onChangePageTimerFinished()
// go to page if it exists
if (page < pageListModel->rowCount()) {
m_state->goToPage(page);
m_state->goToPage(page, false);
}
}
}

View file

@ -316,7 +316,7 @@ void HomeScreenState::setPageWidth(qreal pageWidth)
Q_EMIT pageWidthChanged();
// make sure we snap
snapPage();
goToPage(m_pageNum, true);
}
}
@ -712,29 +712,7 @@ void HomeScreenState::closeSearchWidget()
m_closeSearchWidgetAnim->start();
}
void HomeScreenState::snapPage()
{
const int numOfPages = m_homeScreen->pageListModel()->rowCount();
const int leftPage = qBound(0.0, (m_pageViewX / m_pageWidth), numOfPages - 1.0);
const qreal leftPagePos = -leftPage * m_pageWidth;
if (leftPage == numOfPages + 1) {
// if we are past the last page
goToPage(leftPage);
} else {
const qreal rightPagePos = leftPagePos - m_pageWidth;
// go to the closer page (right or left)
if (qAbs(rightPagePos - m_pageViewX) < qAbs(leftPagePos - m_pageViewX)) {
goToPage(leftPage + 1);
} else {
goToPage(leftPage);
}
}
}
void HomeScreenState::goToPage(int page)
void HomeScreenState::goToPage(int page, bool snap)
{
if (page < 0) {
page = 0;
@ -747,7 +725,12 @@ void HomeScreenState::goToPage(int page)
setCurrentPage(page);
m_pageAnim->setStartValue(m_pageViewX);
if (snap) {
// Skip the animation and go straight to the intended page
m_pageAnim->setStartValue(-page * m_pageWidth);
} else {
m_pageAnim->setStartValue(m_pageViewX);
}
m_pageAnim->setEndValue(-page * m_pageWidth);
m_pageAnim->start();
}
@ -914,9 +897,9 @@ void HomeScreenState::swipeEnded()
// m_movingRight refers to finger movement
if (m_movingRight || m_pageViewX > 0) {
goToPage(page);
goToPage(page, false);
} else {
goToPage(page + 1);
goToPage(page + 1, false);
}
break;
}

View file

@ -316,8 +316,7 @@ public Q_SLOTS:
void openSearchWidget();
void closeSearchWidget();
void snapPage(); // snaps to closest page
void goToPage(int page);
void goToPage(int page, bool snap);
void goToFolderPage(int page);
void openFolder(qreal delegateX, qreal delegateY, FolioApplicationFolder *folder);