mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2026-08-06 11:52:58 +00:00
[thanos] Added scrollToY delegate callback for synthetic scroll support.
This commit is contained in:
@@ -4249,6 +4249,9 @@ void HistoryInner::setupThanosEffect() {
|
||||
.scrollArea = [=]() -> not_null<Ui::ScrollArea*> {
|
||||
return _scroll;
|
||||
},
|
||||
.scrollToY = [=](int y) {
|
||||
_widget->synteticScrollToY(y);
|
||||
},
|
||||
.setCollapseGaps = [=](std::vector<CollapseGap> gaps) {
|
||||
setCollapseGaps(std::move(gaps));
|
||||
},
|
||||
|
||||
@@ -338,6 +338,9 @@ protected:
|
||||
void mouseReleaseEvent(QMouseEvent *e) override;
|
||||
void mouseMoveEvent(QMouseEvent *e) override;
|
||||
|
||||
public:
|
||||
void synteticScrollToY(int y);
|
||||
|
||||
private:
|
||||
using TabbedPanel = ChatHelpers::TabbedPanel;
|
||||
using TabbedSelector = ChatHelpers::TabbedSelector;
|
||||
@@ -651,11 +654,6 @@ private:
|
||||
int itemTopForHighlight(not_null<HistoryView::Element*> view) const;
|
||||
void scrollToCurrentVoiceMessage(FullMsgId fromId, FullMsgId toId);
|
||||
|
||||
// Scroll to current y without updating the _lastUserScrolled time.
|
||||
// Used to distinguish between user scrolls and syntetic scrolls.
|
||||
// This one is syntetic.
|
||||
void synteticScrollToY(int y);
|
||||
|
||||
void writeDrafts();
|
||||
void writeDraftTexts();
|
||||
void writeDraftCursors();
|
||||
|
||||
@@ -4411,6 +4411,9 @@ void ListWidget::setupThanosEffect() {
|
||||
.scrollArea = [=]() -> not_null<Ui::ScrollArea*> {
|
||||
return scroll;
|
||||
},
|
||||
.scrollToY = [=](int y) {
|
||||
scroll->scrollToY(y);
|
||||
},
|
||||
.setCollapseGaps = [=](std::vector<Ui::CollapseGap> gaps) {
|
||||
setCollapseGaps(std::move(gaps));
|
||||
},
|
||||
|
||||
@@ -229,7 +229,7 @@ void ThanosEffectController::startCollapseAnimation(
|
||||
const auto aboveViewport = std::max(0, scrollTop - itemTop);
|
||||
const auto scrollAdjust = std::min(height, aboveViewport);
|
||||
if (scrollAdjust > 0) {
|
||||
scroll->scrollToY(scrollTop + scrollAdjust);
|
||||
_delegate.scrollToY(scrollTop + scrollAdjust);
|
||||
}
|
||||
|
||||
auto totalHeight = 0;
|
||||
@@ -266,7 +266,7 @@ void ThanosEffectController::collapseAnimationCallback() {
|
||||
const auto scroll = _delegate.scrollArea();
|
||||
const auto scrollTop = scroll->scrollTop();
|
||||
syncCollapseGapsToHost();
|
||||
scroll->scrollToY(std::max(scrollTop - totalDelta, 0));
|
||||
_delegate.scrollToY(std::max(scrollTop - totalDelta, 0));
|
||||
}
|
||||
|
||||
if (!_collapseAnimation.animating()) {
|
||||
|
||||
@@ -46,6 +46,7 @@ public:
|
||||
Fn<ChatPaintContext(QRect)> preparePaintContext;
|
||||
Fn<QWidget*()> window;
|
||||
Fn<not_null<ScrollArea*>()> scrollArea;
|
||||
Fn<void(int scrollTop)> scrollToY;
|
||||
Fn<void(std::vector<CollapseGap>)> setCollapseGaps;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user