From 79b0bbf6cfcd2fd86a3e9ebf798eba6ecaf95faa Mon Sep 17 00:00:00 2001 From: John Preston Date: Thu, 9 Sep 2021 16:16:19 +0300 Subject: [PATCH] Add an icon to who read context menu item. --- Telegram/Resources/icons/chat/seen_checks.png | Bin 0 -> 551 bytes .../Resources/icons/chat/seen_checks@2x.png | Bin 0 -> 848 bytes .../Resources/icons/chat/seen_checks@3x.png | Bin 0 -> 1477 bytes Telegram/Resources/icons/chat/seen_played.png | Bin 0 -> 421 bytes .../Resources/icons/chat/seen_played@2x.png | Bin 0 -> 718 bytes .../Resources/icons/chat/seen_played@3x.png | Bin 0 -> 1182 bytes Telegram/SourceFiles/api/api_who_read.cpp | 19 +++++++++++++- Telegram/SourceFiles/ui/chat/chat.style | 10 +++++++- .../ui/controls/who_read_context_action.cpp | 24 +++++++++++++----- 9 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 Telegram/Resources/icons/chat/seen_checks.png create mode 100644 Telegram/Resources/icons/chat/seen_checks@2x.png create mode 100644 Telegram/Resources/icons/chat/seen_checks@3x.png create mode 100644 Telegram/Resources/icons/chat/seen_played.png create mode 100644 Telegram/Resources/icons/chat/seen_played@2x.png create mode 100644 Telegram/Resources/icons/chat/seen_played@3x.png diff --git a/Telegram/Resources/icons/chat/seen_checks.png b/Telegram/Resources/icons/chat/seen_checks.png new file mode 100644 index 0000000000000000000000000000000000000000..c65944de130008a6b5e289baffd4de002ed7888f GIT binary patch literal 551 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/chat/seen_played@2x.png b/Telegram/Resources/icons/chat/seen_played@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..99884aae9e9972dbafb04a29db70c7b2235166f8 GIT binary patch literal 718 zcmeAS@N?(olHy`uVBq!ia0vp^8bGYT!3HD~)>;8c2FBtbcPEB*=VV?2IWDOYo@u_m z3|c@o2Loe!CIbsd2@p#GF#`kh0!9XAAk7F8TfhXD)mXp`XDfgddQH>KWnf^k@N{tu ziQqgt-LRk0QRMjjd6yT8YFP<&IxYU7Tf@z;7>X~Oo~ z2P=!>Z!pCEz9EC9yhln(}|f zpJJ!DtQmLfxF2K`(h$wpdi1TR#A@z_5UrIe0UH|b%-&SAB|;~TX`k=e9=FB2PZ;=4 zHmr|c7|`IOb~u0O+uIC3Uv0nLTRt`FdXe|b)sq}^x*KJuPdJ-)^!CphzT0oZ?wq!2 zte&9Cxk07zVZjgPcQtm-Yr`fR{;m3E6mXNL#H#z{+{>c3jD%k~$-Y{A&QoW?CB>tU zMY#0mSs$NJ`Y7JeqkD4F#%PTv)84cwT-eTiEpENKjLZKg8rM?N-|YANm$q4xVXl>4 zXjhics-p=?6A%2Y(@(v8rSczB(4h^Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91JfH&r1ONa40RR91FaQ7m08TFiT>te5n$0UcQ5eUcD`X?r zP62>C&Y8K-=R7m#nddn-L_~~lDI;kqL;3~!2keH&!{IQcrO7##u31%BSV*g@ ztMu^jKzDa{^z`&Z`}_MeFfc&r>FI8aqigrTq~&Pq>FHq{l!@fz{p;&18yOj4{80}Y+&*w-W+pp3JBve^IoRIbW<^CsK|`TYD;50&uL)zwA4y}e4fiZ^Hu^7Hd) zV`GD6W@acWD@)Vj&7teSMrJN8Em37j=yyGuNLdG@8|8!!m*xKB<_QcX<_ot~Z=Li12Z6B82@ zjYf%wFT*}gl)eJ1h8`RoP<3@R&CSgbpU_mbZeL$tPltzx#KV_P@AM=PU>N=K@}j)A z&CShpeSK}nk&}}{c>noKPkhEV>|<3K7_e&S=H@0pb5Fbqa^h496b5YNMx6u_#NmY0`Jhp&Qy0`)RWd#Qk7x!LfwwY5cgd3ly#(OEiR z7-c4Wm6nzg|FlJSOClw(N{}pkb#!zP%1Ks4YG8n9!`I{EqmB*V-eqNFI$g38>4CKX zMjt8f@9)|!Nspxmh8JgNXO)a9J3Ctk1n-}ppX+qVPUI>l{%0*RCxj{_6-KhMvO>4F zw?<7uos=F%O&b{#GA9viEEc2j@o^!Ts6jdpBSTtTT%@|XI+4vvrWJ`q=<@PX*hkbL zm4}fTAwv?uV$wo}g-i<{D0V~&4giPo=SY%Sj zsGP!LpaKI%xIy6#1w0h;j0EdcC;%dpLPq6=1oB8H3pW5m!LP5c&-S}28XR9eY$n{G zz=uK~3VwDcCJ`+3zIhnoW?^B0P^%IN3VWETku-QEzIa#-HzHVVxbYGegXp@4wJZOA zh8rtSgzYt);o)KK9KGHF@@9mrJplpHd6r{JmkVt*wlQ zlBB-<6@PgEFg7fHKR-VUp?}q%T2yFWTVhxYzqz?#yzIhwHG&--9kIc|L6(t`VS8d! w@9)+=^mQY?OAYbm!$YQ_`~#NB8(!G*51nF@80@h} WhoRead( auto lifetime = rpl::lifetime(); const auto state = lifetime.make_state(); + state->current.type = [&] { + if (const auto media = item->media()) { + if (!media->webpage()) { + if (const auto document = media->document()) { + if (document->isVoiceMessage()) { + return Ui::WhoReadType::Listened; + } else if (document->isVideoMessage()) { + return Ui::WhoReadType::Watched; + } + } + } + } + return Ui::WhoReadType::Seen; + }(); const auto pushNext = [=] { consumer.put_next_copy(state->current); }; @@ -334,7 +348,10 @@ rpl::producer WhoRead( ) | rpl::start_with_next([=](const std::vector &peers) { if (ListUnknown(peers, item)) { state->userpics.clear(); - consumer.put_next(Ui::WhoReadContent{ .unknown = true }); + consumer.put_next(Ui::WhoReadContent{ + .type = state->current.type, + .unknown = true, + }); return; } else if (UpdateUserpics(state, item, peers)) { RegenerateParticipants(state, small, large); diff --git a/Telegram/SourceFiles/ui/chat/chat.style b/Telegram/SourceFiles/ui/chat/chat.style index c701a8689..5d6d2ed17 100644 --- a/Telegram/SourceFiles/ui/chat/chat.style +++ b/Telegram/SourceFiles/ui/chat/chat.style @@ -869,6 +869,7 @@ WhoRead { photoSize: pixels; photoSkip: pixels; nameLeft: pixels; + iconPosition: point; itemPadding: margins; } defaultWhoRead: WhoRead { @@ -882,7 +883,8 @@ defaultWhoRead: WhoRead { photoSize: 30px; photoSkip: 5px; nameLeft: 57px; - itemPadding: margins(17px, 8px, 17px, 6px); + iconPosition: point(14px, 9px); + itemPadding: margins(38px, 8px, 17px, 6px); } whoReadMenu: PopupMenu(defaultPopupMenu) { scrollPadding: margins(0px, 6px, 0px, 6px); @@ -891,3 +893,9 @@ whoReadMenu: PopupMenu(defaultPopupMenu) { separatorPadding: margins(0px, 6px, 0px, 8px); } } +whoReadChecks: icon{{ "chat/seen_checks", windowFg }}; +whoReadChecksOver: icon{{ "chat/seen_checks", windowFgOver }}; +whoReadChecksDisabled: icon{{ "chat/seen_checks", menuFgDisabled }}; +whoReadPlayed: icon{{ "chat/seen_played", windowFg }}; +whoReadPlayedOver: icon{{ "chat/seen_played", windowFgOver }}; +whoReadPlayedDisabled: icon {{ "chat/seen_played", menuFgDisabled }}; diff --git a/Telegram/SourceFiles/ui/controls/who_read_context_action.cpp b/Telegram/SourceFiles/ui/controls/who_read_context_action.cpp index 66ede3c65..d9d1a8145 100644 --- a/Telegram/SourceFiles/ui/controls/who_read_context_action.cpp +++ b/Telegram/SourceFiles/ui/controls/who_read_context_action.cpp @@ -251,11 +251,11 @@ void Action::resolveMinWidth() { width(tr::lng_context_seen_text(tr::now, lt_count, 999)), width(tr::lng_context_seen_listened(tr::now, lt_count, 999)), width(tr::lng_context_seen_watched(tr::now, lt_count, 999)) }); - const auto maxWidth = _st.itemPadding.left() + const auto maxWidth = st::defaultWhoRead.itemPadding.left() + maxIconWidth + maxTextWidth + _userpics->maxWidth() - + _st.itemPadding.right(); + + st::defaultWhoRead.itemPadding.right(); setMinWidth(maxWidth); } @@ -330,6 +330,18 @@ void Action::paint(Painter &p) { if (enabled) { paintRipple(p, 0, 0); } + const auto &icon = (_content.type == WhoReadType::Seen) + ? (!enabled + ? st::whoReadChecksDisabled + : selected + ? st::whoReadChecksOver + : st::whoReadChecks) + : (!enabled + ? st::whoReadPlayedDisabled + : selected + ? st::whoReadPlayedOver + : st::whoReadPlayed); + icon.paint(p, st::defaultWhoRead.iconPosition, width()); p.setPen(!enabled ? _st.itemFgDisabled : selected @@ -337,13 +349,13 @@ void Action::paint(Painter &p) { : _st.itemFg); _text.drawLeftElided( p, - _st.itemPadding.left(), - _st.itemPadding.top(), + st::defaultWhoRead.itemPadding.left(), + st::defaultWhoRead.itemPadding.top(), _textWidth, width()); _userpics->paint( p, - width() - _st.itemPadding.right(), + width() - st::defaultWhoRead.itemPadding.right(), (height() - st::defaultWhoRead.userpics.size) / 2, st::defaultWhoRead.userpics.size); } @@ -372,7 +384,7 @@ void Action::refreshText() { void Action::refreshDimensions() { const auto textWidth = _text.maxWidth(); - const auto &padding = _st.itemPadding; + const auto &padding = st::defaultWhoRead.itemPadding; const auto goodWidth = padding.left() + textWidth