From 30e694420a1763c42b07aafbe1b334d57d2b9652 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 24 Jan 2024 05:29:28 +0300 Subject: [PATCH] Added icon to button for resuming of voice recording. --- .../icons/voice_lock/input_mic_s.png | Bin 0 -> 528 bytes .../icons/voice_lock/input_mic_s@2x.png | Bin 0 -> 1031 bytes .../icons/voice_lock/input_mic_s@3x.png | Bin 0 -> 1588 bytes .../chat_helpers/chat_helpers.style | 1 + .../history_view_voice_record_bar.cpp | 44 +++++++++++++++--- 5 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 Telegram/Resources/icons/voice_lock/input_mic_s.png create mode 100644 Telegram/Resources/icons/voice_lock/input_mic_s@2x.png create mode 100644 Telegram/Resources/icons/voice_lock/input_mic_s@3x.png diff --git a/Telegram/Resources/icons/voice_lock/input_mic_s.png b/Telegram/Resources/icons/voice_lock/input_mic_s.png new file mode 100644 index 0000000000000000000000000000000000000000..86c1146a5d5dd62f96e32dc2a6d7e02726a30c3c GIT binary patch literal 528 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgftjg2HF~maf z>XeOnO#vcpO9h0@ZdNq#>8b57uy|lR!NB0N+`D&HTe!9P4+w9N5Q<`togrbB;q-yE zr}OVA-!r~dqPbRE(tn+=-}jq)diC3{|AKFB+Z&;C@0Qbre@|Y@9?zVWw*UVAZLJHA z*64U&|9Up<@ZyMRs$ohQhLW}uOr?6yJ>UGi@{?4QkK3loi~i!O+>Yz7XWtZgo9y_v zZhpt(j~eWqVLd7F8DE8KpIgnfm-})@EPvr0zRJgXOMXqAtm1ijO62qB?95@y9~AMQ z+T>F3YTNDHK#}Hy4i`A0d^dPxtNby3o)y57$3ltjnUSru_8O`n>_u5+yFbEHRqt638NO{A1SEq;kLI xlPA45vos1(PcIQFjV(7SXROhDrS~O#fq%@zOVec6IGzT@hNr8a%Q~loCIE6*%EkZy literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/voice_lock/input_mic_s@2x.png b/Telegram/Resources/icons/voice_lock/input_mic_s@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e70fd6a669030d8354d094f06cb58e3e9dcb6406 GIT binary patch literal 1031 zcmV+i1o-=jP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NFaY;l$R9Fe^m^(`(K@^2m@WHZ( z_!vY3!9+1vlR*TL5e5`A6vW7%prGIb#AstdFwj6l!2$C@MFuk?@dqe^3W^UD)ZLG{ zda3Q#Om+7L3td6at#i*gRb5kEUDXv8Nl8W^+6Yuek+-z8jE#*A4i2`rx8rkpd701W z_xJa2Zf>I3hSAp6)~>FuK0iPIb`?NU5W@I|(=ae6Cnv6+`~^UO7S7*JRZ~-Qe0;2p zZ*Fe(_xJxS76Pi8f(F^nJp_AkaZ#GQzP=tF9(Fqbk`fMNHz7`>p`qdN@lhHZ85!}j zCM6umNc?Cq;FFV+($egwuW#X_Ja<*&cGK&u23Pfs;35sZ$G%IkW3d|as;8yf<$k5MPaL)1#WBqa%r@r>7P443wY}XlkYAo?36Pudh$;W_^8K8RiBplgTLV z2uO+6u|dO1aLgT&($&`1RuP|`o|^2Xr6s}Hrw$DbnJI|@bqfpGBw!_4%uT%9`0VTq z{paUrTU(oIIN#`zgA`Mwx3~94u@F!NlvbgchapTPg{`{T1uH8nV!g1iU@AG^6bc1N z`CTD6jzO3R8C%oMBJS$ydVhb%<^KM@sj10Sa_ehrYcDS^?hXNxGRFoX@`r~9$QWX4 zTG_>V&f3}8aVt}))XdDx?(Xhku@F!NbTg4l*D-WwEf99ZtZd>nH#cXYG^hy00V~@r zwqf%fPE1V5WaPTMyj)pn@qGd^5|v~1?HcV@A9Zdtm&xytg5>Fj@crAZb*JubQcg zfP>ZbmCy{OCJ@JW8yTqi%V<kDsDuVpiFB-E69uokdSxlq2G9xrU1+wsVETe&q4PTe(;LqjL5MDo*?ZYV(xgbAyyOZT_F;b0%&)?`v*XQ=J7Rt&b&|#x zqB|$P?1}E|_#;~07b6du;q^jx>-cY(Y=V)J(?%#X8cm^4vnjob1>!IT^cir=H*FMp5b7^qvLQV9FLX~w~T--QhUqS-&&C1}Yl@#on=XS;lx!mJv|G)qY25V=5wY9od zFRBf}=G%FJohw8=gHfO4Z9}pa@Xgj`sGfURj>t|Jru_Lur_*kk8gyf$_B-+vx`z zAaV@hu%YG#M}O06W%pl$q6O!j_$h@()##pX)@NR?^mPr8OCCl{C0CdOcl#xKeQ0%Rj{vy+p1K}Cf* z7+YRltxwpC47NnzaL~llt{9w)UuR#RVa2{3)R&n80hh~Nqn)_&5*q=MvORfA(To*| zW?8lrUQJO;3)#2r7r);jbY^DeGy|Lv8yHv=!S|fi^^uCQsD=;EhUT0}@7nclVnWzd zs2vp*HU3P%=cCS~^z`&(WMoL3bu{qZ=2|Xy*27I(u%OZqgKJgsZ1!2wq|d#dvpN@# zH8(eFqR0@T{CC@d9n!HnV#854Ed3A$%S7Rw)%wzmczB69NKO^bU`V)YR1YcFh5f z3@hBnv9V2WTEk9Rs=zyKg2WMz+u8>D`*YUM>Qz=%Nw5h9Sa`rKp7HiWRi5zS_wVa| zZFnM*NcQv~MPXnxm63;%!V{y8yi=+3^gsTny}f-X+`NeIng(BoF!jPgc`zun-mJK| z_{WbQ5gzL&Kw9Y{PD*XI0YNw8U}WF-E4lK{PNX-u zI6=ne^A(DKrUB>RPj{M{vUK$0f*Y<_q6jJ^0@3QJu}z(biwm#(D3>cZ@#)5m4O98_ z=xqGj{&CV}Rq}Tn1-lG`8S91;?depi6vGfBak>fV#KiA)x7Fzx8ynYy70$RiBoksN z74afsx{pl|?#9F-_Ny;xQ*r+M`T6-I^3a8|88|kngI8za=5l=@9KIB!s`Omb1 glfQrE+j7_fWZr(^el_LE>cx*ubN8mykb_hH0YvbxZU6uP literal 0 HcmV?d00001 diff --git a/Telegram/SourceFiles/chat_helpers/chat_helpers.style b/Telegram/SourceFiles/chat_helpers/chat_helpers.style index c692b4cb6a..1cd58f181e 100644 --- a/Telegram/SourceFiles/chat_helpers/chat_helpers.style +++ b/Telegram/SourceFiles/chat_helpers/chat_helpers.style @@ -1122,6 +1122,7 @@ historyRecordLockBodyShadow: icon {{ "voice_lock/record_lock_body_shadow", histo historyRecordLockBody: icon {{ "voice_lock/record_lock_body", historyToDownBg }}; historyRecordLockMargin: margins(4px, 4px, 4px, 4px); historyRecordLockArrow: icon {{ "voice_lock/voice_arrow", historyToDownFg }}; +historyRecordLockInput: icon {{ "voice_lock/input_mic_s", historyToDownFg }}; historyRecordLockRippleMargin: margins(6px, 6px, 6px, 6px); historyRecordDelete: IconButton(historyAttach) { diff --git a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp index 95bec71181..42d9f2b145 100644 --- a/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp +++ b/Telegram/SourceFiles/history/view/controls/history_view_voice_record_bar.cpp @@ -574,6 +574,8 @@ void ListenWrap::init() { if (!_isShowAnimation) { p.setOpacity(progress); + } else { + p.fillRect(bgRect, _st.bg); } p.setPen(Qt::NoPen); p.setBrush(_st.cancelActive); @@ -826,6 +828,7 @@ public: void requestPaintProgress(float64 progress); void requestPaintLockToStopProgress(float64 progress); + void requestPaintPauseToInputProgress(float64 progress); void setVisibleTopPart(int part); [[nodiscard]] rpl::producer<> locks() const; @@ -852,6 +855,7 @@ private: Ui::Animations::Simple _lockEnderAnimation; float64 _lockToStopProgress = 0.; + float64 _pauseToInputProgress = 0.; rpl::variable _progress = 0.; int _visibleTopPart = -1; @@ -888,6 +892,7 @@ void RecordLock::init() { setAttribute(Qt::WA_TransparentForMouseEvents, true); _lockEnderAnimation.stop(); _lockToStopProgress = 0.; + _pauseToInputProgress = 0.; _progress = 0.; } }, lifetime()); @@ -964,6 +969,13 @@ void RecordLock::drawProgress(QPainter &p) { p.translate(inner.topLeft() + lockTranslation); p.setPen(Qt::NoPen); p.setBrush(_st.fg); + if (_pauseToInputProgress > 0.) { + p.setOpacity(_pauseToInputProgress); + st::historyRecordLockInput.paintInCenter( + p, + blockRect.toRect()); + p.setOpacity(1. - _pauseToInputProgress); + } p.drawRoundedRect( blockRect - QMargins(0, 0, pauseLineOffset, 0), xRadius, @@ -1078,6 +1090,11 @@ void RecordLock::requestPaintLockToStopProgress(float64 progress) { update(); } +void RecordLock::requestPaintPauseToInputProgress(float64 progress) { + _pauseToInputProgress = progress; + update(); +} + float64 RecordLock::lockToStopProgress() const { return _lockToStopProgress; } @@ -1420,10 +1437,24 @@ void VoiceRecordBar::init() { }, _recordingLifetime); }; + const auto paintShowListenCallback = [=](float64 value) { + _listen->requestPaintProgress(value); + _level->requestPaintProgress(1. - value); + _lock->requestPaintPauseToInputProgress(value); + update(); + }; + _lock->setClickedCallback([=] { if (isListenState()) { startRecording(); - _listen = nullptr; + _showListenAnimation.stop(); + _showListenAnimation.start([=](float64 value) { + _listen->requestPaintProgress(1.); + paintShowListenCallback(value); + if (!value) { + _listen = nullptr; + } + }, 1., 0., st::historyRecordVoiceShowDuration * 2); setLevelAsSend(); return; @@ -1445,10 +1476,7 @@ void VoiceRecordBar::init() { const auto to = 1.; const auto &duration = st::historyRecordVoiceShowDuration; auto callback = [=](float64 value) { - _listen->requestPaintProgress(value); - const auto reverseValue = to - value; - _level->requestPaintProgress(reverseValue); - update(); + paintShowListenCallback(value); if (to == value) { _recordingLifetime.destroy(); } @@ -1956,7 +1984,11 @@ float64 VoiceRecordBar::showAnimationRatio() const { } float64 VoiceRecordBar::showListenAnimationRatio() const { - return _showListenAnimation.value(_listen ? 1. : 0.); + const auto value = _showListenAnimation.value(_listen ? 1. : 0.); + if (_paused.current()) { + return value * value; + } + return value; } void VoiceRecordBar::computeAndSetLockProgress(QPoint globalPos) {