From 6478b7b1296dd82437eedf9fd49e782ce0efaae6 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sat, 26 Feb 2022 08:08:40 +0300 Subject: [PATCH] Added menu to HistoryView::TopBarWidget for starting of livestream. --- .../Resources/icons/menu/start_stream.png | Bin 0 -> 594 bytes .../Resources/icons/menu/start_stream@2x.png | Bin 0 -> 1115 bytes .../Resources/icons/menu/start_stream@3x.png | Bin 0 -> 1686 bytes .../icons/menu/start_stream_with.png | Bin 0 -> 657 bytes .../icons/menu/start_stream_with@2x.png | Bin 0 -> 1274 bytes .../icons/menu/start_stream_with@3x.png | Bin 0 -> 1937 bytes Telegram/Resources/langs/lang.strings | 4 ++ .../view/history_view_top_bar_widget.cpp | 67 +++++++++++++++--- .../view/history_view_top_bar_widget.h | 3 +- Telegram/SourceFiles/info/info.style | 1 + Telegram/SourceFiles/ui/menu_icons.style | 3 + 11 files changed, 67 insertions(+), 11 deletions(-) create mode 100644 Telegram/Resources/icons/menu/start_stream.png create mode 100644 Telegram/Resources/icons/menu/start_stream@2x.png create mode 100644 Telegram/Resources/icons/menu/start_stream@3x.png create mode 100644 Telegram/Resources/icons/menu/start_stream_with.png create mode 100644 Telegram/Resources/icons/menu/start_stream_with@2x.png create mode 100644 Telegram/Resources/icons/menu/start_stream_with@3x.png diff --git a/Telegram/Resources/icons/menu/start_stream.png b/Telegram/Resources/icons/menu/start_stream.png new file mode 100644 index 0000000000000000000000000000000000000000..a227d9b2635e12d128e179c4f71f01318c0a70ff GIT binary patch literal 594 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgfY>%glV~B;| z*(rOw4mk)MPyWNex;pzvfWypcLqA3gCo=h4R>ebkuK_QuWkTmC$u*L0({z580%GMGy7-d{4Af#J8AKA-=s9F3jJGQ+f{=9p>g1~ITj#Orf;a$XVU zZ9jZBuiQp%rJst>3w?tF0Vx^r3p534?iz@7w?4M`T2;IG=8kpV7ent#ul0i$!H zMo93Vx=*dseAF~&iq*)A*%8Al|l>>UC)@>Zre-neEa?P^jm&@71lHb?$)L=PF&~N zgf3LC>$vgOc6!(mrS;}E%1UBi7k$&W&1qb%v1rBp`*vHi*6g3QpP}Kin3kl$yOW^! N^mO%eS?83{1OUa?-b4TZ literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/menu/start_stream@2x.png b/Telegram/Resources/icons/menu/start_stream@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cd079f659e304bd7565b61adf84381bbb21bd31c GIT binary patch literal 1115 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 Zj&Ww_xzlrYbi{y?gQu&X%Q~loCIHsp1`7ZH literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/menu/start_stream_with@2x.png b/Telegram/Resources/icons/menu/start_stream_with@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..be9c9ab1f147cebfa015f7910b170c825e0c34f4 GIT binary patch literal 1274 zcmVPx#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NGWJyFpR9Fe^mrE#hT^Pp?5n_Od zd?mR=$~6PGNGV|;Bbg~FF*Ri97BMnY6p=E*fMlXDqU3%V7!c)JuDO1{&*NS8S^KoG;qd;vE8txL?+UnFft;M2+}vE3kYzJ3FAupT%`PD-Dr#(O z?BnC({rx>NGt;i@7Y_+Sudn0c;yiUif>0c=`lF>PD=WLd zzZb8Cg@vS~Bu{4}e1yow2SaRs;**t?b$fd&E^TdXKe2GuU?OhVV(tuDRbgRa$H&K_ zZ)$3?qT9uro14WGb0X}@;0+B8iE?yw)B~9fDu&`rgbn&9rLeG2G`qXIAt51lW%hU& zVk`ay1qHT5v$L}ZUSD6+)6;DUJS1U@IS~X|OJU3O|N3Sbv(?5~Uvo!ChfF9VBg1IH z*w@#$zP`Sys!Hp-DJv^08yXt?{QNWy=8{632I=Mg{yx;5ogE!;IQshffZpETqNAhD zsJRm!9xhumFfd?7iNK9GGxXgdNhaRe+4&)hF6Dv}S`+}xao5+R0!YS4Gt($XTN z`1ttmuEXK)?|*l92Q)oBZR|6Sjg4JeS`rllN{ui%ISKmo^b`~nWQ2$i6`{ty)8e!1 zf}Ne68A-{>$-%+Fbk^3^jD5!Alq!;lU`5h=`CkmB%um&n$XS74FK`l7vt*cN(9;o?q0Q<)yJtgj}bD zD#&R<7Z(=-#KgoX27|-HLtZ}&Qc_Zkea5x5wQ5cbC^dpexPQ&tEld@v3I8j3q~*@9 zsj1Q6m6a8s$Hzx?#YV#K9(#_9a>O$~4Ma$m%lF8aIXAqJ`uqEhd5pPqf#&DuHONgl zGczNqy1F`zMub4xQ>M`z>+9?Aj*gBrfVZpJ zC?O%i+InJQLZ;8r(VFc!L!C$ovZYQ-OOr+7C>|LZX-i|9grWTVKmwQBk2Y ztZF23Xv74oAFhotg`-(_clY!2GmedojYi1M7zsk;n8+#5j>?+D3zNgI`KV;6M1l~x kCDTjru7Gz1{--POFC5?TeF5Mhu>b%707*qoM6N<$f`&0klmGw# literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/menu/start_stream_with@3x.png b/Telegram/Resources/icons/menu/start_stream_with@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c0c3461148f77013779f2b260ccd69180613234a GIT binary patch literal 1937 zcmV;C2X6R@P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91NT34%1ONa40RR91NB{r;0FW_8?*IS>`$e5T1!Y(T^Kbh$wz5f zh$u#siBJP6L5pZo5jCl>iC{Stp+PiJ2SJfg6ru(Wf~bfdD47-f(XfXD2~tF{5(*+C z(K54#mi7OOyK(v5bNAl&oOAE3!G9dox4*rKCb zBM^*0Faj}-z(U{kOP4M^di3a?J$r_RhQ56H;+rS3FgG{1zP`S+w6wp!|HqFXk$?nd z4jee}_U+q$Lw`LzJ@Hinp<;#vgyKtXWXsIV?CR=L!s_3dnHeM6R|g0sKja|li^+A- z>eZ_U2M47p;xlK?xF&D~1ffF$qL6k~>;trE)28?D-%H7N@7`5ZRQRBZS^`>-OD#yl zK-5CdfOYHEjg5^-rHdCYCiDpbIV7Ya48VqG>z0C*D_0H=4^!j!@88Fc9kbx$*aacT zQ5rU2CO-Vh$;po%JtFn&?CimV2jfHSjsp)YKF!qu+W+(*`WTm|vz)-Gc`YNY~fbw`kF#nCN0CUc7iQ4A2aW z`6nwYD~Zq) z^8B#Gy9PG6;etJwG$|P8&8n)Z1q&9avMX1vjEsz!DE?#~Heg06!X8X|R)6*C6>s{6 z4I3==+qP|c{P^*mJ9i2S3M{awT{x}Wx^=6&yL-ou9TqUm&=^cwkeV)hOj(TMmIg7G z!o%?S^JfL_=;)YB`}rTYLh*e2_HFa#%@zt+qCL};rhgRo?%hjXj3Q%4kdcvb@7_I} zI8~m31Lm^H^3>E+ObpAHFER1^V4D1!H*ZuW)(woG29cD6yxi|sS66Fco|4!W((&Zv*4x`_f+3%ilXK$4iGM*N5V9d zM^;uAaWKKy5lA{5B^9{J@i=^o$zkdCiuiT`Bq(v-^xxFws&&qlSb#`{P%1lj7;iK&6RZYu~ zTe?1e{HV$)5lJqMxxKJozkZQu;X>mZ)s&PJ1>*p-D#qaF&!38c5|M<`7&eWO0L`N~ zF)=}$b}&>g#}ydvDp{z4r%#_cGHhD9_{dO#RScvtX_x@bg~_{24Hhu?@Zp1sF?gn# zpslTKe0-cG43I<@n=-)Kg$<3$XlqrMG$sv`N^@ay08EZi|Ki09vTWVDm9Y#)M@K6w zD;@sOL=s&R$#~0_EsS5je971mNMq8l0~XfAo{c9l%l7%up+j6ru3ftpMiJhC3HJ;1 zg$ox*TT@dL&NScR;R9B=$(-*tMYtPemrt|Ad4{*{%j zt*shFC{Umy?gif z@83aXzwCz?3@pi5**8d>^A$e7>0W-1k%6c5^1_lPC#*-&c)~{bLG4YK-4hg9U0|}YE z^7HfYt1YR7ZPck#r%bPkeP1UCK`YNM5QQ`h_~wjKh(o*lnp0gQ1~NT8JxZnPZcsTM z4X8kr?+aWrc?4qSZES4BizIpL_U+r}k;VuIm1Kqxaf_{GH$52ocj6g5~!3YE+5R5=D0>KFUPe &peer) { + return !peer->groupCall() + && peer->isChannel() + && !peer->isMegagroup() + && peer->asChannel()->amCreator(); +} + } // namespace struct TopBarWidget::EmojiInteractionSeenAnimation { @@ -240,7 +247,11 @@ void TopBarWidget::call() { void TopBarWidget::groupCall() { if (const auto peer = _activeChat.key.peer()) { - _controller->startOrJoinGroupCall(peer, {}); + if (HasGroupCallMenu(peer)) { + showGroupCallMenu(peer); + } else { + _controller->startOrJoinGroupCall(peer, {}); + } } } @@ -272,34 +283,39 @@ void TopBarWidget::setChooseForReportReason( : style::cur_default); } -bool TopBarWidget::createMenu() { +bool TopBarWidget::createMenu(not_null button) { if (!_activeChat.key || _menu) { return false; } _menu.create(parentWidget(), st::dropdownMenuWithIcons); - _menu->setHiddenCallback([weak = Ui::MakeWeak(this), menu = _menu.data()]{ + _menu->setHiddenCallback([ + weak = Ui::MakeWeak(this), + weakButton = Ui::MakeWeak(button), + menu = _menu.data()] { menu->deleteLater(); if (weak && weak->_menu == menu) { weak->_menu = nullptr; - weak->_menuToggle->setForceRippled(false); + if (weakButton) { + weakButton->setForceRippled(false); + } } }); - _menu->setShowStartCallback(crl::guard(this, [this, menu = _menu.data()]{ + _menu->setShowStartCallback(crl::guard(this, [=, menu = _menu.data()] { if (_menu == menu) { - _menuToggle->setForceRippled(true); + button->setForceRippled(true); } })); - _menu->setHideStartCallback(crl::guard(this, [this, menu = _menu.data()]{ + _menu->setHideStartCallback(crl::guard(this, [=, menu = _menu.data()] { if (_menu == menu) { - _menuToggle->setForceRippled(false); + button->setForceRippled(false); } })); - _menuToggle->installEventFilter(_menu); + button->installEventFilter(_menu); return true; } void TopBarWidget::showPeerMenu() { - const auto created = createMenu(); + const auto created = createMenu(_menuToggle); if (!created) { return; } @@ -320,6 +336,37 @@ void TopBarWidget::showPeerMenu() { } } +void TopBarWidget::showGroupCallMenu(not_null peer) { + const auto created = createMenu(_groupCall); + if (!created) { + return; + } + const auto controller = _controller; + const auto callback = [=](Calls::StartGroupCallArgs &&args) { + controller->startOrJoinGroupCall(peer, std::move(args)); + }; + _menu->addAction( + tr::lng_menu_start_group_call(tr::now), + [=] { callback({}); }, + &st::menuIconStartStream); + _menu->addAction( + tr::lng_menu_start_group_call_scheduled(tr::now), + [=] { callback({ .scheduleNeeded = true }); }, + &st::menuIconReschedule); + _menu->addAction( + tr::lng_menu_start_group_call_with(tr::now), + [=] { callback({ .rtmpNeeded = true }); }, + &st::menuIconStartStreamWith); + _menu->moveToRight( + (parentWidget()->width() - width()) + + (width() + - _groupCall->x() + - _groupCall->width() + - st::topBarMenuGroupCallSkip), + st::topBarMenuPosition.y()); + _menu->showAnimated(Ui::PanelAnimation::Origin::TopRight); +} + void TopBarWidget::toggleInfoSection() { const auto isThreeColumn = _controller->adaptive().isThreeColumn(); if (isThreeColumn diff --git a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.h b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.h index bf186d2f2..edd8b00ce 100644 --- a/Telegram/SourceFiles/history/view/history_view_top_bar_widget.h +++ b/Telegram/SourceFiles/history/view/history_view_top_bar_widget.h @@ -110,9 +110,10 @@ private: void startGroupCall(not_null megagroup, bool confirmed); void search(); void showPeerMenu(); + void showGroupCallMenu(not_null peer); void toggleInfoSection(); - [[nodiscard]] bool createMenu(); + [[nodiscard]] bool createMenu(not_null button); void handleEmojiInteractionSeen(const QString &emoticon); bool paintSendAction( diff --git a/Telegram/SourceFiles/info/info.style b/Telegram/SourceFiles/info/info.style index da66567bb..b382b88d3 100644 --- a/Telegram/SourceFiles/info/info.style +++ b/Telegram/SourceFiles/info/info.style @@ -664,6 +664,7 @@ historyTopBarBack: IconButton(infoTopBarBack) { } topBarHeight: 54px; topBarMenuPosition: point(-2px, 35px); +topBarMenuGroupCallSkip: 40px; topBarDuration: 200; topBarBackward: icon {{ "title_back", menuIconFg }}; topBarForwardAlpha: 0.6; diff --git a/Telegram/SourceFiles/ui/menu_icons.style b/Telegram/SourceFiles/ui/menu_icons.style index 640369907..017f5c015 100644 --- a/Telegram/SourceFiles/ui/menu_icons.style +++ b/Telegram/SourceFiles/ui/menu_icons.style @@ -97,3 +97,6 @@ mediaMenuIconCopy: icon {{ "menu/copy", mediaviewMenuFg }}; mediaMenuIconForward: icon {{ "menu/forward", mediaviewMenuFg }}; mediaMenuIconDelete: icon {{ "menu/delete", mediaviewMenuFg }}; mediaMenuIconShowAll: icon {{ "menu/all_media", mediaviewMenuFg }}; + +menuIconStartStream: icon {{ "menu/start_stream", menuIconColor }}; +menuIconStartStreamWith: icon {{ "menu/start_stream_with", menuIconColor }};