Introduced new struct to dialogs style for icons.
This commit is contained in:
parent
089432be5e
commit
9d4b8bb9b0
10 changed files with 203 additions and 144 deletions
|
@ -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
|
||||||
|
|
|
@ -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 }};
|
||||||
|
|
|
@ -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
|
||||||
|
|
21
Telegram/SourceFiles/dialogs/dialogs_three_state_icon.h
Normal file
21
Telegram/SourceFiles/dialogs/dialogs_three_state_icon.h
Normal 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
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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(); },
|
||||||
|
|
|
@ -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;
|
||||||
})();
|
})();
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue