Added minimal threshold to emoji preview for reaction selector.

This commit is contained in:
23rd
2025-11-20 21:10:19 +03:00
committed by John Preston
parent f9883afd61
commit b412241d25
5 changed files with 29 additions and 22 deletions
@@ -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;
@@ -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<Window::MediaPreviewWidget>(
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();
}
}
@@ -487,7 +487,7 @@ private:
bool _previewShown = false;
object_ptr<Window::MediaPreviewWidget> _mediaPreview = { nullptr };
base::unique_qptr<Window::MediaPreviewWidget> _mediaPreview;
rpl::event_stream<EmojiChosen> _chosen;
rpl::event_stream<FileChosen> _customChosen;
@@ -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();
}
@@ -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;
};