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 // if we are at the left edge, go left
int page = m_state->currentPage() - 1; int page = m_state->currentPage() - 1;
if (page >= 0) { if (page >= 0) {
m_state->goToPage(page); m_state->goToPage(page, false);
} }
} else if (qAbs(rightPagePosition - x) <= PAGE_CHANGE_THRESHOLD) { } else if (qAbs(rightPagePosition - x) <= PAGE_CHANGE_THRESHOLD) {
@ -604,7 +604,7 @@ void DragState::onChangePageTimerFinished()
// go to page if it exists // go to page if it exists
if (page < pageListModel->rowCount()) { 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(); Q_EMIT pageWidthChanged();
// make sure we snap // make sure we snap
snapPage(); goToPage(m_pageNum, true);
} }
} }
@ -712,29 +712,7 @@ void HomeScreenState::closeSearchWidget()
m_closeSearchWidgetAnim->start(); m_closeSearchWidgetAnim->start();
} }
void HomeScreenState::snapPage() void HomeScreenState::goToPage(int page, bool snap)
{
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)
{ {
if (page < 0) { if (page < 0) {
page = 0; page = 0;
@ -747,7 +725,12 @@ void HomeScreenState::goToPage(int page)
setCurrentPage(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->setEndValue(-page * m_pageWidth);
m_pageAnim->start(); m_pageAnim->start();
} }
@ -914,9 +897,9 @@ void HomeScreenState::swipeEnded()
// m_movingRight refers to finger movement // m_movingRight refers to finger movement
if (m_movingRight || m_pageViewX > 0) { if (m_movingRight || m_pageViewX > 0) {
goToPage(page); goToPage(page, false);
} else { } else {
goToPage(page + 1); goToPage(page + 1, false);
} }
break; break;
} }

View file

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