diff --git a/Common/UI/ViewGroup.cpp b/Common/UI/ViewGroup.cpp index f73816c229..669a9200d9 100644 --- a/Common/UI/ViewGroup.cpp +++ b/Common/UI/ViewGroup.cpp @@ -1017,17 +1017,13 @@ void ScrollView::PersistData(PersistStatus status, std::string anonId, PersistMa void ScrollView::SetVisibility(Visibility visibility) { ViewGroup::SetVisibility(visibility); - if (visibility == V_GONE && !rememberPosition_) { + if (visibility == V_GONE && !rememberPos_) { // Since this is no longer shown, forget the scroll position. // For example, this happens when switching tabs. ScrollTo(0.0f); } } -float ScrollView::GetScrollPosition() { - return scrollPos_; -} - void ScrollView::ScrollTo(float newScrollPos) { scrollTarget_ = newScrollPos; scrollToTarget_ = true; @@ -1141,6 +1137,8 @@ void ScrollView::Update() { if (oldPos != scrollPos_) orientation_ == ORIENT_HORIZONTAL ? lastScrollPosX = scrollPos_ : lastScrollPosY = scrollPos_; + if (rememberPos_) + *rememberPos_ = scrollPos_; } void AnchorLayout::Measure(const UIContext &dc, MeasureSpec horiz, MeasureSpec vert) { diff --git a/Common/UI/ViewGroup.h b/Common/UI/ViewGroup.h index 10ca2fbc09..aefad04c1b 100644 --- a/Common/UI/ViewGroup.h +++ b/Common/UI/ViewGroup.h @@ -262,8 +262,8 @@ public: // A scrollview usually contains just a single child - a linear layout or similar. class ScrollView : public ViewGroup { public: - ScrollView(Orientation orientation, LayoutParams *layoutParams = 0, bool rememberPosition = false) - : ViewGroup(layoutParams), orientation_(orientation), rememberPosition_(rememberPosition) {} + ScrollView(Orientation orientation, LayoutParams *layoutParams = 0) + : ViewGroup(layoutParams), orientation_(orientation) {} ~ScrollView(); void Measure(const UIContext &dc, MeasureSpec horiz, MeasureSpec vert) override; @@ -277,10 +277,14 @@ public: void ScrollTo(float newScrollPos); void ScrollToBottom(); void ScrollRelative(float distance); - float GetScrollPosition(); bool CanScroll() const; void Update() override; + void RememberPosition(float *pos) { + rememberPos_ = pos; + ScrollTo(*pos); + } + // Get the last moved scroll view position static void GetLastScrollPosition(float &x, float &y); @@ -309,7 +313,7 @@ private: float pull_ = 0.0f; float lastViewSize_ = 0.0f; bool scrollToTopOnSizeChange_ = false; - bool rememberPosition_; + float *rememberPos_ = nullptr; static float lastScrollPosX; static float lastScrollPosY; diff --git a/UI/CwCheatScreen.cpp b/UI/CwCheatScreen.cpp index b5fde7d5f6..ba02587609 100644 --- a/UI/CwCheatScreen.cpp +++ b/UI/CwCheatScreen.cpp @@ -97,7 +97,7 @@ void CwCheatScreen::CreateViews() { rightScroll_ = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, FILL_PARENT, 0.5f)); rightScroll_->SetTag("CwCheats"); rightScroll_->SetScrollToTop(false); - rightScroll_->ScrollTo(g_Config.fCwCheatScrollPosition); + rightScroll_->RememberPosition(&g_Config.fCwCheatScrollPosition); LinearLayout *rightColumn = new LinearLayoutList(ORIENT_VERTICAL, new LinearLayoutParams(200, FILL_PARENT, actionMenuMargins)); rightScroll_->Add(rightColumn); @@ -140,7 +140,6 @@ void CwCheatScreen::onFinish(DialogResult result) { if (MIPSComp::jit) { MIPSComp::jit->ClearCache(); } - g_Config.fCwCheatScrollPosition = rightScroll_->GetScrollPosition(); } UI::EventReturn CwCheatScreen::OnEnableAll(UI::EventParams ¶ms) { diff --git a/UI/MainScreen.cpp b/UI/MainScreen.cpp index 1baa87abb1..43d7c8c77d 100644 --- a/UI/MainScreen.cpp +++ b/UI/MainScreen.cpp @@ -1007,7 +1007,7 @@ void MainScreen::CreateViews() { Button *focusButton = nullptr; if (hasStorageAccess) { - scrollAllGames_ = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT), true); + scrollAllGames_ = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT)); scrollAllGames_->SetTag("MainScreenAllGames"); ScrollView *scrollHomebrew = new ScrollView(ORIENT_VERTICAL, new LinearLayoutParams(FILL_PARENT, WRAP_CONTENT)); scrollHomebrew->SetTag("MainScreenHomebrew"); @@ -1026,7 +1026,7 @@ void MainScreen::CreateViews() { tabHolder_->AddTab(mm->T("Games"), scrollAllGames_); tabHolder_->AddTab(mm->T("Homebrew & Demos"), scrollHomebrew); - scrollAllGames_->ScrollTo(g_Config.fGameListScrollPosition); + scrollAllGames_->RememberPosition(&g_Config.fGameListScrollPosition); tabAllGames->OnChoice.Handle(this, &MainScreen::OnGameSelectedInstant); tabHomebrew->OnChoice.Handle(this, &MainScreen::OnGameSelectedInstant); @@ -1248,9 +1248,6 @@ void MainScreen::update() { RecreateViews(); lastVertical_ = vertical; } - if (scrollAllGames_) { - g_Config.fGameListScrollPosition = scrollAllGames_->GetScrollPosition(); - } } bool MainScreen::UseVerticalLayout() const {