diff --git a/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.cpp b/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.cpp index f884fe285..2fc888c6f 100644 --- a/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.cpp +++ b/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.cpp @@ -16,6 +16,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/text/text_utilities.h" #include "ui/platform/ui_platform_utility.h" #include "ui/painter.h" +#include "history/view/media/history_view_sticker.h" #include "history/history.h" #include "history/history_item.h" #include "data/data_document.h" @@ -351,6 +352,16 @@ int Selector::countWidth(int desiredWidth, int maxWidth) { return std::max(2 * _skipx + _columns * _size, desiredWidth); } +int Selector::effectPreviewHeight() const { + if (_listMode != ChatHelpers::EmojiListMode::MessageEffects) { + return 0; + } + return st::previewMenu.shadow.extend.top() + + HistoryView::Sticker::MessageEffectSize().height() + + st::effectPreviewSend.height + + st::previewMenu.shadow.extend.bottom(); +} + QMargins Selector::marginsForShadow() const { const auto line = st::lineWidth; return useTransparency() @@ -409,9 +420,33 @@ void Selector::setOpaqueHeightExpand(int expand, Fn apply) { _opaqueApplyHeightExpand = std::move(apply); } -int Selector::minimalHeight() const { +int Selector::minimalHeight(int fullWidth) const { + auto inner = _recentRows * _size; + if (const auto stickers = int(_reactions.stickers.size())) { + // See StickersListWidget. + const auto listWidth = fullWidth + - marginsForShadow().left() + - marginsForShadow().right() + - _st.margin.left() + - _st.margin.right(); + const auto availableWidth = listWidth + - (st::stickerPanPadding - _st.margin.left()); + const auto min = st::stickerEffectWidthMin; + if (const auto columns = availableWidth / min) { + const auto rows = (stickers + columns - 1) / columns; + const auto singleWidth = availableWidth / columns; + const auto singleHeight = singleWidth; + const auto stickersHeight = rows * singleHeight; + inner += _st.header + stickersHeight; + } + } + if (_listMode == ChatHelpers::EmojiListMode::MessageEffects) { + inner += _st.searchMargin.top() + + _st.search.height + + _st.searchMargin.bottom(); + } return _skipy - + std::min(_recentRows * _size, st::emojiPanMinHeight) + + std::min(inner, st::emojiPanMinHeight) + st::emojiPanRadius + _st.padding.bottom(); } @@ -919,7 +954,7 @@ void Selector::expand() { const auto margins = marginsForShadow(); const auto heightLimit = _reactions.customAllowed ? st::emojiPanMaxHeight - : minimalHeight(); + : minimalHeight(width()); const auto opaqueAdded = _useTransparency ? 0 : _opaqueHeightExpand; const auto willBeHeight = std::min( parent.height() - y() + opaqueAdded, @@ -1170,9 +1205,9 @@ bool AdjustMenuGeometryForSelector( menu->setForceWidth(width - added); const auto height = menu->height(); const auto fullTop = margins.top() + categoriesAboutTop + extend.top(); - const auto minimalHeight = margins.top() - + selector->minimalHeight() - + margins.bottom(); + const auto minimalHeight = std::max( + margins.top() + selector->minimalHeight(width) + margins.bottom(), + selector->effectPreviewHeight()); const auto willBeHeightWithoutBottomPadding = fullTop + height - menu->st().shadow.extend.top(); diff --git a/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.h b/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.h index 56f5210b7..107dbfdc7 100644 --- a/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.h +++ b/Telegram/SourceFiles/history/view/reactions/history_view_reactions_selector.h @@ -102,11 +102,12 @@ public: [[nodiscard]] bool useTransparency() const; int countWidth(int desiredWidth, int maxWidth); + [[nodiscard]] int effectPreviewHeight() const; [[nodiscard]] QMargins marginsForShadow() const; [[nodiscard]] int extendTopForCategories() const; [[nodiscard]] int extendTopForCategoriesAndAbout(int width) const; [[nodiscard]] int opaqueExtendTopAbout(int width) const; - [[nodiscard]] int minimalHeight() const; + [[nodiscard]] int minimalHeight(int fullWidth) const; [[nodiscard]] int countAppearedWidth(float64 progress) const; void setSpecialExpandTopSkip(int skip); void initGeometry(int innerTop); diff --git a/Telegram/SourceFiles/menu/menu_send.cpp b/Telegram/SourceFiles/menu/menu_send.cpp index fb03be230..231e7ff23 100644 --- a/Telegram/SourceFiles/menu/menu_send.cpp +++ b/Telegram/SourceFiles/menu/menu_send.cpp @@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/event_filter.h" #include "base/unixtime.h" #include "boxes/abstract_box.h" +#include "boxes/premium_preview_box.h" #include "chat_helpers/compose/compose_show.h" #include "chat_helpers/stickers_emoji_pack.h" #include "core/shortcuts.h" @@ -526,7 +527,7 @@ void EffectPreview::setupSend(Details details) { if (const auto onstack = _close) { onstack(); } - Settings::ShowPremium(window, "message_effect"); + ShowPremiumPreviewBox(window, PremiumFeature::Effects); } return false; });