From ffb2c5093d70440a0c6a4d6e25beff8dc997a6bf Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 24 Jan 2023 15:09:11 +0400 Subject: [PATCH] Use StickersListFooter for GIFs section. --- .../chat_helpers/chat_helpers.style | 2 - .../chat_helpers/gifs_list_widget.cpp | 180 +++++++++--------- .../chat_helpers/gifs_list_widget.h | 16 +- .../chat_helpers/stickers_emoji_pack.cpp | 1 + .../chat_helpers/stickers_emoji_pack.h | 5 + .../chat_helpers/stickers_list_footer.cpp | 55 ++++++ .../chat_helpers/stickers_list_footer.h | 11 ++ 7 files changed, 177 insertions(+), 93 deletions(-) diff --git a/Telegram/SourceFiles/chat_helpers/chat_helpers.style b/Telegram/SourceFiles/chat_helpers/chat_helpers.style index 7edb22d7a..f2e6ae5c4 100644 --- a/Telegram/SourceFiles/chat_helpers/chat_helpers.style +++ b/Telegram/SourceFiles/chat_helpers/chat_helpers.style @@ -353,8 +353,6 @@ gifsSearchField: defaultMultiSelectSearchField; gifsSearchFieldPosition: point(42px, 7px); gifsSearchCancel: defaultMultiSelectSearchCancel; gifsSearchCancelPosition: point(1px, 1px); -gifsSearchIcon: boxFieldSearchIcon; -gifsSearchIconPosition: point(6px, 7px); emojiSuggestionsDropdown: InnerDropdown(defaultInnerDropdown) { scrollMargin: margins(0px, emojiColorsPadding, 0px, emojiColorsPadding); diff --git a/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp b/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp index 19bc50c75..2d3f87f94 100644 --- a/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp +++ b/Telegram/SourceFiles/chat_helpers/gifs_list_widget.cpp @@ -10,6 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "api/api_toggling_media.h" // Api::ToggleSavedGif #include "base/const_string.h" #include "base/qt/qt_key_modifiers.h" +#include "chat_helpers/stickers_list_footer.h" #include "data/data_photo.h" #include "data/data_document.h" #include "data/data_emoji_statuses.h" @@ -83,94 +84,6 @@ void AddGifAction( }, saved ? &st::menuIconDelete : &st::menuIconGif); } -class GifsListWidget::Footer : public TabbedSelector::InnerFooter { -public: - Footer(not_null parent); - - void stealFocus(); - void returnFocus(); - void setLoading(bool loading) { - _cancel->setLoadingAnimation(loading); - } - -protected: - void paintEvent(QPaintEvent *e) override; - void resizeEvent(QResizeEvent *e) override; - - void processPanelHideFinished() override; - -private: - not_null _pan; - - object_ptr _field; - object_ptr _cancel; - - QPointer _focusTakenFrom; - -}; - -GifsListWidget::Footer::Footer(not_null parent) -: InnerFooter(parent, st::defaultEmojiPan) -, _pan(parent) -, _field(this, st::gifsSearchField, tr::lng_gifs_search()) -, _cancel(this, st::gifsSearchCancel) { - connect(_field, &Ui::InputField::submitted, [=] { - _pan->sendInlineRequest(); - }); - connect(_field, &Ui::InputField::cancelled, [=] { - if (_field->getLastText().isEmpty()) { - _pan->cancelled(); - } else { - _field->setText(QString()); - } - }); - connect(_field, &Ui::InputField::changed, [=] { - _cancel->toggle( - !_field->getLastText().isEmpty(), - anim::type::normal); - _pan->searchForGifs(_field->getLastText()); - }); - _cancel->setClickedCallback([=] { - _field->setText(QString()); - }); -} - -void GifsListWidget::Footer::stealFocus() { - if (!_focusTakenFrom) { - _focusTakenFrom = QApplication::focusWidget(); - } - _field->setFocus(); -} - -void GifsListWidget::Footer::returnFocus() { - if (_focusTakenFrom) { - if (_field->hasFocus()) { - _focusTakenFrom->setFocus(); - } - _focusTakenFrom = nullptr; - } -} - -void GifsListWidget::Footer::paintEvent(QPaintEvent *e) { - Painter p(this); - st::gifsSearchIcon.paint(p, st::gifsSearchIconPosition.x(), st::gifsSearchIconPosition.y(), width()); -} - -void GifsListWidget::Footer::resizeEvent(QResizeEvent *e) { - auto fieldWidth = width() - - st::gifsSearchFieldPosition.x() - - st::gifsSearchCancelPosition.x() - - st::gifsSearchCancel.width; - _field->resizeToWidth(fieldWidth); - _field->moveToLeft(st::gifsSearchFieldPosition.x(), st::gifsSearchFieldPosition.y()); - _cancel->moveToRight(st::gifsSearchCancelPosition.x(), st::gifsSearchCancelPosition.y()); -} - -void GifsListWidget::Footer::processPanelHideFinished() { - // Preserve panel state through visibility toggles. - //_field->setText(QString()); -} - GifsListWidget::GifsListWidget( QWidget *parent, not_null controller, @@ -241,8 +154,89 @@ auto GifsListWidget::inlineResultChosen() const object_ptr GifsListWidget::createFooter() { Expects(_footer == nullptr); - auto result = object_ptr