From f5728e1a21a718b78dbd4194ce03c1e9155c8687 Mon Sep 17 00:00:00 2001 From: Micah Stanley Date: Thu, 7 Nov 2024 05:12:47 +0000 Subject: [PATCH] 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. --- containments/homescreens/folio/dragstate.cpp | 4 +- .../homescreens/folio/homescreenstate.cpp | 37 +++++-------------- .../homescreens/folio/homescreenstate.h | 3 +- 3 files changed, 13 insertions(+), 31 deletions(-) diff --git a/containments/homescreens/folio/dragstate.cpp b/containments/homescreens/folio/dragstate.cpp index 350cc36d..2bd4af38 100644 --- a/containments/homescreens/folio/dragstate.cpp +++ b/containments/homescreens/folio/dragstate.cpp @@ -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); } } } diff --git a/containments/homescreens/folio/homescreenstate.cpp b/containments/homescreens/folio/homescreenstate.cpp index 0a131420..50b9cee8 100644 --- a/containments/homescreens/folio/homescreenstate.cpp +++ b/containments/homescreens/folio/homescreenstate.cpp @@ -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; } diff --git a/containments/homescreens/folio/homescreenstate.h b/containments/homescreens/folio/homescreenstate.h index 5c5ae93c..2ce16331 100644 --- a/containments/homescreens/folio/homescreenstate.h +++ b/containments/homescreens/folio/homescreenstate.h @@ -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);