From 734c5c6740c1f76f892602c442042bbb5a1d9f91 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 17 Jul 2023 20:47:44 +0400 Subject: [PATCH] Use a single Ui::UnreadStoryOutlineGradient. --- .../boxes/peer_list_controllers.cpp | 10 ++----- Telegram/SourceFiles/data/data_stories.cpp | 26 +++++++++++++++++++ Telegram/SourceFiles/dialogs/dialogs_row.cpp | 13 +++++----- .../dialogs/ui/dialogs_stories_list.cpp | 9 +++---- .../view/media/history_view_story_mention.cpp | 16 ++++-------- .../ui/effects/outline_segments.cpp | 9 +++++++ .../SourceFiles/ui/effects/outline_segments.h | 2 ++ 7 files changed, 53 insertions(+), 32 deletions(-) diff --git a/Telegram/SourceFiles/boxes/peer_list_controllers.cpp b/Telegram/SourceFiles/boxes/peer_list_controllers.cpp index 10e393b56..88f0fac9a 100644 --- a/Telegram/SourceFiles/boxes/peer_list_controllers.cpp +++ b/Telegram/SourceFiles/boxes/peer_list_controllers.cpp @@ -84,14 +84,8 @@ constexpr auto kSearchPerPage = 50; const auto &st = st::contactsWithStories.item; const auto left = st.photoPosition.x(); const auto top = st.photoPosition.y(); - auto gradient = QLinearGradient( - QPoint(left + st.photoSize, top), - QPoint(left, top + st.photoSize)); - gradient.setStops({ - { 0., st::groupCallLive1->c }, - { 1., st::groupCallMuted1->c }, - }); - return QBrush(gradient); + const auto size = st.photoSize; + return Ui::UnreadStoryOutlineGradient(QRectF(left, top, size, size)); } } // namespace diff --git a/Telegram/SourceFiles/data/data_stories.cpp b/Telegram/SourceFiles/data/data_stories.cpp index 20db4a13a..d5ebe356c 100644 --- a/Telegram/SourceFiles/data/data_stories.cpp +++ b/Telegram/SourceFiles/data/data_stories.cpp @@ -531,11 +531,37 @@ void Stories::loadMore(StorySourcesList list) { } }, [](const MTPDstories_allStoriesNotModified &) { }); + + preloadListsMore(); }).fail([=] { _loadMoreRequestId[index] = 0; }).send(); } +void Stories::preloadListsMore() { + if (_loadMoreRequestId[static_cast(StorySourcesList::NotHidden)] + || _loadMoreRequestId[static_cast(StorySourcesList::Hidden)]) { + return; + } + const auto loading = [&](StorySourcesList list) { + return _loadMoreRequestId[static_cast(list)] != 0; + }; + const auto countLoaded = [&](StorySourcesList list) { + const auto index = static_cast(list); + return _sourcesLoaded[index] || !_sourcesStates[index].isEmpty(); + }; + if (loading(StorySourcesList::NotHidden) + || loading(StorySourcesList::Hidden)) { + return; + } else if (!countLoaded(StorySourcesList::NotHidden)) { + loadMore(StorySourcesList::NotHidden); + } else if (!countLoaded(StorySourcesList::Hidden)) { + loadMore(StorySourcesList::Hidden); + } else if (!archiveCountKnown()) { + archiveLoadMore(); + } +} + void Stories::sendResolveRequests() { if (!_resolveSent.empty()) { return; diff --git a/Telegram/SourceFiles/dialogs/dialogs_row.cpp b/Telegram/SourceFiles/dialogs/dialogs_row.cpp index 102ad6dd5..649fea059 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_row.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_row.cpp @@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/chat/chat_theme.h" // CountAverageColor. #include "ui/color_contrast.h" +#include "ui/effects/outline_segments.h" #include "ui/effects/ripple_animation.h" #include "ui/image/image_prepare.h" #include "ui/text/format_values.h" @@ -372,13 +373,11 @@ void Row::PaintCornerBadgeFrame( } const auto left = st->padding.left(); const auto top = st->padding.top(); - auto gradient = QLinearGradient( - QPoint(left + st->photoSize, top), - QPoint(left, top + st->photoSize)); - gradient.setStops({ - { 0., st::groupCallLive1->c }, - { 1., st::groupCallMuted1->c }, - }); + auto gradient = Ui::UnreadStoryOutlineGradient(QRectF( + st->padding.left(), + st->padding.top(), + st->photoSize, + st->photoSize)); return QBrush(gradient); }; const auto storiesBrush = data->storiesUnread diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.cpp index 6e89cb043..9b3e90027 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.cpp +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_stories_list.cpp @@ -394,11 +394,7 @@ void List::paintEvent(QPaintEvent *e) { } } }; - auto gradient = QLinearGradient(); - gradient.setStops({ - { 0., st::groupCallLive1->c }, - { 1., st::groupCallMuted1->c }, - }); + auto gradient = Ui::UnreadStoryOutlineGradient(); enumerate([&](Single single) { // Name. if (const auto full = single.itemFull) { @@ -495,7 +491,8 @@ void List::paintEvent(QPaintEvent *e) { Ui::PaintOutlineSegments( p, rect, - itemFull->segments); + itemFull->segments, + layout.segmentsSpinProgress); } // Userpic. diff --git a/Telegram/SourceFiles/history/view/media/history_view_story_mention.cpp b/Telegram/SourceFiles/history/view/media/history_view_story_mention.cpp index 8aefb319b..07a469097 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_story_mention.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_story_mention.cpp @@ -28,6 +28,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "window/window_session_controller.h" #include "ui/boxes/confirm_box.h" #include "ui/chat/chat_style.h" +#include "ui/effects/outline_segments.h" #include "ui/text/text_utilities.h" #include "ui/toast/toast.h" #include "ui/painter.h" @@ -124,23 +125,16 @@ void StoryMention::draw( geometry.topLeft() + QPoint(padding, padding), _thumbnail->image(size)); - const auto thumbnail = geometry.marginsRemoved( - QMargins(padding, padding, padding, padding)); + const auto thumbnail = QRectF(geometry.marginsRemoved( + QMargins(padding, padding, padding, padding))); const auto added = 0.5 * (_unread ? st::storyMentionUnreadSkipTwice : st::storyMentionReadSkipTwice); const auto outline = thumbnail.marginsAdded( - QMargins(added, added, added, added)); + QMarginsF(added, added, added, added)); if (_unread && _paletteVersion != style::PaletteVersion()) { _paletteVersion = style::PaletteVersion(); - auto gradient = QLinearGradient( - outline.topRight(), - outline.bottomLeft()); - gradient.setStops({ - { 0., st::groupCallLive1->c }, - { 1., st::groupCallMuted1->c }, - }); - _unreadBrush = QBrush(gradient); + _unreadBrush = QBrush(Ui::UnreadStoryOutlineGradient(outline)); } auto readColor = context.st->msgServiceFg()->c; readColor.setAlphaF(std::min(1. * readColor.alphaF(), kReadOutlineAlpha)); diff --git a/Telegram/SourceFiles/ui/effects/outline_segments.cpp b/Telegram/SourceFiles/ui/effects/outline_segments.cpp index 2482217e7..bb9befb8b 100644 --- a/Telegram/SourceFiles/ui/effects/outline_segments.cpp +++ b/Telegram/SourceFiles/ui/effects/outline_segments.cpp @@ -70,4 +70,13 @@ void PaintOutlineSegments( } } +QLinearGradient UnreadStoryOutlineGradient(QRectF rect) { + auto result = QLinearGradient(rect.topRight(), rect.bottomLeft()); + result.setStops({ + { 0., st::groupCallLive1->c }, + { 1., st::groupCallMuted1->c }, + }); + return result; +} + } // namespace Ui diff --git a/Telegram/SourceFiles/ui/effects/outline_segments.h b/Telegram/SourceFiles/ui/effects/outline_segments.h index fd4835595..c777827a4 100644 --- a/Telegram/SourceFiles/ui/effects/outline_segments.h +++ b/Telegram/SourceFiles/ui/effects/outline_segments.h @@ -20,4 +20,6 @@ void PaintOutlineSegments( const std::vector &segments, float64 fromFullProgress = 1.); +[[nodiscard]] QLinearGradient UnreadStoryOutlineGradient(QRectF rect = {}); + } // namespace Ui