UI: Move scrollviews to top on hide.

This seems like a common scrolling decision.
This commit is contained in:
Unknown W. Brackets 2016-01-23 09:12:56 -08:00
parent 2176920d5d
commit 60f00820f8
3 changed files with 17 additions and 5 deletions

View file

@ -388,7 +388,7 @@ public:
void SetEnabledPtr(bool *enabled) { enabledPtr_ = enabled; enabledMeansDisabled_ = false; }
void SetDisabledPtr(bool *disabled) { enabledPtr_ = disabled; enabledMeansDisabled_ = true; }
void SetVisibility(Visibility visibility) { visibility_ = visibility; }
virtual void SetVisibility(Visibility visibility) { visibility_ = visibility; }
Visibility GetVisibility() const { return visibility_; }
const std::string &Tag() const { return tag_; }

View file

@ -851,6 +851,16 @@ void ScrollView::PersistData(PersistStatus status, std::string anonId, PersistMa
}
}
void ScrollView::SetVisibility(Visibility visibility) {
ViewGroup::SetVisibility(visibility);
if (visibility == V_GONE) {
// Since this is no longer shown, forget the scroll position.
// For example, this happens when switching tabs.
ScrollTo(0.0f);
}
}
void ScrollView::ScrollTo(float newScrollPos) {
scrollTarget_ = newScrollPos;
scrollToTarget_ = true;

View file

@ -246,8 +246,8 @@ public:
// Override so that we can scroll to the active one after moving the focus.
bool SubviewFocused(View *view) override;
void PersistData(PersistStatus status, std::string anonId, PersistMap &storage) override;
void SetVisibility(Visibility visibility) override;
// Quick hack to prevent scrolling to top in some lists
void SetScrollToTop(bool t) { scrollToTopOnSizeChange_ = t; }
@ -316,9 +316,11 @@ public:
}
void SetCurrentTab(int tab) {
tabs_[currentTab_]->SetVisibility(V_GONE);
currentTab_ = tab;
tabs_[currentTab_]->SetVisibility(V_VISIBLE);
if (tab != currentTab_) {
tabs_[currentTab_]->SetVisibility(V_GONE);
currentTab_ = tab;
tabs_[currentTab_]->SetVisibility(V_VISIBLE);
}
tabStrip_->SetSelection(tab);
}