mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Add simple scroll control to Hidden Stories.
This commit is contained in:
parent
c61e1b9139
commit
a73490e5ad
2 changed files with 64 additions and 0 deletions
|
@ -1254,6 +1254,9 @@ void PeerListContent::initDecorateWidget(Ui::RpWidget *widget) {
|
||||||
}) | rpl::start_with_next([=] {
|
}) | rpl::start_with_next([=] {
|
||||||
mouseLeftGeometry();
|
mouseLeftGeometry();
|
||||||
}, widget->lifetime());
|
}, widget->lifetime());
|
||||||
|
widget->heightValue() | rpl::skip(1) | rpl::start_with_next([=] {
|
||||||
|
resizeToWidth(width());
|
||||||
|
}, widget->lifetime());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,6 +63,7 @@ object_ptr<Ui::BoxContent> PrepareContactsBox(
|
||||||
Stories::List *stories = nullptr;
|
Stories::List *stories = nullptr;
|
||||||
QPointer<::Ui::IconButton> toggleSort;
|
QPointer<::Ui::IconButton> toggleSort;
|
||||||
Mode mode = ContactsBoxController::SortMode::Online;
|
Mode mode = ContactsBoxController::SortMode::Online;
|
||||||
|
::Ui::Animations::Simple scrollAnimation;
|
||||||
};
|
};
|
||||||
|
|
||||||
const auto stories = &sessionController->session().data().stories();
|
const auto stories = &sessionController->session().data().stories();
|
||||||
|
@ -119,6 +120,66 @@ object_ptr<Ui::BoxContent> PrepareContactsBox(
|
||||||
stories->loadMore(Data::StorySourcesList::Hidden);
|
stories->loadMore(Data::StorySourcesList::Hidden);
|
||||||
}, raw->lifetime());
|
}, raw->lifetime());
|
||||||
|
|
||||||
|
const auto defaultScrollTop = [=] {
|
||||||
|
return std::max(raw->height() - st::dialogsStories.height, 0);
|
||||||
|
};
|
||||||
|
const auto scrollToDefault = [=](bool verytop) {
|
||||||
|
if (state->scrollAnimation.animating()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (verytop) {
|
||||||
|
//_scroll->verticalScrollBar()->setMinimum(0);
|
||||||
|
}
|
||||||
|
state->scrollAnimation.stop();
|
||||||
|
auto scrollTop = box->scrollTop();
|
||||||
|
const auto scrollTo = verytop ? 0 : defaultScrollTop();
|
||||||
|
if (scrollTop == scrollTo) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const auto maxAnimatedDelta = box->height();
|
||||||
|
if (scrollTo + maxAnimatedDelta < scrollTop) {
|
||||||
|
scrollTop = scrollTo + maxAnimatedDelta;
|
||||||
|
box->scrollToY(scrollTop);
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto scroll = [=] {
|
||||||
|
const auto animated = qRound(
|
||||||
|
state->scrollAnimation.value(scrollTo));
|
||||||
|
const auto animatedDelta = animated - scrollTo;
|
||||||
|
const auto realDelta = box->scrollTop() - scrollTo;
|
||||||
|
if (realDelta * animatedDelta < 0) {
|
||||||
|
// We scrolled manually to the other side of target 'scrollTo'.
|
||||||
|
state->scrollAnimation.stop();
|
||||||
|
} else if (std::abs(realDelta) > std::abs(animatedDelta)) {
|
||||||
|
// We scroll by animation only if it gets us closer to target.
|
||||||
|
box->scrollToY(animated);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
state->scrollAnimation.start(
|
||||||
|
scroll,
|
||||||
|
scrollTop,
|
||||||
|
scrollTo,
|
||||||
|
st::slideDuration,
|
||||||
|
anim::sineInOut);
|
||||||
|
};
|
||||||
|
const auto top = box->scrollTop();
|
||||||
|
raw->toggleExpandedRequests(
|
||||||
|
) | rpl::start_with_next([=](bool expanded) {
|
||||||
|
if (expanded || box->scrollTop() < defaultScrollTop()) {
|
||||||
|
scrollToDefault(expanded);
|
||||||
|
}
|
||||||
|
}, raw->lifetime());
|
||||||
|
|
||||||
|
raw->heightValue(
|
||||||
|
) | rpl::filter([=] {
|
||||||
|
return (box->scrollHeight() > 0)
|
||||||
|
&& (defaultScrollTop() > box->scrollTop());
|
||||||
|
}) | rpl::start_with_next([=] {
|
||||||
|
//refreshForDefaultScroll();
|
||||||
|
box->scrollToY(defaultScrollTop());
|
||||||
|
}, raw->lifetime());
|
||||||
|
|
||||||
stories->incrementPreloadingHiddenSources();
|
stories->incrementPreloadingHiddenSources();
|
||||||
raw->lifetime().add([=] {
|
raw->lifetime().add([=] {
|
||||||
stories->decrementPreloadingHiddenSources();
|
stories->decrementPreloadingHiddenSources();
|
||||||
|
|
Loading…
Add table
Reference in a new issue