From 91cc5f5284de4ccde0d63d42f7a95f58fc97a2cc Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 13 Jul 2023 11:15:37 +0400 Subject: [PATCH] Fix small stories thumbnails in profile / my stories. --- .../SourceFiles/boxes/peer_list_controllers.cpp | 2 -- Telegram/SourceFiles/dialogs/dialogs_widget.cpp | 1 + .../dialogs/ui/dialogs_stories_list.cpp | 17 +++++++++++++---- .../dialogs/ui/dialogs_stories_list.h | 8 ++++++-- Telegram/SourceFiles/info/info_top_bar.cpp | 5 ++--- .../info/stories/info_stories_inner_widget.cpp | 16 +++++++--------- 6 files changed, 29 insertions(+), 20 deletions(-) diff --git a/Telegram/SourceFiles/boxes/peer_list_controllers.cpp b/Telegram/SourceFiles/boxes/peer_list_controllers.cpp index 2019f0c50..18d2d514f 100644 --- a/Telegram/SourceFiles/boxes/peer_list_controllers.cpp +++ b/Telegram/SourceFiles/boxes/peer_list_controllers.cpp @@ -104,8 +104,6 @@ object_ptr PrepareContactsBox( controller->setStoriesShown(true); const auto raw = controller.get(); auto init = [=](not_null box) { - using namespace Dialogs::Stories; - struct State { QPointer<::Ui::IconButton> toggleSort; rpl::variable mode = Mode::Online; diff --git a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp index a994d4571..957589a90 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_widget.cpp @@ -2697,6 +2697,7 @@ void Widget::updateControlsGeometry() { if (_stories) { _stories->setLayoutConstraints( { filterLeft + filterWidth, filterTop + added }, + style::al_right, { 0, expandedStoriesTop, barw, st::dialogsStoriesFull.height }); } if (_forumTopShadow) { diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.cpp index 3b3917807..e7c0a6bfb 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.cpp +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.cpp @@ -661,8 +661,12 @@ bool List::checkForFullState() { return true; } -void List::setLayoutConstraints(QPoint topRightSmall, QRect geometryFull) { - _topRightSmall = topRightSmall; +void List::setLayoutConstraints( + QPoint positionSmall, + style::align alignSmall, + QRect geometryFull) { + _positionSmall = positionSmall; + _alignSmall = alignSmall; _geometryFull = geometryFull; updateGeometry(); update(); @@ -690,9 +694,14 @@ QRect List::countSmallGeometry() const { + st.photo + (count - 1) * st.shift + st.photoLeft + st.left; + const auto left = ((_alignSmall & Qt::AlignRight) == Qt::AlignRight) + ? (_positionSmall.x() - width) + : ((_alignSmall & Qt::AlignCenter) == Qt::AlignCenter) + ? (_positionSmall.x() - (width / 2)) + : _positionSmall.x(); return QRect( - _topRightSmall.x() - width, - _topRightSmall.y(), + left, + _positionSmall.y(), width, st.photoTop + st.photo + st.photoTop); } diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.h b/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.h index 7e0028822..85d7fd5e8 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.h +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.h @@ -66,7 +66,10 @@ public: rpl::producer content); void setExpandedHeight(int height, bool momentum = false); - void setLayoutConstraints(QPoint topRightSmall, QRect geometryFull); + void setLayoutConstraints( + QPoint positionSmall, + style::align alignSmall, + QRect geometryFull = QRect()); [[nodiscard]] bool empty() const { return _empty.current(); @@ -137,7 +140,8 @@ private: rpl::event_stream<> _entered; rpl::event_stream<> _loadMoreRequests; - QPoint _topRightSmall; + QPoint _positionSmall; + style::align _alignSmall = {}; QRect _geometryFull; QRect _changingGeometryFrom; State _state = State::Small; diff --git a/Telegram/SourceFiles/info/info_top_bar.cpp b/Telegram/SourceFiles/info/info_top_bar.cpp index 81f4dd685..7dcb56ab3 100644 --- a/Telegram/SourceFiles/info/info_top_bar.cpp +++ b/Telegram/SourceFiles/info/info_top_bar.cpp @@ -389,11 +389,10 @@ void TopBar::updateStoriesGeometry(int newWidth) { } const auto left = (_back ? _st.back.width : _st.titlePosition.x()) - st::dialogsStories.left - st::dialogsStories.photoLeft; - const auto top = st::dialogsStories.height - - st::dialogsStoriesFull.height - + (_st.height - st::dialogsStories.height) / 2; + const auto top = (_st.height - st::dialogsStories.height) / 2; _stories->resizeToWidth(newWidth - left - right); _stories->moveToLeft(left, top, newWidth); + _stories->entity()->setLayoutConstraints({ 0, 0 }, style::al_left); } void TopBar::paintEvent(QPaintEvent *e) { diff --git a/Telegram/SourceFiles/info/stories/info_stories_inner_widget.cpp b/Telegram/SourceFiles/info/stories/info_stories_inner_widget.cpp index 8abc39d8d..49bb41022 100644 --- a/Telegram/SourceFiles/info/stories/info_stories_inner_widget.cpp +++ b/Telegram/SourceFiles/info/stories/info_stories_inner_widget.cpp @@ -179,19 +179,17 @@ void InnerWidget::createButtons() { if (content.elements.empty()) { return; } - const auto width = st::defaultDialogRow.padding.left() - + st::defaultDialogRow.photoSize - + st::defaultDialogRow.padding.left(); const auto &small = st::dialogsStories; const auto count = int(content.elements.size()); const auto smallWidth = small.photo + (count - 1) * small.shift; const auto real = smallWidth; - const auto top = st::dialogsStories.height - - st::dialogsStoriesFull.height - + (size.height() - st::dialogsStories.height) / 2; - const auto right = st::settingsButtonRightSkip - (width - real) / 2; - thumbs->resizeToWidth(width); - thumbs->moveToRight(right, top); + const auto height = small.photo + 2 * small.photoTop; + const auto top = (size.height() - height) / 2; + const auto right = st::settingsButtonRightSkip + - small.left + - small.photoLeft; + const auto left = size.width() - right; + thumbs->setLayoutConstraints({ left, top }, style::al_right); }, thumbs->lifetime()); thumbs->setAttribute(Qt::WA_TransparentForMouseEvents); recent->addClickHandler([=] {