diff --git a/Telegram/Resources/icons/dialogs/avatar_hidden.png b/Telegram/Resources/icons/dialogs/avatar_hidden.png new file mode 100644 index 000000000..e032148c8 Binary files /dev/null and b/Telegram/Resources/icons/dialogs/avatar_hidden.png differ diff --git a/Telegram/Resources/icons/dialogs/avatar_hidden@2x.png b/Telegram/Resources/icons/dialogs/avatar_hidden@2x.png new file mode 100644 index 000000000..ef143054e Binary files /dev/null and b/Telegram/Resources/icons/dialogs/avatar_hidden@2x.png differ diff --git a/Telegram/Resources/icons/dialogs/avatar_hidden@3x.png b/Telegram/Resources/icons/dialogs/avatar_hidden@3x.png new file mode 100644 index 000000000..f6ef6b733 Binary files /dev/null and b/Telegram/Resources/icons/dialogs/avatar_hidden@3x.png differ diff --git a/Telegram/Resources/icons/dialogs/avatar_notes.png b/Telegram/Resources/icons/dialogs/avatar_notes.png new file mode 100644 index 000000000..740d38910 Binary files /dev/null and b/Telegram/Resources/icons/dialogs/avatar_notes.png differ diff --git a/Telegram/Resources/icons/dialogs/avatar_notes@2x.png b/Telegram/Resources/icons/dialogs/avatar_notes@2x.png new file mode 100644 index 000000000..98dc7c89c Binary files /dev/null and b/Telegram/Resources/icons/dialogs/avatar_notes@2x.png differ diff --git a/Telegram/Resources/icons/dialogs/avatar_notes@3x.png b/Telegram/Resources/icons/dialogs/avatar_notes@3x.png new file mode 100644 index 000000000..735961bd9 Binary files /dev/null and b/Telegram/Resources/icons/dialogs/avatar_notes@3x.png differ diff --git a/Telegram/Resources/icons/hidden_author_userpic.png b/Telegram/Resources/icons/hidden_author_userpic.png deleted file mode 100644 index 37acae5ab..000000000 Binary files a/Telegram/Resources/icons/hidden_author_userpic.png and /dev/null differ diff --git a/Telegram/Resources/icons/hidden_author_userpic@2x.png b/Telegram/Resources/icons/hidden_author_userpic@2x.png deleted file mode 100644 index 31c29045e..000000000 Binary files a/Telegram/Resources/icons/hidden_author_userpic@2x.png and /dev/null differ diff --git a/Telegram/Resources/icons/hidden_author_userpic@3x.png b/Telegram/Resources/icons/hidden_author_userpic@3x.png deleted file mode 100644 index b60d52b54..000000000 Binary files a/Telegram/Resources/icons/hidden_author_userpic@3x.png and /dev/null differ diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index acebc4530..26ef1de59 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -2530,6 +2530,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_replies_view_original" = "View in chat"; "lng_replies_messages" = "Replies"; "lng_hidden_author_messages" = "Author Hidden"; +"lng_my_notes" = "My Notes"; "lng_replies_discussion_started" = "Discussion started"; "lng_replies_no_comments" = "No comments here yet..."; diff --git a/Telegram/SourceFiles/dialogs/dialogs.style b/Telegram/SourceFiles/dialogs/dialogs.style index 4d379e4fb..055675b2d 100644 --- a/Telegram/SourceFiles/dialogs/dialogs.style +++ b/Telegram/SourceFiles/dialogs/dialogs.style @@ -347,7 +347,8 @@ dialogsForumIcon: ThreeStateIcon { dialogsArchiveUserpic: icon {{ "archive_userpic", historyPeerUserpicFg }}; dialogsRepliesUserpic: icon {{ "replies_userpic", historyPeerUserpicFg }}; dialogsInaccessibleUserpic: icon {{ "dialogs/inaccessible_userpic", historyPeerUserpicFg }}; -dialogsHiddenAuthorUserpic: icon {{ "hidden_author_userpic", historyPeerUserpicFg }}; +dialogsHiddenAuthorUserpic: icon {{ "dialogs/avatar_hidden", premiumButtonFg }}; +dialogsMyNotesUserpic: icon {{ "dialogs/avatar_notes", historyPeerUserpicFg }}; dialogsSendStateSkip: 20px; dialogsSendingIcon: ThreeStateIcon { diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp index e46477338..91362c73e 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_layout.cpp @@ -266,11 +266,12 @@ void PaintFolderEntryText( } enum class Flag { - SavedMessages = 0x08, - RepliesMessages = 0x10, - AllowUserOnline = 0x20, - TopicJumpRipple = 0x40, - HiddenAuthor = 0x80, + SavedMessages = 0x008, + RepliesMessages = 0x010, + AllowUserOnline = 0x020, + TopicJumpRipple = 0x040, + HiddenAuthor = 0x080, + MyNotes = 0x100, }; inline constexpr bool is_flag_type(Flag) { return true; } @@ -336,6 +337,13 @@ void PaintRow( context.st->padding.top(), context.width, context.st->photoSize); + } else if (flags & Flag::MyNotes) { + EmptyUserpic::PaintMyNotes( + p, + context.st->padding.left(), + context.st->padding.top(), + context.width, + context.st->photoSize); } else if (!from && hiddenSenderInfo) { hiddenSenderInfo->emptyUserpic.paintCircle( p, @@ -619,11 +627,14 @@ void PaintRow( if (flags & (Flag::SavedMessages | Flag::RepliesMessages - | Flag::HiddenAuthor)) { + | Flag::HiddenAuthor + | Flag::MyNotes)) { auto text = (flags & Flag::SavedMessages) ? tr::lng_saved_messages(tr::now) : (flags & Flag::RepliesMessages) ? tr::lng_replies_messages(tr::now) + : (flags & Flag::MyNotes) + ? tr::lng_my_notes(tr::now) : tr::lng_hidden_author_messages(tr::now); const auto textWidth = st::semiboldFont->width(text); if (textWidth > rectForName.width()) { @@ -792,7 +803,11 @@ void RowPainter::Paint( : nullptr; const auto allowUserOnline = true;// !context.narrow || badgesState.empty(); const auto flags = (allowUserOnline ? Flag::AllowUserOnline : Flag(0)) - | ((peer && peer->isSelf()) ? Flag::SavedMessages : Flag(0)) + | ((sublist && from->isSelf()) + ? Flag::MyNotes + : (peer && peer->isSelf()) + ? Flag::SavedMessages + : Flag(0)) | ((from && from->isRepliesChat()) ? Flag::RepliesMessages : Flag(0)) diff --git a/Telegram/SourceFiles/history/view/history_view_message.cpp b/Telegram/SourceFiles/history/view/history_view_message.cpp index 36bcb31d6..46f6e22b0 100644 --- a/Telegram/SourceFiles/history/view/history_view_message.cpp +++ b/Telegram/SourceFiles/history/view/history_view_message.cpp @@ -1997,7 +1997,7 @@ bool Message::hasFromPhoto() const { } else if (const auto forwarded = item->Get()) { const auto peer = item->history()->peer; if (peer->isSelf() || peer->isRepliesChat()) { - return true; + return !hasOutLayout(); } } return !item->out() && !item->history()->peer->isUser(); diff --git a/Telegram/SourceFiles/ui/empty_userpic.cpp b/Telegram/SourceFiles/ui/empty_userpic.cpp index 2e3d9cbf0..d2b11df2c 100644 --- a/Telegram/SourceFiles/ui/empty_userpic.cpp +++ b/Telegram/SourceFiles/ui/empty_userpic.cpp @@ -167,6 +167,22 @@ void PaintHiddenAuthorInner( fg); } +void PaintMyNotesInner( + QPainter &p, + int x, + int y, + int size, + const style::color &fg) { + PaintIconInner( + p, + x, + y, + size, + st::defaultDialogRow.photoSize, + st::dialogsMyNotesUserpic, + fg); +} + void PaintExternalMessagesInner( QPainter &p, int x, @@ -421,8 +437,8 @@ void EmptyUserpic::PaintHiddenAuthor( int size) { auto bg = QLinearGradient(x, y, x, y + size); bg.setStops({ - { 0., st::historyPeerSavedMessagesBg->c }, - { 1., st::historyPeerSavedMessagesBg2->c } + { 0., st::premiumButtonBg2->c }, + { 1., st::premiumButtonBg3->c }, }); const auto &fg = st::historyPeerUserpicFg; PaintHiddenAuthor(p, x, y, outerWidth, size, QBrush(bg), fg); @@ -452,6 +468,45 @@ QImage EmptyUserpic::GenerateHiddenAuthor(int size) { }); } +void EmptyUserpic::PaintMyNotes( + QPainter &p, + int x, + int y, + int outerWidth, + int size) { + auto bg = QLinearGradient(x, y, x, y + size); + bg.setStops({ + { 0., st::historyPeerSavedMessagesBg->c }, + { 1., st::historyPeerSavedMessagesBg2->c } + }); + const auto &fg = st::historyPeerUserpicFg; + PaintMyNotes(p, x, y, outerWidth, size, QBrush(bg), fg); +} + +void EmptyUserpic::PaintMyNotes( + QPainter &p, + int x, + int y, + int outerWidth, + int size, + QBrush bg, + const style::color &fg) { + x = style::RightToLeft() ? (outerWidth - x - size) : x; + + PainterHighQualityEnabler hq(p); + p.setBrush(bg); + p.setPen(Qt::NoPen); + p.drawEllipse(x, y, size, size); + + PaintMyNotesInner(p, x, y, size, fg); +} + +QImage EmptyUserpic::GenerateMyNotes(int size) { + return Generate(size, [&](QPainter &p) { + PaintMyNotes(p, 0, 0, size, size); + }); +} + std::pair EmptyUserpic::uniqueKey() const { const auto first = (uint64(0xFFFFFFFFU) << 32) | anim::getPremultiplied(_colors.color1->c); diff --git a/Telegram/SourceFiles/ui/empty_userpic.h b/Telegram/SourceFiles/ui/empty_userpic.h index 5fc559818..7d293db54 100644 --- a/Telegram/SourceFiles/ui/empty_userpic.h +++ b/Telegram/SourceFiles/ui/empty_userpic.h @@ -97,6 +97,22 @@ public: const style::color &fg); [[nodiscard]] static QImage GenerateHiddenAuthor(int size); + static void PaintMyNotes( + QPainter &p, + int x, + int y, + int outerWidth, + int size); + static void PaintMyNotes( + QPainter &p, + int x, + int y, + int outerWidth, + int size, + QBrush bg, + const style::color &fg); + [[nodiscard]] static QImage GenerateMyNotes(int size); + ~EmptyUserpic(); private: