mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-26 11:13:18 +02:00
72 lines
1.7 KiB
C++
72 lines
1.7 KiB
C++
/*
|
|
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
|
|
*/
|
|
#include "history/history_view_top_toast.h"
|
|
|
|
#include "ui/toast/toast.h"
|
|
#include "core/ui_integration.h"
|
|
#include "styles/style_chat.h"
|
|
|
|
namespace HistoryView {
|
|
|
|
namespace {
|
|
|
|
[[nodiscard]] crl::time CountToastDuration(const TextWithEntities &text) {
|
|
return std::clamp(
|
|
crl::time(1000) * int(text.text.size()) / 14,
|
|
crl::time(1000) * 5,
|
|
crl::time(1000) * 8);
|
|
}
|
|
|
|
} // namespace
|
|
|
|
InfoTooltip::InfoTooltip() = default;
|
|
|
|
void InfoTooltip::show(
|
|
not_null<QWidget*> parent,
|
|
not_null<Main::Session*> session,
|
|
const TextWithEntities &text,
|
|
Fn<void()> hiddenCallback) {
|
|
const auto context = [=](not_null<QWidget*> toast) {
|
|
return Core::MarkedTextContext{
|
|
.session = session,
|
|
.customEmojiRepaint = [=] { toast->update(); },
|
|
};
|
|
};
|
|
hide(anim::type::normal);
|
|
_topToast = Ui::Toast::Show(parent, Ui::Toast::Config{
|
|
.text = text,
|
|
.st = &st::historyInfoToast,
|
|
.duration = CountToastDuration(text),
|
|
.multiline = true,
|
|
.dark = true,
|
|
.slideSide = RectPart::Top,
|
|
.textContext = context,
|
|
});
|
|
if (const auto strong = _topToast.get()) {
|
|
if (hiddenCallback) {
|
|
QObject::connect(
|
|
strong->widget(),
|
|
&QObject::destroyed,
|
|
hiddenCallback);
|
|
}
|
|
} else if (hiddenCallback) {
|
|
hiddenCallback();
|
|
}
|
|
}
|
|
|
|
void InfoTooltip::hide(anim::type animated) {
|
|
if (const auto strong = _topToast.get()) {
|
|
if (animated == anim::type::normal) {
|
|
strong->hideAnimated();
|
|
} else {
|
|
strong->hide();
|
|
}
|
|
}
|
|
}
|
|
|
|
} // namespace HistoryView
|