Inside message use original senders colors.

This commit is contained in:
John Preston 2024-01-02 13:52:45 +04:00
parent 0b5f05c7d4
commit ca9caa36da
13 changed files with 36 additions and 10 deletions

View file

@ -1235,6 +1235,22 @@ uint8 HistoryItem::colorIndex() const {
Unexpected("No displayFrom and no displayHiddenSenderInfo.");
}
PeerData *HistoryItem::contentColorsFrom() const {
if (const auto forwarded = Get<HistoryMessageForwarded>()) {
return forwarded->originalSender;
}
return displayFrom();
}
uint8 HistoryItem::contentColorIndex() const {
if (const auto forwarded = Get<HistoryMessageForwarded>()) {
return forwarded->originalSender
? forwarded->originalSender->colorIndex()
: forwarded->originalHiddenSenderInfo->colorIndex;
}
return colorIndex();
}
std::unique_ptr<HistoryView::Element> HistoryItem::createView(
not_null<HistoryView::ElementDelegate*> delegate,
HistoryView::Element *replacing) {

View file

@ -516,6 +516,11 @@ public:
[[nodiscard]] PeerData *displayFrom() const;
[[nodiscard]] uint8 colorIndex() const;
// In forwards we show name in sender's color, but the message
// content uses the color of the original sender.
[[nodiscard]] PeerData *contentColorsFrom() const;
[[nodiscard]] uint8 contentColorIndex() const;
[[nodiscard]] std::unique_ptr<HistoryView::Element> createView(
not_null<HistoryView::ElementDelegate*> delegate,
HistoryView::Element *replacing = nullptr);

View file

@ -490,6 +490,10 @@ uint8 Element::colorIndex() const {
return data()->colorIndex();
}
uint8 Element::contentColorIndex() const {
return data()->contentColorIndex();
}
QDateTime Element::dateTime() const {
return _dateTime;
}

View file

@ -317,6 +317,7 @@ public:
void refreshDataId();
[[nodiscard]] uint8 colorIndex() const;
[[nodiscard]] uint8 contentColorIndex() const;
[[nodiscard]] QDateTime dateTime() const;
[[nodiscard]] int y() const;

View file

@ -1670,7 +1670,7 @@ void Message::paintText(
.availableWidth = trect.width(),
.palette = &stm->textPalette,
.pre = stm->preCache.get(),
.blockquote = context.quoteCache(colorIndex()),
.blockquote = context.quoteCache(contentColorIndex()),
.colors = context.st->highlightColors(),
.spoiler = Ui::Text::DefaultSpoilerCache(),
.now = context.now,

View file

@ -201,7 +201,7 @@ void Reply::update(
}
}
_colorPeer = message
? message->displayFrom()
? message->contentColorsFrom()
: story
? story->peer().get()
: _externalSender

View file

@ -888,7 +888,7 @@ void Document::draw(
.availableWidth = captionw,
.palette = &stm->textPalette,
.pre = stm->preCache.get(),
.blockquote = context.quoteCache(parent()->colorIndex()),
.blockquote = context.quoteCache(parent()->contentColorIndex()),
.colors = context.st->highlightColors(),
.spoiler = Ui::Text::DefaultSpoilerCache(),
.now = context.now,

View file

@ -237,7 +237,7 @@ void ExtendedPreview::draw(Painter &p, const PaintContext &context) const {
.availableWidth = captionw,
.palette = &stm->textPalette,
.pre = stm->preCache.get(),
.blockquote = context.quoteCache(parent()->colorIndex()),
.blockquote = context.quoteCache(parent()->contentColorIndex()),
.colors = context.st->highlightColors(),
.spoiler = Ui::Text::DefaultSpoilerCache(),
.now = context.now,

View file

@ -219,7 +219,7 @@ void Game::draw(Painter &p, const PaintContext &context) const {
auto tshift = inner.top();
auto paintw = inner.width();
const auto colorIndex = parent()->colorIndex();
const auto colorIndex = parent()->contentColorIndex();
const auto selected = context.selected();
const auto cache = context.outbg
? stm->replyCache[st->colorPatternIndex(colorIndex)].get()

View file

@ -724,7 +724,7 @@ void Gif::draw(Painter &p, const PaintContext &context) const {
.availableWidth = captionw,
.palette = &stm->textPalette,
.pre = stm->preCache.get(),
.blockquote = context.quoteCache(parent()->colorIndex()),
.blockquote = context.quoteCache(parent()->contentColorIndex()),
.colors = context.st->highlightColors(),
.spoiler = Ui::Text::DefaultSpoilerCache(),
.now = context.now,

View file

@ -405,7 +405,7 @@ void GroupedMedia::draw(Painter &p, const PaintContext &context) const {
.availableWidth = captionw,
.palette = &stm->textPalette,
.pre = stm->preCache.get(),
.blockquote = context.quoteCache(parent()->colorIndex()),
.blockquote = context.quoteCache(parent()->contentColorIndex()),
.colors = context.st->highlightColors(),
.spoiler = Ui::Text::DefaultSpoilerCache(),
.now = context.now,

View file

@ -433,7 +433,7 @@ void Photo::draw(Painter &p, const PaintContext &context) const {
.availableWidth = captionw,
.palette = &stm->textPalette,
.pre = stm->preCache.get(),
.blockquote = context.quoteCache(parent()->colorIndex()),
.blockquote = context.quoteCache(parent()->contentColorIndex()),
.colors = context.st->highlightColors(),
.spoiler = Ui::Text::DefaultSpoilerCache(),
.now = context.now,

View file

@ -584,11 +584,11 @@ void WebPage::draw(Painter &p, const PaintContext &context) const {
const auto selected = context.selected();
const auto view = parent();
const auto colorIndex = view->colorIndex();
const auto from = view->data()->contentColorsFrom();
const auto colorIndex = from ? from->colorIndex() : view->colorIndex();
const auto cache = context.outbg
? stm->replyCache[st->colorPatternIndex(colorIndex)].get()
: st->coloredReplyCache(selected, colorIndex).get();
const auto from = view->data()->displayFrom();
const auto backgroundEmojiId = from
? from->backgroundEmojiId()
: DocumentId();