Introduced new struct to dialogs style for icons.

This commit is contained in:
23rd 2023-08-30 05:25:34 +03:00
parent 089432be5e
commit 9d4b8bb9b0
10 changed files with 203 additions and 144 deletions

View file

@ -763,8 +763,8 @@ int PeerListRow::paintNameIconGetWidth(
? st::dialogsVerifiedIconOver ? st::dialogsVerifiedIconOver
: st::dialogsVerifiedIcon), : st::dialogsVerifiedIcon),
.premium = &(selected .premium = &(selected
? st::dialogsPremiumIconOver ? st::dialogsPremiumIcon.over
: st::dialogsPremiumIcon), : st::dialogsPremiumIcon.icon),
.scam = &(selected ? st::dialogsScamFgOver : st::dialogsScamFg), .scam = &(selected ? st::dialogsScamFgOver : st::dialogsScamFg),
.premiumFg = &(selected .premiumFg = &(selected
? st::dialogsVerifiedIconBgOver ? st::dialogsVerifiedIconBgOver

View file

@ -23,6 +23,12 @@ DialogRow {
unreadMarkDiameter: pixels; unreadMarkDiameter: pixels;
} }
ThreeStateIcon {
icon: icon;
over: icon;
active: icon;
}
ForumTopicIcon { ForumTopicIcon {
size: pixels; size: pixels;
font: font; font: font;
@ -316,38 +322,56 @@ dialogSearchFrom: IconButton(dialogCalendar) {
} }
dialogsChatTypeSkip: 3px; dialogsChatTypeSkip: 3px;
dialogsChatIcon: icon {{ "dialogs/dialogs_chat", dialogsChatIconFg, point(1px, 4px) }}; dialogsChatIcon: ThreeStateIcon {
dialogsChatIconOver: icon {{ "dialogs/dialogs_chat", dialogsChatIconFgOver, point(1px, 4px) }}; icon: icon {{ "dialogs/dialogs_chat", dialogsChatIconFg, point(1px, 4px) }};
dialogsChatIconActive: icon {{ "dialogs/dialogs_chat", dialogsChatIconFgActive, point(1px, 4px) }}; over: icon {{ "dialogs/dialogs_chat", dialogsChatIconFgOver, point(1px, 4px) }};
dialogsChannelIcon: icon {{ "dialogs/dialogs_channel", dialogsChatIconFg, point(3px, 4px) }}; active: icon {{ "dialogs/dialogs_chat", dialogsChatIconFgActive, point(1px, 4px) }};
dialogsChannelIconOver: icon {{ "dialogs/dialogs_channel", dialogsChatIconFgOver, point(3px, 4px) }}; }
dialogsChannelIconActive: icon {{ "dialogs/dialogs_channel", dialogsChatIconFgActive, point(3px, 4px) }}; dialogsChannelIcon: ThreeStateIcon {
dialogsBotIcon: icon {{ "dialogs/dialogs_bot", dialogsChatIconFg, point(1px, 3px) }}; icon: icon {{ "dialogs/dialogs_channel", dialogsChatIconFg, point(3px, 4px) }};
dialogsBotIconOver: icon {{ "dialogs/dialogs_bot", dialogsChatIconFgOver, point(1px, 3px) }}; over: icon {{ "dialogs/dialogs_channel", dialogsChatIconFgOver, point(3px, 4px) }};
dialogsBotIconActive: icon {{ "dialogs/dialogs_bot", dialogsChatIconFgActive, point(1px, 3px) }}; active: icon {{ "dialogs/dialogs_channel", dialogsChatIconFgActive, point(3px, 4px) }};
dialogsForumIcon: icon {{ "dialogs/dialogs_forum", dialogsChatIconFg, point(1px, 4px) }}; }
dialogsForumIconOver: icon {{ "dialogs/dialogs_forum", dialogsChatIconFgOver, point(1px, 4px) }}; dialogsBotIcon: ThreeStateIcon {
dialogsForumIconActive: icon {{ "dialogs/dialogs_forum", dialogsChatIconFgActive, point(1px, 4px) }}; icon: icon {{ "dialogs/dialogs_bot", dialogsChatIconFg, point(1px, 3px) }};
over: icon {{ "dialogs/dialogs_bot", dialogsChatIconFgOver, point(1px, 3px) }};
active: icon {{ "dialogs/dialogs_bot", dialogsChatIconFgActive, point(1px, 3px) }};
}
dialogsForumIcon: ThreeStateIcon {
icon: icon {{ "dialogs/dialogs_forum", dialogsChatIconFg, point(1px, 4px) }};
over: icon {{ "dialogs/dialogs_forum", dialogsChatIconFgOver, point(1px, 4px) }};
active: icon {{ "dialogs/dialogs_forum", dialogsChatIconFgActive, point(1px, 4px) }};
}
dialogsArchiveUserpic: icon {{ "archive_userpic", historyPeerUserpicFg }}; dialogsArchiveUserpic: icon {{ "archive_userpic", historyPeerUserpicFg }};
dialogsRepliesUserpic: icon {{ "replies_userpic", historyPeerUserpicFg }}; dialogsRepliesUserpic: icon {{ "replies_userpic", historyPeerUserpicFg }};
dialogsInaccessibleUserpic: icon {{ "dialogs/inaccessible_userpic", historyPeerUserpicFg }}; dialogsInaccessibleUserpic: icon {{ "dialogs/inaccessible_userpic", historyPeerUserpicFg }};
dialogsSendStateSkip: 20px; dialogsSendStateSkip: 20px;
dialogsSendingIcon: icon {{ "dialogs/dialogs_sending", dialogsSendingIconFg, point(8px, 4px) }}; dialogsSendingIcon: ThreeStateIcon {
dialogsSendingIconOver: icon {{ "dialogs/dialogs_sending", dialogsSendingIconFgOver, point(8px, 4px) }}; icon: icon {{ "dialogs/dialogs_sending", dialogsSendingIconFg, point(8px, 4px) }};
dialogsSendingIconActive: icon {{ "dialogs/dialogs_sending", dialogsSendingIconFgActive, point(8px, 4px) }}; over: icon {{ "dialogs/dialogs_sending", dialogsSendingIconFgOver, point(8px, 4px) }};
dialogsSentIcon: icon {{ "dialogs/dialogs_sent", dialogsSentIconFg, point(10px, 4px) }}; active: icon {{ "dialogs/dialogs_sending", dialogsSendingIconFgActive, point(8px, 4px) }};
dialogsSentIconOver: icon {{ "dialogs/dialogs_sent", dialogsSentIconFgOver, point(10px, 4px) }}; }
dialogsSentIconActive: icon {{ "dialogs/dialogs_sent", dialogsSentIconFgActive, point(10px, 4px) }}; dialogsSentIcon: ThreeStateIcon {
dialogsReceivedIcon: icon {{ "dialogs/dialogs_received", dialogsSentIconFg, point(5px, 4px) }}; icon: icon {{ "dialogs/dialogs_sent", dialogsSentIconFg, point(10px, 4px) }};
dialogsReceivedIconOver: icon {{ "dialogs/dialogs_received", dialogsSentIconFgOver, point(5px, 4px) }}; over: icon {{ "dialogs/dialogs_sent", dialogsSentIconFgOver, point(10px, 4px) }};
dialogsReceivedIconActive: icon {{ "dialogs/dialogs_received", dialogsSentIconFgActive, point(5px, 4px) }}; active: icon {{ "dialogs/dialogs_sent", dialogsSentIconFgActive, point(10px, 4px) }};
dialogsPinnedIcon: icon {{ "dialogs/dialogs_pinned", dialogsUnreadBgMuted }}; }
dialogsPinnedIconOver: icon {{ "dialogs/dialogs_pinned", dialogsUnreadBgMutedOver }}; dialogsReceivedIcon: ThreeStateIcon {
dialogsPinnedIconActive: icon {{ "dialogs/dialogs_pinned", dialogsUnreadBgMutedActive }}; icon: icon {{ "dialogs/dialogs_received", dialogsSentIconFg, point(5px, 4px) }};
dialogsLockIcon: icon {{ "emoji/premium_lock", dialogsUnreadBgMuted, point(4px, 0px) }}; over: icon {{ "dialogs/dialogs_received", dialogsSentIconFgOver, point(5px, 4px) }};
dialogsLockIconOver: icon {{ "emoji/premium_lock", dialogsUnreadBgMutedOver, point(4px, 0px) }}; active: icon {{ "dialogs/dialogs_received", dialogsSentIconFgActive, point(5px, 4px) }};
dialogsLockIconActive: icon {{ "emoji/premium_lock", dialogsUnreadBgMutedActive, point(4px, 0px) }}; }
dialogsPinnedIcon: ThreeStateIcon {
icon: icon {{ "dialogs/dialogs_pinned", dialogsUnreadBgMuted }};
over: icon {{ "dialogs/dialogs_pinned", dialogsUnreadBgMutedOver }};
active: icon {{ "dialogs/dialogs_pinned", dialogsUnreadBgMutedActive }};
}
dialogsLockIcon: ThreeStateIcon {
icon: icon {{ "emoji/premium_lock", dialogsUnreadBgMuted, point(4px, 0px) }};
over: icon {{ "emoji/premium_lock", dialogsUnreadBgMutedOver, point(4px, 0px) }};
active: icon {{ "emoji/premium_lock", dialogsUnreadBgMutedActive, point(4px, 0px) }};
}
dialogsVerifiedIcon: icon { dialogsVerifiedIcon: icon {
{ "dialogs/dialogs_verified_star", dialogsVerifiedIconBg }, { "dialogs/dialogs_verified_star", dialogsVerifiedIconBg },
@ -361,9 +385,11 @@ dialogsVerifiedIconActive: icon {
{ "dialogs/dialogs_verified_star", dialogsVerifiedIconBgActive }, { "dialogs/dialogs_verified_star", dialogsVerifiedIconBgActive },
{ "dialogs/dialogs_verified_check", dialogsVerifiedIconFgActive }, { "dialogs/dialogs_verified_check", dialogsVerifiedIconFgActive },
}; };
dialogsPremiumIcon: icon {{ "dialogs/dialogs_premium", dialogsVerifiedIconBg }}; dialogsPremiumIcon: ThreeStateIcon {
dialogsPremiumIconOver: icon {{ "dialogs/dialogs_premium", dialogsVerifiedIconBgOver }}; icon: icon {{ "dialogs/dialogs_premium", dialogsVerifiedIconBg }};
dialogsPremiumIconActive: icon {{ "dialogs/dialogs_premium", dialogsVerifiedIconBgActive }}; over: icon {{ "dialogs/dialogs_premium", dialogsVerifiedIconBgOver }};
active: icon {{ "dialogs/dialogs_premium", dialogsVerifiedIconBgActive }};
}
historySendingIcon: icon {{ "dialogs/dialogs_sending", historySendingOutIconFg, point(5px, 5px) }}; historySendingIcon: icon {{ "dialogs/dialogs_sending", historySendingOutIconFg, point(5px, 5px) }};
historySendingInvertedIcon: icon {{ "dialogs/dialogs_sending", historySendingInvertedIconFg, point(5px, 5px) }}; historySendingInvertedIcon: icon {{ "dialogs/dialogs_sending", historySendingInvertedIconFg, point(5px, 5px) }};
@ -436,17 +462,23 @@ dialogsMiniPreviewSkip: 2px;
dialogsMiniPreviewRight: 3px; dialogsMiniPreviewRight: 3px;
dialogsMiniPlay: icon{{ "dialogs/dialogs_mini_play", videoPlayIconFg }}; dialogsMiniPlay: icon{{ "dialogs/dialogs_mini_play", videoPlayIconFg }};
dialogsMiniForwardIcon: icon {{ "mini_forward", dialogsTextFg, point(0px, 1px) }}; dialogsMiniForwardIcon: ThreeStateIcon {
dialogsMiniForwardIconOver: icon {{ "mini_forward", dialogsTextFgOver, point(0px, 1px) }}; icon: icon {{ "mini_forward", dialogsTextFg, point(0px, 1px) }};
dialogsMiniForwardIconActive: icon {{ "mini_forward", dialogsTextFgActive, point(0px, 1px) }}; over: icon {{ "mini_forward", dialogsTextFgOver, point(0px, 1px) }};
active: icon {{ "mini_forward", dialogsTextFgActive, point(0px, 1px) }};
}
dialogsMiniForwardIconSkip: 2px; dialogsMiniForwardIconSkip: 2px;
dialogsUnreadMention: icon{{ "dialogs/dialogs_mention", dialogsUnreadFg }}; dialogsUnreadMention: ThreeStateIcon {
dialogsUnreadMentionOver: icon{{ "dialogs/dialogs_mention", dialogsUnreadFgOver }}; icon: icon{{ "dialogs/dialogs_mention", dialogsUnreadFg }};
dialogsUnreadMentionActive: icon{{ "dialogs/dialogs_mention", dialogsUnreadFgActive }}; over: icon{{ "dialogs/dialogs_mention", dialogsUnreadFgOver }};
dialogsUnreadReaction: icon{{ "dialogs/dialogs_reaction", dialogsUnreadFg }}; active: icon{{ "dialogs/dialogs_mention", dialogsUnreadFgActive }};
dialogsUnreadReactionOver: icon{{ "dialogs/dialogs_reaction", dialogsUnreadFgOver }}; }
dialogsUnreadReactionActive: icon{{ "dialogs/dialogs_reaction", dialogsUnreadFgActive }}; dialogsUnreadReaction: ThreeStateIcon {
icon: icon{{ "dialogs/dialogs_reaction", dialogsUnreadFg }};
over: icon{{ "dialogs/dialogs_reaction", dialogsUnreadFgOver }};
active: icon{{ "dialogs/dialogs_reaction", dialogsUnreadFgActive }};
}
downloadBarHeight: 46px; downloadBarHeight: 46px;
downloadArrow: icon{{ "fast_to_original", menuIconFg }}; downloadArrow: icon{{ "fast_to_original", menuIconFg }};

View file

@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/ */
#include "dialogs/dialogs_inner_widget.h" #include "dialogs/dialogs_inner_widget.h"
#include "dialogs/dialogs_three_state_icon.h"
#include "dialogs/ui/dialogs_layout.h" #include "dialogs/ui/dialogs_layout.h"
#include "dialogs/ui/dialogs_stories_content.h" #include "dialogs/ui/dialogs_stories_content.h"
#include "dialogs/ui/dialogs_stories_list.h" #include "dialogs/ui/dialogs_stories_list.h"
@ -1010,11 +1011,10 @@ void InnerWidget::paintPeerSearchResult(
: context.selected : context.selected
? &st::dialogsVerifiedIconOver ? &st::dialogsVerifiedIconOver
: &st::dialogsVerifiedIcon), : &st::dialogsVerifiedIcon),
.premium = (context.active .premium = &ThreeStateIcon(
? &st::dialogsPremiumIconActive st::dialogsPremiumIcon,
: context.selected context.active,
? &st::dialogsPremiumIconOver context.selected),
: &st::dialogsPremiumIcon),
.scam = (context.active .scam = (context.active
? &st::dialogsScamFgActive ? &st::dialogsScamFgActive
: context.selected : context.selected

View file

@ -0,0 +1,21 @@
/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#pragma once
#include "styles/style_dialogs.h"
namespace Dialogs {
[[nodiscard]] inline const style::icon &ThreeStateIcon(
const style::ThreeStateIcon &icons,
bool active,
bool over) {
return active ? icons.active : over ? icons.over : icons.icon;
}
} // namespace Dialogs

View file

@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "data/data_forum_topic.h" #include "data/data_forum_topic.h"
#include "data/data_session.h" #include "data/data_session.h"
#include "dialogs/dialogs_list.h" #include "dialogs/dialogs_list.h"
#include "dialogs/dialogs_three_state_icon.h"
#include "dialogs/ui/dialogs_video_userpic.h" #include "dialogs/ui/dialogs_video_userpic.h"
#include "styles/style_dialogs.h" #include "styles/style_dialogs.h"
#include "styles/style_window.h" #include "styles/style_window.h"
@ -147,11 +148,10 @@ int PaintBadges(
const auto badge = PaintUnreadBadge(p, counter, right, top, st); const auto badge = PaintUnreadBadge(p, counter, right, top, st);
right -= badge.width() + st.padding; right -= badge.width() + st.padding;
} else if (displayPinnedIcon) { } else if (displayPinnedIcon) {
const auto &icon = context.active const auto &icon = ThreeStateIcon(
? st::dialogsPinnedIconActive st::dialogsPinnedIcon,
: context.selected context.active,
? st::dialogsPinnedIconOver context.selected);
: st::dialogsPinnedIcon;
icon.paint(p, right - icon.width(), pinnedIconTop, context.width); icon.paint(p, right - icon.width(), pinnedIconTop, context.width);
right -= icon.width() + st::dialogsUnreadPadding; right -= icon.width() + st::dialogsUnreadPadding;
} }
@ -169,17 +169,12 @@ int PaintBadges(
st.textTop = 0; st.textTop = 0;
const auto counter = QString(); const auto counter = QString();
const auto badge = PaintUnreadBadge(p, counter, right, top, st); const auto badge = PaintUnreadBadge(p, counter, right, top, st);
(badgesState.mention ThreeStateIcon(
? (st.active badgesState.mention
? st::dialogsUnreadMentionActive ? st::dialogsUnreadMention
: st.selected : st::dialogsUnreadReaction,
? st::dialogsUnreadMentionOver st.active,
: st::dialogsUnreadMention) st.selected).paintInCenter(p, badge);
: (st.active
? st::dialogsUnreadReactionActive
: st.selected
? st::dialogsUnreadReactionOver
: st::dialogsUnreadReaction)).paintInCenter(p, badge);
right -= badge.width() + st.padding + st::dialogsUnreadPadding; right -= badge.width() + st.padding + st::dialogsUnreadPadding;
} }
return (initial - right); return (initial - right);
@ -437,11 +432,10 @@ void PaintRow(
auto availableWidth = namewidth; auto availableWidth = namewidth;
if (entry->isPinnedDialog(context.filter) if (entry->isPinnedDialog(context.filter)
&& (context.filter || !entry->fixedOnTopIndex())) { && (context.filter || !entry->fixedOnTopIndex())) {
auto &icon = context.active auto &icon = ThreeStateIcon(
? st::dialogsPinnedIconActive st::dialogsPinnedIcon,
: context.selected context.active,
? st::dialogsPinnedIconOver context.selected);
: st::dialogsPinnedIcon;
icon.paint( icon.paint(
p, p,
context.width - context.st->padding.right() - icon.width(), context.width - context.st->padding.right() - icon.width(),
@ -527,11 +521,10 @@ void PaintRow(
auto availableWidth = namewidth; auto availableWidth = namewidth;
if (entry->isPinnedDialog(context.filter) if (entry->isPinnedDialog(context.filter)
&& (context.filter || !entry->fixedOnTopIndex())) { && (context.filter || !entry->fixedOnTopIndex())) {
auto &icon = context.active auto &icon = ThreeStateIcon(
? st::dialogsPinnedIconActive st::dialogsPinnedIcon,
: context.selected context.active,
? st::dialogsPinnedIconOver context.selected);
: st::dialogsPinnedIcon;
icon.paint(p, context.width - context.st->padding.right() - icon.width(), texttop, context.width); icon.paint(p, context.width - context.st->padding.right() - icon.width(), texttop, context.width);
availableWidth -= icon.width() + st::dialogsUnreadPadding; availableWidth -= icon.width() + st::dialogsUnreadPadding;
} }
@ -561,51 +554,49 @@ void PaintRow(
paintItemCallback(nameleft, namewidth); paintItemCallback(nameleft, namewidth);
} else if (entry->isPinnedDialog(context.filter) } else if (entry->isPinnedDialog(context.filter)
&& (context.filter || !entry->fixedOnTopIndex())) { && (context.filter || !entry->fixedOnTopIndex())) {
auto &icon = context.active auto &icon = ThreeStateIcon(
? st::dialogsPinnedIconActive st::dialogsPinnedIcon,
: context.selected context.active,
? st::dialogsPinnedIconOver context.selected);
: st::dialogsPinnedIcon; icon.paint(
icon.paint(p, context.width - context.st->padding.right() - icon.width(), texttop, context.width); p,
context.width - context.st->padding.right() - icon.width(),
texttop,
context.width);
} }
const auto sendStateIcon = [&]() -> const style::icon* { const auto sendStateIcon = [&]() -> const style::icon* {
if (!thread) { if (!thread) {
return nullptr; return nullptr;
} else if (const auto topic = thread->asTopic() } else if (const auto topic = thread->asTopic()
; !context.search && topic && topic->closed()) { ; !context.search && topic && topic->closed()) {
return &(context.active return &ThreeStateIcon(
? st::dialogsLockIconActive st::dialogsLockIcon,
: context.selected context.active,
? st::dialogsLockIconOver context.selected);
: st::dialogsLockIcon);
} else if (draft) { } else if (draft) {
if (draft->saveRequestId) { if (draft->saveRequestId) {
return &(context.active return &ThreeStateIcon(
? st::dialogsSendingIconActive st::dialogsSendingIcon,
: context.selected context.active,
? st::dialogsSendingIconOver context.selected);
: st::dialogsSendingIcon);
} }
} else if (item && !item->isEmpty() && item->needCheck()) { } else if (item && !item->isEmpty() && item->needCheck()) {
if (!item->isSending() && !item->hasFailed()) { if (!item->isSending() && !item->hasFailed()) {
if (item->unread(thread)) { if (item->unread(thread)) {
return &(context.active return &ThreeStateIcon(
? st::dialogsSentIconActive st::dialogsSentIcon,
: context.selected context.active,
? st::dialogsSentIconOver context.selected);
: st::dialogsSentIcon);
} }
return &(context.active return &ThreeStateIcon(
? st::dialogsReceivedIconActive st::dialogsReceivedIcon,
: context.selected context.active,
? st::dialogsReceivedIconOver context.selected);
: st::dialogsReceivedIcon);
} }
return &(context.active return &ThreeStateIcon(
? st::dialogsSendingIconActive st::dialogsSendingIcon,
: context.selected context.active,
? st::dialogsSendingIconOver context.selected);
: st::dialogsSendingIcon);
} }
return nullptr; return nullptr;
}(); }();
@ -643,11 +634,10 @@ void PaintRow(
: context.selected : context.selected
? &st::dialogsVerifiedIconOver ? &st::dialogsVerifiedIconOver
: &st::dialogsVerifiedIcon), : &st::dialogsVerifiedIcon),
.premium = (context.active .premium = &ThreeStateIcon(
? &st::dialogsPremiumIconActive st::dialogsPremiumIcon,
: context.selected context.active,
? &st::dialogsPremiumIconOver context.selected),
: &st::dialogsPremiumIcon),
.scam = (context.active .scam = (context.active
? &st::dialogsScamFgActive ? &st::dialogsScamFgActive
: context.selected : context.selected
@ -710,30 +700,26 @@ const style::icon *ChatTypeIcon(
const PaintContext &context) { const PaintContext &context) {
if (const auto user = peer->asUser()) { if (const auto user = peer->asUser()) {
if (ShowUserBotIcon(user)) { if (ShowUserBotIcon(user)) {
return &(context.active return &ThreeStateIcon(
? st::dialogsBotIconActive st::dialogsBotIcon,
: context.selected context.active,
? st::dialogsBotIconOver context.selected);
: st::dialogsBotIcon);
} }
} else if (peer->isBroadcast()) { } else if (peer->isBroadcast()) {
return &(context.active return &ThreeStateIcon(
? st::dialogsChannelIconActive st::dialogsChannelIcon,
: context.selected context.active,
? st::dialogsChannelIconOver context.selected);
: st::dialogsChannelIcon);
} else if (peer->isForum()) { } else if (peer->isForum()) {
return &(context.active return &ThreeStateIcon(
? st::dialogsForumIconActive st::dialogsForumIcon,
: context.selected context.active,
? st::dialogsForumIconOver context.selected);
: st::dialogsForumIcon);
} else { } else {
return &(context.active return &ThreeStateIcon(
? st::dialogsChatIconActive st::dialogsChatIcon,
: context.selected context.active,
? st::dialogsChatIconOver context.selected);
: st::dialogsChatIcon);
} }
return nullptr; return nullptr;
} }

View file

@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "history/history_item.h" #include "history/history_item.h"
#include "history/view/history_view_item_preview.h" #include "history/view/history_view_item_preview.h"
#include "main/main_session.h" #include "main/main_session.h"
#include "dialogs/dialogs_three_state_icon.h"
#include "dialogs/ui/dialogs_layout.h" #include "dialogs/ui/dialogs_layout.h"
#include "dialogs/ui/dialogs_topics_view.h" #include "dialogs/ui/dialogs_topics_view.h"
#include "ui/effects/spoiler_mess.h" #include "ui/effects/spoiler_mess.h"
@ -316,11 +317,10 @@ void MessageView::paint(
} }
if (_displayMiniForwardIcon) { if (_displayMiniForwardIcon) {
const auto &icon = context.active const auto &icon = ThreeStateIcon(
? st::dialogsMiniForwardIconActive st::dialogsMiniForwardIcon,
: context.selected context.active,
? st::dialogsMiniForwardIconOver context.selected);
: st::dialogsMiniForwardIcon;
icon.paint(p, rect.topLeft(), rect.width()); icon.paint(p, rect.topLeft(), rect.width());
rect.setLeft(rect.x() rect.setLeft(rect.x()
+ icon.width() + icon.width()

View file

@ -759,7 +759,9 @@ QSize Message::performCountOptimalSize() {
: item->hiddenSenderInfo()->nameText(); : item->hiddenSenderInfo()->nameText();
auto namew = st::msgPadding.left() auto namew = st::msgPadding.left()
+ name.maxWidth() + name.maxWidth()
+ (_fromNameStatus ? st::dialogsPremiumIcon.width() : 0) + (_fromNameStatus
? st::dialogsPremiumIcon.icon.width()
: 0)
+ st::msgPadding.right(); + st::msgPadding.right();
if (via && !displayForwardedFrom()) { if (via && !displayForwardedFrom()) {
namew += st::msgServiceFont->spacew + via->maxWidth namew += st::msgServiceFont->spacew + via->maxWidth
@ -1358,7 +1360,7 @@ void Message::paintFromName(
return &info->nameText(); return &info->nameText();
}(); }();
const auto statusWidth = _fromNameStatus const auto statusWidth = _fromNameStatus
? st::dialogsPremiumIcon.width() ? st::dialogsPremiumIcon.icon.width()
: 0; : 0;
if (statusWidth && availableWidth > statusWidth) { if (statusWidth && availableWidth > statusWidth) {
const auto x = availableLeft const auto x = availableLeft
@ -1398,7 +1400,7 @@ void Message::paintFromName(
.paused = context.paused || On(PowerSaving::kEmojiStatus), .paused = context.paused || On(PowerSaving::kEmojiStatus),
}); });
} else { } else {
st::dialogsPremiumIcon.paint(p, x, y, width(), color); st::dialogsPremiumIcon.icon.paint(p, x, y, width(), color);
} }
availableWidth -= statusWidth; availableWidth -= statusWidth;
} }
@ -1407,7 +1409,8 @@ void Message::paintFromName(
nameText->drawElided(p, availableLeft, trect.top(), availableWidth); nameText->drawElided(p, availableLeft, trect.top(), availableWidth);
const auto skipWidth = nameText->maxWidth() const auto skipWidth = nameText->maxWidth()
+ (_fromNameStatus + (_fromNameStatus
? (st::dialogsPremiumIcon.width() + st::msgServiceFont->spacew) ? (st::dialogsPremiumIcon.icon.width()
+ st::msgServiceFont->spacew)
: 0) : 0)
+ st::msgServiceFont->spacew; + st::msgServiceFont->spacew;
availableLeft += skipWidth; availableLeft += skipWidth;
@ -3525,7 +3528,7 @@ void Message::fromNameUpdated(int width) const {
- st::msgPadding.right() - st::msgPadding.right()
- nameText->maxWidth() - nameText->maxWidth()
+ (_fromNameStatus + (_fromNameStatus
? (st::dialogsPremiumIcon.width() ? (st::dialogsPremiumIcon.icon.width()
+ st::msgServiceFont->spacew) + st::msgServiceFont->spacew)
: 0) : 0)
- st::msgServiceFont->spacew); - st::msgServiceFont->spacew);

View file

@ -561,7 +561,7 @@ void TopBarWidget::paintTopBar(Painter &p) {
{ {
.peer = peer, .peer = peer,
.verified = &st::dialogsVerifiedIcon, .verified = &st::dialogsVerifiedIcon,
.premium = &st::dialogsPremiumIcon, .premium = &st::dialogsPremiumIcon.icon,
.scam = &st::attentionButtonFg, .scam = &st::attentionButtonFg,
.premiumFg = &st::dialogsVerifiedIconBg, .premiumFg = &st::dialogsVerifiedIconBg,
.customEmojiRepaint = [=] { update(); }, .customEmojiRepaint = [=] { update(); },

View file

@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/ */
#include "window/themes/window_theme_preview.h" #include "window/themes/window_theme_preview.h"
#include "dialogs/dialogs_three_state_icon.h"
#include "lang/lang_keys.h" #include "lang/lang_keys.h"
#include "platform/platform_window_title.h" #include "platform/platform_window_title.h"
#include "ui/text/text_options.h" #include "ui/text/text_options.h"
@ -695,9 +696,15 @@ void Generator::paintRow(const Row &row) {
auto chatTypeIcon = ([&row]() -> const style::icon * { auto chatTypeIcon = ([&row]() -> const style::icon * {
if (row.type == Row::Type::Group) { if (row.type == Row::Type::Group) {
return &(row.active ? st::dialogsChatIconActive : (row.selected ? st::dialogsChatIconOver : st::dialogsChatIcon)); return &Dialogs::ThreeStateIcon(
st::dialogsChatIcon,
row.active,
row.selected);
} else if (row.type == Row::Type::Channel) { } else if (row.type == Row::Type::Channel) {
return &(row.active ? st::dialogsChannelIconActive : (row.selected ? st::dialogsChannelIconOver : st::dialogsChannelIcon)); return &Dialogs::ThreeStateIcon(
st::dialogsChannelIcon,
row.active,
row.selected);
} }
return nullptr; return nullptr;
})(); })();
@ -750,7 +757,10 @@ void Generator::paintRow(const Row &row) {
_p->setPen(row.active ? st::dialogsUnreadFgActive[_palette] : (row.selected ? st::dialogsUnreadFgOver[_palette] : st::dialogsUnreadFg[_palette])); _p->setPen(row.active ? st::dialogsUnreadFgActive[_palette] : (row.selected ? st::dialogsUnreadFgOver[_palette] : st::dialogsUnreadFg[_palette]));
_p->drawText(unreadRectLeft + (unreadRectWidth - unreadWidth) / 2, unreadRectTop + textTop + st::dialogsUnreadFont->ascent, counter); _p->drawText(unreadRectLeft + (unreadRectWidth - unreadWidth) / 2, unreadRectTop + textTop + st::dialogsUnreadFont->ascent, counter);
} else if (row.pinned) { } else if (row.pinned) {
auto icon = (row.active ? st::dialogsPinnedIconActive[_palette] : (row.selected ? st::dialogsPinnedIconOver[_palette] : st::dialogsPinnedIcon[_palette])); auto icon = Dialogs::ThreeStateIcon(
st::dialogsPinnedIcon,
row.active,
row.selected)[_palette];
icon.paint(*_p, x + fullWidth - st.padding.right() - icon.width(), texttop, fullWidth); icon.paint(*_p, x + fullWidth - st.padding.right() - icon.width(), texttop, fullWidth);
availableWidth -= icon.width() + st::dialogsUnreadPadding; availableWidth -= icon.width() + st::dialogsUnreadPadding;
} }
@ -763,9 +773,15 @@ void Generator::paintRow(const Row &row) {
auto sendStateIcon = ([&row]() -> const style::icon* { auto sendStateIcon = ([&row]() -> const style::icon* {
if (row.status == Status::Sent) { if (row.status == Status::Sent) {
return &(row.active ? st::dialogsSentIconActive : (row.selected ? st::dialogsSentIconOver : st::dialogsSentIcon)); return &Dialogs::ThreeStateIcon(
st::dialogsSentIcon,
row.active,
row.selected);
} else if (row.status == Status::Received) { } else if (row.status == Status::Received) {
return &(row.active ? st::dialogsReceivedIconActive : (row.selected ? st::dialogsReceivedIconOver : st::dialogsReceivedIcon)); return &Dialogs::ThreeStateIcon(
st::dialogsReceivedIcon,
row.active,
row.selected);
} }
return nullptr; return nullptr;
})(); })();

View file

@ -70,6 +70,7 @@ PRIVATE
data/data_subscription_option.h data/data_subscription_option.h
dialogs/dialogs_three_state_icon.h
dialogs/ui/dialogs_stories_list.cpp dialogs/ui/dialogs_stories_list.cpp
dialogs/ui/dialogs_stories_list.h dialogs/ui/dialogs_stories_list.h