From e349fa248aaaddcf625a741796b1d2e8d8ec0cd3 Mon Sep 17 00:00:00 2001 From: Andrew Lanzone Date: Sun, 6 Jul 2025 22:39:13 -0700 Subject: [PATCH] Tweak how scroll offsets are calculated for smoother scrolling --- apps/openmw/mwgui/dialogue.cpp | 21 ++++++++------------- apps/openmw/mwgui/journalwindow.cpp | 13 ++++--------- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/apps/openmw/mwgui/dialogue.cpp b/apps/openmw/mwgui/dialogue.cpp index 0b6648be6c..0d694a6c4d 100644 --- a/apps/openmw/mwgui/dialogue.cpp +++ b/apps/openmw/mwgui/dialogue.cpp @@ -944,21 +944,16 @@ namespace MWGui if (focused) { // Scroll the side bar to keep the active item in view - if (index <= 6) - mTopicsList->setViewOffset(0); - else + int offset = 0; + for (int i = 6; i < static_cast(index); i++) { - int offset = 0; - for (int i = 0; i < static_cast(index) - 6; i++) - { - const std::string& keyword = mTopicsList->getItemNameAt(i); - if (keyword.empty()) - offset += 18 + sVerticalPadding * 2; - else - offset += mTopicsList->getItemWidget(keyword)->getHeight() + sVerticalPadding * 2; - } - mTopicsList->setViewOffset(-offset); + const std::string& keyword = mTopicsList->getItemNameAt(i); + if (keyword.empty()) + offset += 18 + sVerticalPadding * 2; + else + offset += mTopicsList->getItemWidget(keyword)->getHeight() + sVerticalPadding * 2; } + mTopicsList->setViewOffset(-offset); } } diff --git a/apps/openmw/mwgui/journalwindow.cpp b/apps/openmw/mwgui/journalwindow.cpp index 8302f4faea..e956696221 100644 --- a/apps/openmw/mwgui/journalwindow.cpp +++ b/apps/openmw/mwgui/journalwindow.cpp @@ -971,15 +971,10 @@ namespace // Scroll the list to keep the active item in view Gui::MWList* list = getWidget(mQuestMode ? QuestsList : TopicsList); - if (mSelectedQuest <= 3) - list->setViewOffset(0); - else - { - int offset = 0; - for (int i = 0; i < static_cast(mSelectedQuest) - 3; i++) - offset += mButtons[i]->getHeight() + 3; - list->setViewOffset(-offset); - } + int offset = 0; + for (int i = 3; i < static_cast(mSelectedQuest); i++) + offset += mButtons[i]->getHeight(); + list->setViewOffset(-offset); } } };