Add a distinct forum icon in chats list.

This commit is contained in:
John Preston 2022-10-25 16:40:54 +04:00
parent 76330eaaa6
commit 97d8aa0a0d
8 changed files with 38 additions and 19 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 902 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -271,7 +271,7 @@ dialogSearchFrom: IconButton(dialogCalendar) {
iconPosition: point(9px, 8px); iconPosition: point(9px, 8px);
} }
dialogsChatTypeSkip: 20px; dialogsChatTypeSkip: 3px;
dialogsChatIcon: icon {{ "dialogs/dialogs_chat", dialogsChatIconFg, point(1px, 4px) }}; dialogsChatIcon: icon {{ "dialogs/dialogs_chat", dialogsChatIconFg, point(1px, 4px) }};
dialogsChatIconOver: icon {{ "dialogs/dialogs_chat", dialogsChatIconFgOver, point(1px, 4px) }}; dialogsChatIconOver: icon {{ "dialogs/dialogs_chat", dialogsChatIconFgOver, point(1px, 4px) }};
dialogsChatIconActive: icon {{ "dialogs/dialogs_chat", dialogsChatIconFgActive, point(1px, 4px) }}; dialogsChatIconActive: icon {{ "dialogs/dialogs_chat", dialogsChatIconFgActive, point(1px, 4px) }};
@ -281,6 +281,9 @@ dialogsChannelIconActive: icon {{ "dialogs/dialogs_channel", dialogsChatIconFgAc
dialogsBotIcon: icon {{ "dialogs/dialogs_bot", dialogsChatIconFg, point(1px, 3px) }}; dialogsBotIcon: icon {{ "dialogs/dialogs_bot", dialogsChatIconFg, point(1px, 3px) }};
dialogsBotIconOver: icon {{ "dialogs/dialogs_bot", dialogsChatIconFgOver, point(1px, 3px) }}; dialogsBotIconOver: icon {{ "dialogs/dialogs_bot", dialogsChatIconFgOver, point(1px, 3px) }};
dialogsBotIconActive: icon {{ "dialogs/dialogs_bot", dialogsChatIconFgActive, point(1px, 3px) }}; dialogsBotIconActive: icon {{ "dialogs/dialogs_bot", dialogsChatIconFgActive, point(1px, 3px) }};
dialogsForumIcon: icon {{ "dialogs/dialogs_forum", dialogsChatIconFg, point(1px, 4px) }};
dialogsForumIconOver: icon {{ "dialogs/dialogs_forum", dialogsChatIconFgOver, point(1px, 4px) }};
dialogsForumIconActive: 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 }};

View file

@ -859,7 +859,9 @@ void InnerWidget::paintPeerSearchResult(
// draw chat icon // draw chat icon
if (const auto chatTypeIcon = Ui::ChatTypeIcon(peer, context)) { if (const auto chatTypeIcon = Ui::ChatTypeIcon(peer, context)) {
chatTypeIcon->paint(p, rectForName.topLeft(), context.width); chatTypeIcon->paint(p, rectForName.topLeft(), context.width);
rectForName.setLeft(rectForName.left() + st::dialogsChatTypeSkip); rectForName.setLeft(rectForName.left()
+ chatTypeIcon->width()
+ st::dialogsChatTypeSkip);
} }
const auto badgeWidth = result->badge.drawGetWidth( const auto badgeWidth = result->badge.drawGetWidth(
p, p,
@ -987,7 +989,9 @@ void InnerWidget::paintSearchInFilter(
st::semiboldFont->height); st::semiboldFont->height);
if (icon) { if (icon) {
icon->paint(p, rectForName.topLeft(), width()); icon->paint(p, rectForName.topLeft(), width());
rectForName.setLeft(rectForName.left() + st::dialogsChatTypeSkip); rectForName.setLeft(rectForName.left()
+ icon->width()
+ st::dialogsChatTypeSkip);
} }
p.setPen(savedPen); p.setPen(savedPen);
text.drawLeftElided( text.drawLeftElided(

View file

@ -340,7 +340,9 @@ void PaintRow(
} else if (from) { } else if (from) {
if (const auto chatTypeIcon = ChatTypeIcon(from, context)) { if (const auto chatTypeIcon = ChatTypeIcon(from, context)) {
chatTypeIcon->paint(p, rectForName.topLeft(), context.width); chatTypeIcon->paint(p, rectForName.topLeft(), context.width);
rectForName.setLeft(rectForName.left() + st::dialogsChatTypeSkip); rectForName.setLeft(rectForName.left()
+ chatTypeIcon->width()
+ st::dialogsChatTypeSkip);
} }
} }
auto texttop = context.st->textTop; auto texttop = context.st->textTop;
@ -739,19 +741,7 @@ void PaintUnreadBadge(QPainter &p, const QRect &rect, const UnreadBadgeStyle &st
const style::icon *ChatTypeIcon( const style::icon *ChatTypeIcon(
not_null<PeerData*> peer, not_null<PeerData*> peer,
const PaintContext &context) { const PaintContext &context) {
if (peer->isChat() || peer->isMegagroup()) { if (const auto user = peer->asUser()) {
return &(context.active
? st::dialogsChatIconActive
: context.selected
? st::dialogsChatIconOver
: st::dialogsChatIcon);
} else if (peer->isChannel()) {
return &(context.active
? st::dialogsChannelIconActive
: context.selected
? st::dialogsChannelIconOver
: st::dialogsChannelIcon);
} else if (const auto user = peer->asUser()) {
if (ShowUserBotIcon(user)) { if (ShowUserBotIcon(user)) {
return &(context.active return &(context.active
? st::dialogsBotIconActive ? st::dialogsBotIconActive
@ -759,6 +749,24 @@ const style::icon *ChatTypeIcon(
? st::dialogsBotIconOver ? st::dialogsBotIconOver
: st::dialogsBotIcon); : st::dialogsBotIcon);
} }
} else if (peer->isBroadcast()) {
return &(context.active
? st::dialogsChannelIconActive
: context.selected
? st::dialogsChannelIconOver
: st::dialogsChannelIcon);
} else if (peer->isForum()) {
return &(context.active
? st::dialogsForumIconActive
: context.selected
? st::dialogsForumIconOver
: st::dialogsForumIcon);
} else {
return &(context.active
? st::dialogsChatIconActive
: context.selected
? st::dialogsChatIconOver
: st::dialogsChatIcon);
} }
return nullptr; return nullptr;
} }

View file

@ -870,7 +870,9 @@ void Notification::updateNotifyDisplay() {
} }
if (const auto chatTypeIcon = Dialogs::Ui::ChatTypeIcon(_history->peer)) { if (const auto chatTypeIcon = Dialogs::Ui::ChatTypeIcon(_history->peer)) {
chatTypeIcon->paint(p, rectForName.topLeft(), w); chatTypeIcon->paint(p, rectForName.topLeft(), w);
rectForName.setLeft(rectForName.left() + st::dialogsChatTypeSkip); rectForName.setLeft(rectForName.left()
+ chatTypeIcon->width()
+ st::dialogsChatTypeSkip);
} }
} }

View file

@ -700,7 +700,9 @@ void Generator::paintRow(const Row &row) {
})(); })();
if (chatTypeIcon) { if (chatTypeIcon) {
(*chatTypeIcon)[_palette].paint(*_p, rectForName.topLeft(), fullWidth); (*chatTypeIcon)[_palette].paint(*_p, rectForName.topLeft(), fullWidth);
rectForName.setLeft(rectForName.left() + st::dialogsChatTypeSkip); rectForName.setLeft(rectForName.left()
+ chatTypeIcon->width()
+ st::dialogsChatTypeSkip);
} }
auto texttop = y + st.textTop; auto texttop = y + st.textTop;