Use a single Ui::UnreadStoryOutlineGradient.

This commit is contained in:
John Preston 2023-07-17 20:47:44 +04:00
parent 04f1a7be02
commit 734c5c6740
7 changed files with 53 additions and 32 deletions

View File

@ -84,14 +84,8 @@ constexpr auto kSearchPerPage = 50;
const auto &st = st::contactsWithStories.item; const auto &st = st::contactsWithStories.item;
const auto left = st.photoPosition.x(); const auto left = st.photoPosition.x();
const auto top = st.photoPosition.y(); const auto top = st.photoPosition.y();
auto gradient = QLinearGradient( const auto size = st.photoSize;
QPoint(left + st.photoSize, top), return Ui::UnreadStoryOutlineGradient(QRectF(left, top, size, size));
QPoint(left, top + st.photoSize));
gradient.setStops({
{ 0., st::groupCallLive1->c },
{ 1., st::groupCallMuted1->c },
});
return QBrush(gradient);
} }
} // namespace } // namespace

View File

@ -531,11 +531,37 @@ void Stories::loadMore(StorySourcesList list) {
} }
}, [](const MTPDstories_allStoriesNotModified &) { }, [](const MTPDstories_allStoriesNotModified &) {
}); });
preloadListsMore();
}).fail([=] { }).fail([=] {
_loadMoreRequestId[index] = 0; _loadMoreRequestId[index] = 0;
}).send(); }).send();
} }
void Stories::preloadListsMore() {
if (_loadMoreRequestId[static_cast<int>(StorySourcesList::NotHidden)]
|| _loadMoreRequestId[static_cast<int>(StorySourcesList::Hidden)]) {
return;
}
const auto loading = [&](StorySourcesList list) {
return _loadMoreRequestId[static_cast<int>(list)] != 0;
};
const auto countLoaded = [&](StorySourcesList list) {
const auto index = static_cast<int>(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() { void Stories::sendResolveRequests() {
if (!_resolveSent.empty()) { if (!_resolveSent.empty()) {
return; return;

View File

@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "ui/chat/chat_theme.h" // CountAverageColor. #include "ui/chat/chat_theme.h" // CountAverageColor.
#include "ui/color_contrast.h" #include "ui/color_contrast.h"
#include "ui/effects/outline_segments.h"
#include "ui/effects/ripple_animation.h" #include "ui/effects/ripple_animation.h"
#include "ui/image/image_prepare.h" #include "ui/image/image_prepare.h"
#include "ui/text/format_values.h" #include "ui/text/format_values.h"
@ -372,13 +373,11 @@ void Row::PaintCornerBadgeFrame(
} }
const auto left = st->padding.left(); const auto left = st->padding.left();
const auto top = st->padding.top(); const auto top = st->padding.top();
auto gradient = QLinearGradient( auto gradient = Ui::UnreadStoryOutlineGradient(QRectF(
QPoint(left + st->photoSize, top), st->padding.left(),
QPoint(left, top + st->photoSize)); st->padding.top(),
gradient.setStops({ st->photoSize,
{ 0., st::groupCallLive1->c }, st->photoSize));
{ 1., st::groupCallMuted1->c },
});
return QBrush(gradient); return QBrush(gradient);
}; };
const auto storiesBrush = data->storiesUnread const auto storiesBrush = data->storiesUnread

View File

@ -394,11 +394,7 @@ void List::paintEvent(QPaintEvent *e) {
} }
} }
}; };
auto gradient = QLinearGradient(); auto gradient = Ui::UnreadStoryOutlineGradient();
gradient.setStops({
{ 0., st::groupCallLive1->c },
{ 1., st::groupCallMuted1->c },
});
enumerate([&](Single single) { enumerate([&](Single single) {
// Name. // Name.
if (const auto full = single.itemFull) { if (const auto full = single.itemFull) {
@ -495,7 +491,8 @@ void List::paintEvent(QPaintEvent *e) {
Ui::PaintOutlineSegments( Ui::PaintOutlineSegments(
p, p,
rect, rect,
itemFull->segments); itemFull->segments,
layout.segmentsSpinProgress);
} }
// Userpic. // Userpic.

View File

@ -28,6 +28,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "window/window_session_controller.h" #include "window/window_session_controller.h"
#include "ui/boxes/confirm_box.h" #include "ui/boxes/confirm_box.h"
#include "ui/chat/chat_style.h" #include "ui/chat/chat_style.h"
#include "ui/effects/outline_segments.h"
#include "ui/text/text_utilities.h" #include "ui/text/text_utilities.h"
#include "ui/toast/toast.h" #include "ui/toast/toast.h"
#include "ui/painter.h" #include "ui/painter.h"
@ -124,23 +125,16 @@ void StoryMention::draw(
geometry.topLeft() + QPoint(padding, padding), geometry.topLeft() + QPoint(padding, padding),
_thumbnail->image(size)); _thumbnail->image(size));
const auto thumbnail = geometry.marginsRemoved( const auto thumbnail = QRectF(geometry.marginsRemoved(
QMargins(padding, padding, padding, padding)); QMargins(padding, padding, padding, padding)));
const auto added = 0.5 * (_unread const auto added = 0.5 * (_unread
? st::storyMentionUnreadSkipTwice ? st::storyMentionUnreadSkipTwice
: st::storyMentionReadSkipTwice); : st::storyMentionReadSkipTwice);
const auto outline = thumbnail.marginsAdded( const auto outline = thumbnail.marginsAdded(
QMargins(added, added, added, added)); QMarginsF(added, added, added, added));
if (_unread && _paletteVersion != style::PaletteVersion()) { if (_unread && _paletteVersion != style::PaletteVersion()) {
_paletteVersion = style::PaletteVersion(); _paletteVersion = style::PaletteVersion();
auto gradient = QLinearGradient( _unreadBrush = QBrush(Ui::UnreadStoryOutlineGradient(outline));
outline.topRight(),
outline.bottomLeft());
gradient.setStops({
{ 0., st::groupCallLive1->c },
{ 1., st::groupCallMuted1->c },
});
_unreadBrush = QBrush(gradient);
} }
auto readColor = context.st->msgServiceFg()->c; auto readColor = context.st->msgServiceFg()->c;
readColor.setAlphaF(std::min(1. * readColor.alphaF(), kReadOutlineAlpha)); readColor.setAlphaF(std::min(1. * readColor.alphaF(), kReadOutlineAlpha));

View File

@ -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 } // namespace Ui

View File

@ -20,4 +20,6 @@ void PaintOutlineSegments(
const std::vector<OutlineSegment> &segments, const std::vector<OutlineSegment> &segments,
float64 fromFullProgress = 1.); float64 fromFullProgress = 1.);
[[nodiscard]] QLinearGradient UnreadStoryOutlineGradient(QRectF rect = {});
} // namespace Ui } // namespace Ui