Added separate painting of peer badge emoji status to peer list.

This commit is contained in:
23rd
2026-06-27 22:03:19 +03:00
committed by John Preston
parent ffa63860e2
commit fe8ca5a544
2 changed files with 34 additions and 4 deletions

View File

@@ -116,6 +116,8 @@ bool ScaledBotVerifiedEmoji::readyInDefaultState() {
struct PeerBadge::EmojiStatus {
EmojiStatusId id;
std::unique_ptr<Ui::Text::CustomEmoji> emoji;
QPoint lastPosition;
QColor lastColor;
int skip = 0;
};
@@ -360,12 +362,14 @@ int PeerBadge::drawPremiumEmojiStatus(
if (!_emojiStatus->emoji) {
return 0;
}
_emojiStatus->lastPosition = QPoint(
iconx - 2 * _emojiStatus->skip,
icony + _emojiStatus->skip);
_emojiStatus->lastColor = (*descriptor.premiumFg)->c;
_emojiStatus->emoji->paint(p, {
.textColor = (*descriptor.premiumFg)->c,
.textColor = _emojiStatus->lastColor,
.now = descriptor.now,
.position = QPoint(
iconx - 2 * _emojiStatus->skip,
icony + _emojiStatus->skip),
.position = _emojiStatus->lastPosition,
.paused = descriptor.paused || On(PowerSaving::kEmojiStatus),
});
return iconw - 4 * _emojiStatus->skip;
@@ -382,6 +386,30 @@ int PeerBadge::drawPremiumStar(Painter &p, const Descriptor &descriptor) {
return iconw;
}
QRect PeerBadge::emojiStatusRect() const {
if (!_emojiStatus || !_emojiStatus->emoji) {
return QRect();
}
return QRect(
_emojiStatus->lastPosition,
Size(st::emojiSize - 2 * _emojiStatus->skip));
}
void PeerBadge::paintEmojiStatusFrame(
QPainter &p,
crl::time now,
bool paused) {
if (!_emojiStatus || !_emojiStatus->emoji) {
return;
}
_emojiStatus->emoji->paint(p, {
.textColor = _emojiStatus->lastColor,
.now = now,
.position = _emojiStatus->lastPosition,
.paused = paused || On(PowerSaving::kEmojiStatus),
});
}
void PeerBadge::unload() {
_emojiStatus = nullptr;
}

View File

@@ -67,6 +67,8 @@ public:
bool paused = false;
};
int drawGetWidth(Painter &p, Descriptor &&descriptor);
[[nodiscard]] QRect emojiStatusRect() const;
void paintEmojiStatusFrame(QPainter &p, crl::time now, bool paused);
void unload();
[[nodiscard]] bool ready(const BotVerifyDetails *details) const;