From 62c759a0ffe4a8c797d9a8bdd1c9e577c34326d4 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Tue, 17 May 2022 03:03:48 +0300 Subject: [PATCH] Improved style of premium limits boxes. --- Telegram/Resources/icons/limits/chats.png | Bin 0 -> 476 bytes Telegram/Resources/icons/limits/chats@2x.png | Bin 0 -> 882 bytes Telegram/Resources/icons/limits/chats@3x.png | Bin 0 -> 1186 bytes Telegram/Resources/icons/limits/files.png | Bin 0 -> 394 bytes Telegram/Resources/icons/limits/files@2x.png | Bin 0 -> 635 bytes Telegram/Resources/icons/limits/files@3x.png | Bin 0 -> 986 bytes Telegram/Resources/icons/limits/folders.png | Bin 0 -> 311 bytes .../Resources/icons/limits/folders@2x.png | Bin 0 -> 479 bytes .../Resources/icons/limits/folders@3x.png | Bin 0 -> 607 bytes Telegram/Resources/icons/limits/groups.png | Bin 0 -> 606 bytes Telegram/Resources/icons/limits/groups@2x.png | Bin 0 -> 1095 bytes Telegram/Resources/icons/limits/groups@3x.png | Bin 0 -> 1608 bytes Telegram/Resources/icons/limits/links.png | Bin 0 -> 552 bytes Telegram/Resources/icons/limits/links@2x.png | Bin 0 -> 1111 bytes Telegram/Resources/icons/limits/links@3x.png | Bin 0 -> 1679 bytes Telegram/Resources/icons/limits/pins.png | Bin 0 -> 525 bytes Telegram/Resources/icons/limits/pins@2x.png | Bin 0 -> 931 bytes Telegram/Resources/icons/limits/pins@3x.png | Bin 0 -> 1346 bytes Telegram/Resources/langs/lang.strings | 1 + Telegram/SourceFiles/boxes/boxes.style | 9 + .../SourceFiles/boxes/premium_limits_box.cpp | 195 +++++++++++------- 21 files changed, 128 insertions(+), 77 deletions(-) create mode 100644 Telegram/Resources/icons/limits/chats.png create mode 100644 Telegram/Resources/icons/limits/chats@2x.png create mode 100644 Telegram/Resources/icons/limits/chats@3x.png create mode 100644 Telegram/Resources/icons/limits/files.png create mode 100644 Telegram/Resources/icons/limits/files@2x.png create mode 100644 Telegram/Resources/icons/limits/files@3x.png create mode 100644 Telegram/Resources/icons/limits/folders.png create mode 100644 Telegram/Resources/icons/limits/folders@2x.png create mode 100644 Telegram/Resources/icons/limits/folders@3x.png create mode 100644 Telegram/Resources/icons/limits/groups.png create mode 100644 Telegram/Resources/icons/limits/groups@2x.png create mode 100644 Telegram/Resources/icons/limits/groups@3x.png create mode 100644 Telegram/Resources/icons/limits/links.png create mode 100644 Telegram/Resources/icons/limits/links@2x.png create mode 100644 Telegram/Resources/icons/limits/links@3x.png create mode 100644 Telegram/Resources/icons/limits/pins.png create mode 100644 Telegram/Resources/icons/limits/pins@2x.png create mode 100644 Telegram/Resources/icons/limits/pins@3x.png diff --git a/Telegram/Resources/icons/limits/chats.png b/Telegram/Resources/icons/limits/chats.png new file mode 100644 index 0000000000000000000000000000000000000000..2c3815a8ed4419211ab0971a7a7cd79b424ad935 GIT binary patch literal 476 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgf%+1rqF~maf z=@i4RW(SeB!@F37a+t&{8#{6p*gcfLHOVnXO@WWc-^dWdJ~JILccz9 z!etZ98-MH4?axgfJgh)D1OKp*HO_Z3V zmAoTvy-3icCEIdu9&cG)Vk4)iG)3lkqWIkN>AP4%LqjE914VMpX0ObcBe-glj(>IW z&F{6YfwPt^WPbg%>et2PnYT*sercGIAiz>Q|DXCssW!zfCAW&*clD-szuvVYvi)%4 w{`<|ET}pkAcdg^xFY@8?p`Ft@w!ityP;vjQ+S+YmTR|b~>FVdQ&MBb@04eviWdHyG literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/limits/chats@2x.png b/Telegram/Resources/icons/limits/chats@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..414acb193834eb19baaea50d7ae35b01f7754eb7 GIT binary patch literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1SD@Hpc_1hpq`nI`nf zAt1m|h4G-c-FsV=gfr*fq?O%$Tef=U=I7SWe^{^M79LGfJUMGSM^lAOYwgQ&S-y6i`y!IO zn*^5c=31~csPoDsZcVXnrfXB8#l^*oDnGwG(3EtB{c4t}o#M`dhz~o9KR$l^_-dBw zbi?_4ItfRMSoWFEhz0IOl~&s+Yo>Umo*>JeFTp zOx0|Zlam8+cHdP4a#mf{IvLEgbLY;)Nk{u?cgB4Bd+1cF|MK9)7d_Y(m2hOQ4bYen zQaSPU>(>tpPON(Qwd(0BmQeQFCjG|`&wAE9{cPIGs7(zoOQK?=HWbb~+`?z>{P~{+mprss#>&(fxBhszU*r|(R}UXPOw&1?U?bOl_~G*9 z>YZ6ni)LPa8@o(jU*B%Nf0D?QmnFLnCT#F-dV6d2YVF3-!&8KopUHJS`S|zmYDqDr zGS>e7{wo3%Zl8YsS)VU^@7}$loif+-FE78Z^m5y=`-elco)+!g_k6zcpZO_9GgFK# zXZmbV{`UKCdU|^N`}PlA93nZwAGG_wJC~Q2f31>bPw#8`qAAznTRnmKRj13Lq>Uco zDeIQJkq88)s{eIy6#*X?UKC1moVudS;cde$#)+~&_yxBvoF}Ac)eK7Sp00i_>zopr E00sGf0{{R3 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/limits/chats@3x.png b/Telegram/Resources/icons/limits/chats@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..c814dd1994b293e32afed4905d8b94800224081f GIT binary patch literal 1186 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1SD_us|Wxo#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyz1|Sip>6gA`6MbbHUhz{2C{;uw;_ z`gWG3hq0r`aoh$5iI4z3$1 z0ylHEy?giW;lqd9wr!g>ZQ8G2Rm(3&#>MqToJ=vA=yB)XJ-5Xd12jqs3JS`~zJ30z z%&eSmw|e#JRJ{knbocKb+6sfS#A55qXTkKD-HuCJ%}%y8)$tpmDqlv_9y`*VGL&pv#Z zsMgg}+~S}hXJ;q9{r2Av9~6`)=gjA5DX5wAY>k?lnw`D;Z<846|JKY}%xBNb#_k zht88Je0G1{zkhG^z@>)iWPwYPfyC@tv$Qld7Y2nZG7BAOQEES&IPub{%|}(H+HZXJ zEUhx-(Y!|YCvJDUl$DiRmKF*2x~pEhdUffXc?=6at~g?4WyP`ol&gu{)ETFr2Ko6j zT&M_15)~C~iGQjj)h`v0Bo-1Av&N<|h9N#ao<;6z^2P|A>6e`{>MJW14OSd6xTB&o zwfoUWi-RBJ)!Rzt&K-I8{ynGn(?zRSYd1B%+L&PA5uqg>8xvDtWMXRC+5h56<%>6O zp7`*jP4sY)o7wSv_ik$|?N?zfPyhY1%U$oaYwK235vkpBtQO5~;m;Fg^OBRDpUj(> zxO?+vg!KGc>MY2pFckQ^}bK`Y}UGZ>MV&Xv-tF=*KVPOjE-E&S( zpEm8%mS;=$?%nJ4Ez;<>%557Nez+qS2w7D_y@!!9E z`H*__SI@=OlWR6+uD*LWc8$!udGju1IR({N8NA%GX7PqxODiiamophQ#>UCMVKZ*= z@$wo5b*_52+{CAjNBHopi+}#?x&MCuo;@ZZ|CTmjn$gJfsT%sxjEh4 z-Tm#`x0%~ZOG|I;KQ!g#pFe-jmupHXHXZu%#bnCmwrg`M_TGDAa!FT$_kq9H;dt*= zt5zATKdi&(?(EF0x7J%Be96Is2j5J3yw2Lr?%U6rAJrz)7k(a=EkUSN@xogJ9T uvvPx5=i_J3*e+*1eIex#js}ZZ|1mb-uAbYog+l{WK6twNxvXdGX&SZK4r+GleR4LA>O6gn7pm8o9iIaRyoiA@|ME%*y|>~vd06LHXb@zzWKG4h41BxdCQL++WqF$^w8^D zQzIj%DPH)#_xSZ>8YKIUUaD{ z%(%Txcm2XCN_ITV@-2S_{%n4|OHVI!nyUBAWt@k%Fmn$>|E7F}$X50R*RoADRHU}LED8)(9;4Kzwh?M;%_+Wz*#5BFxT47rtK_T|yb zl36EHloFEm2X9%;eYimR2W&VNeZI&Gh?-iz<) zi+-}X7Pwg8?&8?XPv%ZxD9r10ekAamVfu7i6~02gg39~0C028HL`}BQe$BllYORk{ zk?EQ>`WF%m9vt!g^lVc;Z`Z3>clm@*Eo)BJ-pPLTb=OCYzdmf5XP!MX>C*h+@Rw)d zIR_P{S=PZH_9ur_izb{o@Y-zIrvPoyYoRN}*^e+5KG0?V$M8qjw>tW-Q64DbJzf1= J);T3K0RWQK3%39O literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/limits/files@3x.png b/Telegram/Resources/icons/limits/files@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..8b204778c90b48f756f4b61b457c6efde18f8537 GIT binary patch literal 986 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1SD_us|Wxo#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyz1|Sip>6gA`6MbbAj}?&9g<7?Q#I zHp(zt$x)&;utyB_=;z(LvrlrZ3 zo8!tUB#@-arsC%NPHww^Q<_Y9S-MI=zILtg`|A7O&suGMcjlsC+zSS)2EGN%FsdPd zJw`8FYwD}A-TwamufP84fA#wD<76AT>seb*pY~qZQ__6%?YG~*e}Dg8el@DBY)y!k zShuUWvLHj<{(7_7Z&Oa)zwrJ$P^)Xe0 zZRM@F`1r*aSA_M=`gG}~$yBazgXyPh#r)MKhb-TAJJ&|;{~NWx%xl79q*lz`&&7Of zW5k=cZ+mYEhk3l5G=*scSFmIO>wZq=CjlB?K7Ddx)fC}kYj)gavo4)mE0AN-p@#2A zj~-oja$Ahv{5f+@T;0~K9X>~kr(*uxxwdw8K?|eSPP>^iZAEX?RP!C)5+AnR%xON@ zz;)yG*EM0Q*>d-rJmK)KtgGW=Yo6=Z?((f_FF!v&Uwd;-l6zf?!GawTI!Y5cY`#t| zxtmwMH_lwDH$_x{qa*ROy7?w!XjxqkJ@CnprTJt;WU*WWK`Gezyk_Gum} zdHMM#=Y@xdrv&7;{M!7C7wFTkHhFn@`yL*iwAd~-_k6yoNqy_ZfXGWJMiaZ2pNd&J zd(~ChDFuy2R{#H%>rVG}lh63{v*yWe=5^^4ow<`=CvGp|w7&D?pqlO;(N@mwAw~*) zGg6vc4?pg}&w23QHfi=*w@v$hKdiJ|A!S&xaOeI_PvrKr1zr)0 zFW!icEaKOcY00^oRhP-$x#2IT%#sN9_OLGomuGTcUAlrPVC8Ye8=Df-1y-FFV%sr^ zZ^MSrgA*lJXa`PZ(*1KnFj}ks0dLJ<@1 SoZk=z%2%GQelF{r5}E+exup33 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/limits/folders.png b/Telegram/Resources/icons/limits/folders.png new file mode 100644 index 0000000000000000000000000000000000000000..6c94dab3184e424e48e29f8c83dfce6fa939fe21 GIT binary patch literal 311 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlfUE%bD846zV= zJ4Ki8fC7)(ah++Wl{_r?Wf)Fp8bkzitZix8IDd_(vA4t4v)A1swy$^8Nz9qe!*7#fTc@mV%Nri)rlOJHP6;N`0Fy0)NQSvsJ|oxfA>NrOiM_k2#xC#NR0e)*fj z^|NfUB1=nyz>i?2dCyZL!$Pkb@SOj9u{2iZ`11FPJcswa|DO6_s*0!I6_y;nl{2r* zUBT(cCH&xKn2DuGY3%iV?}P1+Pkvq*DDv1stLb5o-92a7Z7BiwljL-2MgH&xis*)l z8rK?C3ueyJno=|E&D7*nuBL>wFZY@0&0O4kd&iXx>*KYuZ(l3DyYtc4CWo%aI!5d4 zH_be2BIwA$Vc06**d*h`!Kk=QK*?i*Gl!zW5fLXA&LR$=lV?b`>^RGCGWD6mQ!^G* z-{fhx-e`y9IR`{eOIvw%-=*os*-Im3**Kf#$)0*yUi4*Sqezma1Fy)X)iaf5oHtx^ w>b~Oz$-~3~?H`13iLQ3vv^WI=)J>FVdQ&MBb@0IqPQ_y7O^ literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/limits/folders@3x.png b/Telegram/Resources/icons/limits/folders@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..0c515302e021f949d4c696fbb794335bbf20bc68 GIT binary patch literal 607 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1SD_us|Wxo#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyz1|Sip>6gA`6MbbAj}cGAEXu2!mHAC%NO`Yk_x4e_(xuwN&rET^HIelrH zuOz)qAZX9`&O1jgC~e#&rugW=+DYN3H$AEB>r8*q+57yo?Xkj`X;0(6Jw4bEB63vj z%_nC;kIN=YGqX0-GD%EWbb{q)%fgJ5t#(2_TU-k#c53puPdRqPC0ay$=8Q)LE}1?= z3hy^E{BwAf#U$TZD?V#%-1mO_wXXLrbKMhsFKZmTxn%A&$ww9~-+S%f+`RS1{kQFb zM{~Jk|7~5olU3_prA?7Y)2Sl#B%|f$%|M5&dcqGkGV#?VRBZ<_2DUM!}H~x0H0Hj##ao{L{(>7c=yxb3ZO_mg{dXd08^+#^1X4WxG48 z7&4r!m@a072%UWT>1>*FWkZhH>1*90Uw+pfVyW6YujOmi-muk6Z5oayB_3vvS%3ZJ zyvr{|K2Ks=rX$^dyz^1x!GsqjR+FmCX5Y*)3u~;+-5%YUYc^YJYF8?&8N;!wJ7V;f z2Hnit?!R34_$;4g4hjbI&rA0n`&p9~X(`R1Ez))PVZ*i?dg(24i!}Oixw-k0UhtRTzLM;zz?5(|21D9wDL%yzH?9K^B}$H z^KW`BEiyjzyXIM3+M2LzrHK{G46JL8#OQ6m{Wfn}y?l(k+=mR4Ch_Hm`~x&Zc05u4 c^PKk&!?m23n+_(da{|S!r>mdKI;Vst0D24lGynhq literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/limits/groups@2x.png b/Telegram/Resources/icons/limits/groups@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b4176982e73147aa3e85e2fa6639752074851f6e GIT binary patch literal 1095 zcmV-N1i1T&P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91FrWhf1ONa40RR91FaQ7m0NXcg3;+NFu}MThR9Fe^SUX57K@>H4F$SX; zji|A(u~A9HLQ|NaqD4s1!b&WxB8Yv`OCUuM!BYGck|vd z35vdVWW%z~&dlx;->29ubmq*xXYSs)bMM{c)SufkiMo}Ok|BjD+D+G@43C@L!}*VfhuhKq}f=H_OW3J(X} z%gYNvC!Yoa0V+#jVd25Sfm|L40Fd)9I8e3W%P%U^bhnH~}K?2?SG|NNH)Q9G4=kt*z3j zbWAts^72wD#2Qn@)MP1+4Ben)GRZPRic@0+NP!^ z1Stx8K|uj(1s((k5*4a1n>H^$KfkfDv8AP@qM`z4hZYL?2`7#g0FlH|q%Wb?%*@On zR*0w+r%z8$i;IhXzaLf-6v)D%Pzc+L!qP!Dn?-x%@puR==G5hK$@>^7BQd_Yxd{e? z=yU}}#6BEA$WW)K`F6XVX$KZirN_p`kSD16d@z+tiR{P}DoHY#417$t33YpUd6~Z} ze-%;E-rg>-qg#D{f9K1KtLVK*n~-VN*VjdfFAs27IB|h}Vq!ui4@~ds>iT38zrj<< zD~O$+pIa;zu;Z^{nF)0C$C`TIiZ8?;Aec~Oz>EaOmz1s|f^(Ll8IUe~%UEc4;B}-cm4sqjr?0NA z&YAXo{{&8$f-q9aDkfO{=H{kK9hG9}Pj+^8AdKpP?>m)RD=RBGNt?}vuU*7B+>0Cd z>rnsz literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/limits/groups@3x.png b/Telegram/Resources/icons/limits/groups@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ba35f53981d6abcd6ef17196a12a7a543be37a62 GIT binary patch literal 1608 zcmZ8hdsNZ~6#n6ZKrQ)cmZ>v!;?#)wfaM@coDXQ$^1)IwADE9c69rwYMul2PDwSooOcD|8PvAC=QmY)n0rx&d=R&@kp>cy`Wq&dxpG{l0te_uoC|D>{5AWV4x_ z82|vA$)vz=1CurYGcxp_d9DZpLFnNj0f6XQ&W zvj;ZAq2;lG#rDBN&KLZh*jyq}<-)zypU>xPdKqLIR%wDvz;GKHoZQi!^^V1M9m~Ho zgkf&zdLQ^}#vZNf<_Nymbz2BuDHMvPZpAB+NaSd4uC{hW{I9%jZu(=U=Lm&@#bC4x zqt{-|^^J{xk4`UXXmAmcJG;6jC6c7nUH9BQg}aN!9#rDn3m!neAj;J`Ezn(7pJ|wT`oT{g3#+C?O;*2(ffL< zs%$1cH~{-p;pyQ~pYg*nqP&4$@ODYM$KKu^hYHC`Osv1+hFnvty%+C&E$Hbv3MXET zKXT+N?yxg|JdJj*agSoKxZ&wqoT^#LlgP=`BPI<4o?@Xg2InR zM;E<=5}rv<_e3HK%~c&3k!r(Fpoq0Zs zmuS3~wPKsSGuLP3)Ld_gACpFF?(18Z^z}V|9)0q&f`g*B0$AbaheAUwp2R2M@c4Y= zX|Y(`6yHa!d85hybO>U}505Lvxyo%L`M<+AT{m%tLZM!{s~Wr7)UjK;(P%4j9+gUU zArOx3tQdB!RVODWqbS~2;j(X@-c=;nG^d8QdN%tJ2!!j!&H*x+Ouy+i3Wv9r8e3xA z?}NK(%-mcop55!3=aiFXbSGebem*uXP9dl+__nRBG2+*>v@|d1j=OTDq=^z5&;ik* zXHUq)Ztm`!P}7Vnx`0Ljm;q@i0Y(r50|U6EwZqonUJR!4(RZVxAA1N>YJpieH7NN$=f#C=1S;ABBs2!*ka<|_%NJwX$Nec%X1{Sa1lCqrtO9G6J-}}oIejtc})D0&RAPpj~G1qc62G67N`0;;+YUC2u4Cl_l3|>-McXx*axBoE&s0P!y2B{u?Sz B+o=Em literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/limits/links.png b/Telegram/Resources/icons/limits/links.png new file mode 100644 index 0000000000000000000000000000000000000000..96d5761299b82bb23063d33dfd395e7b566114c7 GIT binary patch literal 552 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlgfY?7yoV~B;| z(=S$}KLA&QqnLr1S)qdOIFwba*7RWhc{d#n2*_DR$xwY*Jb*8oyQ6w{gBn zyIEGQbzc7W?SE!(%KrbDv214Q&97Ctx3{fYwMgTV$=|JV``%Aa{TVa&^wUlE-*3OP zbKPwdUX|GEbI(72{ISAn?k5}hHb#MUYh4Ougg;c+*qpzd%-7yrko#7!^pHV`jC;D^ z>|G}s<6bY97r4ER_i%vU7Y@N&+9`Fy9I-DtqNcFBO;Rb1z5l-a=+*DGJ5nQe-Oe#q z4xHX6!gboj_lbMaDU4i48j?G2WJdFmvRUP8Z`V9Qr{4Qv8?Rd47!%x(w zdFCFL*WziOD#fA`7!SI}?mDkF`)yN)Z*=uyZrR$kCvMHIZST1Iocluj#kea=m1XPG zKg)87mtIt^TDaFos`UQLO$krWE5uxQ+3s0yy_mJNZmIhhr|M@X{5Hf#U%eRlZ^B>3 XiamNAocA|-fMUth)z4*}Q$iB}9);BY literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/limits/links@2x.png b/Telegram/Resources/icons/limits/links@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..90ac07fddcf0d583ba9e538da1482e7fefb652cb GIT binary patch literal 1111 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 Zz<*WhN3^+YuVerK002ovPDHLkV1h^323!CD literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/limits/pins.png b/Telegram/Resources/icons/limits/pins.png new file mode 100644 index 0000000000000000000000000000000000000000..572cffebfbcb813ebc1d3d2402fc24ab61b1cfe9 GIT binary patch literal 525 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 BoxShowFinishes(not_null box) { + const auto singleShot = box->lifetime().make_state(); + const auto showFinishes = singleShot->make_state>(); + + box->setShowFinishedCallback([=] { + showFinishes->fire({}); + singleShot->destroy(); + box->setShowFinishedCallback(nullptr); + }); + + return showFinishes->events(); +} + class InactiveController final : public PeerListController { public: explicit InactiveController(not_null session); @@ -371,6 +393,7 @@ void SimpleLimitBox( not_null session, rpl::producer title, rpl::producer text, + const InfographicDescriptor &descriptor, bool premium, bool fixed = false) { box->setWidth(st::boxWideWidth); @@ -378,36 +401,30 @@ void SimpleLimitBox( const auto top = fixed ? box->setPinnedToTopContent(object_ptr(box)) : box->verticalLayout(); + + Settings::AddSkip(top, st::premiumInfographicPadding.top()); + Ui::Premium::AddBubbleRow( + top, + BoxShowFinishes(box), + descriptor.defaultLimit, + descriptor.current, + descriptor.premiumLimit, + std::nullopt, + descriptor.icon); + Settings::AddSkip(top, st::premiumLineTextSkip); + Ui::Premium::AddLimitRow(top, descriptor.premiumLimit); + Settings::AddSkip(top, st::premiumInfographicPadding.bottom()); + + box->setTitle(std::move(title)); + + auto padding = st::boxPadding; + padding.setTop(padding.bottom()); top->add( - object_ptr>( + object_ptr( box, - object_ptr( - box, - std::move(title), - st::changePhoneTitle)), - st::changePhoneTitlePadding); - - top->add( - object_ptr>( - box, - object_ptr( - box, - std::move(text), - st::changePhoneDescription)), - st::changePhoneDescriptionPadding); - - box->setNoContentMargin(true); - - const auto close = Ui::CreateChild( - box.get(), - st::infoLayerTopBarClose); - close->addClickHandler([=] { box->closeBox(); }); - box->widthValue() | rpl::start_with_next([=](int width) { - close->moveToRight(0, 0, width); - }, close->lifetime()); - box->setFocusCallback([=] { - close->raise(); - }); + std::move(text), + st::aboutRevokePublicLabel), + padding); if (premium) { box->addButton(tr::lng_box_ok(), [=] { @@ -420,6 +437,15 @@ void SimpleLimitBox( }); }); } + + box->addButton(tr::lng_cancel(), [=] { + box->closeBox(); + }); + + if (fixed) { + Settings::AddSkip(top); + Settings::AddDivider(top); + } } void SimplePinsLimitBox( @@ -431,19 +457,19 @@ void SimplePinsLimitBox( int limitPremium) { const auto premium = session->user()->isPremium(); + const auto defaultLimit = Limit(session, keyDefault, limitDefault); + const auto premiumLimit = Limit(session, keyPremium, limitPremium); + auto text = rpl::combine( tr::lng_filter_pin_limit1( lt_count, - rpl::single(Limit( - session, - (premium ? keyPremium : keyDefault), - premium ? limitPremium : limitDefault)), + rpl::single(premium ? premiumLimit : defaultLimit), Ui::Text::RichLangValue), (premium ? rpl::single(TextWithEntities()) : tr::lng_filter_pin_limit2( lt_count, - rpl::single(Limit(session, keyPremium, limitPremium)), + rpl::single(premiumLimit), Ui::Text::RichLangValue)) ) | rpl::map([](TextWithEntities &&a, TextWithEntities &&b) { return b.text.isEmpty() @@ -455,6 +481,7 @@ void SimplePinsLimitBox( session, tr::lng_filter_pin_limit_title(), std::move(text), + { defaultLimit, defaultLimit, premiumLimit, &st::premiumIconPins }, premium); } @@ -465,21 +492,19 @@ void ChannelsLimitBox( not_null session) { const auto premium = session->user()->isPremium(); + const auto defaultLimit = Limit(session, "channels_limit_default", 500); + const auto premiumLimit = Limit(session, "channels_limit_premium", 1000); + auto text = rpl::combine( tr::lng_channels_limit1( lt_count, - rpl::single(Limit( - session, - (premium - ? "channels_limit_premium" - : "channels_limit_default"), - premium ? 1000 : 500)), + rpl::single(premium ? premiumLimit : defaultLimit), Ui::Text::RichLangValue), (premium ? tr::lng_channels_limit2_final(Ui::Text::RichLangValue) : tr::lng_channels_limit2( lt_count, - rpl::single(Limit(session, "channels_limit_premium", 1000)), + rpl::single(premiumLimit), Ui::Text::RichLangValue)) ) | rpl::map([](TextWithEntities &&a, TextWithEntities &&b) { return a.append(QChar(' ')).append(std::move(b)); @@ -490,6 +515,7 @@ void ChannelsLimitBox( session, tr::lng_channels_limit_title(), std::move(text), + { defaultLimit, defaultLimit, premiumLimit, &st::premiumIconGroups }, premium, true); @@ -553,24 +579,25 @@ void PublicLinksLimitBox( const auto session = &navigation->session(); const auto premium = session->user()->isPremium(); + const auto defaultLimit = Limit( + session, + "channels_public_limit_default", + 10); + const auto premiumLimit = Limit( + session, + "channels_public_limit_premium", + 20); + auto text = rpl::combine( tr::lng_links_limit1( lt_count, - rpl::single(Limit( - session, - (premium - ? "channels_public_limit_premium" - : "channels_public_limit_default"), - premium ? 20 : 10)), + rpl::single(premium ? premiumLimit : defaultLimit), Ui::Text::RichLangValue), (premium ? tr::lng_links_limit2_final(Ui::Text::RichLangValue) : tr::lng_links_limit2( lt_count, - rpl::single(Limit( - session, - "channels_public_limit_premium", - 20)), + rpl::single(premiumLimit), Ui::Text::RichLangValue)) ) | rpl::map([](TextWithEntities &&a, TextWithEntities &&b) { return a.append(QChar(' ')).append(std::move(b)); @@ -581,9 +608,14 @@ void PublicLinksLimitBox( session, tr::lng_links_limit_title(), std::move(text), + { defaultLimit, defaultLimit, premiumLimit, &st::premiumIconLinks }, premium, true); + Settings::AddSubsectionTitle( + box->verticalLayout(), + tr::lng_links_limit_subtitle()); + const auto delegate = box->lifetime().make_state(); const auto controller = box->lifetime().make_state( navigation, @@ -612,25 +644,25 @@ void FilterChatsLimitBox( not_null session) { const auto premium = session->user()->isPremium(); + const auto defaultLimit = Limit( + session, + "dialog_filters_chats_limit_default", + 100); + const auto premiumLimit = Limit( + session, + "dialog_filters_chats_limit_premium", + 200); + auto text = rpl::combine( tr::lng_filter_chats_limit1( lt_count, - rpl::single( - Limit( - session, - (premium - ? "dialog_filters_chats_limit_premium" - : "dialog_filters_chats_limit_default"), - premium ? 200 : 100)), + rpl::single(premium ? premiumLimit : defaultLimit), Ui::Text::RichLangValue), (premium ? rpl::single(TextWithEntities()) : tr::lng_filter_chats_limit2( lt_count, - rpl::single(Limit( - session, - "dialog_filters_chats_limit_premium", - 200)), + rpl::single(premiumLimit), Ui::Text::RichLangValue)) ) | rpl::map([](TextWithEntities &&a, TextWithEntities &&b) { return b.text.isEmpty() @@ -643,6 +675,7 @@ void FilterChatsLimitBox( session, tr::lng_filter_chats_limit_title(), std::move(text), + { defaultLimit, defaultLimit, premiumLimit, &st::premiumIconChats }, premium); } @@ -651,22 +684,25 @@ void FiltersLimitBox( not_null session) { const auto premium = session->user()->isPremium(); + const auto defaultLimit = Limit( + session, + "dialog_filters_limit_default", + 10); + const auto premiumLimit = Limit( + session, + "dialog_filters_limit_premium", + 20); + auto text = rpl::combine( tr::lng_filters_limit1( lt_count, - rpl::single(Limit( - session, - (premium - ? "dialog_filters_limit_premium" - : "dialog_filters_limit_default"), - premium ? 20 : 10)), + rpl::single(premium ? premiumLimit : defaultLimit), Ui::Text::RichLangValue), (premium ? rpl::single(TextWithEntities()) : tr::lng_filters_limit2( lt_count, - rpl::single( - Limit(session, "dialog_filters_limit_premium", 20)), + rpl::single(premiumLimit), Ui::Text::RichLangValue)) ) | rpl::map([](TextWithEntities &&a, TextWithEntities &&b) { return b.text.isEmpty() @@ -678,6 +714,7 @@ void FiltersLimitBox( session, tr::lng_filters_limit_title(), std::move(text), + { defaultLimit, defaultLimit, premiumLimit, &st::premiumIconFolders }, premium); } @@ -722,20 +759,23 @@ void CaptionLimitBox( not_null session) { const auto premium = session->user()->isPremium(); + const auto defaultLimit = Limit( + session, + "caption_length_limit_default", + 1024); + const auto premiumLimit = Limit( + session, + "caption_length_limit_premium", + 2048); + auto text = rpl::combine( tr::lng_caption_limit1( lt_count, - rpl::single(Limit( - session, - (premium - ? "caption_length_limit_premium" - : "caption_length_limit_default"), - premium ? 2048 : 1024)), + rpl::single(premium ? premiumLimit : defaultLimit), Ui::Text::RichLangValue), tr::lng_caption_limit2( lt_count, - rpl::single( - Limit(session, "caption_length_limit_premium", 2048)), + rpl::single(premiumLimit), Ui::Text::RichLangValue) ) | rpl::map([](TextWithEntities &&a, TextWithEntities &&b) { return a.append(QChar(' ')).append(std::move(b)); @@ -746,6 +786,7 @@ void CaptionLimitBox( session, tr::lng_caption_limit_title(), std::move(text), + { defaultLimit, defaultLimit, premiumLimit, &st::premiumIconChats }, premium); }