mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Update color index caches on palette change.
This commit is contained in:
parent
4709e11e46
commit
60fb5fdaf0
22 changed files with 148 additions and 72 deletions
|
@ -72,41 +72,42 @@ struct PeerUpdate {
|
||||||
Usernames = (1ULL << 12),
|
Usernames = (1ULL << 12),
|
||||||
TranslationDisabled = (1ULL << 13),
|
TranslationDisabled = (1ULL << 13),
|
||||||
Color = (1ULL << 14),
|
Color = (1ULL << 14),
|
||||||
|
BackgroundEmoji = (1ULL << 15),
|
||||||
|
|
||||||
// For users
|
// For users
|
||||||
CanShareContact = (1ULL << 15),
|
CanShareContact = (1ULL << 16),
|
||||||
IsContact = (1ULL << 16),
|
IsContact = (1ULL << 17),
|
||||||
PhoneNumber = (1ULL << 17),
|
PhoneNumber = (1ULL << 18),
|
||||||
OnlineStatus = (1ULL << 18),
|
OnlineStatus = (1ULL << 19),
|
||||||
BotCommands = (1ULL << 19),
|
BotCommands = (1ULL << 20),
|
||||||
BotCanBeInvited = (1ULL << 20),
|
BotCanBeInvited = (1ULL << 21),
|
||||||
BotStartToken = (1ULL << 21),
|
BotStartToken = (1ULL << 22),
|
||||||
CommonChats = (1ULL << 22),
|
CommonChats = (1ULL << 23),
|
||||||
HasCalls = (1ULL << 23),
|
HasCalls = (1ULL << 24),
|
||||||
SupportInfo = (1ULL << 24),
|
SupportInfo = (1ULL << 25),
|
||||||
IsBot = (1ULL << 25),
|
IsBot = (1ULL << 26),
|
||||||
EmojiStatus = (1ULL << 26),
|
EmojiStatus = (1ULL << 27),
|
||||||
StoriesState = (1ULL << 27),
|
StoriesState = (1ULL << 28),
|
||||||
|
|
||||||
// For chats and channels
|
// For chats and channels
|
||||||
InviteLinks = (1ULL << 28),
|
InviteLinks = (1ULL << 29),
|
||||||
Members = (1ULL << 29),
|
Members = (1ULL << 30),
|
||||||
Admins = (1ULL << 30),
|
Admins = (1ULL << 31),
|
||||||
BannedUsers = (1ULL << 31),
|
BannedUsers = (1ULL << 32),
|
||||||
Rights = (1ULL << 32),
|
Rights = (1ULL << 33),
|
||||||
PendingRequests = (1ULL << 33),
|
PendingRequests = (1ULL << 34),
|
||||||
Reactions = (1ULL << 34),
|
Reactions = (1ULL << 35),
|
||||||
|
|
||||||
// For channels
|
// For channels
|
||||||
ChannelAmIn = (1ULL << 35),
|
ChannelAmIn = (1ULL << 36),
|
||||||
StickersSet = (1ULL << 36),
|
StickersSet = (1ULL << 37),
|
||||||
ChannelLinkedChat = (1ULL << 37),
|
ChannelLinkedChat = (1ULL << 38),
|
||||||
ChannelLocation = (1ULL << 38),
|
ChannelLocation = (1ULL << 39),
|
||||||
Slowmode = (1ULL << 39),
|
Slowmode = (1ULL << 40),
|
||||||
GroupCall = (1ULL << 40),
|
GroupCall = (1ULL << 41),
|
||||||
|
|
||||||
// For iteration
|
// For iteration
|
||||||
LastUsedBit = (1ULL << 40),
|
LastUsedBit = (1ULL << 41),
|
||||||
};
|
};
|
||||||
using Flags = base::flags<Flag>;
|
using Flags = base::flags<Flag>;
|
||||||
friend inline constexpr auto is_flag_type(Flag) { return true; }
|
friend inline constexpr auto is_flag_type(Flag) { return true; }
|
||||||
|
|
|
@ -627,6 +627,13 @@ bool PeerData::changeColorIndex(
|
||||||
: clearColorIndex();
|
: clearColorIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PeerData::changeBackgroundEmoji(
|
||||||
|
const tl::conditional<MTPlong> &cloudBackgroundEmoji) {
|
||||||
|
return changeBackgroundEmoji(cloudBackgroundEmoji
|
||||||
|
? cloudBackgroundEmoji->v
|
||||||
|
: DocumentId());
|
||||||
|
}
|
||||||
|
|
||||||
void PeerData::fillNames() {
|
void PeerData::fillNames() {
|
||||||
_nameWords.clear();
|
_nameWords.clear();
|
||||||
_nameFirstLetters.clear();
|
_nameFirstLetters.clear();
|
||||||
|
@ -862,6 +869,13 @@ bool PeerData::clearColorIndex() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PeerData::changeBackgroundEmoji(uint64 id) {
|
||||||
|
if (_backgroundEmojiId == id) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
_backgroundEmojiId = id;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
bool PeerData::isSelf() const {
|
bool PeerData::isSelf() const {
|
||||||
if (const auto user = asUser()) {
|
if (const auto user = asUser()) {
|
||||||
return (user->flags() & UserDataFlag::Self);
|
return (user->flags() & UserDataFlag::Self);
|
||||||
|
|
|
@ -169,6 +169,7 @@ public:
|
||||||
}
|
}
|
||||||
bool changeColorIndex(uint8 index);
|
bool changeColorIndex(uint8 index);
|
||||||
bool clearColorIndex();
|
bool clearColorIndex();
|
||||||
|
bool changeBackgroundEmoji(uint64 id);
|
||||||
|
|
||||||
[[nodiscard]] bool isUser() const {
|
[[nodiscard]] bool isUser() const {
|
||||||
return peerIsUser(id);
|
return peerIsUser(id);
|
||||||
|
@ -360,6 +361,8 @@ public:
|
||||||
|
|
||||||
void setSettings(const MTPPeerSettings &data);
|
void setSettings(const MTPPeerSettings &data);
|
||||||
bool changeColorIndex(const tl::conditional<MTPint> &cloudColorIndex);
|
bool changeColorIndex(const tl::conditional<MTPint> &cloudColorIndex);
|
||||||
|
bool changeBackgroundEmoji(
|
||||||
|
const tl::conditional<MTPlong> &cloudBackgroundEmoji);
|
||||||
|
|
||||||
enum class BlockStatus : char {
|
enum class BlockStatus : char {
|
||||||
Unknown,
|
Unknown,
|
||||||
|
@ -452,6 +455,7 @@ private:
|
||||||
base::flat_set<QString> _nameWords; // for filtering
|
base::flat_set<QString> _nameWords; // for filtering
|
||||||
base::flat_set<QChar> _nameFirstLetters;
|
base::flat_set<QChar> _nameFirstLetters;
|
||||||
|
|
||||||
|
uint64 _backgroundEmojiId = 0;
|
||||||
crl::time _lastFullUpdate = 0;
|
crl::time _lastFullUpdate = 0;
|
||||||
|
|
||||||
QString _name;
|
QString _name;
|
||||||
|
|
|
@ -705,8 +705,18 @@ not_null<UserData*> Session::processUser(const MTPUser &data) {
|
||||||
if (canShareThisContact != result->canShareThisContactFast()) {
|
if (canShareThisContact != result->canShareThisContactFast()) {
|
||||||
flags |= UpdateFlag::CanShareContact;
|
flags |= UpdateFlag::CanShareContact;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto decorationsUpdated = false;
|
||||||
if (result->changeColorIndex(data.vcolor())) {
|
if (result->changeColorIndex(data.vcolor())) {
|
||||||
flags |= UpdateFlag::Color;
|
flags |= UpdateFlag::Color;
|
||||||
|
decorationsUpdated = true;
|
||||||
|
}
|
||||||
|
if (result->changeBackgroundEmoji(data.vbackground_emoji_id())) {
|
||||||
|
flags |= UpdateFlag::BackgroundEmoji;
|
||||||
|
decorationsUpdated = true;
|
||||||
|
}
|
||||||
|
if (decorationsUpdated && result->isMinimalLoaded()) {
|
||||||
|
_peerDecorationsUpdated.fire_copy(result);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -982,8 +992,17 @@ not_null<PeerData*> Session::processChat(const MTPChat &data) {
|
||||||
if (wasCallNotEmpty != Data::ChannelHasActiveCall(channel)) {
|
if (wasCallNotEmpty != Data::ChannelHasActiveCall(channel)) {
|
||||||
flags |= UpdateFlag::GroupCall;
|
flags |= UpdateFlag::GroupCall;
|
||||||
}
|
}
|
||||||
|
auto decorationsUpdated = false;
|
||||||
if (result->changeColorIndex(data.vcolor())) {
|
if (result->changeColorIndex(data.vcolor())) {
|
||||||
flags |= UpdateFlag::Color;
|
flags |= UpdateFlag::Color;
|
||||||
|
decorationsUpdated = true;
|
||||||
|
}
|
||||||
|
if (result->changeBackgroundEmoji(data.vbackground_emoji_id())) {
|
||||||
|
flags |= UpdateFlag::BackgroundEmoji;
|
||||||
|
decorationsUpdated = true;
|
||||||
|
}
|
||||||
|
if (decorationsUpdated && result->isMinimalLoaded()) {
|
||||||
|
_peerDecorationsUpdated.fire_copy(result);
|
||||||
}
|
}
|
||||||
}, [&](const MTPDchannelForbidden &data) {
|
}, [&](const MTPDchannelForbidden &data) {
|
||||||
const auto channel = result->asChannel();
|
const auto channel = result->asChannel();
|
||||||
|
@ -4515,6 +4534,10 @@ auto Session::webViewResultSent() const -> rpl::producer<WebViewResultSent> {
|
||||||
return _webViewResultSent.events();
|
return _webViewResultSent.events();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rpl::producer<not_null<PeerData*>> Session::peerDecorationsUpdated() const {
|
||||||
|
return _peerDecorationsUpdated.events();
|
||||||
|
}
|
||||||
|
|
||||||
void Session::clearLocalStorage() {
|
void Session::clearLocalStorage() {
|
||||||
_cache->close();
|
_cache->close();
|
||||||
_cache->clear();
|
_cache->clear();
|
||||||
|
|
|
@ -726,6 +726,9 @@ public:
|
||||||
void webViewResultSent(WebViewResultSent &&sent);
|
void webViewResultSent(WebViewResultSent &&sent);
|
||||||
[[nodiscard]] rpl::producer<WebViewResultSent> webViewResultSent() const;
|
[[nodiscard]] rpl::producer<WebViewResultSent> webViewResultSent() const;
|
||||||
|
|
||||||
|
[[nodiscard]] auto peerDecorationsUpdated() const
|
||||||
|
-> rpl::producer<not_null<PeerData*>>;
|
||||||
|
|
||||||
void clearLocalStorage();
|
void clearLocalStorage();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -1011,6 +1014,8 @@ private:
|
||||||
|
|
||||||
rpl::event_stream<WebViewResultSent> _webViewResultSent;
|
rpl::event_stream<WebViewResultSent> _webViewResultSent;
|
||||||
|
|
||||||
|
rpl::event_stream<not_null<PeerData*>> _peerDecorationsUpdated;
|
||||||
|
|
||||||
Groups _groups;
|
Groups _groups;
|
||||||
const std::unique_ptr<ChatFilters> _chatsFilters;
|
const std::unique_ptr<ChatFilters> _chatsFilters;
|
||||||
std::unique_ptr<ScheduledMessages> _scheduledMessages;
|
std::unique_ptr<ScheduledMessages> _scheduledMessages;
|
||||||
|
|
|
@ -306,6 +306,9 @@ enum class MessageFlag : uint64 {
|
||||||
StoryItem = (1ULL << 38),
|
StoryItem = (1ULL << 38),
|
||||||
|
|
||||||
InHighlightProcess = (1ULL << 39),
|
InHighlightProcess = (1ULL << 39),
|
||||||
|
|
||||||
|
// If not set then we need to refresh _displayFrom value.
|
||||||
|
DisplayFromChecked = (1ULL << 40),
|
||||||
};
|
};
|
||||||
inline constexpr bool is_flag_type(MessageFlag) { return true; }
|
inline constexpr bool is_flag_type(MessageFlag) { return true; }
|
||||||
using MessageFlags = base::flags<MessageFlag>;
|
using MessageFlags = base::flags<MessageFlag>;
|
||||||
|
|
|
@ -544,6 +544,10 @@ HistoryInner::HistoryInner(
|
||||||
PremiumPreview::InfiniteReactions);
|
PremiumPreview::InfiniteReactions);
|
||||||
}, lifetime());
|
}, lifetime());
|
||||||
|
|
||||||
|
session().data().peerDecorationsUpdated(
|
||||||
|
) | rpl::start_with_next([=] {
|
||||||
|
update();
|
||||||
|
}, lifetime());
|
||||||
session().data().itemRemoved(
|
session().data().itemRemoved(
|
||||||
) | rpl::start_with_next(
|
) | rpl::start_with_next(
|
||||||
[this](auto item) { itemRemoved(item); },
|
[this](auto item) { itemRemoved(item); },
|
||||||
|
|
|
@ -1126,7 +1126,7 @@ HistoryItem *HistoryItem::lookupDiscussionPostOriginal() const {
|
||||||
forwarded->savedFromMsgId);
|
forwarded->savedFromMsgId);
|
||||||
}
|
}
|
||||||
|
|
||||||
PeerData *HistoryItem::displayFrom() const {
|
PeerData *HistoryItem::computeDisplayFrom() const {
|
||||||
if (const auto sender = discussionPostOriginalSender()) {
|
if (const auto sender = discussionPostOriginalSender()) {
|
||||||
return sender;
|
return sender;
|
||||||
} else if (const auto sponsored = Get<HistoryMessageSponsored>()) {
|
} else if (const auto sponsored = Get<HistoryMessageSponsored>()) {
|
||||||
|
@ -1134,14 +1134,24 @@ PeerData *HistoryItem::displayFrom() const {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
} else if (const auto forwarded = Get<HistoryMessageForwarded>()) {
|
} else if (const auto forwarded = Get<HistoryMessageForwarded>()) {
|
||||||
if (_history->peer->isSelf() || _history->peer->isRepliesChat() || forwarded->imported) {
|
if (_history->peer->isSelf()
|
||||||
|
|| _history->peer->isRepliesChat()
|
||||||
|
|| forwarded->imported) {
|
||||||
return forwarded->originalSender;
|
return forwarded->originalSender;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return author().get();
|
return author().get();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8 HistoryItem::computeColorIndex() const {
|
PeerData *HistoryItem::displayFrom() const {
|
||||||
|
if (!(_flags & MessageFlag::DisplayFromChecked)) {
|
||||||
|
_flags |= MessageFlag::DisplayFromChecked;
|
||||||
|
_displayFrom = computeDisplayFrom();
|
||||||
|
}
|
||||||
|
return _displayFrom;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8 HistoryItem::colorIndex() const {
|
||||||
if (const auto from = displayFrom()) {
|
if (const auto from = displayFrom()) {
|
||||||
return from->colorIndex();
|
return from->colorIndex();
|
||||||
} else if (const auto info = hiddenSenderInfo()) {
|
} else if (const auto info = hiddenSenderInfo()) {
|
||||||
|
@ -1615,6 +1625,7 @@ void HistoryItem::applyEdition(const MTPDmessageService &message) {
|
||||||
createServiceFromMtp(message);
|
createServiceFromMtp(message);
|
||||||
applyServiceDateEdition(message);
|
applyServiceDateEdition(message);
|
||||||
finishEditionToEmpty();
|
finishEditionToEmpty();
|
||||||
|
_flags &= ~MessageFlag::DisplayFromChecked;
|
||||||
} else if (isService()) {
|
} else if (isService()) {
|
||||||
if (const auto reply = Get<HistoryMessageReply>()) {
|
if (const auto reply = Get<HistoryMessageReply>()) {
|
||||||
reply->clearData(this);
|
reply->clearData(this);
|
||||||
|
@ -1624,6 +1635,7 @@ void HistoryItem::applyEdition(const MTPDmessageService &message) {
|
||||||
createServiceFromMtp(message);
|
createServiceFromMtp(message);
|
||||||
applyServiceDateEdition(message);
|
applyServiceDateEdition(message);
|
||||||
finishEdition(-1);
|
finishEdition(-1);
|
||||||
|
_flags &= ~MessageFlag::DisplayFromChecked;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -501,7 +501,7 @@ public:
|
||||||
[[nodiscard]] bool isDiscussionPost() const;
|
[[nodiscard]] bool isDiscussionPost() const;
|
||||||
[[nodiscard]] HistoryItem *lookupDiscussionPostOriginal() const;
|
[[nodiscard]] HistoryItem *lookupDiscussionPostOriginal() const;
|
||||||
[[nodiscard]] PeerData *displayFrom() const;
|
[[nodiscard]] PeerData *displayFrom() const;
|
||||||
[[nodiscard]] uint8 computeColorIndex() const;
|
[[nodiscard]] uint8 colorIndex() const;
|
||||||
|
|
||||||
[[nodiscard]] std::unique_ptr<HistoryView::Element> createView(
|
[[nodiscard]] std::unique_ptr<HistoryView::Element> createView(
|
||||||
not_null<HistoryView::ElementDelegate*> delegate,
|
not_null<HistoryView::ElementDelegate*> delegate,
|
||||||
|
@ -584,8 +584,8 @@ private:
|
||||||
bool used);
|
bool used);
|
||||||
void setSelfDestruct(HistorySelfDestructType type, MTPint mtpTTLvalue);
|
void setSelfDestruct(HistorySelfDestructType type, MTPint mtpTTLvalue);
|
||||||
|
|
||||||
TextWithEntities fromLinkText() const;
|
[[nodiscard]] TextWithEntities fromLinkText() const;
|
||||||
ClickHandlerPtr fromLink() const;
|
[[nodiscard]] ClickHandlerPtr fromLink() const;
|
||||||
|
|
||||||
void setGroupId(MessageGroupId groupId);
|
void setGroupId(MessageGroupId groupId);
|
||||||
|
|
||||||
|
@ -624,9 +624,12 @@ private:
|
||||||
[[nodiscard]] PreparedServiceText prepareCallScheduledText(
|
[[nodiscard]] PreparedServiceText prepareCallScheduledText(
|
||||||
TimeId scheduleDate);
|
TimeId scheduleDate);
|
||||||
|
|
||||||
|
[[nodiscard]] PeerData *computeDisplayFrom() const;
|
||||||
|
|
||||||
const not_null<History*> _history;
|
const not_null<History*> _history;
|
||||||
const not_null<PeerData*> _from;
|
const not_null<PeerData*> _from;
|
||||||
MessageFlags _flags = 0;
|
mutable PeerData *_displayFrom = nullptr;
|
||||||
|
mutable MessageFlags _flags = 0;
|
||||||
|
|
||||||
TextWithEntities _text;
|
TextWithEntities _text;
|
||||||
|
|
||||||
|
|
|
@ -402,11 +402,7 @@ bool HistoryMessageReply::updateData(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resolvedMessage) {
|
if (!resolvedMessage && !resolvedStory) {
|
||||||
_colorIndexPlusOne = resolvedMessage->computeColorIndex() + 1;
|
|
||||||
} else if (resolvedStory) {
|
|
||||||
_colorIndexPlusOne = resolvedStory->peer()->colorIndex() + 1;
|
|
||||||
} else {
|
|
||||||
_unavailable = 1;
|
_unavailable = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -422,7 +418,6 @@ bool HistoryMessageReply::updateData(
|
||||||
if (_fields.messageId || _fields.storyId) {
|
if (_fields.messageId || _fields.storyId) {
|
||||||
_unavailable = 1;
|
_unavailable = 1;
|
||||||
}
|
}
|
||||||
_colorIndexPlusOne = 0;
|
|
||||||
spoiler = nullptr;
|
spoiler = nullptr;
|
||||||
}
|
}
|
||||||
if (force) {
|
if (force) {
|
||||||
|
@ -681,14 +676,19 @@ void HistoryMessageReply::paint(
|
||||||
const auto rect = QRect(x, y, w, _height);
|
const auto rect = QRect(x, y, w, _height);
|
||||||
const auto hasQuote = !_fields.quote.empty();
|
const auto hasQuote = !_fields.quote.empty();
|
||||||
const auto selected = context.selected();
|
const auto selected = context.selected();
|
||||||
const auto colorIndexPlusOne = context.outbg ? 0 : _colorIndexPlusOne;
|
const auto colorIndexPlusOne = resolvedMessage
|
||||||
|
? (resolvedMessage->colorIndex() + 1)
|
||||||
|
: resolvedStory
|
||||||
|
? (resolvedStory->peer()->colorIndex() + 1)
|
||||||
|
: 0;
|
||||||
|
const auto useColorIndex = colorIndexPlusOne && !context.outbg;
|
||||||
const auto twoColored = colorIndexPlusOne
|
const auto twoColored = colorIndexPlusOne
|
||||||
&& Ui::ColorIndexTwoColored(colorIndexPlusOne - 1);
|
&& Ui::ColorIndexTwoColored(colorIndexPlusOne - 1);
|
||||||
const auto cache = !inBubble
|
const auto cache = !inBubble
|
||||||
? (hasQuote
|
? (hasQuote
|
||||||
? st->serviceQuoteCache(twoColored)
|
? st->serviceQuoteCache(twoColored)
|
||||||
: st->serviceReplyCache(twoColored)).get()
|
: st->serviceReplyCache(twoColored)).get()
|
||||||
: colorIndexPlusOne
|
: useColorIndex
|
||||||
? (hasQuote
|
? (hasQuote
|
||||||
? st->coloredQuoteCache(selected, colorIndexPlusOne - 1)
|
? st->coloredQuoteCache(selected, colorIndexPlusOne - 1)
|
||||||
: st->coloredReplyCache(selected, colorIndexPlusOne - 1)).get()
|
: st->coloredReplyCache(selected, colorIndexPlusOne - 1)).get()
|
||||||
|
@ -768,7 +768,7 @@ void HistoryMessageReply::paint(
|
||||||
w -= textLeft + st::historyReplyPadding.right();
|
w -= textLeft + st::historyReplyPadding.right();
|
||||||
p.setPen(!inBubble
|
p.setPen(!inBubble
|
||||||
? st->msgImgReplyBarColor()->c
|
? st->msgImgReplyBarColor()->c
|
||||||
: colorIndexPlusOne
|
: useColorIndex
|
||||||
? FromNameFg(context, colorIndexPlusOne - 1)
|
? FromNameFg(context, colorIndexPlusOne - 1)
|
||||||
: stm->msgServiceFg->c);
|
: stm->msgServiceFg->c);
|
||||||
_name.drawLeftElided(p, x + textLeft, y + st::historyReplyPadding.top(), w, w + 2 * x + 2 * textLeft);
|
_name.drawLeftElided(p, x + textLeft, y + st::historyReplyPadding.top(), w, w + 2 * x + 2 * textLeft);
|
||||||
|
@ -786,7 +786,7 @@ void HistoryMessageReply::paint(
|
||||||
y + st::historyReplyPadding.top() + st::msgServiceNameFont->height);
|
y + st::historyReplyPadding.top() + st::msgServiceNameFont->height);
|
||||||
auto replyToTextPalette = &(!inBubble
|
auto replyToTextPalette = &(!inBubble
|
||||||
? st->imgReplyTextPalette()
|
? st->imgReplyTextPalette()
|
||||||
: colorIndexPlusOne
|
: useColorIndex
|
||||||
? st->coloredTextPalette(selected, colorIndexPlusOne - 1)
|
? st->coloredTextPalette(selected, colorIndexPlusOne - 1)
|
||||||
: stm->replyTextPalette);
|
: stm->replyTextPalette);
|
||||||
if (_fields.storyId) {
|
if (_fields.storyId) {
|
||||||
|
@ -802,7 +802,7 @@ void HistoryMessageReply::paint(
|
||||||
}
|
}
|
||||||
auto owned = std::optional<style::owned_color>();
|
auto owned = std::optional<style::owned_color>();
|
||||||
auto copy = std::optional<style::TextPalette>();
|
auto copy = std::optional<style::TextPalette>();
|
||||||
if (inBubble && _colorIndexPlusOne) {
|
if (inBubble && colorIndexPlusOne) {
|
||||||
copy.emplace(*replyToTextPalette);
|
copy.emplace(*replyToTextPalette);
|
||||||
owned.emplace(cache->icon);
|
owned.emplace(cache->icon);
|
||||||
copy->linkFg = owned->color();
|
copy->linkFg = owned->color();
|
||||||
|
|
|
@ -346,7 +346,6 @@ private:
|
||||||
mutable int _minHeight = 0;
|
mutable int _minHeight = 0;
|
||||||
mutable int _height = 0;
|
mutable int _height = 0;
|
||||||
mutable int _nameVersion = 0;
|
mutable int _nameVersion = 0;
|
||||||
uint8 _colorIndexPlusOne : 6 = 0;
|
|
||||||
uint8 _unavailable : 1 = 0;
|
uint8 _unavailable : 1 = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -467,7 +467,6 @@ Element::Element(
|
||||||
| (IsItemScheduledUntilOnline(data)
|
| (IsItemScheduledUntilOnline(data)
|
||||||
? Flag::ScheduledUntilOnline
|
? Flag::ScheduledUntilOnline
|
||||||
: Flag()))
|
: Flag()))
|
||||||
, _colorIndex(data->computeColorIndex())
|
|
||||||
, _context(delegate->elementContext()) {
|
, _context(delegate->elementContext()) {
|
||||||
history()->owner().registerItemView(this);
|
history()->owner().registerItemView(this);
|
||||||
refreshMedia(replacing);
|
refreshMedia(replacing);
|
||||||
|
@ -492,7 +491,7 @@ not_null<History*> Element::history() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8 Element::colorIndex() const {
|
uint8 Element::colorIndex() const {
|
||||||
return _colorIndex;
|
return data()->colorIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
QDateTime Element::dateTime() const {
|
QDateTime Element::dateTime() const {
|
||||||
|
|
|
@ -594,7 +594,6 @@ private:
|
||||||
int _indexInBlock = -1;
|
int _indexInBlock = -1;
|
||||||
|
|
||||||
mutable Flags _flags = Flag(0);
|
mutable Flags _flags = Flag(0);
|
||||||
uint8 _colorIndex = 0;
|
|
||||||
Context _context = Context();
|
Context _context = Context();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -353,6 +353,11 @@ ListWidget::ListWidget(
|
||||||
update();
|
update();
|
||||||
}, lifetime());
|
}, lifetime());
|
||||||
|
|
||||||
|
session().data().peerDecorationsUpdated(
|
||||||
|
) | rpl::start_with_next([=] {
|
||||||
|
update();
|
||||||
|
}, lifetime());
|
||||||
|
|
||||||
session().data().itemRemoved(
|
session().data().itemRemoved(
|
||||||
) | rpl::start_with_next([=](not_null<const HistoryItem*> item) {
|
) | rpl::start_with_next([=](not_null<const HistoryItem*> item) {
|
||||||
itemRemoved(item);
|
itemRemoved(item);
|
||||||
|
|
|
@ -34,7 +34,6 @@ Game::Game(
|
||||||
: Media(parent)
|
: Media(parent)
|
||||||
, _st(st::historyPagePreview)
|
, _st(st::historyPagePreview)
|
||||||
, _data(data)
|
, _data(data)
|
||||||
, _colorIndex(parent->data()->computeColorIndex())
|
|
||||||
, _title(st::msgMinWidth - _st.padding.left() - _st.padding.right())
|
, _title(st::msgMinWidth - _st.padding.left() - _st.padding.right())
|
||||||
, _description(st::msgMinWidth - _st.padding.left() - _st.padding.right()) {
|
, _description(st::msgMinWidth - _st.padding.left() - _st.padding.right()) {
|
||||||
if (!consumed.text.isEmpty()) {
|
if (!consumed.text.isEmpty()) {
|
||||||
|
@ -219,11 +218,12 @@ void Game::draw(Painter &p, const PaintContext &context) const {
|
||||||
auto tshift = inner.top();
|
auto tshift = inner.top();
|
||||||
auto paintw = inner.width();
|
auto paintw = inner.width();
|
||||||
|
|
||||||
|
const auto colorIndex = parent()->colorIndex();
|
||||||
const auto selected = context.selected();
|
const auto selected = context.selected();
|
||||||
const auto twoColored = Ui::ColorIndexTwoColored(_colorIndex);
|
const auto twoColored = Ui::ColorIndexTwoColored(colorIndex);
|
||||||
const auto cache = context.outbg
|
const auto cache = context.outbg
|
||||||
? (twoColored ? stm->replyCacheTwo : stm->replyCache).get()
|
? (twoColored ? stm->replyCacheTwo : stm->replyCache).get()
|
||||||
: st->coloredReplyCache(selected, _colorIndex).get();
|
: st->coloredReplyCache(selected, colorIndex).get();
|
||||||
Ui::Text::ValidateQuotePaintCache(*cache, _st);
|
Ui::Text::ValidateQuotePaintCache(*cache, _st);
|
||||||
Ui::Text::FillQuotePaint(p, outer, *cache, _st);
|
Ui::Text::FillQuotePaint(p, outer, *cache, _st);
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ void Game::draw(Painter &p, const PaintContext &context) const {
|
||||||
p.setPen(cache->icon);
|
p.setPen(cache->icon);
|
||||||
p.setTextPalette(context.outbg
|
p.setTextPalette(context.outbg
|
||||||
? stm->semiboldPalette
|
? stm->semiboldPalette
|
||||||
: st->coloredTextPalette(selected, _colorIndex));
|
: st->coloredTextPalette(selected, colorIndex));
|
||||||
|
|
||||||
auto endskip = 0;
|
auto endskip = 0;
|
||||||
if (_title.hasSkipBlock()) {
|
if (_title.hasSkipBlock()) {
|
||||||
|
|
|
@ -105,8 +105,7 @@ private:
|
||||||
|
|
||||||
int _gameTagWidth = 0;
|
int _gameTagWidth = 0;
|
||||||
int _descriptionLines = 0;
|
int _descriptionLines = 0;
|
||||||
uint32 _titleLines : 24 = 0;
|
int _titleLines = 0;
|
||||||
uint32 _colorIndex : 8 = 0;
|
|
||||||
|
|
||||||
Ui::Text::String _title;
|
Ui::Text::String _title;
|
||||||
Ui::Text::String _description;
|
Ui::Text::String _description;
|
||||||
|
|
|
@ -61,8 +61,7 @@ Giveaway::Giveaway(
|
||||||
, _participants(st::msgMinWidth)
|
, _participants(st::msgMinWidth)
|
||||||
, _countries(st::msgMinWidth)
|
, _countries(st::msgMinWidth)
|
||||||
, _winnersTitle(st::msgMinWidth)
|
, _winnersTitle(st::msgMinWidth)
|
||||||
, _winners(st::msgMinWidth)
|
, _winners(st::msgMinWidth) {
|
||||||
, _colorIndex(parent->data()->computeColorIndex()) {
|
|
||||||
fillFromData(giveaway);
|
fillFromData(giveaway);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,10 +346,11 @@ void Giveaway::paintChannels(
|
||||||
const auto ratio = style::DevicePixelRatio();
|
const auto ratio = style::DevicePixelRatio();
|
||||||
const auto stm = context.messageStyle();
|
const auto stm = context.messageStyle();
|
||||||
const auto selected = context.selected();
|
const auto selected = context.selected();
|
||||||
const auto twoColored = Ui::ColorIndexTwoColored(_colorIndex);
|
const auto colorIndex = parent()->colorIndex();
|
||||||
|
const auto twoColored = Ui::ColorIndexTwoColored(colorIndex);
|
||||||
const auto cache = context.outbg
|
const auto cache = context.outbg
|
||||||
? (twoColored ? stm->replyCacheTwo : stm->replyCache).get()
|
? (twoColored ? stm->replyCacheTwo : stm->replyCache).get()
|
||||||
: context.st->coloredReplyCache(selected, _colorIndex).get();
|
: context.st->coloredReplyCache(selected, colorIndex).get();
|
||||||
if (_channelCorners[0].isNull() || _channelBg != cache->bg) {
|
if (_channelCorners[0].isNull() || _channelBg != cache->bg) {
|
||||||
_channelBg = cache->bg;
|
_channelBg = cache->bg;
|
||||||
_channelCorners = Images::CornersMask(size / 2);
|
_channelCorners = Images::CornersMask(size / 2);
|
||||||
|
|
|
@ -115,7 +115,6 @@ private:
|
||||||
int _countriesWidth = 0;
|
int _countriesWidth = 0;
|
||||||
int _winnersTitleTop = 0;
|
int _winnersTitleTop = 0;
|
||||||
int _winnersTop = 0;
|
int _winnersTop = 0;
|
||||||
uint8 _colorIndex : 7 = 0;
|
|
||||||
mutable uint8 _subscribedToThumbnails : 1 = 0;
|
mutable uint8 _subscribedToThumbnails : 1 = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -126,7 +126,6 @@ WebPage::WebPage(
|
||||||
: Media(parent)
|
: Media(parent)
|
||||||
, _st(st::historyPagePreview)
|
, _st(st::historyPagePreview)
|
||||||
, _data(data)
|
, _data(data)
|
||||||
, _colorIndex(parent->data()->computeColorIndex())
|
|
||||||
, _siteName(st::msgMinWidth - _st.padding.left() - _st.padding.right())
|
, _siteName(st::msgMinWidth - _st.padding.left() - _st.padding.right())
|
||||||
, _title(st::msgMinWidth - _st.padding.left() - _st.padding.right())
|
, _title(st::msgMinWidth - _st.padding.left() - _st.padding.right())
|
||||||
, _description(st::msgMinWidth - _st.padding.left() - _st.padding.right())
|
, _description(st::msgMinWidth - _st.padding.left() - _st.padding.right())
|
||||||
|
@ -546,10 +545,11 @@ void WebPage::draw(Painter &p, const PaintContext &context) const {
|
||||||
auto attachAdditionalInfoText = _attach ? _attach->additionalInfoString() : QString();
|
auto attachAdditionalInfoText = _attach ? _attach->additionalInfoString() : QString();
|
||||||
|
|
||||||
const auto selected = context.selected();
|
const auto selected = context.selected();
|
||||||
const auto twoColored = Ui::ColorIndexTwoColored(_colorIndex);
|
const auto colorIndex = parent()->colorIndex();
|
||||||
|
const auto twoColored = Ui::ColorIndexTwoColored(colorIndex);
|
||||||
const auto cache = context.outbg
|
const auto cache = context.outbg
|
||||||
? (twoColored ? stm->replyCacheTwo : stm->replyCache).get()
|
? (twoColored ? stm->replyCacheTwo : stm->replyCache).get()
|
||||||
: st->coloredReplyCache(selected, _colorIndex).get();
|
: st->coloredReplyCache(selected, colorIndex).get();
|
||||||
Ui::Text::ValidateQuotePaintCache(*cache, _st);
|
Ui::Text::ValidateQuotePaintCache(*cache, _st);
|
||||||
Ui::Text::FillQuotePaint(p, outer, *cache, _st);
|
Ui::Text::FillQuotePaint(p, outer, *cache, _st);
|
||||||
|
|
||||||
|
@ -605,7 +605,7 @@ void WebPage::draw(Painter &p, const PaintContext &context) const {
|
||||||
p.setPen(cache->icon);
|
p.setPen(cache->icon);
|
||||||
p.setTextPalette(context.outbg
|
p.setTextPalette(context.outbg
|
||||||
? stm->semiboldPalette
|
? stm->semiboldPalette
|
||||||
: st->coloredTextPalette(selected, _colorIndex));
|
: st->coloredTextPalette(selected, colorIndex));
|
||||||
|
|
||||||
auto endskip = 0;
|
auto endskip = 0;
|
||||||
if (_siteName.hasSkipBlock()) {
|
if (_siteName.hasSkipBlock()) {
|
||||||
|
|
|
@ -132,8 +132,7 @@ private:
|
||||||
int _dataVersion = -1;
|
int _dataVersion = -1;
|
||||||
int _siteNameLines = 0;
|
int _siteNameLines = 0;
|
||||||
int _descriptionLines = 0;
|
int _descriptionLines = 0;
|
||||||
uint32 _titleLines : 24 = 0;
|
uint32 _titleLines : 31 = 0;
|
||||||
uint32 _colorIndex : 7 = 0;
|
|
||||||
uint32 _asArticle : 1 = 0;
|
uint32 _asArticle : 1 = 0;
|
||||||
|
|
||||||
Ui::Text::String _siteName;
|
Ui::Text::String _siteName;
|
||||||
|
|
|
@ -172,7 +172,7 @@ messageActionSuggestProfilePhoto#57de635e photo:Photo = MessageAction;
|
||||||
messageActionRequestedPeer#fe77345d button_id:int peer:Peer = MessageAction;
|
messageActionRequestedPeer#fe77345d button_id:int peer:Peer = MessageAction;
|
||||||
messageActionSetChatWallPaper#bc44a927 wallpaper:WallPaper = MessageAction;
|
messageActionSetChatWallPaper#bc44a927 wallpaper:WallPaper = MessageAction;
|
||||||
messageActionSetSameChatWallPaper#c0787d6d wallpaper:WallPaper = MessageAction;
|
messageActionSetSameChatWallPaper#c0787d6d wallpaper:WallPaper = MessageAction;
|
||||||
messageActionGiftCode#d2cfdb0e flags:# via_giveaway:flags.0?true boost_peer:flags.1?Peer months:int slug:string = MessageAction;
|
messageActionGiftCode#d2cfdb0e flags:# via_giveaway:flags.0?true unclaimed:flags.2?true boost_peer:flags.1?Peer months:int slug:string = MessageAction;
|
||||||
messageActionGiveawayLaunch#332ba9ed = MessageAction;
|
messageActionGiveawayLaunch#332ba9ed = MessageAction;
|
||||||
|
|
||||||
dialog#d58a08c6 flags:# pinned:flags.2?true unread_mark:flags.3?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int ttl_period:flags.5?int = Dialog;
|
dialog#d58a08c6 flags:# pinned:flags.2?true unread_mark:flags.3?true peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int unread_mentions_count:int unread_reactions_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage folder_id:flags.4?int ttl_period:flags.5?int = Dialog;
|
||||||
|
@ -292,7 +292,7 @@ updateChatParticipantAdd#3dda5451 chat_id:long user_id:long inviter_id:long date
|
||||||
updateChatParticipantDelete#e32f3d77 chat_id:long user_id:long version:int = Update;
|
updateChatParticipantDelete#e32f3d77 chat_id:long user_id:long version:int = Update;
|
||||||
updateDcOptions#8e5e9873 dc_options:Vector<DcOption> = Update;
|
updateDcOptions#8e5e9873 dc_options:Vector<DcOption> = Update;
|
||||||
updateNotifySettings#bec268ef peer:NotifyPeer notify_settings:PeerNotifySettings = Update;
|
updateNotifySettings#bec268ef peer:NotifyPeer notify_settings:PeerNotifySettings = Update;
|
||||||
updateServiceNotification#ebe46819 flags:# popup:flags.0?true inbox_date:flags.1?int type:string message:string media:MessageMedia entities:Vector<MessageEntity> = Update;
|
updateServiceNotification#ebe46819 flags:# popup:flags.0?true invert_media:flags.2?true inbox_date:flags.1?int type:string message:string media:MessageMedia entities:Vector<MessageEntity> = Update;
|
||||||
updatePrivacy#ee3b272a key:PrivacyKey rules:Vector<PrivacyRule> = Update;
|
updatePrivacy#ee3b272a key:PrivacyKey rules:Vector<PrivacyRule> = Update;
|
||||||
updateUserPhone#5492a13 user_id:long phone:string = Update;
|
updateUserPhone#5492a13 user_id:long phone:string = Update;
|
||||||
updateReadHistoryInbox#9c974fdf flags:# folder_id:flags.0?int peer:Peer max_id:int still_unread_count:int pts:int pts_count:int = Update;
|
updateReadHistoryInbox#9c974fdf flags:# folder_id:flags.0?int peer:Peer max_id:int still_unread_count:int pts:int pts_count:int = Update;
|
||||||
|
@ -686,7 +686,7 @@ messages.savedGifsNotModified#e8025ca2 = messages.SavedGifs;
|
||||||
messages.savedGifs#84a02a0d hash:long gifs:Vector<Document> = messages.SavedGifs;
|
messages.savedGifs#84a02a0d hash:long gifs:Vector<Document> = messages.SavedGifs;
|
||||||
|
|
||||||
inputBotInlineMessageMediaAuto#3380c786 flags:# invert_media:flags.3?true message:string entities:flags.1?Vector<MessageEntity> reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
inputBotInlineMessageMediaAuto#3380c786 flags:# invert_media:flags.3?true message:string entities:flags.1?Vector<MessageEntity> reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
||||||
inputBotInlineMessageText#3dcd7a87 flags:# no_webpage:flags.0?true message:string entities:flags.1?Vector<MessageEntity> reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
inputBotInlineMessageText#3dcd7a87 flags:# no_webpage:flags.0?true invert_media:flags.3?true message:string entities:flags.1?Vector<MessageEntity> reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
||||||
inputBotInlineMessageMediaGeo#96929a85 flags:# geo_point:InputGeoPoint heading:flags.0?int period:flags.1?int proximity_notification_radius:flags.3?int reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
inputBotInlineMessageMediaGeo#96929a85 flags:# geo_point:InputGeoPoint heading:flags.0?int period:flags.1?int proximity_notification_radius:flags.3?int reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
||||||
inputBotInlineMessageMediaVenue#417bbf11 flags:# geo_point:InputGeoPoint title:string address:string provider:string venue_id:string venue_type:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
inputBotInlineMessageMediaVenue#417bbf11 flags:# geo_point:InputGeoPoint title:string address:string provider:string venue_id:string venue_type:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
||||||
inputBotInlineMessageMediaContact#a6edbffd flags:# phone_number:string first_name:string last_name:string vcard:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
inputBotInlineMessageMediaContact#a6edbffd flags:# phone_number:string first_name:string last_name:string vcard:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
||||||
|
@ -700,7 +700,7 @@ inputBotInlineResultDocument#fff8fdc4 flags:# id:string type:string title:flags.
|
||||||
inputBotInlineResultGame#4fa417f2 id:string short_name:string send_message:InputBotInlineMessage = InputBotInlineResult;
|
inputBotInlineResultGame#4fa417f2 id:string short_name:string send_message:InputBotInlineMessage = InputBotInlineResult;
|
||||||
|
|
||||||
botInlineMessageMediaAuto#764cf810 flags:# invert_media:flags.3?true message:string entities:flags.1?Vector<MessageEntity> reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
botInlineMessageMediaAuto#764cf810 flags:# invert_media:flags.3?true message:string entities:flags.1?Vector<MessageEntity> reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
||||||
botInlineMessageText#8c7f65e2 flags:# no_webpage:flags.0?true message:string entities:flags.1?Vector<MessageEntity> reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
botInlineMessageText#8c7f65e2 flags:# no_webpage:flags.0?true invert_media:flags.3?true message:string entities:flags.1?Vector<MessageEntity> reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
||||||
botInlineMessageMediaGeo#51846fd flags:# geo:GeoPoint heading:flags.0?int period:flags.1?int proximity_notification_radius:flags.3?int reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
botInlineMessageMediaGeo#51846fd flags:# geo:GeoPoint heading:flags.0?int period:flags.1?int proximity_notification_radius:flags.3?int reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
||||||
botInlineMessageMediaVenue#8a86659c flags:# geo:GeoPoint title:string address:string provider:string venue_id:string venue_type:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
botInlineMessageMediaVenue#8a86659c flags:# geo:GeoPoint title:string address:string provider:string venue_id:string venue_type:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
||||||
botInlineMessageMediaContact#18d1cdc2 flags:# phone_number:string first_name:string last_name:string vcard:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
botInlineMessageMediaContact#18d1cdc2 flags:# phone_number:string first_name:string last_name:string vcard:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
||||||
|
|
|
@ -180,7 +180,7 @@ ColorIndexValues SimpleColorIndexValues(QColor color, bool twoColored) {
|
||||||
outline1.setAlphaF(0.9);
|
outline1.setAlphaF(0.9);
|
||||||
auto outline2 = outline1;
|
auto outline2 = outline1;
|
||||||
if (twoColored) {
|
if (twoColored) {
|
||||||
outline2.setAlphaF(0.3);
|
outline2.setAlphaF(0.5);
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
.name = color,
|
.name = color,
|
||||||
|
@ -624,7 +624,9 @@ void ChatStyle::assignPalette(not_null<const style::palette*> palette) {
|
||||||
style.msgBgCornersSmall = {};
|
style.msgBgCornersSmall = {};
|
||||||
style.msgBgCornersLarge = {};
|
style.msgBgCornersLarge = {};
|
||||||
style.quoteCache = nullptr;
|
style.quoteCache = nullptr;
|
||||||
|
style.quoteCacheTwo = nullptr;
|
||||||
style.replyCache = nullptr;
|
style.replyCache = nullptr;
|
||||||
|
style.replyCacheTwo = nullptr;
|
||||||
style.preCache = nullptr;
|
style.preCache = nullptr;
|
||||||
}
|
}
|
||||||
for (auto &style : _imageStyles) {
|
for (auto &style : _imageStyles) {
|
||||||
|
@ -653,6 +655,12 @@ void ChatStyle::assignPalette(not_null<const style::palette*> palette) {
|
||||||
for (auto &palette : _coloredTextPalettes) {
|
for (auto &palette : _coloredTextPalettes) {
|
||||||
palette.linkFg.reset();
|
palette.linkFg.reset();
|
||||||
}
|
}
|
||||||
|
for (auto &cache : _coloredReplyCaches) {
|
||||||
|
cache = nullptr;
|
||||||
|
}
|
||||||
|
for (auto &cache : _coloredQuoteCaches) {
|
||||||
|
cache = nullptr;
|
||||||
|
}
|
||||||
updateDarkValue();
|
updateDarkValue();
|
||||||
|
|
||||||
_paletteChanged.fire({});
|
_paletteChanged.fire({});
|
||||||
|
@ -782,7 +790,7 @@ const style::TextPalette &ChatStyle::coloredTextPalette(
|
||||||
const auto shift = (selected ? kColorIndexCount : 0);
|
const auto shift = (selected ? kColorIndexCount : 0);
|
||||||
auto &result = _coloredTextPalettes[shift + colorIndex];
|
auto &result = _coloredTextPalettes[shift + colorIndex];
|
||||||
if (!result.linkFg) {
|
if (!result.linkFg) {
|
||||||
result.linkFg.emplace(FromNameFg(this, selected, colorIndex));
|
result.linkFg.emplace(coloredValues(selected, colorIndex).name);
|
||||||
make(
|
make(
|
||||||
result.data,
|
result.data,
|
||||||
(selected
|
(selected
|
||||||
|
|
Loading…
Add table
Reference in a new issue