/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once namespace Ui { class ElasticScroll; class RpWidget; class ScrollArea; } // namespace Ui namespace Ui::Controls { struct SwipeContextData; struct SwipeBackResult; struct SwipeHandlerFinishData { Fn callback; int64 msgBareId = 0; float64 speedRatio = 1.0; crl::time reachRatioDuration = 0; bool keepRatioWithinRange = false; bool provideReachOutRatio = false; }; using Scroll = std::variant< v::null_t, not_null, not_null>; struct SwipeHandlerArgs { not_null widget; Scroll scroll; Fn update; Fn init; rpl::producer dontStart = nullptr; rpl::lifetime *onLifetime = nullptr; }; void SetupSwipeHandler(SwipeHandlerArgs &&args); [[nodiscard]] SwipeBackResult SetupSwipeBack( not_null widget, Fn()> colors, bool mirrored = false, bool iconMirrored = false); [[nodiscard]] SwipeHandlerFinishData DefaultSwipeBackHandlerFinishData( Fn callback); } // namespace Ui::Controls