Improve forum outlines in stories/folders.

This commit is contained in:
John Preston 2025-02-11 19:24:24 +04:00
parent 2b8eec8666
commit 32b95f0d9a
4 changed files with 36 additions and 2 deletions

View file

@ -912,7 +912,13 @@ void PeerListRow::paintDisabledCheckUserpic(
p.setPen(userpicBorderPen);
p.setBrush(Qt::NoBrush);
p.drawEllipse(userpicEllipse);
if (peer()->forum()) {
const auto radius = userpicDiameter
* Ui::ForumUserpicRadiusMultiplier();
p.drawRoundedRect(userpicEllipse, radius, radius);
} else {
p.drawEllipse(userpicEllipse);
}
p.setPen(iconBorderPen);
p.setBrush(st.disabledCheckFg);

View file

@ -466,7 +466,13 @@ void Row::PaintCornerBadgeFrame(
for (auto i = 0; i != storiesUnreadCount; ++i) {
segments.push_back({ storiesUnreadBrush, storiesUnread });
}
Ui::PaintOutlineSegments(q, outline, segments);
if (peer && peer->forum()) {
const auto radius = context.st->photoSize
* Ui::ForumUserpicRadiusMultiplier();
Ui::PaintOutlineSegments(q, outline, radius, segments);
} else {
Ui::PaintOutlineSegments(q, outline, segments);
}
}
if (subscribed) {

View file

@ -69,6 +69,22 @@ void PaintOutlineSegments(
}
}
void PaintOutlineSegments(
QPainter &p,
QRectF rect,
float64 radius,
const std::vector<OutlineSegment> &segments) {
Expects(!segments.empty());
p.setBrush(Qt::NoBrush);
const auto count = std::min(int(segments.size()), kOutlineSegmentsMax);
if (count == 1 || true) {
p.setPen(QPen(segments.back().brush, segments.back().width));
p.drawRoundedRect(rect, radius, radius);
return;
}
}
QLinearGradient UnreadStoryOutlineGradient(QRectF rect) {
auto result = QLinearGradient(rect.topRight(), rect.bottomLeft());
result.setStops({

View file

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