From b412241d25882c065168d2623ae0290b413d2d27 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 20 Nov 2025 21:10:19 +0300 Subject: [PATCH] Added minimal threshold to emoji preview for reaction selector. --- .../chat_helpers/chat_helpers.style | 2 ++ .../chat_helpers/emoji_list_widget.cpp | 21 +++++++++++++----- .../chat_helpers/emoji_list_widget.h | 2 +- .../window/window_media_preview.cpp | 22 +++++++------------ .../SourceFiles/window/window_media_preview.h | 4 ++-- 5 files changed, 29 insertions(+), 22 deletions(-) diff --git a/Telegram/SourceFiles/chat_helpers/chat_helpers.style b/Telegram/SourceFiles/chat_helpers/chat_helpers.style index 26dda01c39..813fca972d 100644 --- a/Telegram/SourceFiles/chat_helpers/chat_helpers.style +++ b/Telegram/SourceFiles/chat_helpers/chat_helpers.style @@ -451,6 +451,8 @@ emojiPanSlideDuration: 200; emojiPanArea: size(34px, 32px); emojiPanRadius: 8px; emojiPanReactionsPreviewPadding: margins(10px, 20px, 10px, 20px); +emojiPanEmojiPreviewMinHeight: 160px; +emojiPanEmojiPreviewRadius: 8px + 8px + 4px; defaultTabbedSearchCancel: CrossButton { width: 33px; diff --git a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp index 48e6e0e421..7c3a3a2744 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.cpp @@ -47,6 +47,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "emoji_suggestions_helper.h" #include "main/main_session.h" #include "main/main_session_settings.h" +#include "mainwidget.h" #include "core/core_settings.h" #include "core/application.h" #include "settings/settings_premium.h" @@ -710,12 +711,22 @@ void EmojiListWidget::ensureMediaPreview() { ? controller->sessionController() : nullptr; if (sessionController) { - _mediaPreview.create(_mediaPreviewParent, sessionController); - _mediaPreview->setCustomPadding(st::emojiPanReactionsPreviewPadding); - _mediaPreview->setBackgroundMargins(_mediaPreviewMargins); - _mediaPreview->setCornersSkip(st::emojiPanRadius - st::lineWidth); + const auto tooSmall = _mediaPreviewParent->height() + < st::emojiPanEmojiPreviewMinHeight; + const auto parent = tooSmall + ? sessionController->content() + : _mediaPreviewParent; + _mediaPreview = base::make_unique_q( + parent, + sessionController); + if (!tooSmall) { + _mediaPreview->setCustomPadding( + st::emojiPanReactionsPreviewPadding); + _mediaPreview->setBackgroundMargins(_mediaPreviewMargins); + _mediaPreview->setCustomRadius(st::emojiPanEmojiPreviewRadius); + } _mediaPreview->show(); - _mediaPreview->setGeometry(_mediaPreviewParent->geometry()); + _mediaPreview->setGeometry(parent->geometry()); _mediaPreview->raise(); } } diff --git a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.h b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.h index 7a8f1860be..6402935140 100644 --- a/Telegram/SourceFiles/chat_helpers/emoji_list_widget.h +++ b/Telegram/SourceFiles/chat_helpers/emoji_list_widget.h @@ -487,7 +487,7 @@ private: bool _previewShown = false; - object_ptr _mediaPreview = { nullptr }; + base::unique_qptr _mediaPreview; rpl::event_stream _chosen; rpl::event_stream _customChosen; diff --git a/Telegram/SourceFiles/window/window_media_preview.cpp b/Telegram/SourceFiles/window/window_media_preview.cpp index 86e22f6871..1a1c3e16b3 100644 --- a/Telegram/SourceFiles/window/window_media_preview.cpp +++ b/Telegram/SourceFiles/window/window_media_preview.cpp @@ -20,6 +20,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "main/main_session.h" #include "ui/emoji_config.h" #include "ui/image/image.h" +#include "ui/painter.h" #include "ui/rect.h" #include "ui/ui_utility.h" #include "window/window_session_controller.h" @@ -78,19 +79,12 @@ QRect MediaPreviewWidget::updateArea() const { void MediaPreviewWidget::paintEvent(QPaintEvent *e) { auto p = QPainter(this); - if (_cornersSkip > 0) { + if (_customRadius > 0) { + auto hq = PainterHighQualityEnabler(p); const auto r = rect() - _backgroundMargins; - auto clipRegion = QRegion(r); - const auto skip = _cornersSkip; - clipRegion -= QRect(r.x(), r.y(), skip, skip); - clipRegion -= QRect(r.x() + r.width() - skip, r.y(), skip, skip); - clipRegion -= QRect(r.x(), r.y() + r.height() - skip, skip, skip); - clipRegion -= QRect( - r.x() + r.width() - skip, - r.y() + r.height() - skip, - skip, - skip); - p.setClipRegion(clipRegion); + auto path = QPainterPath(); + path.addRoundedRect(r, _customRadius, _customRadius); + p.setClipPath(path); } const auto r = e->rect(); @@ -310,8 +304,8 @@ void MediaPreviewWidget::setBackgroundMargins(const QMargins &margins) { update(); } -void MediaPreviewWidget::setCornersSkip(int pixels) { - _cornersSkip = pixels; +void MediaPreviewWidget::setCustomRadius(int radius) { + _customRadius = radius; update(); } diff --git a/Telegram/SourceFiles/window/window_media_preview.h b/Telegram/SourceFiles/window/window_media_preview.h index 05f517b3d9..f1b5eeacbc 100644 --- a/Telegram/SourceFiles/window/window_media_preview.h +++ b/Telegram/SourceFiles/window/window_media_preview.h @@ -40,7 +40,7 @@ public: void hidePreview(); void setCustomPadding(const QMargins &padding = QMargins()); void setBackgroundMargins(const QMargins &margins = QMargins()); - void setCornersSkip(int pixels); + void setCustomRadius(int radius); ~MediaPreviewWidget(); @@ -92,7 +92,7 @@ private: mutable QSize _cachedSize; QMargins _customPadding; QMargins _backgroundMargins; - int _cornersSkip = 0; + int _customRadius = 0; };