From 1cbb21721087f527581a71a64dd551c7c4e217c8 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sat, 16 Jan 2021 18:11:43 +0300 Subject: [PATCH] Added speaker icon to volume menu item in group calls. --- .../Resources/icons/calls/volume/speaker.png | Bin 0 -> 556 bytes .../icons/calls/volume/speaker@2x.png | Bin 0 -> 998 bytes .../icons/calls/volume/speaker@3x.png | Bin 0 -> 1464 bytes Telegram/SourceFiles/calls/calls.style | 8 ++++- .../SourceFiles/calls/calls_volume_item.cpp | 31 +++++++++++++++--- .../SourceFiles/calls/calls_volume_item.h | 6 ++++ 6 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 Telegram/Resources/icons/calls/volume/speaker.png create mode 100644 Telegram/Resources/icons/calls/volume/speaker@2x.png create mode 100644 Telegram/Resources/icons/calls/volume/speaker@3x.png diff --git a/Telegram/Resources/icons/calls/volume/speaker.png b/Telegram/Resources/icons/calls/volume/speaker.png new file mode 100644 index 0000000000000000000000000000000000000000..d7859a773505ed65e74098c8c718e88cbaec9c31 GIT binary patch literal 556 zcmeAS@N?(olHy`uVBq!ia0vp^azHG>!3HGXX8P_2QjEnx?oJHr&dIz4a$Hg)JkxxA z8MJ_G4hF{dOa>N^5+IfWVg?501&j>LK$;OGwtxvPE4P3d&XxcvbY(oW6sT;Pr;B5V z2k+add%F%f2pm_J3fSPYRAHJJqqMx^BDPa@fR5;PFhoiBwqI&Uu?A@Q6fTb`oXTQJFmYk$h^h8L}<{n&GL$s!5 z7)VTzXIP!FHR@uHneb0pc}DSW*N=B!mb|FjzrXqOli;eu`padGu%^z~wXEipX4FUB z#~Hy}mox2)(R*Y%{q)MOau0nEJpLHrQ?^_7C$p2;>rFRvj$FMj?>XOWwy)3f;Fr(O zrYYCfSjZ&IdKUd_#^E{(zEf+%xVPWtUH5uX(8`Y9Q;eU4&NyDlGOd``{`xD|Kg&7i z({;qUFE}(i{tw_g|Ks&0`->am)-V0C{4(d&EK@lH_5+`-=AT!d>$ke8$z9C4yY}zf fCtbF&@;?}T?yNfe-cxBeD5gAJ{an^LB{Ts5N;Khh literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/calls/volume/speaker@2x.png b/Telegram/Resources/icons/calls/volume/speaker@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..76dffc75655d68495247c4809aa2d534d816db53 GIT binary patch literal 998 zcmVPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91JfH&r1ONa40RR91FaQ7m08TFiT>te5na@iyVGzg1&_kqQ zAqsX84|RwNJVcic9TZPR5D0n-tbd?OQC*`$f%k-No-FWW)Gh4SA*e1&p{Gu21Qk&f z&HFsQ?XVB7ptO8X7{S~#UDJH-j)9WhK>WyK#j_M@RAg{+@ui!TqtZF@lko`RVB?#aj*D@NFp&2tX#20j4m^ z{eQc;xq*p^31Es#AVo<1RM?r<-NGL2uvmN^WB@844Q;>udz5q`$tt1hlR$`bmhl zyF*mDTuxw_o}Lzby*Tt}d3AMFS>j2{!M(jbU~es|o~0ii9v~Kr!O6)<+l~RPdgkZn zt5!uyfsc<5j7Fn$9wV=^wYpm3DhbIhEiK{e>#GuHRcvEp15GBAaK6-^R)MLcIXQ3J z+uM*#CLtIMR^E8a*T!H+furfJzr}I-PiaelBs<+;47f>I0Y$LU(sJ?(gr{ zgk|r*kPnQ~fVC+0bA_dZ*<&cKudn0V+nWG>adA=k>>?efg}v!J3ASs#_4f9{`1m-m zuZ3`XdkfiYw)sv~?m<;xm2>-*?i#)={Yn;p*r@^hhlAacOBo8cWZ3`kq8+F3Kie%s UncvQ6mH+?%07*qoM6N<$f&-GkiU0rr literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/calls/volume/speaker@3x.png b/Telegram/Resources/icons/calls/volume/speaker@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..3397ea286b6f29eadb8e2283bf18e3d2135c737a GIT binary patch literal 1464 zcmb7EYd8}M7~WX!jpeqQBu0uh_xp8LIBv@=XEv9!VNBLRh$k(HNaGZ#lA&%V6{ORv`&X4zd-|ze0=lkb(?kS}^L9o7YB_52q6Qrn;2Q4X0XQYnQUG9PBmlH;5#fjk0Dw3H2oM)B zaDT=S`@Y38#J_8oeWMS~%MSoJpy`Ts^i2Zti`{gu;FY@XZfIT3lq)pwrfCYGP$_ZO zw+_0OmAxNSnbalq^Y1CFwj8~==3jChCv}$3abEg z3^gc+G--&X^@N<&A~}LUHy|Zkp-?!)~>zSlnx<-jJOwdstoFpRiq-lANrWm6g>ZH5o8uXJH+EpPQNr83{rYi4_n2Oq6NS;Ej!mcMkkhTaBM%ZIN0Yu?GjK{(W-MPEO+Q zc|1*Gqtdid(Us9W8f~yGAT=p96s2`tmODDUR3hIR*i=o&FTu=~ar*8^hhW?F8%n64HN=iy_SIr^_jX6|M(+69l zxOYr&G!K$XZQ&?mt04|UQStHbkCTpuRRV1DI;!7@at3xMc&HVdZLW^x?hoW z4*`;ph-zr{(*m2oNMy3!+WLBwx^aqHOMQLWrfb{Z-Cg4t6%#!xqUm8vOUt_U_Uic+ zElo}Ly1cwR(}~FW4iF5C~*ORy=zKWipwA z_{rINL^k+|l6KQtcHsL$>L}XW)b!-*`hi{yxr)u2t~=;?nS9 zn5Ws(t7i80UGH8#?P>`SR#+qspCj{FZEZ9z_uPbKv2^5p^)jT~?fLo0m2cnrzmj8O zcxsbH3uZ(9*6wbIs?N^)*GX9#+S&&k1I5NWOTZViby8t-mIHLCJzh zBmz(_stCross, true)) { initResizeHook(parent->sizeValue()); enableMouseSelecting(); + const auto itemRect = rect() - st.itemPadding; + const auto speakerRect = QRect(itemRect.topLeft(), _stCross.icon.size()); + const auto volumeRect = speakerRect.translated(_stCross.icon.width(), 0); + paintRequest( ) | rpl::start_with_next([=](const QRect &clip) { Painter p(this); @@ -53,7 +61,12 @@ MenuVolumeItem::MenuVolumeItem( : (enabled ? st.itemFg : st.itemFgDisabled)); p.setFont(_font); const auto volume = std::round(_slider->value() * kMaxVolumePercent); - p.drawText(QPoint(0, _font->ascent), u"%1%"_q.arg(volume)); + p.drawText(volumeRect, u"%1%"_q.arg(volume), style::al_center); + + _crossLineMute->paint( + p, + speakerRect.topLeft(), + _crossLineAnimation.value(_localMuted ? 1. : 0.)); }, lifetime()); setCloudVolume(startVolume); @@ -63,10 +76,17 @@ MenuVolumeItem::MenuVolumeItem( if (_localMuted != newMuted) { _localMuted = newMuted; _toggleMuteLocallyRequests.fire_copy(newMuted); + + _crossLineAnimation.start( + [=] { update(speakerRect); }, + _localMuted ? 0. : 1., + _localMuted ? 1. : 0., + st::callPanelDuration); } if (value > 0) { _changeVolumeLocallyRequests.fire(value * _maxVolume); } + update(volumeRect); }); const auto returnVolume = [=] { @@ -122,7 +142,8 @@ MenuVolumeItem::MenuVolumeItem( _waitingForUpdateVolume = false; }, lifetime()); - _slider->setGeometry(rect()); + _slider->setGeometry(itemRect + - style::margins(0, contentHeight() / 2, 0, 0)); } void MenuVolumeItem::setCloudVolume(int volume) { @@ -148,7 +169,9 @@ bool MenuVolumeItem::isEnabled() const { } int MenuVolumeItem::contentHeight() const { - return st::groupCallMenuVolumeItemHeight; + return _st.itemPadding.top() + + _st.itemPadding.bottom() + + _stCross.icon.height() * 2; } rpl::producer MenuVolumeItem::toggleMuteRequests() const { diff --git a/Telegram/SourceFiles/calls/calls_volume_item.h b/Telegram/SourceFiles/calls/calls_volume_item.h index e047a9f6fd..d76a17f6d7 100644 --- a/Telegram/SourceFiles/calls/calls_volume_item.h +++ b/Telegram/SourceFiles/calls/calls_volume_item.h @@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/widgets/menu/menu_item_base.h" namespace Ui { +class CrossLineAnimation; class MediaSlider; } // namespace Ui @@ -55,7 +56,12 @@ private: const base::unique_qptr _slider; const not_null _dummyAction; + const style::Menu &_st; const style::font &_font; + const style::CrossLineAnimation &_stCross; + + const std::unique_ptr _crossLineMute; + Ui::Animations::Simple _crossLineAnimation; rpl::event_stream _toggleMuteRequests; rpl::event_stream _toggleMuteLocallyRequests;