From 11ea5e61cf197e7dd651395f717263779d1a7161 Mon Sep 17 00:00:00 2001 From: John Preston <johnprestonmail@gmail.com> Date: Fri, 24 Nov 2023 22:11:40 +0400 Subject: [PATCH] Show repost header in stories. --- .../stories/media_stories_caption_full_view.cpp | 16 +++++++++++++++- .../media/stories/media_stories_controller.cpp | 7 +++---- .../media/stories/media_stories_controller.h | 2 +- .../media/stories/media_stories_view.cpp | 4 ++-- .../media/stories/media_stories_view.h | 2 +- .../media/view/media_view_overlay_widget.cpp | 14 ++++++++------ 6 files changed, 30 insertions(+), 15 deletions(-) diff --git a/Telegram/SourceFiles/media/stories/media_stories_caption_full_view.cpp b/Telegram/SourceFiles/media/stories/media_stories_caption_full_view.cpp index 4cc32c23d..d15f13368 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_caption_full_view.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_caption_full_view.cpp @@ -15,6 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/elastic_scroll.h" #include "ui/widgets/labels.h" #include "ui/click_handler.h" +#include "ui/painter.h" #include "styles/style_media_view.h" namespace Media::Stories { @@ -100,6 +101,18 @@ CaptionFullView::CaptionFullView(not_null<Controller*> controller) } }, _scroll->lifetime()); + _wrap->paintRequest() | rpl::start_with_next([=] { + if (_controller->repost()) { + auto p = Painter(_wrap.get()); + _controller->drawRepostInfo( + p, + st::mediaviewCaptionPadding.left(), + (_wrap->padding().top() + - _controller->repostCaptionPadding().top()), + _wrap->width()); + } + }, _wrap->lifetime()); + _scroll->show(); _scroll->setOverscrollBg(QColor(0, 0, 0, 0)); _scroll->setOverscrollTypes(Type::Real, Type::Real); @@ -131,7 +144,8 @@ void CaptionFullView::updateGeometry() { return; } const auto lineHeight = st::mediaviewCaptionStyle.font->height; - const auto padding = st::mediaviewCaptionPadding; + const auto padding = st::mediaviewCaptionPadding + + _controller->repostCaptionPadding(); _text->resizeToWidth(_outer.width() - padding.left() - padding.right()); const auto add = padding.top() + padding.bottom(); const auto maxShownHeight = lineHeight * kMaxShownCaptionLines; diff --git a/Telegram/SourceFiles/media/stories/media_stories_controller.cpp b/Telegram/SourceFiles/media/stories/media_stories_controller.cpp index 80beb06a8..939891fa0 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_controller.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_controller.cpp @@ -604,9 +604,8 @@ int Controller::repostSkipTop() const { : 0; } -QRect Controller::captionWithRepostGeometry(QRect caption) const { - return caption.marginsAdded(st::mediaviewCaptionPadding).marginsAdded( - { 0, repostSkipTop(), 0, 0 }); +QMargins Controller::repostCaptionPadding() const { + return { 0, repostSkipTop(), 0, 0 }; } void Controller::drawRepostInfo( @@ -616,7 +615,7 @@ void Controller::drawRepostInfo( int availableWidth) const { Expects(_repostView != nullptr); - _repostView->draw(p, x, y - repostSkipTop(), availableWidth); + _repostView->draw(p, x, y, availableWidth); } void Controller::toggleLiked() { diff --git a/Telegram/SourceFiles/media/stories/media_stories_controller.h b/Telegram/SourceFiles/media/stories/media_stories_controller.h index 073428a05..7916808b2 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_controller.h +++ b/Telegram/SourceFiles/media/stories/media_stories_controller.h @@ -128,7 +128,7 @@ public: void captionClosing(); void captionClosed(); - [[nodiscard]] QRect captionWithRepostGeometry(QRect caption) const; + [[nodiscard]] QMargins repostCaptionPadding() const; void drawRepostInfo(Painter &p, int x, int y, int availableWidth) const; [[nodiscard]] std::shared_ptr<ChatHelpers::Show> uiShow() const; diff --git a/Telegram/SourceFiles/media/stories/media_stories_view.cpp b/Telegram/SourceFiles/media/stories/media_stories_view.cpp index 795304f3c..21eccb5e0 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_view.cpp +++ b/Telegram/SourceFiles/media/stories/media_stories_view.cpp @@ -150,8 +150,8 @@ bool View::repost() const { return _controller->repost(); } -QRect View::captionWithRepostGeometry(QRect caption) const { - return _controller->captionWithRepostGeometry(caption); +QMargins View::repostCaptionPadding() const { + return _controller->repostCaptionPadding(); } void View::drawRepostInfo( diff --git a/Telegram/SourceFiles/media/stories/media_stories_view.h b/Telegram/SourceFiles/media/stories/media_stories_view.h index b37742341..785877413 100644 --- a/Telegram/SourceFiles/media/stories/media_stories_view.h +++ b/Telegram/SourceFiles/media/stories/media_stories_view.h @@ -81,7 +81,7 @@ public: [[nodiscard]] bool repost() const; void showFullCaption(); - [[nodiscard]] QRect captionWithRepostGeometry(QRect caption) const; + [[nodiscard]] QMargins repostCaptionPadding() const; void drawRepostInfo(Painter &p, int x, int y, int availableWidth) const; void updatePlayback(const Player::TrackState &state); diff --git a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp index ea94341b4..341812298 100644 --- a/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp +++ b/Telegram/SourceFiles/media/view/media_view_overlay_widget.cpp @@ -5020,11 +5020,12 @@ void OverlayWidget::paintCaptionContent( QRect outer, QRect clip, float64 opacity) { - auto inner = outer.marginsRemoved(st::mediaviewCaptionPadding); - inner.setTop(inner.top() + inner.height() - _captionRect.height()); + const auto full = outer.marginsRemoved(st::mediaviewCaptionPadding); + const auto inner = full.marginsRemoved( + _stories ? _stories->repostCaptionPadding() : QMargins()); if (_stories) { if (_stories->repost()) { - _stories->drawRepostInfo(p, inner.x(), inner.y(), inner.width()); + _stories->drawRepostInfo(p, full.x(), full.y(), full.width()); } } else { p.setOpacity(opacity); @@ -5073,9 +5074,10 @@ void OverlayWidget::paintCaptionContent( } QRect OverlayWidget::captionGeometry() const { - return (_stories && _stories->repost()) - ? _stories->captionWithRepostGeometry(_captionRect) - : _captionRect.marginsAdded(st::mediaviewCaptionPadding); + return _captionRect.marginsAdded( + st::mediaviewCaptionPadding + ).marginsAdded( + _stories ? _stories->repostCaptionPadding() : QMargins()); } void OverlayWidget::paintGroupThumbsContent(