From ef927c846588bc6b03b563d67aa8e1217577fa8b Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 23 Dec 2016 16:21:01 +0300 Subject: [PATCH] Theme preview ready. Also style::color is now copyable, constructed only inside a palette. Also macOS setup new background ready. --- Telegram/Resources/art/mac_setup.tiff | Bin 0 -> 38200 bytes Telegram/Resources/art/osxsetup.tif | Bin 87596 -> 0 bytes Telegram/Resources/art/osxsetup.tiff | Bin 248458 -> 0 bytes Telegram/Resources/art/osxsetup@2x.tif | Bin 197936 -> 0 bytes Telegram/Resources/art/osxtray.png | Bin 2354 -> 0 bytes Telegram/Resources/art/sunrise.jpg | Bin 0 -> 119709 bytes Telegram/Resources/basic.style | 160 +--- Telegram/Resources/icons/mac_tray_icon.png | Bin 0 -> 444 bytes Telegram/Resources/icons/mac_tray_icon@2x.png | Bin 0 -> 855 bytes .../icons/mac_window_shadow_top_left.png | Bin 0 -> 823 bytes .../icons/mac_window_shadow_top_left@2x.png | Bin 0 -> 1979 bytes Telegram/Resources/langs/lang.strings | 5 + Telegram/Resources/sample.tdesktop-theme | 332 +++---- Telegram/Resources/telegram.qrc | 1 + Telegram/Resources/telegram_mac.qrc | 3 - Telegram/SourceFiles/app.cpp | 22 +- Telegram/SourceFiles/app.h | 12 +- Telegram/SourceFiles/application.cpp | 5 + Telegram/SourceFiles/application.h | 2 + Telegram/SourceFiles/boxes/aboutbox.cpp | 6 +- Telegram/SourceFiles/boxes/addcontactbox.cpp | 14 +- Telegram/SourceFiles/boxes/backgroundbox.cpp | 3 +- Telegram/SourceFiles/boxes/boxes.style | 63 +- Telegram/SourceFiles/boxes/confirmbox.cpp | 27 +- Telegram/SourceFiles/boxes/contactsbox.cpp | 11 +- Telegram/SourceFiles/boxes/members_box.cpp | 6 +- Telegram/SourceFiles/boxes/passcodebox.cpp | 12 +- Telegram/SourceFiles/boxes/send_files_box.cpp | 10 +- Telegram/SourceFiles/boxes/sharebox.cpp | 7 +- Telegram/SourceFiles/boxes/stickers_box.cpp | 10 +- Telegram/SourceFiles/boxes/usernamebox.cpp | 8 +- .../SourceFiles/codegen/style/generator.cpp | 103 +- Telegram/SourceFiles/core/lambda.h | 123 ++- Telegram/SourceFiles/core/task_queue.cpp | 415 ++++++++ Telegram/SourceFiles/core/task_queue.h | 100 ++ Telegram/SourceFiles/dialogs/dialogs.style | 25 +- .../SourceFiles/dialogs/dialogs_layout.cpp | 30 +- Telegram/SourceFiles/facades.cpp | 12 + Telegram/SourceFiles/facades.h | 2 + Telegram/SourceFiles/history.cpp | 4 +- Telegram/SourceFiles/history.h | 2 +- Telegram/SourceFiles/history/history.style | 29 +- Telegram/SourceFiles/history/history_item.cpp | 16 +- Telegram/SourceFiles/history/history_item.h | 2 +- .../history/history_media_types.cpp | 110 ++- .../SourceFiles/history/history_media_types.h | 16 +- .../SourceFiles/history/history_message.cpp | 58 +- .../SourceFiles/history/history_message.h | 2 +- .../history/history_service_layout.cpp | 7 +- Telegram/SourceFiles/historywidget.cpp | 67 +- Telegram/SourceFiles/historywidget.h | 2 +- .../inline_bot_layout_internal.cpp | 32 +- Telegram/SourceFiles/intro/intro.style | 34 +- Telegram/SourceFiles/intro/introcode.cpp | 4 +- Telegram/SourceFiles/intro/introphone.cpp | 4 +- Telegram/SourceFiles/intro/intropwdcheck.cpp | 6 +- Telegram/SourceFiles/intro/introsignup.cpp | 4 +- Telegram/SourceFiles/intro/introwidget.cpp | 8 +- Telegram/SourceFiles/layerwidget.cpp | 20 +- Telegram/SourceFiles/layout.cpp | 56 +- Telegram/SourceFiles/layout.h | 8 +- Telegram/SourceFiles/mainwidget.cpp | 31 +- Telegram/SourceFiles/mainwidget.h | 1 - Telegram/SourceFiles/mainwindow.cpp | 5 +- Telegram/SourceFiles/mainwindow.h | 4 +- .../media/player/media_player.style | 1 - .../media/player/media_player_cover.cpp | 2 +- .../media/player/media_player_widget.cpp | 2 +- .../media/view/media_clip_controller.cpp | 4 +- .../SourceFiles/media/view/mediaview.style | 67 ++ Telegram/SourceFiles/mediaview.cpp | 301 ++++-- Telegram/SourceFiles/mediaview.h | 55 +- .../SourceFiles/overview/overview_layout.cpp | 18 +- Telegram/SourceFiles/overviewwidget.cpp | 3 +- .../platform/linux/main_window_linux.h | 4 +- .../platform/mac/main_window_mac.h | 4 +- .../platform/mac/main_window_mac.mm | 69 +- .../platform/mac/window_title_mac.h | 3 + .../platform/mac/window_title_mac.mm | 139 +++ .../platform/platform_window_title.h | 17 + .../platform/win/main_window_win.cpp | 14 +- .../platform/win/main_window_win.h | 6 +- .../platform/win/window_title_win.h | 17 + Telegram/SourceFiles/profile/profile.style | 15 +- .../profile/profile_block_group_members.cpp | 2 +- .../profile/profile_block_peer_list.cpp | 2 +- .../profile/profile_common_groups_section.cpp | 2 +- Telegram/SourceFiles/settings/settings.style | 15 +- Telegram/SourceFiles/stdafx.h | 1 - Telegram/SourceFiles/stickers/stickers.cpp | 14 +- Telegram/SourceFiles/stickers/stickers.style | 3 + Telegram/SourceFiles/structs.cpp | 42 +- Telegram/SourceFiles/structs.h | 7 +- Telegram/SourceFiles/ui/animation.h | 18 +- .../ui/effects/cross_animation.cpp | 2 +- .../SourceFiles/ui/effects/cross_animation.h | 2 +- .../ui/effects/radial_animation.cpp | 2 +- .../SourceFiles/ui/effects/radial_animation.h | 2 +- .../ui/effects/send_action_animations.cpp | 12 +- .../ui/effects/send_action_animations.h | 6 +- Telegram/SourceFiles/ui/images.cpp | 29 +- Telegram/SourceFiles/ui/images.h | 11 +- Telegram/SourceFiles/ui/style/style_core.cpp | 1 - .../SourceFiles/ui/style/style_core_color.cpp | 54 +- .../SourceFiles/ui/style/style_core_color.h | 63 +- .../SourceFiles/ui/style/style_core_icon.cpp | 144 ++- .../SourceFiles/ui/style/style_core_icon.h | 83 +- Telegram/SourceFiles/ui/text/text.cpp | 147 ++- Telegram/SourceFiles/ui/text/text.h | 40 +- Telegram/SourceFiles/ui/toast/toast.h | 2 + .../SourceFiles/ui/toast/toast_widget.cpp | 38 +- Telegram/SourceFiles/ui/toast/toast_widget.h | 6 + Telegram/SourceFiles/ui/twidget.h | 29 +- .../SourceFiles/ui/widgets/input_fields.cpp | 8 +- Telegram/SourceFiles/ui/widgets/labels.cpp | 35 +- Telegram/SourceFiles/ui/widgets/labels.h | 11 +- .../SourceFiles/ui/widgets/multi_select.cpp | 10 +- .../SourceFiles/ui/widgets/multi_select.h | 2 +- Telegram/SourceFiles/ui/widgets/shadow.h | 4 +- Telegram/SourceFiles/ui/widgets/tooltip.cpp | 33 +- Telegram/SourceFiles/ui/widgets/tooltip.h | 11 +- Telegram/SourceFiles/ui/widgets/widgets.style | 36 +- Telegram/SourceFiles/window/main_window.cpp | 3 +- .../window/notifications_manager_default.cpp | 2 +- .../SourceFiles/window/top_bar_widget.cpp | 8 +- Telegram/SourceFiles/window/top_bar_widget.h | 2 +- Telegram/SourceFiles/window/window.style | 22 +- .../SourceFiles/window/window_main_menu.cpp | 4 +- Telegram/SourceFiles/window/window_theme.cpp | 44 +- Telegram/SourceFiles/window/window_theme.h | 24 +- .../window/window_theme_preview.cpp | 906 ++++++++++++++++++ .../window/window_theme_preview.h} | 34 +- .../window/window_theme_warning.cpp | 2 +- Telegram/gyp/Telegram.gyp | 5 +- Telegram/prepare.bat | 120 +++ 135 files changed, 3516 insertions(+), 1391 deletions(-) create mode 100644 Telegram/Resources/art/mac_setup.tiff delete mode 100644 Telegram/Resources/art/osxsetup.tif delete mode 100644 Telegram/Resources/art/osxsetup.tiff delete mode 100644 Telegram/Resources/art/osxsetup@2x.tif delete mode 100644 Telegram/Resources/art/osxtray.png create mode 100644 Telegram/Resources/art/sunrise.jpg create mode 100644 Telegram/Resources/icons/mac_tray_icon.png create mode 100644 Telegram/Resources/icons/mac_tray_icon@2x.png create mode 100644 Telegram/Resources/icons/mac_window_shadow_top_left.png create mode 100644 Telegram/Resources/icons/mac_window_shadow_top_left@2x.png create mode 100644 Telegram/SourceFiles/core/task_queue.cpp create mode 100644 Telegram/SourceFiles/core/task_queue.h create mode 100644 Telegram/SourceFiles/window/window_theme_preview.cpp rename Telegram/{Resources/basic_types.style => SourceFiles/window/window_theme_preview.h} (72%) create mode 100644 Telegram/prepare.bat diff --git a/Telegram/Resources/art/mac_setup.tiff b/Telegram/Resources/art/mac_setup.tiff new file mode 100644 index 0000000000000000000000000000000000000000..71d8354694ced401b149d375e5e912065cb60b49 GIT binary patch literal 38200 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

WB{W#KH@k;_Soog_P>9uBD#2`)SoI$$hNg;O>Z z%u|tyYhW1*_3O*`DJvm*>luyvytjqB`wvDi%q6Ua(ZI6K#S3etZsR6~Angwbi#NH1 zwd$zll@C_)Jx#{8fXyk{V4tz@0Ed(SP{1`x9j?}t3jbu`)Z&i}LlErCN6ZZ&xRdIo zQv+^YqpodXra#dkL~AZ7K`p>OIjFP|Vl3F|6ZPfHoV|S|;(Fzs19V7m-3NU%zK4f5 zgbpE@63^4rP}kHy&y2aUv(LiG)w`~afkzIQ4MWq{JUbFO8b8RvwxDZ(ubX2gzRy?) zcd;=>!`}PM89=M~^hp#^M?flu8OVyOyFY#Y?wNs|eoLmmsF zVK>)-MXyL{VTPghbkY9wwXn=!6ENwyj#RG2vuhL2bY;iA{1C$0k>OB{UCoE|tSU1i zgdFNWCfQjc?~;|X7dnk+9eed@96NmtHvK-pfS{NFH@|&Q>+4AD_p83e;&6I!3o_Ic zCbTO7PtnVdZ@q0SXcM8wLD>h-ZzpwKox-l>{T@A+o&%?~n;$OjMk7B|H-FD(n*MqP zTFnpNSRA{>B4AOsv4=dfzK6^2&{y~MvCr(6@3HL*z(q4?dGAMfiOh{UH%3c~b5ErP zi>M8a@qIP<@sHkWseCB2JuF4a(I6hAi0gh94cu8h&jxFe+()4R33^QSb`QnV*A_4;PJgXX z1yY}=K{#eA$skNll8jBeN#ATtJftU3P(i<4FXD}mYfp-ZoalD|^H(-sLW&e+HnUu7 zaF3E3V2IYb*K}>%*Uu#3G#Xdp`70cI(N8yhlCz`~9YZ3nNzoB4oIFztVHAIr4C2z5O*}zFmFAVPAis>-mZe zgMTe%+UGa@frSY>WJnf9`av?|3{@<=&PB(@obJyxwPAVH>MpPlzhZRm5EUU74OP;B zPzGIl42z0T-mGDT(sO5AmR`>_zIu!)o?)=GICxbo?{YU0HC-n6XnCsZjSO0^#9xU<)b3OR{ zKQq^Zr~a9_9^CW?b3J$+9Q=xgo?y`9;Q4^KP5=PB=jUSxq8>8czw_VB8B6-K%X}WeJLgYL@fc35QqE*L;y&=hZxGxpHsnsSkD6B zdODN@+6;h0Jpi|`>Qm_N@|A}`r8-%%j;Un@5CXXQtfdT^H-58{i17TJW_6A{% zUuZg@5P(-303t#BQ9}%Uehmw<#RX~ZDW3U8Y zGEx*EBh+MN!G9=Oc{N!%HF*_4T`QD`!Fu6IC|A5Y!B>Ot&E;!+C<0D{&tB17#+;~! z_aGRD1>pCES=eC1ys)Y`J}pgzdZ=2c577rt!k|KZynO@JLN)j>WC_$jn2eU@Lv53g zyfpZ}isoQ$iPG~6z@rqUlq9ia(UeuCWEGW^Rh1>SMU|FOk(QH@lu=bvlvk6HLwzfJ zng|e555T#pS?e2q8xE{#@Oh9(L^WyYkdP3m5P2!T0C#CwRaI4K898Y=IZ2R0GVri3 z2@@*m8_55a$#*{b_&{s`fk-0w`J%{tF|K|=Bn>`3@<2bzw|V&xe+=XsD78IDDXgE5 zbSQ=>Eh{A>{ZE~U-&f(EyZ&hY4;kRFKY9{_0=&29hQmtZz41PHUs530Pxc=N2G_*g z{72V+l-I}SAA1Ip41z%wd{gN^_6)Q+OvFoD;{*MI0LF!^UAqn7?w7wfVl8e&zBP+Q0Mh!x7vL|65#sQvSl@ zhXJYS`FZ;VnET=In)2$>|AhX>UT8f%%K$$&f;V0>(Ar2Bg*MPrl2uhwl9ZE@{gurx zbpOal-wzu^Hb@;`EItritibK9`eO%e?^#`p`(Lr-1txDgZ-OScWKuW+PEAG`tB8}4 zb(6$laI%sLax$)x7#tQaiIr86am8U|<&;!Z)uq36`Y8#S(>C_6WBfXU|4c%499GTE zFTe*w(j@p`-0{*Rf}5MV^iS;1k;oQgZmx#*4J2W}xuW&AMJIrwWAI9f@^UyuNm-nn zqNIYX3Mjg~8%7eRqUxrqq6AJ#MQPit{@VRtSbrB3Wc}5T;{326`=3jyAg3%RkHgDI zVw7=s(0Y}XB~_IaqpOT-3b4> zod2E*zViR2`+qz}hzH*HKXW)=S#4AO$4mnK+(;pq0KASnxY_Kwh%IkstRtdZt|cl%Bx5!$f#l^Rb^E1l8Um*a;~nfZn9Vzg&o)mW=hl_`2h9n$q9r_8swm)!NCaD!MAF$Vtj8;joelN-}s!jGUsf zBt}VA0Wa(7stP)j@ALa_Y@&aC-u_v;A1=_(Hy9uAJ5CUEwHPp9$Ab@Vw*WsM6oyFj zCSWmShbkTHi~APw{&)_dNPehapO#-${|l4<7Y!AM4~}q({%@P~|Jbws zdlAe3(6f?XE&qSzS-(Cj{~EV^kA?m<&iNKE>VGv*L-M{NN3Z{NSOZ2T;M2)M_s?Af!`wjV_kpL^;;VFE#g1c^+#R5rGeif{$pK#)b(2$_$}f;*7ZkS zzomiSBK~7tf7JC`8u%^ZKi2g}UB9J)-y;5FU4PW|TN?N+;y>2)M_s?Af!`wjV_kpL z^;;VFE#g1c^+#R5rGeif{$pK#)b(2$_$}f;*7ZkSzomiSBK~7tf7JC`8u%^ZKi2g} zUB9J)-y;5FU4PW|TN?N+;y>2)M_s?Af!`wjV_kpL^;;VFE#m*wx)49J0pNYX6aXRM zS${D1ffGQnOVEf5On5-fd7z?;HirprrzT*$b^GJdnj2SXD2c(1XDNFuw%gRU+vdP4 zBlrQc9)N|G7yxD=*c(J529dxjIcEc48A#ga3ZC!Yra=3W@Oa-KA94d3Cg1hE1ITrT z?Y{d6p=1hO0*Ty*-29a%KEMJzz+_|KU<0DQ4)(PJc*NPyZ6BT#MBMA@i3J;xfF%$B z_kWxd!YG`ie7-P-p`6J>1V~v z)jRM;12Ex&b&FTVIkPzqL1cZGRM9Zyf5M@YaFeq;0%qsJFKD4{}5>9t)lq z29L#q`53-gg{8Y?;CHJa!(?LcP8J(5!@GTD^S5Db!0Z?QH0(aC_gB1S09MDRff9rz$-a;1P7d+i}yfwkynTvR%IINxE$; z47`SJ_uu)W&b>X>+IF30`wCtl+qNrAwph^qzil1RjJIjmx3R{6w3{2);tgJ@wlR=z zn9}@$9~e2X1p+vM*Y7ln+ZghG_=ef$`2nm0c3wp7Rb$i$9}ExdoaEFtM4s)xmS1q&bRhj-%P#~! z8pz83hW8EfCVMrqhou7Zk@(^Q|F&DPBw4U+TTHTv|F9zv`8PWRbbs3Gwiwnw%yC;Z zszC6FCqB^5+l;)SAb%N$a=Q&gGlL)M?Fw4|m$9hb1N?%Be?d`wJ*)NIR~qaibN`wk z0OUc32_pF!;eGJ|{tGdUhhIRLjyJ*m`%{JC>*S5U zqrsU|oP2J(w?nZEMZHTuy2b^$E>e95||A^8!( z$8jM3S3iaD1|8bJV3Drd4)9;_wBSiUkH3>|?;sKKK;ZKhG-s`E`(PVSPLK4}gsHdd zWD0G1AjBveMJj zvyw0LtY5n@{W}c4bOKCpQ1}uG2p<4tf>1C)zB~r^D&k8oL<^LX60%)Dfyo8TZ3Tr< zQc=Tc5VVlLH-b+Aitmk#00ai1fWn}Z)KqXv3Zy*P$V36-WtOGXvBI$M`A5l7v1XK> z)8!Xnv+i=0R|tq6)uR^7+_(H}1skZyUUoi4NI%O4XV6_vQray3N!@0kE76qFXWEfX~r zrQ)^-yt2$NPy&BG7D~CO3|6uPUDl(^@&c~U0-`hZ_OW3D6;=eP$O2FcDRz&6LX_{o z8Q3b3@Y6p;_>UzJ{wczjNdQT)Jth;N1-xb6>!T@p;@LpPinY1gyU(IG?X3iE7e{BJ zMbXLK&Xq9#ZWGJAyJ{u^#qR_v=WP}fW(8XjzC2dDpXJ|{4xr; zrLCF&q0889I;+%QonpIPfibpD5aM9wg^#|D4V$MHd z77~6|#-^(Huv|goenh4m0$Z`$Ez}ydo4z(7Hnrq%MJ05^CBT}$3&lTO5QH{K6BMC{ z9iLgX$SnRc`gRA@TE2R^s47eJrtO+B@gxtd+Jf2o^5M#g7opEkxN0G0>(Tdz>#BKB zhwwQ|ylX&P3X$_|f-#yP~vRb+GvL?juMG3x@_u+2r{sAvNffqp^wI0~_FORXT+!zoyP^j(nk8=+0 zD=pc)HoSE`unT1tS|RX)QBa|Vh5ArpU{!6VdPSxFsUrd|Yc;#a85wA1xsS1CpK(u9 zu_y>vu~6SY@BK3NRyxtAWMxpl@0=!$7w2lxMJuj%qoPb(%>4RSDYCOmX;h3Y)Wi1~ zs|i#pxoXbF3s2=np)Ag4W|O!@Db!d$AIQ??5~vJ``XFqEUMeuFsGMe=Q;`!sPuLKs zG+SWiq_f`Jk2WPdR`cCc&GbM}Vg`c32?Wt7=$ah+GX9q1^CxSjPXj!#3ZB8Di$+~i z;}4|QX;`RxD=KM>l^E2C>2jw8B{>J3804}~hthl&6~$^~7U!8@F9?>dp-t3y5;5G& zMeQtWbtd*)Rpb4YvVxKfyn-U0EDKP~WBwAfDR=l*R+>T??pO`F%G!FiQ&1i)SHu{K z7S#IkVB1UbZaa+w;1xo4lMH|kfCFD*T)`I@6zFq2K$rx60=FR|NU`I;pg;k7;2#Q* z17rYMK!MB{{2-0Z2)=$$MgZ^u-y6tzp&T5YP}IXU+b#d1t~B1Hcyu2>1*Dz*I+pSP+f{Veb$Uk&Isk zVOCc!G7Ke$L979wfFR64hTXry65BLiVQn&u^YI0P4k%e>BF+a#hI>IcJ~)URj8K?? z@QGjoJ_LmCfUtmfkPiWb$+0S{4;}*sNHFqKN`QpNdVsJD2qOb*tid-Bm^zr759$63 z?D`8#0;2+u7SQt}9^QUVqC~KwC@?{t3d$HC;*BSfBrUv01bhGIQ%!e{lb9^ezj{5V5#^FupW{E7;m!z6t9K=7z-^x;d~lwf&5rEGa5T` z^aa@S%zw3e5C+?~uYb8f)4(b;kgy%91A5jrC~Qzb@K+KT`9=x8O)`L~Fn0pn06!oC zNP><=8Q2480|tNzuotia9D#!X7IarW;P){hKsXQuoB)!5bRY*P0E&SMpcZHZ&I7GL z2haud0XKmW;4bhGm;&a2m*9KYJ75!xrl=uw5EjTz2oFRMA`X#*s6aF!1`sodHN+9( z0&$1>Vg(QUvg&xIT z3MUFTiU5iTibRTBiZY5uigt<{6yp?A6iXBvFe(@e343@d=u zz*=CvuyNQk*fQ)hB^@Ofr8uP;C7RNK(w#Dd@&sirWfkQ`%IlPODd#BPQBhH`QwdWk zQyEh^Qh8Dxp-QGYMRk^{lWLS|hH9OfntCU-IJE}#UTO?AiTVU}K6L~2HR>_yIqDB^ zS~w3}4sHl{g8Raw;kocS_*M8Ad>+0@!$>1Yqeior21j$4CXJ?ork&{k5-k|ik3hdNt;L8MB7jMjCKRbj1)uaA)S#y$W&xC zvJ?3Lxkg7vCq$=B=R`-MOQox&>!Eu>_ko^;UWy(~kE1_EUr66VKSuwWfrdelL5JZW zLl{FYLo>r|h9yQCMj=K$Mhs&FVYOnaGpn39?5mPRtY}tG)+E+5ti!C!Y|Ly5Y<6s+Y=vxB z*rwPi*oD~9?B48Y?C04h*gx*ry+daQen-NN#vNlj-gE5Y(B{B%ByybPxXbZzCu*m` zPOqIAJ6m@?=7e#IaawVPaGvJ8&bhRUb=RI<*jbq5LuVHu)6=aRt1>X@&cWEQ;oeaf;oFpOlo9 z0+bq+7L^5*U6hNI@2Rk=SgIte^s7>;>Z%@7?NHrNQ&JcZ-H z^$PVF4L%KwMybY>CQ8#qvqW=Bi&qPyRi-tq&99BquF{^@5!Lb3Y0!DCE2A5rdr|kj zo|@iKy-s}!eIxxu{b2)U16zXvgC~Z3hVF*-hRa5ZMn{Y~jVX;yjWdkzp?9OP=vwr$ ziL%L2lU`G#=|0l}(`hp?vjDSpbEvtAd6xMj3qcECi`KosUi99qy^k%0E&VMoTTxkA zS`}J7x0baIx4yBDW#6HFb^G4g=-Q;&JhTx{*t^uZ zY+?3d$}sD$XxAdwWvm|dB=#jv8<&k+#B1O)@$+sPZkcWi?i%h{?u#B;9=RS%1U*6l zVa3zfv)J>!*Iut`uP@&A-e-N_J}y3&e3^Z{e0%-4{X+dliQ>c)#3_F@{~Z720Mme~ zKuF+$z%~*q7)%WXi3A-FdKRo1Tp0Wz#4e;clqu9Vbm*|y;e^BUVTNIqM_@;=N4mp# z!=u8V9o0En8UcxLjp#nce=PRcT%=KCO%x)^E9zFXOmt@S+Zg+p_SoIAk+Cz!jgHr! zpg$3C;$GaIxZ-$NJRyEKK|Ucr;d3G`aWF|HDK}{=8Jj$qBAb$z@+H+RbvR8a?Q}X- zx^MbKhE_&RCR1iu=1i7(R!cT2J2Crh&Y_%vT!q}?lZcZ+C#Ukv^4jtR^3(IT3Oow# z7U~wBE#fLlD0+VicWUgk_UXpr-Ni}8A4>=&_e+gRTgrsWa?7d8gUg>+*j3!9RH>}3 z;;c%l`c&;(Jyl~}(_5=tTU*CfmsSt052{~maBdhmqkpEYQL?f0Ec@A{CZH*(>BTvh za}(!H&v!SgG&f!lyijzJwe=;AHKTNj6whFfkc-)f*!=|3Bq-Z%Yl z20Qa|HgI-pF7`Ry^W1r!`Pv1!g^oqT#gP~LU(CHEzT8|o@rvnH(QA>{7v5;U8CrH& zo?8i6`Lde4wsWoet-{;xb<6c9?|j~EzEAwH^Fz&s%Epb4_8;drL$;{5@;-@vYX5Bd z`Oz1jFJB^+AEidZ*y*TabupH0IHlbT@%pY-DiwB;JCY5tR&BGv8a(O7IBQjbTq#Hl zfM>MdYB872GjrRgS~20HTx8+C@6znMqgrX&CD{l;_7tNEYl2NX?y3zW_YTIo&d2VI zeS@8sZTnpC6_Zl?B|DWf)(4oIwU%CHAfTPjM0=V8 z*Qn!qUHu)z&6IaZH{CtAeEB}~spZZ6_&jgtdCtv<1>ZdH*TGf-q zZ(d&Bbk7}%1W3#D0HsK+*UQZLp2fGHBD5kqUAUWQ!ltjbx&SI%blpqlt4*F+o8F(^ zcpREMvdr%IAj9hlce|kVde=MsBey?MthrY{0+gp1QH-$1tv;JdTYN)FE-lT*;@-!2 zyb52BT{Jh{+U#K9wE5CH!b){r2RS~Kb@9g7!lmL!s3oNLW^*p|V&u*>s!P-_!#X4B z_kX<8J9Gj5p`4&6bF9OP>D|VSn|I7QG~O&zK?hR2wYWv9FRdQkb7PsAB8sVp*jh|4 z9tNB(kq8knN`JvobCrPYd~nsP`!1c1c~K)wVf6@ntpXiTGf?aMu&sG0VRnzw2-D37 z$X-?iGTg+6=JSNPV@3zym{F&=t&sGqt)&F*frodNRq0KMlV{CcU>%xX<$X_$ z2KM!~-Zfvhxohi{Xs_6q)P9#;Ph8BVW;BDP^QA#!nA3EzX9+tjih3r?kcYkrIa%z_ zVhw@NUt~?Y+zC54)4@7I$qr-`!CJ5S3t+eg-`=_CSDjg~6fp^C5Nj%f6{;d2rc0+} zpCs#vJ+OY2xgRlDm&$li_szpE##1h^ilYa$1r@fMmi0-gJj%^ow(6}iV zX;=nU4&EwT&5o41kT-#EzLR)GZ%E-@hytR#o@Btmx6|^nv3TaOLyOKYa*IeV>}!^&NMp4`pCipetL*ZhfuaaJ6s# z%FdmWfI|CGhs$|z3bhdnr-XxdgDwk2dd~}-a8Gd(AxIgykK!? z3A$n&oSr$gvbyv%Zm`IIo_LeNYDx1@otbp!PRh#B)e~$zT?*n3u*jUoQ0nFg{Z1IA zASwLe;67g8@{QL80hUw!@;$)qj+o4gdB-gRuBad%!*dK0(@JWn3}%*R7_Og&3%6LGMWrr>>*@Dt{SZweu+cR!X~U^tBvHYZlsOO8bu|M*Xq;cxSohy3RNc})dag(XaMclcdwb3$8aD8uw)ImDa(5B`hChK z79zJggQ zyVt}j*WmPn5up{kb#sin{qa~mGg*#Ut@8&jq|i*MilrYDj6}X+u46k)pfh7wh6aoV zNc#h9!`vcBjbRU%nH;2fhy38JnH6(q8Hk6ppxv8DNbsR0Dun_sYEnL#N)%qI z=@)eF)Yh}6$QBTzxQy@Ibt{y0_>WQy4E`^aHIJR*UpCcYD&9Z40)mc zr_U?fkDf6pXfEg&$M}W$KcF-TcxS@8r$yNixYN--z2DB2j)$~c=xNLj{Xpw6W%zJ+ zBeRuJGok2Ey-B%zXn$C|`6+%`Aw_P{bSO)KgyziXLgCinm9%ya|8<%>hYU)o9$l3r z3N>BU$yk#~TIz3_dA74veXu>iQPT^Zs%==FydKCK+K|~)-LmTq-e_&wr0uBVE)$J> z+%vI~l^6CrbIy-CjSfq5HJ=4rv z$;J`uwDUYpPCufFCC_&)m{v@2ImfFz$=2a~vcmI?2a4}lD+2jjLl9kcH!|O#A6pYO zy&gJvW+vORk}hzs)1&};&;8B~E*R9F&Me?tWNV>xRtLn4*sHcQ>8?*a(0@Lb?iuM& zYt>R);~K`8eNQgX`dM#PzVtQr_n0z5qmIi9hsBh_OO{jF-&NYP4NU4+{q;HE!B^IRATopb8 zh%ajM%pWnUD|7Tyv!!5KNu3PwjZ~&)WETqGV$`6^y9`8k%)zT#ud)S0*OPRDZ(Xp zVt^pS2n7lYzc}Acz6C{CuA+gHlkRC#DsRBEy|%g@+C9=tj?C>6r-AeYnIRjH&<>Qig&z> z3JUR00NG?>*_PYws;+38T!N>f#RqwOxH8f+jXF&7MR0c?r*>-O6y0E7x1}K>xn$P+ zb9DQ7H!`v3jZfqsDm%SS*BPQUg`trU*Pa`7W_)kM zEvq(-8s?$TOXg1i&+*JRWSp$n4?ve9yOzWnvQnIYox< zk3^i+}*)n9A1L9;I89sMmS9Ld&x)n% z85`CPdz^Wr8N%sKln@9U9Sh&!G`ppjSEFz4qy974@VxkTWF@ss78&uJY z2p>kn-s=|A1)|HICI+i+&+jM=T%D+F7aX=QT=dOLQ7`EF+%Uz&q07eCjf^$E6RDTm zfo*A{c56AYlfpE-ag_%aRGa2z2~34#!UgH`<(R?$^mbK>cCcLNx4mK6WWxAx z`gKW9!+sAy%f0R`&Tc>NyT+KUBeqQJNEOxlwOBm=Cjw zDmr#&x~!Y=)j%k`JWQ^anhyp%Lr>~qZ^)FydW|Y zZ*^Q{ZkAQ4zh=*{SYR|#x30gQBDeRP#erK7*({ayU7*Q1siMLbrge;kC+7D~d&Ud2 zi%A@C%^2oYY<&NQeW5|>V-ve#JiCl2Nz7~)z^EC1VyH;Cp))a278V*No{PU zT^cF%O@TvsKu^z>)2%_V_%WW|cBg8kQmQ9Qjb?qkA4(P`1(zhMT}AAKG$@HAUR`J1 zGltW3=Vj)4paFY6l$UZcnsh|jvsrOh(57#togRO8{i@*8ky0mz_$>7f>}$qM5)ITFqnR% zrzZJkQ&3D@tMyKTXu6EVUfNh|JdzelPQ+5C1TWgI9zK6@_Q zLATK%nb%9sC{7oV;1rLBvNET;WeX4bCHD_6UFxw>lSos-d_HcIrkpwF)3p+K&c?fH zNS&!W*q2JVtw8yncoP4_@!l%QB@w~8WJ7#AkdEJF)7iIfy$XI}*8F(V!$ki2 zsCQ*|t;XFbl5DbUB&J2%d(nmh|M#`Cc_>ur|K~v&ul@9D)T-t{V7JV9I=y zFHY$ji+$>`KD(i*v4eE}I!Er{h@FZ6&l&Zc_tjD&>C&S4F;E+WwgCC+=Qz>KOzcO~ zmvNpe(fRaCany0>>h%*)1`WtN$0=sF*}5d_J5mHW=Lh@K2d1SGo~u>fI1s(1#f0N= zEF$jnp7oHl(@WICi5ZaS3TI*k-HT;o-tvGE@+F7X{)#{$L#-RH{Cj3nlCH2&4CxQR zg59C+Hn4&2z$LIeB~>YZvaT zzIUllZS`z2T*g{|xU?joEbTFw-0!Ab0Hb5jyYS=h`UL-u)`2b~NX^VAg`s@c!#u_IztAs7B_Gy9f3bQ0y z^hd?=g(|B!c_wT)KO#BEc=8FhBa%Kp$EWH-d6!*#4w|_mlHaD}16#AJ%3W8nk&}lD zm6oyt7y(3azZBJw=>9 zVvxU(NA|=X{&%(mR|f|cOS^SwMY3^r- zCmW$ooA#LvTpE@f;yOgB16EP~6skRSIl-`lf|>Si=jC&i12lSG#Q0eHR?dMh@)4Ek zuksmrgf`mRbp;r?lb2Ujg(+;2A54s4zOJ(M-uE(_lcJlll|9vC2pJp$m;z`-f>@#2 zS(0rmhZNS%d8UBRgwIn@LDs3!KNI%Cc*5=7%3V|Sd!?TvVfPJ3L-lpbzHq22G!LymoM;G% zH+Wkn-B;W@t(S7L4A@nKdiZn%w;Xb+b!0d}?_SVe_2lUSok?9j$;I@X%ugazw5O@} zd2A9=DLJf0{4u(`QJA;NZ0fugV`4JlU*zQWo5xDudjlC`;}_Z@3XTMO0QxcET|1o9 zD4mn_0BM+1SYyG$V-p2wi**3XP4G~7_2|=qTPZ%}143$h5&h-~i2d#}vt{xQstsiUfijjCDcQ7X=7WM-tLR>*^9j)a?WW_G%?oD?>L;`{?- zHhK^3Sg#}KbvnidXbmHIdIcQ0a)ntROUH3OZdEuv*b;}szd9c>bO^AXHS6HONx3@4 z^P$Z7qaAaLR(wNvH1w_<;^l{Yl10Sx%%4QZT8Rj<+4qQij5SNBduP?RWB2Ex;h=JA z1BU3K>u>nmuJquXh39l;aISigyxkf(x5`Hd4*7!j6I60zM>-n4wdQs;q5wwP$IBZL z*NUf_jJY6maoUm6tuyOyU=)zfl1Ld=;7e*x1@lhURJ33gdX72Yrg0Z{YB%a^O(FQr z9u!(i6ve$h%pb3{z~Fv)77l~-b!JW4tVRMyGADMg!~_xc9PK%I>s4NcYt>z^k6O6!Ro^(|u>)~Nwwd&pzoCYe_{z$D z;+_-s@Fubsb*_owO6i5fhv=%>9f+RAH=fsBdv5Y$9ta%1cXHm5AS65AcIz0jR3uTM zmqMvlO5tg3gQviY;+lX&$jE65=f@w9;jmgI3%si%(&)2BMhBB{iM7Df)`wr14cd$f zkC;1n9F}2O<(!RA|KzvV-$sN@PODJ%VwlM(r`)w7y<3?3ii;ZbfbEIJaSuD#`8)yf?UU~4VU$)Py3#N~^1vkBQqF{_VEXN>KRI_PL~ABWdA<{vb+RAu84 ze7&WQSRbQ8`W?iv*0?^Hre?xrsjFk08I?kY>`FqCV{Uhm%GaP zaFXr?-V&Bo#)lISV^cYQ&-58?!v3K%sUxorrInFfIyDZ)=wB6QzelG(r1C}S?9zu@ zoRMa6qdwtFGz>iBPhO;+n~3wv|I|S-wr_3`8rjPlemduMk!Q0Le}5gk=Yr;I+YcLj z*bm2nXs#{eXe~#9MLLCdL$(Q7L|)c>E*?iLuSKns{Rs<$&Yi=_BDO}Yu^%S*;%1n6 z^Fw%UtzVCf-|dH1Ef7yIP#tO>JMbv8P%)7dllC5Ik-gX>=O?IO&0aKa^h!vj5{TgL z`#d^Sbg*EDNOPO()wu*@rZg43$;0d{OFBtiF}wVMjD;(>H$nC~$vP{Xt5q8XgalF6 zy%0Gp8 zdY1(uKa{PlFjnc@2{0P%>;|X~y>LM)P&)Lcjn}-k{P?nZC4ouM`XT+G!OjzSzUFc{ zR>-91H6GIX>)Ox&%+18$%P`c9GLfTfg5$dc=dM&Wus9I27eAeei+DV>CoJJ9-$7BN zmGCJWZz!)@XkwG(@I*`)Vd#3E8G`PDCiLP?Qr0a0r2&Yey@ z(#Ua47^D5M!zNcxNL`;dntB@)Q5dCds&MhP>S|53Utgu?0*_WYDJf`foh?<$C3;vv z4U#=jA=%!ZfAgduY#$0RZa2}%r5tk}udfslU=qow&aP98Zt$t}E){0CiL5-Lu_w;j za#xHjb^pdN#7+N>v?SEc7ino3zV*YT2jFqMwKA(0S26w5GHv(#Wy9`de>YL_rm0X`PDD_{MyFZUZgn~S*9EKEpOyP?lvxSR zkquTaBf{w9Z}ACb-5XE~5xBzH4owbMlG(VD$a}s#;>3IF+Dp8R@g)|T2K&vfONhXa zs+?J`vn@Gj+=%_;yn3p*aqxyz=TSDM_OWY2x#d+nBOhnq+a31SDCpljsC`RnAGcn7 z2g>yfa)KkE$TCu!CgV`T#pIEBdS+L)z(xK6v(wt^$vuTBGa1QF1ABBhcoJCIMhc2l z{o9(obDqfyh+Ixzz9cP*YIVubT0OC2oU3+FST%+%UN?0o%T-=fv$_s6K1#SKD*{=> z%qYhkx7?_TPH%C9ah$U`*MF-ML#Z;d9X`FR6r8}<4g>6$U>yLNIaYByaOGGsP+4i~vnD7#*9DLAh4XkqAQhC%K~ z1b2bT<`w_-#`jHDm zC-YWjmja2ere;@6k@QPnsm_Fx91(N@j92v(3r$3JaO%Z-%_HQ*@@en36OZxIw#hfG zG+MiqJqU=Kg&;&9Qm?9CGQNIt)(zb@$49(zep*0lilVtx6TbW+YdVL%+$w(hcv{!B z`umrWs+}o;LZT9g_|+R+G<+GM_0%<`*^49EQ7z1j#}c2ZG>klwo?29R*30rBmSY*% zJs8nfQ^i~_#V@e~plIUUWJUL0k)##5958?5l3U%#Sfe`i&Bz8ORfU|kC|)EFBkXve zw-a0^?;QUa!xV%|0iOW=#992lKF7VTwo6_8n`ZIHE?$-^U6H8hl}*8XI(vzZo-_h* zI>mJ%iV%i5Xcy#*!yP0+hUNPWweg5?*fj*eIY5ILjk`MK^rqNb)EbM=1=^{<3~g(J<;mk%ATV;Ld`rv-BT6S!ze$`alH-qsf49wMPae z&alSIP9pgiB%>f~hz%j}Or`x>VhKH|ZBcvF*Y@fxW~3*?qmI_ha1;PZY8G4I3{cY|H z4J}5KE|3Jj|4G8iEN+tz(9_DkV-b&8hrf856sBI{EF;O979Y2ZcVaCjoJow{o!Z63@Gyr3Dn=(-%~<%EQGgHWf2jx!E>+bV^-VZyw3$6)yBhNV;F!_ZXWW1~Gl5 zKC)JCOYu6p?FI8WAFJ9^)sZm``#6&YB^a8b^v7kTFLd%Im5b0a+cQT;?$#-Z9ZY@J zth+d9oeo@QIh**2_A)xSK5BJGyRYHmK#5CI8bO>1^2*}yBV@t_>XPVv9#6%Yd3SBf zCHSipggPn4DE^GW{)2=wK&K3)kJ;;kja-MNk35N>uF=;aQ zPpQ1nUh~-n|I}c8;m&%n#*uaYwlwOR8tH_S#se=AVc|kP;Z=z^cm_PL^i!KtF;kfM zM8W5h(XwH}F51V%VvbR59h<$DIcGB0;t6Z4i-JZYEm;X?Pq$O%=M^;dTrQ5Rk)=5@ z6#I$uu=43z-jwN74buRp@X%g#3JtCB!#xLSMnkL<2&etwI<*}sP{sSDUbGnAjtkRy zZKE|eUub1orLR0rzQ2AyIx9Xt0d5IPg`F`kDaakWzSF0HNmO{KGmUP!g29o_@{%TE zv^5p@bWZdZqO^lu_S2(tcUV;+wEaUxGHvC9$+_dn3=h0{Z@rel6x^48rxW85uhCRF z9-i}2sztCIjh>r)iA}-3JAhz2z3&x3)5z5O(B^K#jc(z@^Y?mn-Z4xL8*UuRyyZWo zDvo^RYJ(}Et2@Vvpb$P{Yv{fEbi2SFmd(VwFXB5-Dvv}ceSk4GG9_f}QfN1oqO{)^ zm6A9%)73Ru2PB9;l*(v&dQfG9dLuFkp4KK(!_+hR_ze0c(8$W^>`;l@d0m9}!L?i+ zO4|dN*2NIG#USxQ2 zP~_PxD*_$wNXLGCl1b1muG@fJG@!mH?^4IUNUrLHumV=uyL_x6aE~i3tTv3xeMPdJ zDK&4CK5M`y3uruLb|Rj}uk$y&&|w$6SGD9ow`ayyCQ2&rjLMZSIkKgwwqplX`%p@X z2N=`rn++2ysis16X@WN6-Ui-7Kh{6@g|_|$w=NIL;YFfBLd8Nn50kibd{^U=!8~2a zNc>rC|0y`j&SV&sCP7Br@+EDfpPS36ZFUd>$@$;-5 z7%#Zk%hu{d&VP;TjLhtNhyHRLU`^TCF;+IcIU;(o^_M%3BJ=5iJaPf(+ZgQTHnx+ z<~wq&IW#7FQRi%j8#4A=BOl{{~dGBs(|xs~Ed zgp=M`m$Wo|l1p-#thX6GWSJm~pb%iWJ$*4FbNs3Q%nf+H&NOV~_xVTLOCNfwIXcen(11Tu?O#FUOkz0?S6$~5xMV93ol1y&R15yse1l1dAyM4x4BM$l*X8?+ zP3PX9Q)dy+l$X1Etv8LP(TUfb?~O$n3q@_~la4nfpCkng4P#gQct6%$-b@O+zH6kQ zI1yS9{j%nn9viVWdvsbf*qNO-efrT_qDNkXOr3bK-FaOK_Pgjv`U2(1gwuMR*Y@Z# zMjhI?Qn0Z~g8Lp%nThb6dei7qn$UE0&xfAUl|Eh1q~2Q>#iuU4YWqA^g}jZr7hrXp zZufMkf)W1y<&Msy*Q%@I!(q?-2jcbh5XL78JZ%&13c3>*bI#rNLzN>tdt2b(uTSq% z59(wahNxIhisn4wU4C7XRQxu{IkEIZou_$47&2uZ=HCbKxJz8_FW+(LAit|~O2qx- zafw1V&Bw6@r}wYYjB(#Qc8meql#nBHt}Q82mc9^H)Son3uhzY+l9CeGjZ9#VWT}1m zy5p1RAXD=f_VB7L=IBE!?;YC`gVy7C5~5P69pR%@*OJ5Uo11xm`uM_Km_=>;YF*T9 zQ!<=l<1-Mh$+LGsn~R|5P#YGf++N>(3a2vuMQ!6|FOhuoTMyq3*fwuGq`YuJoeicnc~LJKZfH0 zr;Mb(GZx>SJaLzKa&h=WXnUvONfLE85p%@geerTpm*o#N_V*vX&I^r10Y(t~=h`3M zm~i~fR0%-P6Azl`VP?CMHVoF)COGYro6?oQ&P+;Z!qi{%2PA!pZ40jGbE$Zk>eZZ zpqF=XC+}Hji)d>DjOtlWikbF*1LB1?oPx)h$zxDID$E!kiVi3uSNK7T3Nn3)olN^&?(ry zW=5Z-a`eKYNJm81W2l2=@X4Qrv5{koz8s5$_J!wqk9;Mb?OK0SNUaqPw|rmG6`_

n0ka;Ot#`EJkgV#cvd$% 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 z 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 zhR(_~kv}|oX@UX+00E!_009610096100N){009610N?=t00W=|009610Pp|+00000 G0002k;@ZLh diff --git a/Telegram/Resources/art/osxsetup.tiff b/Telegram/Resources/art/osxsetup.tiff deleted file mode 100644 index bbd73e0422e1cadcbf09fa629378ee209ae9be5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 248458 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%0DS&7OXlwBYLCrx90ou=BV)XxoOPz% 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�gWt)P2Ef%>}#MdPgS>?r@3#w6wz8H_0haiF-v@8 zZszWcd~GVqMi~{ZOuRtcuQuVfKN@Y^HWVT%{ zlS^UpxBS*>0D-@sus9snD+vI?q;Ri&%r+qsn1Eulifr!RB#>F<_q*lx{eQqEU`_5}ieL;x~4 zRc8f{l}@Kq%M~6OB!k1KIjS_Gdppo#Vo;C}78O*A&7b-V{902n%Voe<37kT6HidvA z@OVB$eJZ5QXEC?!8y8c?%x}9|=6btblEN(U9jpG4Hn3dudo0yvZBBtxwJ-T5n|K41 z()SjQo;!c<_Qw-y51b76vPasSlru1El>@>Mj3o)e zkgP2W!w||OZ=8oi0J1R%!T6{k>KkDVFYgKVj5Gu=y>?W@Zh?KW)Gu;$QlB^_~AWHiZhq()60HY;}LTM(aiQ2Nf zq>y~AHNFfi%6_5GIuSNbkb=gsMNMN8>mfiZ_ZUCS6KftKjw1}wH%>!(002z`!lxo? z%SfR+tW@huxCvWCo*!|`B%`-%V>0S3?V`rcrt2f?FjT2KDyt`{tD{k^iyMZFvWhdL zsKn3&12I?$Ozx$;5wv?CI#Zo7W!aW(ooCt%8zPHI(b6FXwCU>hTciS2I4h0;_}_3=(XyuvdOZIgjET> zw6r!&J@&TDRI=XyxzDod;-T!yrUD{%jhdw*uL``OGcC-h$tNkwyrg1jEBd%Asp_z` ztyxlhj^~owXvJLET=!J0m~>r^#wr_UHLKKl`(vm$l~&&{s|4VNFiGrkekRfU(V*B?T5^3wboy$APF!`{Fx3gfn_OhGGe(8S z>dQp+B2Gs?!a|c$=zp;hZ%%`>%U3Jo!ieH>l*sv>i$Jav*Iw2rT33-~ChrGi0AtAq zuVv`25(N<>Fbw;!D82WhzEE!c9jC#Lk_#=hi?j(-tsn>sAa8iLzJ%X!{Y8&0YrI18 zW>6V$dFe6es5lzp6+3h@=G^NL^Ed#D8P6v6Y$)iYV$zjLQePu;nU~5{QhVvR_WA zwzvq0=t(=PeP+F*m*kS<6Iz5H?vQdX$upgn^A=g zDXF0KwG!1i9ghj_Gt^ooPpd^~tw=!oukr@h$U}OO@2)Wu=F1Go6emx`N}esV;I|h& zfQ*p}g0W>JdK8gvCFZJ`!$ojdi^3+RC4r);B)pBAsp>p)mc*L&a%S0$953l4xy1t% zxhG`Mt!4z9$AS40>NMCwPC&xc0x1HJ6Cs2Ww1ypJSxuL0rA;PrQoy*xZO<7uW<{m` zqKDl-++hEJ^3@4T191LPomgqKSga8v&TNjUgp5=@VqJLDs;*?kwN|Y7kru@$R|D`M zi5ZDfa~}~NdYOVQ9Vysap)_K2(?xSyRog4sf$&A_o6S&)xVBGRV&%F{uV&2_Rv=m; zX)uAxxb)HrT2o!ZJZt0>kypdLG0&bGB2dVT!!*FhpWAz(m?iJL676@eE$eXRr4bo8 z4oKLhG)=8NfFEN>@nbeZFY>gXA}2Oi>4f>D*aVg?ilDG?={lSyxi2xIzi*|a`m9v8 znNyNN-kF|CU29Q|(&c1BAVm%`t*tN?>nvu=MZ|Fy@qXIZ-dJWnDlQEznKdG0pjdtG zI9I|N7F1(9Gggt(Qtj-}1rbjv-f_3B__|*c4Gju>23)nzD;ML{qTt+Qi3Rn)R|X(j zi8Q@zSB~gQDa6d5^}oH-C3;+#n2jW^uS?UpJ31IQhzfpiOSsQTm(rYwv3?My80z-8 zd;(XXN=&emB6CLU`FJHOaoWnVBU`P3fvuWf#f4gYBQ2RH(;<_BtKq2E+)nS=F%?jc zq5ifhlUrYbs@5@1<;Jb4vvo7ChIF|fIr6CMU1a85@fNCIomB`7Rv2Cui47f6DCr#I zjkOu;gmPX?<&f#WO9mXd#X>-j>O0sz%r^@tI-Y#a`z6J;VK|Vw_dygQ2Wn=l&uL=B zbo9x3ZM>bxt9o5@_91+W6oifuQbndoCrq?-KJF4-N4xncwW7%77FzdnsG(K8=7hOb zVW#DH*9JvD?%AD>zr-~&3uUc4{^E&+`-8{qm-%XZFZOx7m)kc)8C=sVMR8O1$> zC;nyT+J_*kn(b|HTQ20kD65LM6_rF9zV)w7>C;)xY>c{mLD%IQv#M?|(*WY*jL*y+ z^N_TK)=3)f2Tysvyjzx9c3iss4orqS5d3j3q=}1QWc8zdT9?p6oGy%oe5j6Tu4WDrUFI@x1E$p!r_)z>7vYyW$k7 zMW|(~r*gF_c;hZP2Bc6{4&n!AiL!_@@3^$@4QRl`>CmO3_hH|djO5$3QY1EPl z_U9a`W%feg*1+sL|F7Um%XoM1 z!XKshJi~ZHN8FN2Zs4X;itJXCXui?Ww%jKWY;3l+=saI>UTb3zWWok}r6(J$jO~QJ zgG}7F(b&Cj zMY|`WW{pM79w(sFX8PBr$SLc*ZzzC9l7%JYD#wtxSm*f)>r^}g4ot!d?*!2)%;euN zh<}XY>5iutMGQQp$i$;aHVjai!s0G*%Hd?-^oCMP2)>^UL@HwB=%M=L0&;t$dTr%W zh@~Y3kIKaa2+IuWKE#-!$i6A#W_2pg)UwwONdn_0mjKTiR$_q@&?@cYu#;@Qi0N81 zO;qU$VFpsTJ?#YBECCwP*26PWs|jHmqyCbuhAU#14)aJ#BN#U+r3IsgPfr|DYpDIC z!mrUtp$-C-MUpyCj<@Yr^bClu?Lgu$9FR~D@-A#y@BA`@5{A&9A>wTIjgqLd%sb0Q zr9>wP4wzTK08cM!UjjmwvYJ5#cw3^vH!0YsgZgJ|zIkbck*(~!?^Jw>@+PM|>gAOc z@1r5h1FOw+K0#T0U!c7$Ygp#V}fPJrwjdD!Nu@ZfA*yxO&D7%Tv>6ZUhg8Hg7+V&29tsh zD^4FJ?pAK9;BnLHy@Gf+iiAuDbj<{TOEgGz?^b|=btc14JaVq!CQ!8^7-^;e*(dZy zM$%+MTv*iP*fKoI#rqD3j-Sy53bUGKMAb4;+*Jx(c4r>(EWWM^%-m=~(L}UY1Qu3G zR`=%~0E1-XF^@>&mpaD{Cr=GTaoFNevTkd3%Mif^ki<(ubZCm^kAw?_J$rO{Oeepk;o1o5>JwIDvUPbC5{ zz?88}RXt>?(MAL0-~xEsDOP1xNnEwOkE4L#_7^ad)ivT*0L!3KA{!aiS7gL8RpwnI zlfbE>V*$cA(V`eU!*^x%&P*rna#I+K={jO|oS?;QAZ#41*m!%i&qio!{dfy1v8cTRq> zsxt@o4@Y=s@=qSd0b5YYbt0)*b;w#1+?*r>FA?`@?IhB-F--BqUzTHY&perm9H=Mi zD1t>@<($HePWQvDXwy9b&RURAph{+|G=$Fwlvw1`a!*9gWAvC+tyMjS#@2CnT-JHpWUtaA79Ve|?xx!1ho;)v`1O&fkW$9#BgA6!^7K z-w{n_iVQe6qjJqyO zsVB52g%KMk9{tqDVPjOY7xN6VrnzWx%j24ZMNvXXj|A#>b;l(dc(_k%KQ!e?I_f84 zq9!pWTUE}yowqvbPts2h8mlwt07P!15|a?c_$)USTFmY(;(A46STnK$MiNBYEiI>gOse$v6xNeMUe@9(_y#05dxz52 z(yD__G}~ZA#X{~Nw>L#P!jkFM%%$^s*oA&;aO~eCpj?ijL9Qo__lB@?sSACP3Jgrz(=MuVpxvo-oH=QZ8 zLH9!2h;H4S#lp=#NKV{vECgx4{hcN9D+RiTogKM5pB!eYR?`4Eb((=pgus_COf-=*PWtfXD zSk2_pyD#aPM8J0W^lfKpIj<#L*-fsmcq`cgEl1!m_?Hk7aBHmSViLnn1Jo%rz>??_ zd%9~QMj3es&aAX-AhDT>QEu4CjEf^A)owQFa!!z_g>g=Mjyl$2xw_3#IgD3xbnTE^ zxCS)2ew!M?US+;8_5pGUNj=Dm1xxpOn5VR{VzXp?Vo@xvn{B#)a~#Rnc$Nn>#hO^l1-*#jM~2m_jtDai>aiFK z*{fSF7aps64W)T%e*3X=CAC!bVF;-oa=R>EPt{_}7Lh4BH1XFSIy4`aMMZj(rl?<| z5T&FzgO9ChpfC`tPO`OVN2?Sjw^kfs1@C`5?znGrynHlDvFdVL{eL{x&TKE2qX7(;Zu5{2B zb*1%=S7$UvD=C>aZVk1^XlWyiF5Ea`;)^MWwt81HGz2<=xaF3{uOrrg`EM$I9?U@}*@HNP?E$)G_0>vaO@F*JQeU$EItpdYq z8M{lfX1bPN*@r$mlZ5$nB1rX^~ zT_~(luO@>_O$IJ+{v@voWx5`Fzb7LX3o{QsO=P@kjS?YyuO{FyX z=6mxeZ?Q#UnUF_o63!WEC&;Y0HM(Md;T*WghQk7=lk{q`+h;8(NGW)CkTeeW)m5d z&S^E9P3IGt)b4pbpHJt}2<&o&5r;t{G$_m_IUkooY4R96f~7#KRp<@(BcicDh`{7> zNE{NV0ft1tc4%cfr(L&I<@CxV!oOpJSm{vub*dMAs6y@d92O4=g~C`MRwwkjFB+st zAW%E#6DgF1)n;+aZ1#nAyFp|ZsdZ9inxtl-v3*tcF+H$dad3O&USFY%!DMha6@~qm zmH?$y4AvWo#iiXg{5*UXNlA>_@3B~|J~aP+K%bp_hdwD2$3!v~2)9egfQEp0ajrM6 z=@7BxdiFl8L;-21=V>^*HvfMXn7t|+hX6E*ni`0^C+rZ-Iw@)p$e+nOaJ{AH`_QT* z3KMFOv5WH5s6CMcLiMrfBoN3Y&XQP*KIk&;_#jBkR04pG11^RmFM0^=A7|P6h{mx~ z`oJ*Dymb06-iQQ z5+dEt2olz`QV%sLPb;mesS2b@Iym>F>`KV;fG}(6Pu2A$NerqL4Pjd+Z8UW2yG*>a z-^2Baa-~kL%>i1d-~;tmB8R)I3RN&$bEWsZ)O--1z&D0CiHarYb{EJJF>NkBcSqELWS=aXJ8MK$X9ii$K(BYeuTMuPp)F)@CvzIIH47>2RuhSD9U^|yB(X92ja^KtS)HS?A^kBd zOXvy$rF7&;v!AlGe&9^erpAw`)dT-zpl8|#)S$>jwLRIEcS}WjDm$^q*r`e@wZW>K zEsX5P;!Ls3y=z-&`2CdeBF)z(6vjnyuE#p;@$9cR`)IZqO4=C9wD^$V1fkrU-g-pX zfq(@X)Stov*!5C-~*XMuTlphCLaL^*^hZdocTF}fPYJ57J}trc#~ue301K| zT;uSOCS_X+N(m1!21JM}M(qvLdEGUO>0qf+hj%2uHWIz)aOJjg&_ z4H*zes6gwkm$ZGFBr1!IT~M<{u?>ov;2_EX+d^{ku+SSGEXARZKd8D#SQ@a6CcSJI zg^a&Siw;-@$pRAxM&4MgK}{tPvMOlR03e%VkB*8s$oLv&ixPv3O2mjXD4NIC+lnp4 zAxstYl>ADOAvFrs^TES(%E();Iz;J9CO1@^Rbr5kEm_?e6{2|(Y7}nrL5Q1WERLBm zr#(qXgstYrSQ|0!A*b;amX%8a9oLxZP8f=$l?<>$NNEti}~oFCl+-k)cYm}W!WRb#!HgpwmfT13b6IgNfGI?pouYZ z9|N+LpBz~{t&Q%v)$&i8%Ceb6m9r#*E|&l^E@_kS!WC0MWC=0aLZnQ}y!3`<NN1~rL&kxSPA;IHVmFnL$vyh(EVSnQ>q^mNM&74GM7ZqD3z=D z;8%!qd^x3+z`R8`jZZpWT2TRwH>mvuNpY})&Umt&Q$;M$!zxu#wWX}ptpX{e)gSXd zi&v{qdm)ssPRRJ-p|{SLm)pc*%w>$8m9)~6<)D%g&48^V-o?r?0+vgR>#57u>Q&%WkyVo3NA!X}e5G;v15g$cx^5>N=dC~^TSw;jCzfb?AF|hz=o`9(!9wcRA_6ea2uwT)r^Rj z=j-@d%&96fhM>0TdE1~Q0qI82EqvECYKuu3VVbPyichQ(QR511BV|Rvp~KO1SVEg{ zt2R$3dq}#pZmrvd`&ej}5pj(hjhMy7FUiY?aISfiOOd(2LR);*?rNp6>}pOdeSkBAChN!L(?n* z0A}JNl&dE7buqn9MpT8#llu+w54B`DH4yGk)1TvP04tzV2fFS=U@+!Bb^aRWdl1njG3BWAN)R zf&aTx_hqayBTXcYho;JLv_*43(AP&v8ZkRhXyKTOs>MGGS zka(dU6L+t=cqQQgCt^Y-ig^#Q{13BRzClR< zqxvfribi13NJK&>8;L`p;288WLI8+KWe{Kx3P~xK%jFVDTpmv%oK9y`x#aeJKcB{9 zk*F+^S^}U_VAB{Y_9*VVBhtbZJwE4lv^frtmbxk z9LT<~w^#L81O>$6YZ6PV{>Nm<-DSWUJiY%G(nhOS>xKqHFUs0>x$Y+yIV#3)qFDF# zOGzx+Uuhf(jlz=|$iF$Vny$`Kq~KqA+;1nB&FAxgaIeSR-*Jip-tj;Pro-L1+eGsm zARq_`nlvD|67Duq`3>eIKt{I07$lI})nCi2L;g!;s?!_Od7HUkXBs zy0WjX@QTLUpUYbItF0}g0S39PicZ8T>7yR(vPxQ9f2Ams7?LPxlCra}u+spWDeJ1j zjx`cP8xFXy8|c?NOd1T;Epnv2FU%5R=DIRW!ZPr>G8$x}v9h$nhbHLLZ#l(?#4@7D z38(_KwQ)S(KhP8n1mj3ha|(>DZB+c6E0VNm+`048+M~ErS{{W?YaD8)NXc`A@i+<^ zEbO_csyr(NJhx^vtTG4xI z%_Hsd3kO&+YiTZE_FMGZ%#w2Cs#x@p0guTyv&hgYO%^iJrPt$Y8LSl?o_|DfGc*9X zwu$|7AvQxYtu0dSZC$w#O`4C#dQ$5(GLI6F?_qRh#IQ!mO!&p7P5sZQ%gPdqx6PEs z;kG9f)(2Llz%tVpqtN~HPAk(!JlZv|69%J7ELK6LYInm3_AGH8_XEqSMVgbrTckOp zDe8ivkgYKzER~}>v)tSA%u`cE#f%!lj4e(Q&quNydMKt~_j7IlHK~30#$IW&=}k%K zl%sy$R^;2#O6anor09q)QOk2)tiG>K-Qp^YwW#8l>ih{^)#_|CCa;jge80E#`_>%O z@GDbfr|W*7uQZHBErqAhs_E?-Lde5fd&V@P9TKcs%+ld$q#V*b^I}DsDtkvL6&VpW zmTSz5-dODbwy%U(`;9TEKgF!tH)U#l5yLTl(5@CCqN00W%Ist3h6EI1TH44`{v=7n zl9wnN>)wa}HBKqTy;ZdfOyMDYu_>3gGHT`8neM+jRmqVqzFk9>^D~>bp=L(4Hiv%JOCyrwM8aYLJh*eJ4`_sG-&4z z)0*O11qrtwM|@>qJaUTcRJoT}F$5%XGGcNtiju~9X^mP$S}DAy|{VXiz=8C$obI2;rnvjJ;VERA!A%duB>ag(YyoMwmSI+`CMe1i`jEB!#&!@!Gb(Go&t7mJ-X6D@$&a&8nPVICjHVwFt$naQFJl>qeeRMLy z?3QO_dr1bYo!QdjeJndIRkL)yRoa_L5-UMWwMjg#mjBMoftOI;#BwodxtfhDWr&w zA|%gQ=!IyJhC^mn1t=Er|;e#>QN1iE0;WR;vw3 zH+OY!bL_Be0m~cXku0p;tg6(d%qo~RQ!1V3co{b`S7!@H(QZj+$Z-}Y*)tdpnsFgB^^?-gU1yv^;=?*exvP=}yQB#SG#V3h8l@Qx7U7|e?u^mu- z$>DQAg{+$Hs&c0Z-S{+p@^RY1blXR?elY|3Y7&f^KP|rJCql?Sr&7{3hsDKgV^>ucx?>dB#tK!NxzHux|?-tM**bDj--@wnUoh z-aeh~Dg#&hAD#2c0ll=B2~iX(yCHZgVRWZyEc}HP#qK#FS_R5vlNOGyh~on)M$T)r zXQ@=414wzyRi zEZ$P%sFtmWvFm)D2}UAlW|*(6;Ekxes%%Wn9DYeOgKb)EriA4P#wBGEXUC8?Vo*`% zp5uc^pA3NAM>O06zS|1&RH}4lX@Dkcs|Z90XQrZ~OV%VVW-!72Ea~!AMo5}NTM7*p z=M0Kfgy=PFfPp8@nQIC+1KjEZ4y))Y$B0~#?#NdT%$EbwD`rG>rd)ZXe9_{pfXB%J zt04jK42lB+m?V}fkQo6GbYulAd14aR%(o9w7*Gt(Q%~%KXlhD=D$USJK_f8OOVUYD zQdMH4ek7E+#FS1*Yn-?*y5r&+r174SgfPf~JQiWjM zCCaFglBQ`Y)}ov~g<`2shDlHkj4RwtiB9|kI)4#BMnqo4E+SqkI=^Qia1gA=La>=@ zlJ2KkDg$&W4!q<|>l)?0=Q14$ZSLBlM3&E%-EBm5%`%|M3|h=YWrlVn<%~#>X1`J5 z*=3SuYNp3==qW`q!YIZtC0z+7B4_QN9SqS4E`zPHTm`-U=j$oS4@ zgkdr-0TBlD?wmI%5~XrG4(GojFPxW$84z&5sjTM6FbcM(gmW@mFHrPKYQl>`p(bj( zFyeCDBkFs?A2Z>&lUcLTA!YP;sj^)1=Z- zvi@VVr)hv^19H`9&Wq&WQsW%{WS(sd0{rT7^Gc%If%Vmc&Q&Q=x!;cHm1TFfQX|8MpnjZc7%+^PxE|5 zF}612!!HXmo5Qe@(IF>8{QL6EdaNHO=P&|VWb?Pgr>)JrMPl(IrNvaN9S%GOij zXpD>cgD}do2SR#`d~ong;F9vcLzO7bc|hY}mJp7TG$k#r#8XblpeE%rLXy6MF8I#d zBuaN9)MXbG2~4l|8A44Qa@w_P8BEh{5%6y(a*{nJ6vc$>d?rR^^hjz(7B_``L_=VM z2xTB5)<%T1rX|G1!xl2gD?Uz0;wjfq?RJpV15L#THU@Gk0*ftW)>DI=H%p@7#(uj9 zpD)59y6c|AX%^J!^9e=kIyEg;DTO+*(3TCP0AdXP#W+BdM<&$QJLq!^6(BjX5G5l} zfYY9?({R7Ef&j)mtgPWBGYTN6Ulamngh|TYX+}<}K(FY`+K|6iRmEIrT6=?*f#vp{ zsUXBu@{P2Bf9%Bk$Tl`(l(y0nN=-~(*zxn@No}}lF!Ecj ztXcJl!8IpB)~x~6F(2m4JWa0cskvySWPr}Xr}38vucEs(45{p7^Mv}Kx2pVw7Fg_J1VNEG5&Py|lA}V4~TCifwwU*7qOBE&#ok`(G!Um>qFnd%1IgI;n?IIXj4 zg<>*p^q_PytTA)7fJC;(LMDgL|#D>5~}I&)qDkTV)0^!Bd>y zH@y5P7?Q^Rt`wPM7Y!emi5leGVFWi^$O9RSW+ClL%mmc@w_}B@$e|+ZHzFp{a8OO{ z{W5bvUE;E>CD^xCAWdr+k%?X|R|+N-xNt5CbAx=p;`;3(wodA5*2A_X7(;0ocsRs% zEQD7TEomfn#!WVRNlSroMz3}#p=a+!C1bsA$Dpeb*0xt9TX@TmB?Vz~VMS&xU; zi1R6<vF30>B@V74TIGaJfQ?51Qovu&F5HHahWS3q?WB|! z|BzW-mEuHvhL9<;K)=m3OibpXEF)Nm$w(_>Oi7WJR3DrKlq~pms!%k1(-YjuP8~35kTJ75J%jH=fDCU{e6l5gFAlotM3B`4usx32I0hFP z5RD1e}NkhFZ>cTJX`96w0A9 z_Q5NxVOU2Z#<*+QTcSv?A$k~qQ#|y@0qUA`?gt~Bt78qiaww|pbJCWJg z(KZEi5+QK+zlhZpntD7>=hrJKw!9EQf=N|zBr@%HkB)Vs%rc0}MUlU1S`xv{$)IKmGQ$+KPSQ(`1GLD6Y&Z7-DWrABt&Oc4&F!l0c@JSDZ9<+?h4 z#z;0QzRTk%iLJc+#}dBviMXpZD_{r0(w|NCm8J;)wys& zi=o7Fl=r2v(j3boy!>UyA9YC1u>`yCvv86-y-DQAwU{gq@e_E6;glw0E0(K_3{HYS zI7wA^_(&sDfRvVqZVQ<0!mPoF>l~-lTvzt#I)T3o*wDo_J*%SGBC53mS)#lgBW42c zHh@a&r5VxQI=cZ;=%CIxFDs>Yt9&?NhnVWp3BmYyb<{>k>;YF5+pcDkL`#WT;{3dF z{BR;oC;2wFO*m}`o|S0AJ4Q6GIz?mFKS5*kgNjt6j553iGCgDk!!e-}ST~XUbIrGf z7~({sM9RK7QflRXOqkO|hh%@Xre0$~p=3pvD^tS8s9flwsf%rykVUmPkSh?PrED5% zjLtmgn0P9ko7-7xP8gniay~RyQ5f7AA!lw?g zyoogZw&&T0HMrwmu_F0xn!wqU!2sG<&PBpc-84+++^2PaPe+%Y<0qJV&K56SKz%UbqKi}C@5DxedKWHtf&sB&D3Z@Ydj@s?o@=vqUavY>&%M-{s*>_ux7u6+K>CMwm-{*PbJyobT`3CNB4^FK zACTGk>l7=b?F`^;Lw~m$0w{BZ!VB1YW24DQ56Q=q;kTb-v7oMh6W~LAJVQsP^NZ0f zn@I{A%7#bgO3{^LR%<3QGQB|lO0tn~`XB%Z5C8-N0RcdOI7kQr0EWPy@HmuCDHV%F z;?4IXqA?whN8}P26pl$Hi$CQMIYh1g{s2nl@fef(T@r`Irr;UW5_JrQ&!AJOyqbwc zqfz7W7yI@4{-#sm(8xq84MKsHfc3~fb0NBOc(_unM3Cw8trbL{+UATb!tV< zjX3~QU+=oz>G=6Oc6^BJ7hZ#kXMXY>*| zlv2?UrAj84N>oA}L(^(CGr$f=1q<3`AXex5@%a9|KV^0R01^ve$Lln3>b-VRP=ReW z*(uzoL)DkzE47SV((w@KSUenUo=dHyxpt|W{nr{1#OXt36OAwew*Gx@DbL#=7N=F* zJg@_Fy+0@Fd;>4&N@V)2t%`W!ybpWk*TP7Xl7X&Js$#pT&#DIFKh2yj+$C#bxR-z{ zgCYPc$cuEWC8~5@f3eBbK-wXYya63YapZd+BdQuw#VL)`uAwo`laz+7Ei11LLWyed ztR^ZHKM+Uq#Ir3U>DsXpsj1q=g8*>DR@O<_QNY~VwmgdB%Y9g^9>l-EkC2rHWr>UqLX%EKsnlUn^5iNyiJ+)P+lBRUDpin&g3bN_i^cxD@iVfbSUG+;2STNg01PAg{7Df6J{x@|?+ z-nZ$Cjcu%u%=C&;D$3m_ICC69X5tDiEf~Ki@%e0}D2t@A+jfL7&^6K$XnjGGBvD7g zDDobZzPGFL{m@z#XtN?Ot9X8=cgt$9K}n+6;M6q>{bxz+Cen~6U<+5aph|mtd!SA= z(BrP!ezg~}6-vueXL;Lnlr0EkAtTt@w-d#2Y9eHoJDe2@Bd1sLD{01dTU4OWQLbX+ z@tp@l0XK`fgW0WIVtD)7m#p3z_j4 z7iA(J_J)@nbUuW6tWxLU_N-bH#wlpjc73I%MQd^Pttp5c#pk}2k@}#$s+u0IH<{8c zmnAB#aD!J!-=l~rN_1gPulID4iVKHHZ+(}txBhNf;(Q>D^%}l+^k`QBZb4+xFt4T1 zJ9TyOOkx8$s#;0kLkCt?ag(t`P(!}=|Q==Bfea9I^fA%u(so}UGXir|}(XQnvF zxOgKFViZG&i1jHYH1N9F+3?NvDcsMeU|X zKB1&cvzCbUAu`C2=3V+hCa?|cu%$kgQzI0XvlQ}@mg4ycYd<(iEabT3*8_@d8M}2a@bWnoF?-1x)~$fyi(e`p6K|st|x6P zl>?J5#EJfxM5#qXnk4H+w6UpuMxNOBgGIo=SoY(<;GOYZEk1k4~DX3CN)kyUb`Y z0vt3+valVg1V-^x#FF`vtj@XYeA76?Fci%O%2{qW4Q;v}D1jnlQg(+c1g;>)LY$!s z+($4TnY}k=|7ukjY^(CBq-5~kN9|FD21o-Q)?~7x5f3eGiOyIGevzv5Y9`K2V>Bl4 z+0OLdH7OC=9dyLfXwfi4hW6J()sC}BdEX$ZBHCG7Raowo)35HR)H@op9%W(6m$Z@r z8rPpdE~VorGWSfS*D z>YPY!OCYG-io>Nku%Gf(gD-NTxjJarlmP-;uimE-6)>h1J1(s<{edL6w!fVTC(L`+#N zA`(*pT}hCED?0a@*;NnIdu(Rx8myX@9Pr^i4+fcN`D;Zn14v}AEa!VIzp(O@nMtd9 z^Tge@YJJvA?PT~LL2Zj^%()*Iz;5g!GMFbmw3~I~ku&DonDY?o*9%!D8&buUiQ81e zXq=(;=IbDDysg`|lzgD10RlZKQXOxct(vX8T2=b@xc}8ay{vJz3Vsym&eV(})z)H9JR3 zP8l|@&(lpsGkh7480v$|&HXQx=S)~Ps`6QpWhtk~{gxr-tu}JO^T1ngI{2SM@16GY zNQ7gLnccNi3c(T0hzGGqfp}iTqBB|22>1>6I?_ZNGUUr^q2iWna0KtEZhZAN6aJ!6 zG~H-u-%XAjZlS3)PBYb<0|1w#`ZtT`zlEb)kXEV)NE^;S7u|V{W-?PVl+w$m(%?DI+zS4${(gSYr%pKw~2WuoB6RD9o zS9UD7Dz^TrKmE@C`MWwEaJ{I8vskw%Po4gZ{qA4oI7DHW&S~rPspC_WqzroO#V5Tpzv49%X4-pBN($=a#?1)gn z3;Qzw0KOE#_?dtKEjs-Tn3oF41{N7-Jn_z*L;Dfyp+P}ql-pWvmuk;fj{ zx2$_SnCqnrL-(&4ft2aF6Zn=s%6}`gDx#>NX+DG{G~$JM68P z*)FVb#6e$^s<_8GXh&&)zZmlpVq!)}q!v(^77<{lk-j^#_9F~Q$MOFg*~dN%f5l52 z6|0FyLa`F*@Un`olCieB_|&EoXB$Ifs2Pzx;jODmok)xVqac>L*}BFF4i4E(K&pSh zNVP*ugeg1v#*}F#kz$>S)j3OK4SDyStN_Gurbto6nb_ZvF&UZqjFJp{n+ygP$>xvY z_K0Y(A&G-i7c_{OY8NU*jmu#K8!}>);!?S30lagP zv2vZT89Sw9d_~hZF7oWf?BXsV!NuVwH`uE(`vge5bIhy)Gnt+edg3LK3Yf|Q&nf|y zEbpcX*b`Ai4S|-DBDcre)Im6;j2hgKs*oO7=fi-sJ|Q)$Y>Jdb_b!`NkHKuLn6k1# z>z6{rGP_F_GzO2tZN)lj##x&U(HtMLrm^uEPl$;hsZ@X@Wy4HxqXUbf8c~*ELOdDQ z3CPFGqvfcQ$gnh?(5Z*Sx%7(SSQk1kjmp9?ldO?I+QGQ#LdsJ`F>Q}%_b)K?#d_$b z9Va%kydS|{O|g+qV4j-mDwm6k73-AJ@V1RZ7M{ZoE|Kq&80J3|K2R|rK1tpmn3qY^ ze6H){z7#Q!8>vrO#H6te7Rui-lg}z);y&FZRJ}|bQ2dXoh8Zi%F>CWYM9;iTx{rhE z9D-h|5;3$0o;5m{$7$Id15PHXyD5!KkDL*#bh%KA(-eX3n`HHqpo&MyMi0Vt342M3 zp!bTv`?+dUhwQ}EUq1v9hD&@68L^eWaELzvhbA8kV zIMuk!KCJPc0nG{dWS;q=B5Ab|5rL4E91x1(S5$|=L0pqHansQHJjY>dw?)lM%85=a1c^|!5j@abCAE$~^hGnoj|o*wl=n2r zkkNBrE?eWGrQEpkYnUYI&RV(H`YuDMNDxtxxuLEL5V+mZ&|I{@rdui-y?$Ao@>s0T zqFqul970J@(aDT*uKmu}d62`?Opi0nulWox@w_61)0o+{B>UKyNwN&3Mo(X`GjgCelUX*x+iV3)#qzXEV zT-V9fvKKHai)|Vu4Cp7u3_$GmlEK+K0*lE>G{Zf|Q3*Ad0_Z^a*Oruo;#nOpZ3n64 zDB{BWV&yiVg6QIAN@S?ZG}Hz>YLi=&SB!cM*m5vf%ZZZnEg6~aokH+MRrCpBWX9|M z&c;g=J?{_67(M9KS0XxMKMneW5N)|4^`$(J-=3|NtKn{@GB%K5C5owpQG&)^ z^x!J2ncUId9`vrTO`v6oiY-;%IoF%v(s53gC&`6-aWM zw4Cg=g6>0El^8p3E=`K93ay~{*_}M5fDIBFL(5&lYrTVs-R6Ly(fP>ravOXz*7X}- zDL*C^WoJHzKRwG?Q|A&pwN-HpI%vh8QYna1j0jAI53sf|P}t206v2f{TV$`h?8}>w z(m1ja6wrN_ni8(XmMD|vpA5a8`8C0@8O8=WijYk$c#{n)+Y1bHf66Z`J zAnHjVYZpSG|HZbS>^{T@_M}26*s|b*x=tbMu28<%*IJa)3g!x6G_JULKSaTTSs}w{ zb#l-7D4D!JG!TcOl;fe18e_|yPm1Q6O^9~o4BOvc6j`kXtFGy)o`9LmSGlgT zmp**DH0BY8+=~`??or=hRhhTw)i_-c5j%XWMfmI9#F%rZSs0yC;%1Md3~&TWi;451 zg}|7*QZ8~}Zq-M|*3zRQz1~>|t|{4#?ylL=L(+T@6Z+p%+I|)_Qktv}jXIvGZSsni zEsuUb@967c{-F-;@9ZV4FS`(G^ig8A^$X-lNPeclvnw42Gq+?Jk6Ysv%Uupct41RH zR@?-ftr%wBwlj5r-1Lmmc_mPh+t+Tjto}k0szny4PJ^_R-i>iQy0#6~r32rp?v=Q4gFStVm{I18F6wweD~tJA++wbVI= z=VU*QWHt`@Q4E|*j^N&l#F~iq0VM? zN|resbIulI2^S6nvx!RP(&e6McWov-3^NGqyeC4DeHA9DZj>2ISy8>bePtr8*_>A* zv*4LdVr5(=*{JCOO(35gKMvG?O3US}?`w0 z{U~!iY#W?S9wo?AFNOME{@huO)s~L!k0oK+%ld${*5={p=?U#Ay^WCZU+<<*{hCXU z5iVh`42a`UqwwSb7Mj!^6+LY^ytClfSD2N7o_W;L1ls6tu#D?_nZ?t)A4MMTP?K>M z!}9CCH^nr0oJ!QEKm-E`(q;}hxfvju6CD;Qxjr6Np=NE|dP<^lxz&)e zFVukGA$s_p7Z!>KF#Ra%oO;bm(h2jTe?B&&rqHJnG%}d|+@IHvv)pD9mNm9!%skeeJYE{FgM1OS3TV9a4mI)t*LE;cd%o;^4noVZYcsy1q4v9aaQ1|={2Lhqc5M zB5_NmQ)$%tg+`@Qs#R*$dc|h7Tdq^3@L2pleEo||W1uhy4u><0%xh5jY@%}&jm#jl z3oKqU0=@vK(yHzU1%s?$BT;C)_9qjHMPm_*Mf!H|I${H3;Z~{Hz{MNg+FOi{IWDn8%pv*tg=Y2!1A1_ zDygjGaOfvU+ya%QiAy%atWU$dzecN6R<=XZvYv08heX*pp-fXmn6f}3)d98BlDe|R z(ZYiGB`Xse%(m%5XFWG6`smJ42=vgtHL{|1yf^DA@h?lv#Ju^r5HMdBDl!zzk)VAtWYCEvL zEp_Fo1J;t_fgC%O1M-qJZZjhIv#|0w!#VT&wuj9CENdt>(FLleHYi<6gw;2V@qD5d z0w~5L(4^5YUn+I4649(hD*Rc=d$TAz3!_MWG&OhuG&K&&=*1$55{+p?b^FqZG>>9j zZgaeN~%N_{&ZQ^r(~;uq}dicb0k#Sg@dzD$HA z^jjYMwr{=q#iwW_D+=XtdG}x>&0H$gz3KZtoxZxt|AO8TBHb|5_cAKryJ#ybtkc=f z@w}l~o?(Q`nrm9H(+IN2k1x~2(QwP?*7SnS(}xdfOaK|{9{HUat ztD(=Gz~fea69AB*=`4Mx@+3;vU;}`s&A~Xw-2&iZw>iyKKp&)h_aJFZJ|t~sBbMU) z$~%ZV2fXK+Rz!ct`9^N3K#`ckf?W{_^iNKFy1Lhbv@wA zkB{kGhdDG*aaRKOkIceIvNjTcp>m#oZwRH9=aB}OK_W&^aZW2(a`@KCbRy-@fkIS% zWRIyxd`Za=7Fe2=)T+NB?FDGCDIYNAB*mD^9EiaM{-j@GK`@ft`88y=SXZ$sW0NuB z%y=5=4-t!gZ=3)+^UQ;v+sln4QHilL5M+&0NI+_iZBH5G@Z}?AV{w6?z6cuk)g#M; z1N{@pCX7g6@!%vWWi1h>)h!A;8DFxwrJu%Fvyu~0A#l=$GP!dur5V4DZs3o;q-NdV zRP&gOM4z7WNbhB{G=J~a+)E{*kQba*q^gjHD2L!en9TM;aMkWU!yO8ylOJuwJg~;u z6sRMNGD9@wNs@@Ts}>0UgR?S|Rg?;QNF_vA1sv6uL5XoMnTol4IsXpV9I z896jgx|sCAn$7H+6or!vmeGu3WLY1_$(qiH!dWbp_=_#$DDPeYT_m%@yeVd6V;EA% zoF@_=&zjL@?B$)9g!Lt(*Yh?>t&n84ku|tFC`+N~D{#lq%gpOM<6R&DFHFX6vl70F z-f^t8>Pg~4rYB_w^A?IJ9@*TOhFeV-{)J>YJd{?`F`U!rQ08s=MoBeQnfpLI4A9{< z7g|x_yQnRyHJK@RWU8o%D=r9%@;vBoQk^Vw&8@sh>Ev?~Nn=sCYFbYk`Lb0ICkS4t4(k-zDJWE_(&J3!ob#f)twps4 zCYQrap>3t2N}dc{=y+Zx1PIQp=Dj*K;U*YFD^Lr-k(Puh5@JjLWKaoLpe#!4ah8YE z$yW2fM!Jp`8(9F83Sr$?>0XE}YQ@B1qoX8P>vCxzkc~2ZGE=K-OTmtjn)-`gObIP@ zvj)TVQp>kmSkGqjMj%UmH|h7GOVkF1q=shoExek8C7qATIHvaFTn>L&Szj?ra%;GJ z;?r7M`&F1>))%P00HF0^HIq@ORVcL}@~Xd#lX&jXN(+ScmUDlkF1085mH>b>*l<|` zJ}aDsJWoRgA~qbKzjBGG+%`&TEJYKyNNi-U7ZED7wt&L3Oh;E_iq|ReMM^~eV`Vh6 zeVmx8naOo(mTSs)%1YPjjtkKGCq*k1zO|A3H@gYFrhXcAljc{5p)mU-=~1IH0;6cTkXd7m&9&Yy&C}}Q&K-wRRRreG!eo=l`ePL zWJgyLyQzj;_VFMBza5DwY}*R1LKc%P-C0?UxNr=RP+Se$*NG3ETxk7EPXmxG$>UZh z8y`nX@t=%5EMZ5cQY?s-Nc*+2cz7XJWWw-DSh1Gg=#2Oh=;v8knA^CyN$f& zo~m>Ldmi*v+V;P;Up!7?yS}^t4hjk*J^t9wHg?FJ22N{Skh+@lae#9RJzZ%-imRtd zMZX$M^BPala`JGLwdv9EOj4yt5P=C&`LGKB&<-HS=B;Cj?WC%)>&{aMNQ}wC(v8;v z2dG;Ivcn7BWz6EA=gKSO@Bk{5N9ipB@J=SkxVuCC00!zfs&v2YSo!DzvVsQ%$4XwK z0_P5NOiBLMhN6cAx{L2Z{s<_mtODc&cxI2l_OMWuNiw}AJoGGxrsW9lsbHigR{&x} zW`u$*#-32a5e!Wh@g+WH%U<7Nyz&jSC#3BPW8yw-?k}s{Q%P)r>zsKcj@d#6>JXf> z!tgPKTvDP?EoYAIF8ZmojUpt}aUxnJhTHGdCokB!!%9XX z&}k3iR?4F9YN+q0biWQdLk$un=GdcfzTLwdNMcT$%XrZ*^$*c^7m)rZiIhG`DDK2W ztf(y!q(Wrlnqe&1tAoJOiw760XjMiIJVhFXjrj|x;xh9MBuDcpBc=FK%uneA1 zP7K4MEIVdKBxD+u5p?M8w2Mmi#Ukk5tB)qZ0c5tAVV52%-TO9*m$Q}sjpia=XS2|LNf50D)1iS?y8R>^l$~bOa#*LrkW+^usx1e zMrQ31G6=ats!phm*UfI|B1a-Ixe{dg5oi|+>MFHlxO~P?#L)VW#m-nJQ512Y^>N@} zf)1;~dV{ZgJO>(i42;hStZm1ZnbBfPrN-5!1kNRA7cyZi(g_62l@JfS(kaB1D5fUn zUMvmE5#!js>8_KKBP{I@*HMaxsd}l%szhuyDAM;DEvPszq=gc8#)cp?M3)eZpCgde z>4OU%f*Rb1ZZ;=~CT@apf^?U{PL?RfJ&Z>F6B#GPjVQ-9^UM_9YF7L)w89Bl3dJm( z!c=UDaKiHK z2t(|L0vJ)n5>^qznCXfOvs z35fWpn0e>F8;}V@@DA#v{w6F)D0D2drr`ULEJgwe1cS2QtNv;Tc6QKs!o~M12Ng}E3p@sLqtNawRNSnHw@>Pj^zd&@ z=o*g`Tv9R;RkG9|t&7 zMgc>!WZ;8*$fR5!hUmMX2Ha*_RIJz_gwiOC-BT6Lk(K9HOqAFPn#$vyNygDKWZ6$; zs|v^G7NcsM(5ONv-ESalrpd zTSHHaTaR`;^Ln!>$lQ+dH+D!g14j}f1z4z1IT2`YrwB)4%7n|k0FH4@)|#FwqDc`S z5J$A2kuynSbz&uTaLDrVC-CS=tYh(JIpcnzW3fGgE?qIoSdmy)54&NAOiwfNXAzHc z7k@+R>Nrc%wzM2=!?LB0I;FEP)wU9GYmrZd0FcDiNQkiHx2YB9Ot+Q|cnOaNS1o(3 zq&-9w^Hv_tqqbsb*xuICy@-i>@-20wvRte1Z6E}p=38wS%};|9Y{-1RX9#}7>uiyT zZ#Bmt^qw|^ieAcdaAhwp$qgFtC{j!sKypt?kkfFZ{3pgDF~azrw{|1KIPvR1V@VSA z2fJOcQ$^Rq5rd@x;~F1L{yVQS+qO_Ew?;~3?nSntbFvjW2fl>1JAET^|aaGw)qD^+SfrwsmIw z$O7#-?O{zXg3Y)qjX0~0*zPxCdU9szVc3~HjBh9{9erC6(Boxzpvis;)kChgimy$9~YFu98u5BuzkMb|OmAo;4?I|x^ z8sk!jEgc9%kg`O%W1?t>`5dLjX}s@8G_BlVx}sQuCJ74O)vsI~b?PUhwMPyPk1<{D zmm{e2Ue#VGvmkH7;;eGA=QHs3b!1@WNXy~b4*})IzW$l=?;)J*cZ}^jh-xh_zD-IT z3wh2&Yn^TGpNdl*f_rHBzj3ngjfwWM*fc67vv-k;etkIA#L#6xagJJXg>@wHs^+f| z6v;Zl+*J`B?bbA2eUd^mm^IDAUn&~mgbi`lEN~_WjoX7ma*GvZquis=EfRAY^4?;+ z{A!y1p1;Bm_1TJ^kA{v$;|zVHEPFm=E5MJhH%#>U0$nwEb?gSRH@XV#2MhvNumT?KQ= zdRf3;^E!JV4a@#ht44#;zU=@iqla$r(q$e?>fxC@ZB5hj!Qki0Ff~`FsLMB1pZRev zU%2VS5`28ce^k~s0g99k)9++KUU|k)%l?R=1$vG4?W5Uy&Q%-cI>#Sab_B@pB!03K zia2~ST^MLVs!5wLwW*g$B*RrI2LE@&Fz&Ay@sADfc9qb7fkSsRU*V!6Pyv0P`bh#A z6j4%TsJ?XUsy_To3Y7>I$`7Cv_%mWS^E<~2rIJtx#i+Visg^As%GFPXAAo#$>MKGzxk4eyW7SQo zyuH7mA@;|gBodC-Q&A|9yC|(2dPV**_Cs>Sq8#}j&bo?_uZ;yS9dhI$)8&+L> zjm65=OeM$nLo<}>OPtY{4BPo@MLX~y@LVq0Gr#zs+GVV}++tA>=RX7+nSZOpTz{z; zveuwqW0%bLsNLUu-Z8dlwgGOe-G8a|m#ABzpv*0iKlDEs8iHdi%^U2!>EN$#6M z_u}vnI-J)5>2>`G$b)q%-0bP)4MTGnkV)agJE?|njk^&%6`lGX2sppBLH%pzw8-3I zZWtsnU1OX1F#R}H5?ci~MHo9^Gnxyh7&EuhvsJH&ZM+1({MGoHGl9sFwp(E}1l?g% z*^#%D40C9DUsVFrve5n+A|qpTl&sf29F%`=qn zUsW-CXN1>loFF0TK&>NE6=y^xCJQUma@#a#HtuIuyjbZzLmjm+WDOIrD5dplobJ4>A3;^lEi=76O*_ApZ?k$x1>Ef#_r- zU*GeC+oqot#qJo3?A^}7ctZ0FlvN5)7d?e>H6Ol#YPY=l&##Nr;%^FcR|+orMq-i_ zT1vcbJYKJ9N6iF%D@U~|-3q&mH(@jt&65QszsZe81L0AU! ze&J<|VJFd!^)jy4N{p9*-lR9GE2ix(c-1k;`|WM8YdS3J9+2wkG2>7d7dg^rKOe2H z@EU)j`RMuFvqaiOLCdyhUF*}?wcfKdg3D&P{STrGQ`ABEW}ja*Tg9K%y(BZI-xsic z<3ykZR-+57dL!RGn3?n7G7QyA$-0UmU&47h^SOY?2RPLqT6ae)jUg$YjxfoEy2y?U z!Jn(Do3HnXS8r9}m1S(sNVz+G4r^?PhQts$x9hvYFjFG@wGAy@L>kWs-gv9yS;;7J z$5CSuZy)Ya^VmK^O(GvbCBn~HaHNuH!iD(sA;*1+g5m`2;b-3LB%a`^pL{Ff@=v`*A6t&{F+NUY^zLu zsneBusZ0BcD4T=lZ5V|KA@vvfk%mg~v3afAsF@p<@&mKERf39St?Al{uPbY1X;y)w z3!h%h1L0U}AweVWnVNC}r^dg2PEiVasN(03%!wGtvA>Ee)R)n~-k7kvTu_rHak-~W z(6?0&qUk(*9J>jVWyP@#5TYj{x6P|^K9ORS1xrQDdHu{w(i8|qi7~gE?(;i3-@?sk zFP)=xvXaHjPPc#6n1x}bjymAj7u4$`9W3Z`_JhmR@lTBYu==kZ^#9lO-N22+G8WNOXUr3oCQXI=~Nj zR1+-BX7;QWg%&$UR;f|u13wF?Z?!@H&vZT#5X67Wc{gl_tHt4aC&GReS{PL>+xUL5 zb-jJrH_AF~?12j1;;}7lY5i+-FMaedgpyb>Wt7~g8pb*mm)6VNC4~smw)%pDWs)aj z-!fl5Z;?QYQ}I6qQ5I?yjJ^;yGoCc0?mHY;%qHI|8H+mVK`(JMsVzTh*l+oFditHHF*5j8|h0ic3Gq!h;!qC0gh!pAaSPA6gAk|WzSD9F)P0f|q`iA5+ zZ&`d4+MDQb?5@l(n^TvUt=X!Ch5_}KID>(JqiDNA>YZWsF30OVkMtQE3iZv5e1>?I zXgRxwS}Zamdfnc6nWy*L$}m!4Ijwqr8}8$^xQaSGFKnCTCzhuXflNre1F|Pzmz=V= zQA8qY@}7X%c&@aPp?eD=nL+n+*&DyeCI$l0eEq}aCSis49&1OGLKg9HiM((TaXp*1e7Fwycn&*a;_#WF8&JK%F>ZJa8?&9BJTNjthms;?@&;3t~{;ik#7U4OUf$Y-(2ruNDec>=3u*i<2e z1;2`omERXpBW)UG(PQ#ZAsLbSG{#Ow9nDEsCWE&yN!;i#%iXd|c3x zhNXmE?)owrei29S`mbFl;-CV%nuTBs+Wbqqs)AJi;mQfmpLM2Hruox^md`i{no>g~ z)AWtE=-v=V6FAyF?PJn=$33Q8Imc6oul`P1QO~wCvqrDSeb zdSTtswaO^oUrC4`qqi@j26_6PH23E4vOt96?6rUgWCr{0WJGSR;U; zAf>*&c*bmNA(Tp?1D8g)jziAOfns)?q%xH|`?OkT0S$G6J$uw-Za>S=Q}l$1=uuO@ z!09Yc&AD>qJd1NFprSOs)0#W`Ci!qh1*%p*nElhLAjGYISmFG~B^jefXQex*-yDq& zqA#Ru+BX4RNY!Ng*kOF~OstwD_GoZS2@+S!V4}H<8M)aWmvqyt#W$4@RZ-e19~!b# zDZzp(D5sK)IUj`7?k#7Mo&*+v$IMmpc0}Dku}Ko9tF!4u^*u3{(D4V3q0F#d)(aW- zGb=iESV~2p@3aEj-iG|XnSdwpXIm-GL4)Dr*$FjioIzX(>BAVsbi6c@WF>`VzCNkiNo(+x6>*hhS;*xkCwL zF2dL_n#&wf5&)Fg7mBY)Axz1eqb%X|-T~bR6rsWd&pGorRk2L#C}Yis{}EqWA6=_p zt5u|Q#mY%$_Y%7BuVC?AjWxpR0C1fGU5mn!)JG>^4l2L|9V{V>G;z6(n?|QL9k4jh z7M{VrwMo^5N}vzxpoI*=Gai|=oArh^O51oT5Q{%co3?1xtTk;W24$IC@j@wK(P6W1 zb}lOW!9gLbgI_$W60nPbO#r&VhC`l+TRUad#Qb3Q(JFZLIFyD}C^9y2l7~bz7sraaeUF<4K zy&aA4*J%t*e7z+ZOe2gs8;%KIODsGly9W)`)1?#Ca*65_(;stR5XsMl2QhSN^{Av2 zHCpj+Fg8r1W=t)VDrECbO(*3{U~EjDma)0SigKr6#6+@HbvJ`Uo4%{$71cM>Ee|ak z73}m*KF@rl&YQ`Iu8ev*7)e{_l^-`-9k&`prJ@CEspFVOk*GNNo=jKnU?q{Fdw3F2 zq^Lx&mC<$Cj3c+uS{A&pc$}*Qg6IxoS@58GUZwJn4;sYIUI&>(3beCLp3F`z>2)-? zoT`nE9S@PS81hWEMsRW3@F~ARQ=2Y+^$cbl+Uaj%OeSQJ zOwLL{8AY*BnRXijJ`s^UuG70FhQpogQ|VMhya0$YG&>mLP0)~f`0b`Vx2S7yZSR-_ zE0wYe8&gcrvb~x&TDPes>=Em|@YXfm`B`W7u~v{V-RSb^vdKh?5)vH^`Y4z4aX!Hw zn~}qgXm$w+Q3HXV`aOzg|0ERx;aSZ7^jz^d0}^f*hL!6xx}zJ}%7tY+Dp|;kGAIe! z@WXvXt%s61tQf6_l%T6&1q`Z&=A9;$K{&B0=K_9^MmxV_)n@b!_DNsaUq2>XA3N^m z&R!z*Q+;DGq&(TTxa407)o7|-)K2VrNYzys9&8+-0ZuO;o~UVbnOgODp=-x zFAT%Q+%FuNE<&S?v2#J|qFPA{m;g^p?Pl-chnpN2Jjd0oQq68Z^p~YZ_hrQcW(&0@ zO~Wt(c%eAX)JL&KT2I9 zl7+Ez0UwbkZUS|Yl6&+dFM-Qg?uhgWqndkRPQQ!d_)XhobBRito2nLNcRONM|3tV8 zgCeO>1L{*eB{U}v4ULdmZG$hg(-q88`L|8xpR#8p zU%2)OUWh)5wPdrt{z2UZB~n-do>gLwOE`fI4X23}>m+|n(E5kJYl#k;qP$k=LXwVi zVoZu`cdUAs@PpY~H>yV0y;e#S{jfS+W;Yn8Ap?DbSXo(o>5@*o)h%zA$6N4#-H0{A zl0kddnyM-xlH%Rqk&UcCEm0(mY(#`~!m(Ktr){CorG)C7w}#H)B~=5{Ey>s?!|ZEP zw9G5D!VGSNQtkF8Y8LiTTgzTWbz-Hr6S>DE&RD5Py_fJ`htfJFgzL{lNoRv?x$Qt_ zK2FTU+0PUq=0@wb`ySP+>03^p>Yf)5yW}l)>@H+ho8@X?W(ZUXuaz6|x*VlGC|8xL z*dUYv^r!8{+=`D}07UP^fyLGL*~e~*|lEy*w)a<#&9} zUW;;!x|b62{2`CnNg^_qyOuIz-ne=<${B2&<9;Pli5aX4R32$2k{R{LU#I0ivUKW( zFG%%XhcF?%jK>ckV56IOTf-9ts?Lg6zeIMQMaFNYR(=6Eg1+RYhJI47G*dj@u1-{X zh!zRwZ>2vGlhTH|+e*oJ7BmqIy&s`TX*rRoP7n^qs-ny$(zjkMQ)R!v^EQ59g?xEa zCg`g;ES?vV-I`dMTn{^9;&mrvX^nM+FmIb%?X%uz#2>kOUc`*ikybGFse!#F zc!>u42`a=GGO2x;SGq{)GCq0Ge2{D5>shH08^Wym#pPgA;OVGQu}FMBP$MRsn&UHP zkgBPioltme5c;0D{$9-{FO#;-OIEOe#P?h!ZFw>XMaZi~4%@%#!1@fpj9{A?r~b%5 z^CYI6|EZSGg?JH6!q-lGeB_c{@l***3QZQNhaNW%pO-{pJIL(#PA_-S9l@X_m!Mb4 zst3?w@-1xP$R$5!^nN^;@(C8gz_;H;t%3xY4nV@srzY>TQH$tpL>7Bq^$hI?-z`NJ zl|}T$w)YNH&}S+i)X)AEZi#?y(fyO&APq2eLZtD zRFIi=bHl2sB(+txgNGezTUMZa<>m5v7aqA*$p3!RC_Jb)>+Xj_lHmueEN=aJj6N~j)wNqMQcUrf$W`b~L=X_o3HeV@>w3aCq<-JggHUB`>Kq(OW<#@*1jPO3IcF%3pAJ-SxhPD~XdenB&AAvPM;Jv6*C<)7LqTe%H%k_!WI1 zRZ3JA^R;aB&a20)&h)62sS9g;*0zLRbesu_!;34a#UDipHaN+KIeAiwX>AD*sqiIE z+e<`~H4VxpjD^2$^UCP5mW&IXYz+-~ri7&yBMhfbEb@g#Qg0h&UC9%F&u`jVk;m(- zK;Rv5h#{jkrRyxgi*1G~Cl$?yG#!3z7CsOA!~A zXe%Kem{=jb)eyPl9@GQ-mOC7a%SJjV9Ww6FA+mb(nyKh9>G^QpAanP-{8|~M>9&$- zIUJFIS24+iEFfZ*Le_;0CiMNx9OL{26VBQRf`#a6v}b~n33W>X7@g6TaX_pJEtkzS zW^oJ#Z4S1_t5i)|>ThGELf)*4dWowYbe53Lw61Rd;(}CWv|`sTG=*8~o#g7|^jD{h z)OS)^Tx7#sQ~8^euXZWDsW6^)NT!!(tzHv^Q!AotP9ypVwpI=UY3MEYiD&_1+{pql zuhhO(F*ohh8yh8=ED`BwG=nG@m-gvl#kIHt6P~Z|BwtgU#LCW(N#gbJeC3mHRETsB9v1q=$I6`Z;QBN*{fQ%w$0_T6R~OMTN7U4B=79#1g+aSd8N zM&;euD?U3Cx(1f6Y$n=G8t&Vn0lb#?f=MJF^Aixcr4Mu(e^tN#l0Aflxr>jxTh{n= zttLMN>$9Is&wKLq{sl+cm)`hVO?CArHL}~s(%b_i~K0fmN^buH$?Vf_0X6~qs<@i0lcM|f*y z@|mMKsyaC??|4hh-{04-dxqm`<`JbD#D_&vAd02ynxc!&l3UDF_xEoWCFp9lWCEgU(BfD&=YV?Wz717RNGHf?sP;}~#y2Vu za#P^xmLu&?3rEC~+K88JF;{YyFwtTlFD&{%m)=ix$ zURJ>f-Nw^?ks5MB26))g>&hQJUT@LAdx<9Ea6ZqeRJ}7GtSF^phQG5^((;ndCv^o= zr}EURolb{13oYrwhtgwo4JjSJYtd}`Wk1<^?FViO&D3{!NW$8{V`pk+=t)xI#sD`h z<*tmmvO@-U3Wl5@SzZ`r+1}=)8PTl>a`!_oa`8hx3AYMFqb)_A7xvCc19L8@@@7@ujAEMUru9R|clgknI zwtZ0KwYt1!nGVETCZC)ng0Lytu4v(qT#kR>XKidxf`Nxv$LfZ{ZFDj$y`(E0OE(wd z9)H5L{ED*CwXE7MhSQlTnK^1tjXr&CpEt|7J@H_@qW!L!=k1B-nr+P32(UEYy+6Z3 z{yCGx$sGF)xm?a}8n#=P^RpF}a9b;yRpjubPqY%2%9}myV+jijeB{MQ@wumsWMKN3 zRZt4)^+AM!WV&b%wK8KSso}%YMAwoSbskyO(0*0zj>l^Ux)pm;ya7GkZOLIO*avH| z%*>SU{P^{_>y}5hP+TL59Hg%$aYyaGFB~kNwGgcDnOwIJq@rb+sYjMQdaq}JLACU7 zYxJ`veVd&6DSHLIkZx$PJS%VN)CHHJa|bmYKXP~ddIRItM;VD#P16!X%?#R??9w4LW+6k~dB|=JPmoBNzP;0|qj37>RT%pz{lchU zJ-7m^z07pSqaIn89lerYO}-Qx>B|euZR|>c884)z@q>M|Dd z{D|+m+?Q)VtB`T|v69X_PgHDI<4vgKR%`DfNc5S~=FcZFVa$^LHMHApxSr>Z+AsHk z-fC9rP3EJ7Lb`M1cACQ+9WU0?bXbM9t{^YP#^FhBFrLe9xBmQ0;S-8PBE@{gn>io8 zH)u|r)U4`ua-688Om%uPn0hgIJlzdc*e4~Qr=H;NcF>sK>$srpJ>Sx4H|)zggD|aJ zd>%960J7~+E(=Y@HMQ##a0uIN-Zzf!_0J!n9iS(xd!57*JfrNs56l?)U~GNoV1p?I zmB;^LgDZExAXU@$Gjs_*kWlwju5u?HgCtFA_DWcbB2B(?fk^%rMM=Ahj}sp!2kptN zmip3rC-YErmpHC?gP5krkB8nt62~9go3pjNv#1(fB*>&b#iq%~p_I9UsxY)*R5*4k zoP>`niK%lotq%I7VGbFs2)6TZj})`Mymck8IeW>D+&SV}QCGDpM5r>XQiq;eeL=vg zLf>L1+{ogSyXJ69jquvT*U>z5dwtmWrNUwPh*#3&*TP_qjHh=i6&*K}LJfv1>x+T6#9mXH)cGEeatie}?QGwQJ`RefSOsvds z*KdzogdEK#yljUyj8+PvZ)d_d$YI%cSvNDr<6ec1zA_n8^%iukW!1dz^(;)y|axHdDHUV z>nCS7AHS4gZN-oqZN7-(SsNx%cB2&x1^Oj$5eb1`z>^~Nj`bU|9}!RbUvZM)Gl9b- zOEf!oeZ{C!6l^rdGpdbLysxrO;K)}dWO193+Urzwp?F9*nZDW*> z$vuv--2#=L*`VTA3i<7RwEz4bLVx{CUN&mRsIc!~Y0~SS1pz$2!}VIV;InVg9$I~8E=c=;|LLqaC#RLz0##oah z7lNXg_50RS$GaCKls{``4z2>6{l|XrkQW@=cHRk1ci6s5vK8&FR;?z?ZEZ2ZhF&Wre!yuzlrG)>6w9cDeT`W|^VoLLB^}e03(kzK)*MoP?eR zNT7+h6b-rz6MkS%+VLGJW?Fhi&VR@=`mGPo7zbHib6AtS z6;QA)k&58(yy`3i9`dflf}Ytj(^9+7mtcbX5i&=B!qJn2@##?&#+qALadHW2|3n5B zVoHmnuvQGDnryqc&$C-0ronk>3^bYcJ&&HdVIzpYq2^d`h{pN3>=U&VjIC`67L~_+ z0x|K3MKo{ICGiD$7Yiadrfg_l=(&DPyJTaBQf%p8w{Y-OTnUo}Lq4NJHCkIK%N*BI zC;da1qqoD*XpZ7gBh~qQf}~`fM`&H>=3sioO0HzdPIZ{tZZ&mrutm2S_tVzV#@ck6 z2_Eb?wIGcnD`W&EhnWz6-YHca##c)^_u+NX>*St{1THlB^-P0^_iBC^CK;woPPo7l z1p0`_GRMu7zSf!DTuL8}`*A6g{;*qqJzW9v)(>yh6VRAV7as^e@80m@ zv2s^cUvn{DCQK!Ndb;1+P~x&*_iPx75NRRtc_n33TZhv_pb~ROxKb(^)7?^*D_~KPlb8Z= z^IVuB^@y4%Z~UV1aRqF;;$Zof=_oc@p;y@m{7VVY3rBj)l`h+Ve*aDsyv=}xl77%c zQU9*8OF=!W#+1gDb5!9a{|nBW50*bP_C)VFBUwgGp7YvOI?CYOijEV5FCZhe1sPwr z0o+_(UfBh`YHR=UIm=oVhf9KV8l%aSoNdqZ8A!=KyDI(~l@G@eIR{OD%vwpbHY!_E zS-8q=oFl44ieQ2uDjvaxq@%LTU1`}WyG1Bkh)|@havExP$+Te*bzEb%6rCiF>4b!n zJBU+UcFC*&9H(iA`HJqgXCy}J6|d%WKH2u;`q&|63%q6~qVR&|cOXt%8;cJa&5upZ zPtvT1H5RgYN!G@>ldEIYZHn-?k#-#(u&&aF`!4>E68&x zpQ-U9mM%rg-x1>oG6#({P;5lwpP1K!Dk9hVH7|MuYE7 zPSY~h`%<&r@n$cE2CQF|2o9PY&#Cg=(0)CBn>zrH>;|TOAkfrUhs^Mn$044!y}C0} zo|rjL%<5%O%`n8GnfTQrbI-k!-7KkVSkLfwZ(-s^bC69gqJX-%z6zm9wob;=20{8| z3rrK!IB__^aALTdvk+{sYl0~qUl|cThr$0b6V(} z2eN>LceyJuA7JEvIK>`qc790LEAWm!77T95dIA~O-Ycf{^+v+FgpV9G zBR=w02XSjg>{jH--#H#=8{7u0!XPW8LXtl8Jz&Ysq$j8@x6={Z*2#y+wYJ!5er(9J z?2)H-sKW-1qEYubXPy}2M4tLz?R`j_b$t|zqWWyLluC0C`Y)rvv1he~u=G+3G6SUG zx@RaJ)0gIui^4;4dKBEAHKqNgQmF`RShty}#kVNW9(DTCJwy96{42F%%F|l%oSUzN z(T{ZBC!yBzFB^Pvo3ArCsyGy5i#x$v;!RrH*!636?RpXTRj$OM_8m$3H%*wzrmYia ztEu@5j8l#qdZRpX!Y#(kMrpo>bE)lAVwd2e=73~GS6bH>;}7PQSZ_A7=}g<$kSt^s zI#z@zQO8BJdMk2j7Da-3RcJ3Eq}`7o8Y#9ach%wjJBV>{iSaUHypYBRXq5sIQ@5c)%Ic@c4V66#jle2dEx14*);~;?^4+6 z1IF#L)gDIeH)?h-ee8BGCanS-{5vLfrmL$fO40<_(5Xj5A`>vS3uF^jW!b$R_Ow&!H{Uw%QOi@ON6s3MipP{T+R_^5GzxMdej^{ri%Q& zHRqwiR5=IZW;4sYsCu(N3I2lR1C?_1`w^)=M+U!?>@By_FciHU)D52c#zW|&`Z-Cv z{2ePjESBR?)3qm_6@VsGhYy{y%lsm=R~xKjx?}DSn${ATFD;S%i0|p&f*CvtzZbC% z=PNzORj>VuaBkufwS6?0h!gyjqm_{pKe#~z6Ym+>j+#NSuLRTRXC$UWO>x`3s~Qaa zchRXRiPI9}p{?#Vdqu#RYoWu8T zZB~q!#~o=m3tbWC6ibCKe7)Vlqb!v#E1Xm+Id8`dct+99lgUXF@S7d=iWN%j2Jhoi zItX_fW#zm%F*W=XWwGNZpezA?9<%be;=K!%C6NJJT#bA(t3kyib+f}ucH#`2<>NAu zG~+5dr^Dx3FxND}g)hM-Rcw(nm_IAPUs3J0im#|I<6byMf?snu6 z^61`vCHEjbQ;G!r!#-kVsTa^r0|o$M_=+3>000m|KfD0_i9uU%4E_Tn00^&{y> zHN)#i=)M7w|BZiwDE?Is(_i?vUamj%V#9R>fVls_gm4@K68jgA_8<7S{Wjnpc-;WF z9FFs&9ske^0zeq-(Ov)w0AMNr2ydj|`hRaJ@Ey+k*MC&t_XiMCfv4Dnr`eQU1pr|m z08k@?(_R69+Rzq!R^oP?Pv$UcRL?%M;C}Mw;(sb&B?_p%*6%& zgK+T(a|;M_3j(74!v3xvuD0Hm5Pw$}H!op-F&ax7cPm?AIQ~uMpn?3s;_WO3U+ZW< zq}^e*5I%NZc1{{`bO;0@3bU~j){>F?OB{YAM&sb^4PV@H`1$#<`|+^5!|XY@goK1R zIJr5vxuI|lsMk|BZ%coun-}e$mHbaVGPYjUFh>t>M|U^K?|Ln*+j8vW6fdfV(V(_=IzD7#m>d?|0V}-?caiKUhIFgmEGFimBZiC11`kL z@wY{Ag`zgr!Z!cd^hbmLw&RbMOS*XfC-t|~Z_`~IfA@&6i=~^r7>z&F#@5c#$HkjQ z{J(}sl;cn4|E%Os>VMWP%JIJ%BMNVnur$mTp0G&&42y#ef~@ju%Qd=~vaT7)WSKp_9n|9>GoYY&(=d^&5uxp{v3 z1RO`ev5TL#$8Y*M91~hO|Hk0o*DgXB+(0-c`Hk)W#B6`?{D~!gV;fgD8#vEzn>}n? zZGPinIF9l4v4vv<_>}^P@^!TJgX1MQrgQOeb%f(PI3{$pwe$i2M9klGZ(C~zIOc?7 zOqhazp&N6u(z#0+)e$(L*SEC5Tan~=VI&a4b`x; zcD97sz~{TGho#$70Qj@bzoh{D-+c>#cQQYh5I@|_*x}v(_x680`8U`98T=mGKRLc? z{xN1C;^}{A|H%GBb1wz}!E1Qmr2Ip($^n3mNB|&N`-evN3IK2-0HA&DU+p3O?Jxhj zXgS(iv;XeUzqkKShQB%gcknNL?7#K>-FFa~Kd%jt-<@jh?&9tPgLrvZTH8XP|Lw&8 z*Mk2t>tA-TY1!J@!ff5(s`TJq=ICY*A8t1r$3L#Wj&A?k2>)M-{mX{m@K3*n1A@|@ z0HHZMfIA1j?|z;J5DDP-eUk$C8PMP3rh=vi{GNIGR0n_hJsiW&|55%&0ZxV=g1sE= zA-~DeS~?JG9~k^y-M=@)-vttY4&VTU04eYopaqx!D8LN}03v_{APXn~>VOVl2$%uZ zfCJzPzyLoW5C{XJfOz;lJQK(T3V~9f3aAH~fexSt7yw3rDPSI02G)TsU=KI}&Vd`? zI|u|q0bzj%K%^il5Iu+$#0?SziGyT8Dj+S8A;UO~LkHPjCP@0-OZS1{Z^C z!R_Dy@Dz9%yahf1U&EIu7zo4&)Cf=nK?G?8bp&`G69gDSFhU$c7D6#XJwi9a7{VgL z7Q!jQH$-Ga0z?QR6j20G0Z|vx8qpIm7%>4c7qJqt9dQ_O5%Ck^IpR+wEF=mfRwQ90 zMI-|xdn7-kD5NZ;a-=q-5u|0LJ)|3CWMpDwMq~kG1!O~HC*)_y3CJ&z8<6{v7m#<5 zuTfA?NKsf(#8A{xEK$5sqEK>BYEk-7-lFWG+@WHiQlWCA%Ap#ex}k=nW}#N2zCnG9 zdVu;J4Hu0bO&Cob%?9l$S~6NGS~uDp+8)|>bUbuMbTM=tbSLyM^lbEc^bzz8^sg8g z7&I6{7@8Q47@-*17>yX?7@sh{Vd7)5U`k_}VESMtVOC)FW4_1yiiL&6fF*%tgyoHu zgjIz#gtduvhfRRZj;)AogB^mMhux0-7W)hb4Tl~_62}ZD04EEl1!oTD6c-Jb0aqH= z5;qt(54Q{V9qu(A0Uj5gI-VVJtBXiJfdErEn);>24Y2G7vf~%X5tm% z`$v?IBp=y6ihWf7=MvsEep)slU@O(&*BJ(=^b0phc$@ zq_v~XpdF+=r=y}%r3<91pMt{q|$e_;<&CtPc$VkGd$QZy_!??kO z#q@;9lL`LZnHiZ`klC5}CG$KBn1zqUfhCV+jup(x&+5qfl68R%iA{*jjjfpN9TXEP z3H626KtHh)v#YR&vv;tcanNxXainsLas1@u<8l zn{qUA_Hs3H=kk2=&*b|RkQ9^^QWf4QQYu<2RwzAVz*M?b z!KzBC>8cxQ^lENu9qNF(qI$ae2MtCIPmR}_$eJ3Od7ArLTv~xzW7-7T=GxWTH#$-} z$vW%0Oz?*XgL*i6CVEwRxB4>rY5H3R90oxKQ-)-Qj)t8^C`Nilhd#g^AridOkn=ho8JFRV{&By2Kl zj%>wj(`*my#O%`S4(-M4)9sHOo;YMVoH|N7<~m+DDL556-8!o~!{3YNqVLk+it1|N z+U17t=Il1?{@C5$eZhm(Bg$jTQ`j@p^BkrOEB69_c-kv^Y%#eMU9 z@BH-qTKw_+-TbGYvOJA_dJrHNQ1%S*nf0^5KZj z#7)L?#%IMpBv>a*CUPZaC;m#ZOPWpQPcBG7PH{_FNqv%9nTD4ZkhYVqn%O1 z@u@kgHL0Dild0>hht?N05I4j(0*yY6$4wSZE6vKygDrwB^{w=+`E3MkaqXb?r|st* z4jo&ahMfytN?n89BHeAT*is11X?k0Gdws`x=VaGw_hBz$A8SABfa;*?ko&ObNbYF<*!Xzw z#N*`qY1C)D&-rIeXRTi(zD%DRobO%0E`D7md?o!_am9Nzc&%~0dEO*RTHvh)~j) diff --git a/Telegram/Resources/art/osxsetup@2x.tif b/Telegram/Resources/art/osxsetup@2x.tif deleted file mode 100644 index 89a9aa09f06d579d0f91cca1b6dc224eec7e3939..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 197936 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 diff --git a/Telegram/Resources/art/osxtray.png b/Telegram/Resources/art/osxtray.png deleted file mode 100644 index fe7b2b7a444ea2b83d127be24b5cfd05cab62109..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2354 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 `r$ZhR)atb#FjNl`e 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/mac_window_shadow_top_left.png b/Telegram/Resources/icons/mac_window_shadow_top_left.png new file mode 100644 index 0000000000000000000000000000000000000000..bcf9c04516c62f496edceb191f3ce328f4c8a996 GIT binary patch literal 823 zcmV-71IYY|P)oh zGO#2vup~0DBr>ohGVn9H1HIU`P3&*qMxvyo94aM_6o#Qf;%w4FrjogWv87?das+lSHk z7>OmdVJZq8+OsozDl8Ek4r#3vMp0$c( z&Can%^I!Y;Vq8e6E(p8sj!+vqaE^9 zNJU6$vqB5vp>UUIOVRBs7&)1mlgp4W(Y#K^xc^w|K$FDMXv%#-M{9IW5s6ymIfhHT zL-y|eRo#+eTnp2Lfkt_bX(Vc9Nn}7w;vEtOl|NEx2~ODWF*X1I002ovPDHLkV1fbQ Bd0PMg literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/mac_window_shadow_top_left@2x.png b/Telegram/Resources/icons/mac_window_shadow_top_left@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..71bb8ddfa3a380e4e1bed5fedcfbc00fe08817fb GIT binary patch literal 1979 zcmV;s2SoUZP) z+j8PK6h(y%6`-h)C-VPa+Ve8*Vm!vy(YbBedsTHoTNf*6add;^R7&|%2uWthZU7;r zlyc5)0P*E?I%PMZ3X0ePy~w12A|`VL$!eg80Z_JWD55cxt__N)fYRAP5d}~@KPch` zlrIK~xB%sgha&z9<;&&pA|6pd#Gm<)A|iH#ls)_m?;J|RUOKOrc3N@>5m7r9wOtwP zT12FdMrsQpyA(0I)3fj2BfAnYQ-Gf2Lu~7AM2voM5jqp04OVn7Vq|9=QT8ah7BQ-$ zJnwTP+1BV%#E8!Gx<`-VMYOp)5xrj&%lb2<>rwPlIufxL0U1f#=t4yFIa=>g6ajb< zQ6mhRz{vNk0a`?l7fn-VR@ulpvw#)R`bEx=sMn~O0i=j161J4flosheQlLac5D>YH zXFb`#h}fHi()!Wnms+gb1R-Mf_D5|QPf=UTMAqj?x`>$)S_^peD5)V`L@PX^RnMYE z)@ebih#A`(HTfg+wB)rci$a=+(GprkEp56qpEPe~of=X^M3m55K(FCjTMmVA5z!>n zq+7_B5g8Gs4HYp`LahWIX%_9WEQ7$*?l2LNB#ag?d)T%r?@2e?H<=PjuWQmId0O(e z;(d=05u@J8)?!!+7%8SjxoF%)+>?Yz5mS;csvZr{L$jxZ83MKlTa(_J*9wb!x{Bz1 zTF}~oTG=wAWlg$OnMfcbqUUg~5ereu+B^|;XmAlRa~01kUW7=co1ULer!ovf8HS;Z<5-4a_C$|Wn26}LYV(w^ zRnSSm%jHt8*K4`o@8x#8m9MX_a=Bc}IF5@EGIF@CNw+Fv1#Cpjl5i^uj^kKvw_ABW zpXK>{Zu}Iamae}%Ra>`}gy-|QJRXnodcDf|4ErAL67{R;F$8F$p=Ts~JRaru_jk4J zq>VvSID1PVLc&r?8HSfXzQ4akZ6Gq>-{RgY;+nm}`~BY7dQyvOjwm5&NdA;2+0%P}K5f?!Uz#Ff z)FMSHuVn7`{`}Lm_o12iA{Nm@LW?6VYYC^vX|Y0lN&jB6$B?{LzE;BNaU4g{y@(vh z#fpVw@6T)Jhf9ysKjI7g7wnhnkPgFZ>7O3g?oaFqTQx7?aXdKBBN>M0bub#n0XH;T zY|qqOs}Z!O4a5dfMD#l0sI6Zb4d>Tt+EWuPi9OX3F{48)qM>wgvi3;)NSPyQ=Z2D1 z@~1RPhy~0X(Q=<~er-#tPxq#badh#!Z(6r#w(46FkP_wq@p;6^XxOrUNE!V}-A9z7 zS)i=t`*fm0;z<8stai($WlN?u4>z^rFpr4ZPP5)C})J~9YR&Tu#7!h+>jfiL+qS>te zl(zPq5iyRCU(_kx#MYjkNalt$_apv5ubQ`z9LKdp!})XK2h^&04XYLP{Msi0HTNWP zAR?lq!)q5MpH{_7^{h=3r0pYZKz|-lI@H#bm&nLrISzLbr5)L_IFZ&-J2aCx(ud}) zp?2+B%@A5E;JgeME3t$R&DxWZrF@boYPn5B>`48q0v>3O64#<5@dJMQMzgTdtdc2U zEbt;uXy%ej*SST5h3jI)aua%6lH@;uL{^iTD!2}ud#NIzNeMzi@{n@;q=MMR5p z<*hueTRy~(G!dhZ*J@>)|06NDiReA)ZZ zMH{4ZK}r|{)Zc5iTBx+nKRHLtBYo9u)!EXM5lV)|?)MQVYEM#X%Mx3lzdYqtUQ!<= zj3Iq!Uc&mbhg*5y(-+jJB+hQA{2?FHxgabN6W)!YKlma*8ih?J}! zb}ix-TTziB#{n;5)MppxQc}WL;69;^_{kVb=?{EFlwcJ-DPBBXiij9BiH=keDF~V9 zG9s>Fy#nT&C5GLJNc!YZA~L$+vP%&uTz~9RMA9E!iRk&QK9UREpUEZ1q^pQX_6tQM z5FAp(+Am#kS`i0?i0p6zAtE7gpGQQ2zwsfKT|~qdQ79S~yAYA|&p)@&5}Ud?&iViV N002ovPDHLkV1j8MyYv76 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index c79ae8b07..cba51885d 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -988,6 +988,11 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_mediaview_saved" = "Image was saved to your [c]Downloads[/c] folder"; +"lng_theme_preview_title" = "Theme Preview"; +"lng_theme_preview_generating" = "Generating color theme preview..."; +"lng_theme_preview_invalid" = "Invalid data in this theme file."; +"lng_theme_preview_apply" = "Apply this theme"; + "lng_new_authorization" = "{name},\nWe detected a login into your account from a new device on {day}, {date} at {time}\n\nDevice: {device}\nLocation: {location}\n\nIf this wasn't you, you can go to Settings — Show all sessions and terminate that session.\n\nIf you think that somebody logged in to your account against your will, you can enable two-step verification in Settings.\n\nSincerely,\nThe Telegram Team"; "lng_new_version_wrap" = "Telegram Desktop was updated to version {version}\n\n{changes}\n\nFull version history is available here:\n{link}"; diff --git a/Telegram/Resources/sample.tdesktop-theme b/Telegram/Resources/sample.tdesktop-theme index de0283463..05c99a2d6 100644 --- a/Telegram/Resources/sample.tdesktop-theme +++ b/Telegram/Resources/sample.tdesktop-theme @@ -25,7 +25,7 @@ windowBg: #ffffff; windowFg: #000000; windowBgOver: #f1f1f1; windowBgRipple: #e5e5e5; -windowFgOver: windowFg; +windowFgOver: #000000; // windowBgOver; windowSubTextFg: #999999; windowSubTextFgOver: #919191; windowBoldFg: #222222; @@ -37,34 +37,34 @@ windowShadowFg: #000000; windowShadowFgFallback: #f1f1f1; shadowFg: #00000018; slideFadeOutBg: #0000003c; -slideFadeOutShadowFg: windowShadowFg; +slideFadeOutShadowFg: #000000; // windowShadowFgFallback; imageBg: #000000; imageBgTransparent: #ffffff; -activeButtonBg: windowBgActive; +activeButtonBg: #40a7e3; // windowFgActive; activeButtonBgOver: #39a5db; activeButtonBgRipple: #2095d0; -activeButtonFg: windowFgActive; -activeButtonFgOver: activeButtonFg; +activeButtonFg: #ffffff; // windowActiveTextFg; +activeButtonFgOver: activeButtonFgOver; activeButtonSecondaryFg: #cceeff; -activeButtonSecondaryFgOver: activeButtonSecondaryFg; +activeButtonSecondaryFgOver: activeButtonSecondaryFgOver; activeLineFg: #37a1de; activeLineFgError: #e48383; -lightButtonBg: windowBg; +lightButtonBg: #ffffff; // windowFg; lightButtonBgOver: #e3f1fa; lightButtonBgRipple: #c9e4f6; -lightButtonFg: windowActiveTextFg; -lightButtonFgOver: lightButtonFg; +lightButtonFg: #168acd; // windowShadowFg; +lightButtonFgOver: lightButtonFgOver; attentionButtonFg: #d14e4e; attentionButtonFgOver: #d14e4e; attentionButtonBgOver: #fcdfde; attentionButtonBgRipple: #f4c3c2; -outlineButtonBg: windowBg; -outlineButtonBgOver: lightButtonBgOver; -outlineButtonOutlineFg: windowBgActive; -outlineButtonBgRipple: lightButtonBgRipple; -menuBg: windowBg; -menuBgOver: windowBgOver; -menuBgRipple: windowBgRipple; +outlineButtonBg: #ffffff; // windowFg; +outlineButtonBgOver: #e3f1fa; // lightButtonBgRipple; +outlineButtonOutlineFg: #40a7e3; // windowFgActive; +outlineButtonBgRipple: #c9e4f6; // lightButtonFg; +menuBg: #ffffff; // windowFg; +menuBgOver: #f1f1f1; // windowBgRipple; +menuBgRipple: #e5e5e5; // windowFgOver; menuIconFg: #a8a8a8; menuIconFgOver: #999999; menuSubmenuArrowFg: #373737; @@ -76,25 +76,25 @@ scrollBg: #0000001a; scrollBgOver: #0000002c; smallCloseIconFg: #c7c7c7; smallCloseIconFgOver: #a3a3a3; -radialFg: windowFgActive; +radialFg: #ffffff; // windowActiveTextFg; radialBg: #00000056; -placeholderFg: windowSubTextFg; +placeholderFg: #999999; // windowSubTextFgOver; placeholderFgActive: #aaaaaa; inputBorderFg: #e0e0e0; filterInputBorderFg: #54c3f3; checkboxFg: #b3b3b3; sliderBgInactive: #e1eaef; -sliderBgActive: windowBgActive; +sliderBgActive: #40a7e3; // windowFgActive; tooltipBg: #eef2f5; tooltipFg: #5d6c80; tooltipBorderFg: #c9d1db; -titleBg: windowBgOver; +titleBg: #f1f1f1; // windowBgRipple; titleShadow: #00000003; titleButtonFg: #ababab; titleButtonBgOver: #e5e5e5; titleButtonFgOver: #9a9a9a; titleButtonCloseBgOver: #e81123; -titleButtonCloseFgOver: windowFgActive; +titleButtonCloseFgOver: #ffffff; // windowActiveTextFg; titleFgActive: #3e3c3e; titleFg: #acacac; trayCounterBg: #f23c34; @@ -103,32 +103,32 @@ trayCounterFg: #ffffff; trayCounterBgMacInvert: #ffffff; trayCounterFgMacInvert: #ffffff01; layerBg: #0000007f; -cancelIconFg: menuIconFg; -cancelIconFgOver: menuIconFgOver; -boxBg: windowBg; -boxTextFg: windowFg; +cancelIconFg: #a8a8a8; // menuIconFgOver; +cancelIconFgOver: #999999; // menuSubmenuArrowFg; +boxBg: #ffffff; // windowFg; +boxTextFg: #000000; // windowBgOver; boxTextFgGood: #4ab44a; boxTextFgError: #d84d4d; boxTitleFg: #404040; -boxSearchBg: boxBg; -boxSearchCancelIconFg: cancelIconFg; -boxSearchCancelIconFgOver: cancelIconFgOver; +boxSearchBg: #ffffff; // boxTextFg; +boxSearchCancelIconFg: #a8a8a8; // cancelIconFgOver; +boxSearchCancelIconFgOver: #999999; // boxBg; boxTitleAdditionalFg: #808080; -boxTitleCloseFg: cancelIconFg; -boxTitleCloseFgOver: cancelIconFgOver; -membersAboutLimitFg: windowSubTextFgOver; -contactsBg: windowBg; -contactsBgOver: windowBgOver; -contactsNameFg: boxTextFg; -contactsStatusFg: windowSubTextFg; -contactsStatusFgOver: windowSubTextFgOver; -contactsStatusFgOnline: windowActiveTextFg; -photoCropFadeBg: layerBg; +boxTitleCloseFg: #a8a8a8; // cancelIconFgOver; +boxTitleCloseFgOver: #999999; // boxBg; +membersAboutLimitFg: #919191; // windowBoldFg; +contactsBg: #ffffff; // windowFg; +contactsBgOver: #f1f1f1; // windowBgRipple; +contactsNameFg: #000000; // boxTextFgGood; +contactsStatusFg: #999999; // windowSubTextFgOver; +contactsStatusFgOver: #919191; // windowBoldFg; +contactsStatusFgOnline: #168acd; // windowShadowFg; +photoCropFadeBg: #0000007f; // cancelIconFg; photoCropPointFg: #ffffff7f; -introBg: windowBg; -introTitleFg: windowBoldFg; -introDescriptionFg: windowSubTextFg; -introErrorFg: windowSubTextFg; +introBg: #ffffff; // windowFg; +introTitleFg: windowBoldFgOver; +introDescriptionFg: #999999; // windowSubTextFgOver; +introErrorFg: #999999; // windowSubTextFgOver; introCoverTopBg: #0f89d0; introCoverBottomBg: #39b0f0; introCoverIconsFg: #5ec6ff; @@ -136,83 +136,83 @@ introCoverPlaneTrace: #5ec6ff69; introCoverPlaneInner: #c6d8e8; introCoverPlaneOuter: #a1bed4; introCoverPlaneTop: #ffffff; -dialogsMenuIconFg: menuIconFg; -dialogsMenuIconFgOver: menuIconFgOver; -dialogsBg: windowBg; -dialogsNameFg: windowBoldFg; -dialogsChatIconFg: dialogsNameFg; -dialogsDateFg: windowSubTextFg; -dialogsTextFg: windowSubTextFg; -dialogsTextFgService: windowActiveTextFg; +dialogsMenuIconFg: #a8a8a8; // menuIconFgOver; +dialogsMenuIconFgOver: #999999; // menuSubmenuArrowFg; +dialogsBg: #ffffff; // windowFg; +dialogsNameFg: windowBoldFgOver; +dialogsChatIconFg: dialogsChatIconFg; +dialogsDateFg: #999999; // windowSubTextFgOver; +dialogsTextFg: #999999; // windowSubTextFgOver; +dialogsTextFgService: #168acd; // windowShadowFg; dialogsDraftFg: #dd4b39; -dialogsVerifiedIconBg: windowBgActive; -dialogsVerifiedIconFg: windowFgActive; +dialogsVerifiedIconBg: #40a7e3; // windowFgActive; +dialogsVerifiedIconFg: #ffffff; // windowActiveTextFg; dialogsSendingIconFg: #c1c1c1; dialogsSentIconFg: #5dc452; -dialogsUnreadBg: windowBgActive; +dialogsUnreadBg: #40a7e3; // windowFgActive; dialogsUnreadBgMuted: #bbbbbb; -dialogsUnreadFg: windowFgActive; -dialogsBgOver: windowBgOver; -dialogsNameFgOver: windowBoldFgOver; -dialogsChatIconFgOver: dialogsNameFgOver; -dialogsDateFgOver: windowSubTextFgOver; -dialogsTextFgOver: windowSubTextFgOver; -dialogsTextFgServiceOver: dialogsTextFgService; -dialogsDraftFgOver: dialogsDraftFg; -dialogsVerifiedIconBgOver: dialogsVerifiedIconBg; -dialogsVerifiedIconFgOver: dialogsVerifiedIconFg; -dialogsSendingIconFgOver: dialogsSendingIconFg; -dialogsSentIconFgOver: dialogsSentIconFg; -dialogsUnreadBgOver: dialogsUnreadBg; -dialogsUnreadBgMutedOver: dialogsUnreadBgMuted; -dialogsUnreadFgOver: dialogsUnreadFg; +dialogsUnreadFg: #ffffff; // windowActiveTextFg; +dialogsBgOver: #f1f1f1; // windowBgRipple; +dialogsNameFgOver: #222222; // windowBgActive; +dialogsChatIconFgOver: dialogsChatIconFgOver; +dialogsDateFgOver: #919191; // windowBoldFg; +dialogsTextFgOver: #919191; // windowBoldFg; +dialogsTextFgServiceOver: #168acd; // dialogsDraftFg; +dialogsDraftFgOver: #dd4b39; // dialogsVerifiedIconBg; +dialogsVerifiedIconBgOver: #40a7e3; // dialogsVerifiedIconFg; +dialogsVerifiedIconFgOver: #ffffff; // dialogsSendingIconFg; +dialogsSendingIconFgOver: #c1c1c1; // dialogsSentIconFg; +dialogsSentIconFgOver: #5dc452; // dialogsUnreadBg; +dialogsUnreadBgOver: #40a7e3; // dialogsUnreadBgMuted; +dialogsUnreadBgMutedOver: #bbbbbb; // dialogsUnreadFg; +dialogsUnreadFgOver: #ffffff; // dialogsBgOver; dialogsBgActive: #419fd9; -dialogsNameFgActive: windowFgActive; -dialogsChatIconFgActive: dialogsNameFgActive; -dialogsDateFgActive: windowFgActive; -dialogsTextFgActive: windowFgActive; -dialogsTextFgServiceActive: dialogsTextFgActive; +dialogsNameFgActive: #ffffff; // windowActiveTextFg; +dialogsChatIconFgActive: dialogsChatIconFgActive; +dialogsDateFgActive: #ffffff; // windowActiveTextFg; +dialogsTextFgActive: #ffffff; // windowActiveTextFg; +dialogsTextFgServiceActive: dialogsTextFgServiceActive; dialogsDraftFgActive: #c6e1f7; -dialogsVerifiedIconBgActive: dialogsTextFgActive; -dialogsVerifiedIconFgActive: dialogsBgActive; +dialogsVerifiedIconBgActive: dialogsTextFgServiceActive; +dialogsVerifiedIconFgActive: #419fd9; // dialogsNameFgActive; dialogsSendingIconFgActive: #ffffff99; -dialogsSentIconFgActive: dialogsTextFgActive; -dialogsUnreadBgActive: dialogsTextFgActive; -dialogsUnreadBgMutedActive: dialogsDraftFgActive; -dialogsUnreadFgActive: dialogsBgActive; -dialogsForwardBg: dialogsBgActive; -dialogsForwardFg: dialogsNameFgActive; -searchedBarBg: windowBgOver; -searchedBarBorder: shadowFg; -searchedBarFg: windowSubTextFgOver; -topBarBg: windowBg; -emojiPanBg: windowBg; -emojiPanCategories: #f7f7f7; // windowBg; -emojiPanHeaderFg: windowSubTextFg; -emojiPanHeaderBg: #fffffff2; // emojiPanBg; +dialogsSentIconFgActive: dialogsTextFgServiceActive; +dialogsUnreadBgActive: dialogsTextFgServiceActive; +dialogsUnreadBgMutedActive: #c6e1f7; // dialogsVerifiedIconBgActive; +dialogsUnreadFgActive: #419fd9; // dialogsNameFgActive; +dialogsForwardBg: #419fd9; // dialogsNameFgActive; +dialogsForwardFg: dialogsChatIconFgActive; +searchedBarBg: #f1f1f1; // windowBgRipple; +searchedBarBorder: #00000018; // slideFadeOutBg; +searchedBarFg: #919191; // windowBoldFg; +topBarBg: #ffffff; // windowFg; +emojiPanBg: #ffffff; // windowFg; +emojiPanCategories: #f7f7f7; // windowFg; +emojiPanHeaderFg: #999999; // windowSubTextFgOver; +emojiPanHeaderBg: #fffffff2; // emojiPanCategories; stickerPanDeleteBg: #000000cc; -stickerPanDeleteFg: windowFgActive; +stickerPanDeleteFg: #ffffff; // windowActiveTextFg; stickerPreviewBg: #ffffffb0; -historyTextInFg: windowFg; -historyTextOutFg: windowFg; -historyCaptionInFg: historyTextInFg; -historyCaptionOutFg: historyTextOutFg; -historyFileNameInFg: historyTextInFg; -historyFileNameOutFg: historyTextOutFg; -historyOutIconFg: dialogsSentIconFg; +historyTextInFg: #000000; // windowBgOver; +historyTextOutFg: #000000; // windowBgOver; +historyCaptionInFg: historyTextOutFg; +historyCaptionOutFg: historyCaptionInFg; +historyFileNameInFg: historyTextOutFg; +historyFileNameOutFg: historyCaptionInFg; +historyOutIconFg: #5dc452; // dialogsUnreadBg; historyOutIconFgSelected: #4da79f; -historyIconFgInverted: windowFgActive; +historyIconFgInverted: #ffffff; // windowActiveTextFg; historySendingOutIconFg: #98d292; historySendingInIconFg: #a0adb5; historySendingInvertedIconFg: #ffffffc8; historySystemBg: #89a0b47f; historySystemBgSelected: #bbc8d4a2; -historySystemFg: windowFgActive; +historySystemFg: #ffffff; // windowActiveTextFg; historyUnreadBarBg: #fcfbfa; -historyUnreadBarBorder: shadowFg; +historyUnreadBarBorder: #00000018; // slideFadeOutBg; historyUnreadBarFg: #538bb4; historyForwardChooseBg: #0000004c; -historyForwardChooseFg: windowFgActive; +historyForwardChooseFg: #ffffff; // windowActiveTextFg; historyPeer1NameFg: #c03d33; historyPeer1UserpicBg: #ed9482; historyPeer1UserpicFg: #d3644b; @@ -222,7 +222,7 @@ historyPeer2UserpicFg: #75c057; historyPeer3NameFg: #d09306; historyPeer3UserpicBg: #efd289; historyPeer3UserpicFg: #e4a861; -historyPeer4NameFg: windowActiveTextFg; +historyPeer4NameFg: #168acd; // windowShadowFg; historyPeer4UserpicBg: #8fbfe9; historyPeer4UserpicFg: #649fd3; historyPeer5NameFg: #8544d6; @@ -241,14 +241,14 @@ historyScrollBarBg: #556e837a; historyScrollBarBgOver: #556e83bc; historyScrollBg: #556e834c; historyScrollBgOver: #556e836b; -msgInBg: windowBg; +msgInBg: #ffffff; // windowFg; msgInBgSelected: #c2dcf2; msgOutBg: #effdde; msgOutBgSelected: #b7dbdb; msgSelectOverlay: #358cd44c; msgStickerOverlay: #358cd47f; -msgInServiceFg: windowActiveTextFg; -msgInServiceFgSelected: windowActiveTextFg; +msgInServiceFg: #168acd; // windowShadowFg; +msgInServiceFgSelected: #168acd; // windowShadowFg; msgOutServiceFg: #3a8e26; msgOutServiceFgSelected: #367570; msgInShadow: #748ea229; @@ -259,25 +259,25 @@ msgInDateFg: #a0acb6; msgInDateFgSelected: #6a9cc5; msgOutDateFg: #6cc264; msgOutDateFgSelected: #50a79c; -msgServiceFg: windowFgActive; +msgServiceFg: #ffffff; // windowActiveTextFg; msgServiceBg: #556e837f; msgServiceBgSelected: #8ca0b3a2; -msgInReplyBarColor: activeLineFg; -msgInReplyBarSelColor: activeLineFg; -msgOutReplyBarColor: historyOutIconFg; -msgOutReplyBarSelColor: historyOutIconFgSelected; -msgImgReplyBarColor: msgServiceFg; +msgInReplyBarColor: #37a1de; // activeLineFgError; +msgInReplyBarSelColor: #37a1de; // activeLineFgError; +msgOutReplyBarColor: #5dc452; // historyOutIconFgSelected; +msgOutReplyBarSelColor: #4da79f; // historyIconFgInverted; +msgImgReplyBarColor: #ffffff; // msgServiceBg; msgInMonoFg: #4e7391; msgOutMonoFg: #469165; -msgDateImgFg: msgServiceFg; +msgDateImgFg: #ffffff; // msgServiceBg; msgDateImgBg: #00000054; msgDateImgBgOver: #00000074; msgDateImgBgSelected: #1c4a7187; -msgFileThumbLinkInFg: lightButtonFg; -msgFileThumbLinkInFgSelected: lightButtonFgOver; +msgFileThumbLinkInFg: lightButtonFgOver; +msgFileThumbLinkInFgSelected: #168acd; // attentionButtonFg; msgFileThumbLinkOutFg: #5eba5b; msgFileThumbLinkOutFgSelected: #31a298; -msgFileInBg: windowBgActive; +msgFileInBg: #40a7e3; // windowFgActive; msgFileInBgOver: #4eade3; msgFileInBgSelected: #51a3d3; msgFileOutBg: #78c67f; @@ -299,7 +299,7 @@ msgFile4Bg: #efc274; msgFile4BgDark: #e6a561; msgFile4BgOver: #dc9c5a; msgFile4BgSelected: #b19d84; -msgWaveformInActive: windowBgActive; +msgWaveformInActive: #40a7e3; // windowFgActive; msgWaveformInActiveSelected: #51a3d3; msgWaveformInInactive: #d4dee6; msgWaveformInInactiveSelected: #9cc1e1; @@ -308,81 +308,81 @@ msgWaveformOutActiveSelected: #6badad; msgWaveformOutInactive: #b3e2b4; msgWaveformOutInactiveSelected: #91c3c3; msgBotKbOverBgAdd: #ffffff20; -msgBotKbIconFg: msgServiceFg; +msgBotKbIconFg: #ffffff; // msgServiceBg; msgBotKbRippleBg: #00000020; -mediaInFg: msgInDateFg; -mediaInFgSelected: msgInDateFgSelected; -mediaOutFg: msgOutDateFg; -mediaOutFgSelected: msgOutDateFgSelected; +mediaInFg: #a0acb6; // msgInDateFgSelected; +mediaInFgSelected: #6a9cc5; // msgOutDateFg; +mediaOutFg: #6cc264; // msgOutDateFgSelected; +mediaOutFgSelected: #50a79c; // msgServiceFg; youtubePlayIconBg: #e83131c8; -youtubePlayIconFg: windowFgActive; +youtubePlayIconFg: #ffffff; // windowActiveTextFg; videoPlayIconBg: #0000007f; videoPlayIconFg: #ffffff; toastBg: #000000b2; -toastFg: windowFgActive; -reportSpamBg: emojiPanHeaderBg; -reportSpamFg: windowFg; +toastFg: #ffffff; // windowActiveTextFg; +reportSpamBg: #fffffff2; // stickerPanDeleteBg; +reportSpamFg: #000000; // windowBgOver; historyToDownShadow: #00000040; -historyComposeAreaBg: msgInBg; -historyComposeAreaFg: historyTextInFg; -historyComposeAreaFgService: msgInDateFg; -historyComposeIconFg: menuIconFg; -historyComposeIconFgOver: menuIconFgOver; -historySendIconFg: windowBgActive; -historySendIconFgOver: windowBgActive; -historyPinnedBg: historyComposeAreaBg; -historyReplyBg: historyComposeAreaBg; -historyReplyCancelFg: cancelIconFg; -historyReplyCancelFgOver: cancelIconFgOver; -historyComposeButtonBg: historyComposeAreaBg; -historyComposeButtonBgOver: windowBgOver; -historyComposeButtonBgRipple: windowBgRipple; +historyComposeAreaBg: #ffffff; // msgInBgSelected; +historyComposeAreaFg: historyTextOutFg; +historyComposeAreaFgService: #a0acb6; // msgInDateFgSelected; +historyComposeIconFg: #a8a8a8; // menuIconFgOver; +historyComposeIconFgOver: #999999; // menuSubmenuArrowFg; +historySendIconFg: #40a7e3; // windowFgActive; +historySendIconFgOver: #40a7e3; // windowFgActive; +historyPinnedBg: #ffffff; // historyComposeAreaFg; +historyReplyBg: #ffffff; // historyComposeAreaFg; +historyReplyCancelFg: #a8a8a8; // cancelIconFgOver; +historyReplyCancelFgOver: #999999; // boxBg; +historyComposeButtonBg: #ffffff; // historyComposeAreaFg; +historyComposeButtonBgOver: #f1f1f1; // windowBgRipple; +historyComposeButtonBgRipple: #e5e5e5; // windowFgOver; overviewCheckBg: #00000040; -overviewCheckFg: windowBg; -overviewCheckFgActive: windowBg; +overviewCheckFg: #ffffff; // windowFg; +overviewCheckFgActive: #ffffff; // windowFg; overviewPhotoSelectOverlay: #40ace333; profileStatusFgOver: #7c99b2; -notificationsBoxMonitorFg: windowFg; -notificationsBoxScreenBg: dialogsBgActive; -notificationSampleUserpicFg: windowBgActive; -notificationSampleCloseFg: #d7d7d7; // windowSubTextFg; -notificationSampleTextFg: #d7d7d7; // windowSubTextFg; -notificationSampleNameFg: #939393; // windowSubTextFg; -mainMenuBg: windowBg; -mainMenuCoverBg: dialogsBgActive; -mainMenuCoverFg: windowFgActive; -mediaPlayerBg: windowBg; -mediaPlayerActiveFg: windowBgActive; -mediaPlayerInactiveFg: sliderBgInactive; +notificationsBoxMonitorFg: #000000; // windowBgOver; +notificationsBoxScreenBg: #419fd9; // dialogsNameFgActive; +notificationSampleUserpicFg: #40a7e3; // windowFgActive; +notificationSampleCloseFg: #d7d7d7; // windowSubTextFgOver; +notificationSampleTextFg: #d7d7d7; // windowSubTextFgOver; +notificationSampleNameFg: #939393; // windowSubTextFgOver; +mainMenuBg: #ffffff; // windowFg; +mainMenuCoverBg: #419fd9; // dialogsNameFgActive; +mainMenuCoverFg: #ffffff; // windowActiveTextFg; +mediaPlayerBg: #ffffff; // windowFg; +mediaPlayerActiveFg: #40a7e3; // windowFgActive; +mediaPlayerInactiveFg: #e1eaef; // sliderBgActive; mediaPlayerDisabledFg: #9dd1ef; -mediaviewFileBg: windowBg; -mediaviewFileNameFg: windowFg; -mediaviewFileSizeFg: windowSubTextFg; +mediaviewFileBg: #ffffff; // windowFg; +mediaviewFileNameFg: #000000; // windowBgOver; +mediaviewFileSizeFg: #999999; // windowSubTextFgOver; mediaviewFileRedCornerFg: #d55959; mediaviewFileYellowCornerFg: #e8a659; mediaviewFileGreenCornerFg: #49a957; mediaviewFileBlueCornerFg: #599dcf; -mediaviewFileExtFg: activeButtonFg; +mediaviewFileExtFg: activeButtonFgOver; mediaviewMenuBg: #383838; mediaviewMenuBgOver: #505050; mediaviewMenuBgRipple: #676767; -mediaviewMenuFg: windowFgActive; +mediaviewMenuFg: #ffffff; // windowActiveTextFg; mediaviewBg: #222222eb; -mediaviewVideoBg: imageBg; +mediaviewVideoBg: #000000; // imageBgTransparent; mediaviewControlBg: #0000003c; -mediaviewControlFg: windowFgActive; +mediaviewControlFg: #ffffff; // windowActiveTextFg; mediaviewCaptionBg: #11111180; -mediaviewCaptionFg: mediaviewControlFg; +mediaviewCaptionFg: #ffffff; // mediaviewCaptionBg; mediaviewTextLinkFg: #91d9ff; -mediaviewSaveMsgBg: toastBg; -mediaviewSaveMsgFg: toastFg; +mediaviewSaveMsgBg: #000000b2; // toastFg; +mediaviewSaveMsgFg: #ffffff; // reportSpamBg; mediaviewPlaybackActive: #c7c7c7; mediaviewPlaybackInactive: #252525; mediaviewPlaybackActiveOver: #ffffff; mediaviewPlaybackInactiveOver: #474747; mediaviewPlaybackProgressFg: #ffffffc7; -mediaviewPlaybackIconFg: mediaviewPlaybackActive; -mediaviewPlaybackIconFgOver: mediaviewPlaybackActiveOver; +mediaviewPlaybackIconFg: #c7c7c7; // mediaviewPlaybackInactive; +mediaviewPlaybackIconFgOver: #ffffff; // mediaviewPlaybackInactiveOver; mediaviewTransparentBg: #ffffff; mediaviewTransparentFg: #cccccc; -notificationBg: windowBg; +notificationBg: #ffffff; // windowFg; diff --git a/Telegram/Resources/telegram.qrc b/Telegram/Resources/telegram.qrc index 1ab21fca9..6fece6a45 100644 --- a/Telegram/Resources/telegram.qrc +++ b/Telegram/Resources/telegram.qrc @@ -8,6 +8,7 @@ art/bg_initial.png art/icon256.png art/iconbig256.png + art/sunrise.jpg qmime/freedesktop.org.xml diff --git a/Telegram/Resources/telegram_mac.qrc b/Telegram/Resources/telegram_mac.qrc index 8feea0191..03585ec03 100644 --- a/Telegram/Resources/telegram_mac.qrc +++ b/Telegram/Resources/telegram_mac.qrc @@ -1,5 +1,2 @@ - - art/osxtray.png - diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 5c1db03dc..282bef664 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -2163,7 +2163,7 @@ namespace { text = d.second; } - void prepareCorners(RoundCorners index, int32 radius, const style::color &color, const style::color *shadow = 0, QImage *cors = 0) { + void prepareCorners(RoundCorners index, int32 radius, const QBrush &brush, const style::color *shadow = nullptr, QImage *cors = nullptr) { int32 r = radius * cIntRetinaFactor(), s = st::msgShadow * cIntRetinaFactor(); QImage rect(r * 3, r * 3 + (shadow ? s : 0), QImage::Format_ARGB32_Premultiplied), localCors[4]; { @@ -2178,7 +2178,7 @@ namespace { p.setBrush((*shadow)->b); p.drawRoundedRect(0, s, r * 3, r * 3, r, r); } - p.setBrush(color->b); + p.setBrush(brush); p.drawRoundedRect(0, 0, r * 3, r * 3, r, r); } if (!cors) cors = localCors; @@ -2212,14 +2212,13 @@ namespace { } void createCorners() { - style::color white = { 255, 255, 255, 255 }; QImage mask[4]; - prepareCorners(LargeMaskCorners, msgRadius(), white, nullptr, mask); + prepareCorners(LargeMaskCorners, msgRadius(), QColor(255, 255, 255), nullptr, mask); for (int i = 0; i < 4; ++i) { ::cornersMaskLarge[i] = new QImage(mask[i].convertToFormat(QImage::Format_ARGB32_Premultiplied)); ::cornersMaskLarge[i]->setDevicePixelRatio(cRetinaFactor()); } - prepareCorners(SmallMaskCorners, st::buttonRadius, white, nullptr, mask); + prepareCorners(SmallMaskCorners, st::buttonRadius, QColor(255, 255, 255), nullptr, mask); for (int i = 0; i < 4; ++i) { ::cornersMaskSmall[i] = new QImage(mask[i].convertToFormat(QImage::Format_ARGB32_Premultiplied)); ::cornersMaskSmall[i]->setDevicePixelRatio(cRetinaFactor()); @@ -2295,7 +2294,7 @@ namespace { using Update = Window::Theme::BackgroundUpdate; static auto subscription = Window::Theme::Background()->add_subscription([](const Update &update) { - if (update.type == Update::Type::TestingTheme) { + if (update.paletteChanged()) { clearCorners(); createCorners(); @@ -2770,7 +2769,7 @@ namespace { if (radius == ImageRoundRadius::Large) { complexAdjustRect(corners, rect, overlayParts); } - roundRect(p, rect, textstyleCurrent()->selectOverlay, overlayCorners, nullptr, overlayParts); + roundRect(p, rect, p.textPalette().selectOverlay, overlayCorners, nullptr, overlayParts); } void complexLocationRect(Painter &p, QRect rect, ImageRoundRadius radius, ImageRoundCorners corners) { @@ -2787,7 +2786,8 @@ namespace { } return ::cornersMaskSmall; } - void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg, const CornersPixmaps &corner, const style::color *shadow, RectParts parts) { + + void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, style::color bg, const CornersPixmaps &corner, const style::color *shadow, RectParts parts) { auto cornerWidth = corner.p[0]->width() / cIntRetinaFactor(); auto cornerHeight = corner.p[0]->height() / cIntRetinaFactor(); if (w < 2 * cornerWidth || h < 2 * cornerHeight) return; @@ -2831,11 +2831,11 @@ namespace { } } - void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg, RoundCorners index, const style::color *shadow, RectParts parts) { + void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, style::color bg, RoundCorners index, const style::color *shadow, RectParts parts) { roundRect(p, x, y, w, h, bg, ::corners[index], shadow, parts); } - void roundShadow(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &shadow, RoundCorners index, RectParts parts) { + void roundShadow(Painter &p, int32 x, int32 y, int32 w, int32 h, style::color shadow, RoundCorners index, RectParts parts) { auto &corner = ::corners[index]; auto cornerWidth = corner.p[0]->width() / cIntRetinaFactor(); auto cornerHeight = corner.p[0]->height() / cIntRetinaFactor(); @@ -2852,7 +2852,7 @@ namespace { } } - void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg, ImageRoundRadius radius, RectParts parts) { + void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, style::color bg, ImageRoundRadius radius, RectParts parts) { auto colorKey = ((uint32(bg->c.alpha()) & 0xFF) << 24) | ((uint32(bg->c.red()) & 0xFF) << 16) | ((uint32(bg->c.green()) & 0xFF) << 8) | ((uint32(bg->c.blue()) & 0xFF) << 24); auto i = cornersMap.find(colorKey); if (i == cornersMap.cend()) { diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index bb8bb0fac..fdd9d7b85 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -307,16 +307,16 @@ namespace App { void complexLocationRect(Painter &p, QRect rect, ImageRoundRadius radius, ImageRoundCorners corners); QImage **cornersMask(ImageRoundRadius radius); - void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg, RoundCorners index, const style::color *shadow = nullptr, RectParts parts = RectPart::Full); - inline void roundRect(Painter &p, const QRect &rect, const style::color &bg, RoundCorners index, const style::color *shadow = nullptr, RectParts parts = RectPart::Full) { + void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, style::color bg, RoundCorners index, const style::color *shadow = nullptr, RectParts parts = RectPart::Full); + inline void roundRect(Painter &p, const QRect &rect, style::color bg, RoundCorners index, const style::color *shadow = nullptr, RectParts parts = RectPart::Full) { return roundRect(p, rect.x(), rect.y(), rect.width(), rect.height(), bg, index, shadow, parts); } - void roundShadow(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &shadow, RoundCorners index, RectParts parts = RectPart::Full); - inline void roundShadow(Painter &p, const QRect &rect, const style::color &shadow, RoundCorners index, RectParts parts = RectPart::Full) { + void roundShadow(Painter &p, int32 x, int32 y, int32 w, int32 h, style::color shadow, RoundCorners index, RectParts parts = RectPart::Full); + inline void roundShadow(Painter &p, const QRect &rect, style::color shadow, RoundCorners index, RectParts parts = RectPart::Full) { return roundShadow(p, rect.x(), rect.y(), rect.width(), rect.height(), shadow, index, parts); } - void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg, ImageRoundRadius radius, RectParts parts = RectPart::Full); - inline void roundRect(Painter &p, const QRect &rect, const style::color &bg, ImageRoundRadius radius, RectParts parts = RectPart::Full) { + void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, style::color bg, ImageRoundRadius radius, RectParts parts = RectPart::Full); + inline void roundRect(Painter &p, const QRect &rect, style::color bg, ImageRoundRadius radius, RectParts parts = RectPart::Full) { return roundRect(p, rect.x(), rect.y(), rect.width(), rect.height(), bg, radius, parts); } diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 698842594..d345ad6c6 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -38,6 +38,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "media/player/media_player_instance.h" #include "window/notifications_manager.h" #include "history/history_location_manager.h" +#include "core/task_queue.h" namespace { @@ -364,6 +365,10 @@ void Application::closeApplication() { #endif // !TDESKTOP_DISABLE_AUTOUPDATE } +void Application::onMainThreadTask() { + base::TaskQueue::ProcessMainTasks(); +} + #ifndef TDESKTOP_DISABLE_AUTOUPDATE void Application::updateCheck() { startUpdateCheck(false); diff --git a/Telegram/SourceFiles/application.h b/Telegram/SourceFiles/application.h index 6dd3b6e5c..c37dfe0f1 100644 --- a/Telegram/SourceFiles/application.h +++ b/Telegram/SourceFiles/application.h @@ -48,6 +48,8 @@ public slots: void startApplication(); // will be done in exec() void closeApplication(); // will be done in aboutToQuit() + void onMainThreadTask(); + private: typedef QPair LocalClient; typedef QList LocalClients; diff --git a/Telegram/SourceFiles/boxes/aboutbox.cpp b/Telegram/SourceFiles/boxes/aboutbox.cpp index 1c59b885f..f8c000ecf 100644 --- a/Telegram/SourceFiles/boxes/aboutbox.cpp +++ b/Telegram/SourceFiles/boxes/aboutbox.cpp @@ -34,9 +34,9 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org AboutBox::AboutBox(QWidget *parent) : _version(this, lng_about_version(lt_version, QString::fromLatin1(AppVersionStr.c_str()) + (cAlphaVersion() ? " alpha" : "") + (cBetaVersion() ? qsl(" beta %1").arg(cBetaVersion()) : QString())), st::aboutVersionLink) -, _text1(this, lang(lng_about_text_1), Ui::FlatLabel::InitType::Rich, st::aboutLabel, st::aboutTextStyle) -, _text2(this, lang(lng_about_text_2), Ui::FlatLabel::InitType::Rich, st::aboutLabel, st::aboutTextStyle) -, _text3(this, st::aboutLabel, st::aboutTextStyle) { +, _text1(this, lang(lng_about_text_1), Ui::FlatLabel::InitType::Rich, st::aboutLabel) +, _text2(this, lang(lng_about_text_2), Ui::FlatLabel::InitType::Rich, st::aboutLabel) +, _text3(this, st::aboutLabel) { } void AboutBox::prepare() { diff --git a/Telegram/SourceFiles/boxes/addcontactbox.cpp b/Telegram/SourceFiles/boxes/addcontactbox.cpp index 5e4b7e3d5..037a5e19d 100644 --- a/Telegram/SourceFiles/boxes/addcontactbox.cpp +++ b/Telegram/SourceFiles/boxes/addcontactbox.cpp @@ -427,8 +427,8 @@ SetupChannelBox::SetupChannelBox(QWidget*, ChannelData *channel, bool existing) , _public(this, qsl("channel_privacy"), 0, lang(channel->isMegagroup() ? lng_create_public_group_title : lng_create_public_channel_title), true, st::defaultBoxCheckbox) , _private(this, qsl("channel_privacy"), 1, lang(channel->isMegagroup() ? lng_create_private_group_title : lng_create_private_channel_title), false, st::defaultBoxCheckbox) , _aboutPublicWidth(width() - st::boxPadding.left() - st::boxButtonPadding.right() - st::newGroupPadding.left() - st::defaultBoxCheckbox.textPosition.x()) -, _aboutPublic(st::normalFont, lang(channel->isMegagroup() ? lng_create_public_group_about : lng_create_public_channel_about), _defaultOptions, _aboutPublicWidth) -, _aboutPrivate(st::normalFont, lang(channel->isMegagroup() ? lng_create_private_group_about : lng_create_private_channel_about), _defaultOptions, _aboutPublicWidth) +, _aboutPublic(st::defaultTextStyle, lang(channel->isMegagroup() ? lng_create_public_group_about : lng_create_public_channel_about), _defaultOptions, _aboutPublicWidth) +, _aboutPrivate(st::defaultTextStyle, lang(channel->isMegagroup() ? lng_create_private_group_about : lng_create_private_channel_about), _defaultOptions, _aboutPublicWidth) , _link(this, st::setupChannelLink, QString(), channel->username, true) { } @@ -1219,9 +1219,9 @@ void RevokePublicLinkBox::paintChat(Painter &p, const ChatRow &row, bool selecte p.drawTextRight(st::contactsPadding.right() + st::contactsCheckPosition.x(), st::contactsPadding.top() + (st::contactsPhotoSize - st::normalFont->height) / 2, width(), lang(lng_channels_too_much_public_revoke), _revokeWidth); p.setPen(st::contactsStatusFg); - textstyleSet(&st::revokePublicLinkStatusStyle); + p.setTextPalette(st::revokePublicLinkStatusPalette); row.status.drawLeftElided(p, namex, st::contactsPadding.top() + st::contactsStatusTop, namew, width()); - textstyleRestore(); + p.restoreTextPalette(); } void RevokePublicLinkBox::getPublicDone(const MTPmessages_Chats &result) { @@ -1232,10 +1232,8 @@ void RevokePublicLinkBox::getPublicDone(const MTPmessages_Chats &result) { ChatRow row; row.peer = peer; - row.name.setText(st::contactsNameFont, peer->name, _textNameOptions); - textstyleSet(&st::revokePublicLinkStatusStyle); - row.status.setText(st::normalFont, qsl("telegram.me/") + textcmdLink(1, peer->userName()), _textDlgOptions); - textstyleRestore(); + row.name.setText(st::contactsNameStyle, peer->name, _textNameOptions); + row.status.setText(st::defaultTextStyle, qsl("telegram.me/") + textcmdLink(1, peer->userName()), _textDlgOptions); _rows.push_back(std_::move(row)); } } diff --git a/Telegram/SourceFiles/boxes/backgroundbox.cpp b/Telegram/SourceFiles/boxes/backgroundbox.cpp index 00811a506..24c3a5d40 100644 --- a/Telegram/SourceFiles/boxes/backgroundbox.cpp +++ b/Telegram/SourceFiles/boxes/backgroundbox.cpp @@ -67,8 +67,7 @@ BackgroundBox::Inner::Inner(QWidget *parent) : TWidget(parent) subscribe(FileDownload::ImageLoaded(), [this] { update(); }); using Update = Window::Theme::BackgroundUpdate; subscribe(Window::Theme::Background(), [this](const Update &update) { - if (update.type == Update::Type::TestingTheme - || update.type == Update::Type::RevertingTheme) { + if (update.paletteChanged()) { _check->invalidateCache(); } }); diff --git a/Telegram/SourceFiles/boxes/boxes.style b/Telegram/SourceFiles/boxes/boxes.style index 18ccce2e8..80f83f51e 100644 --- a/Telegram/SourceFiles/boxes/boxes.style +++ b/Telegram/SourceFiles/boxes/boxes.style @@ -30,19 +30,9 @@ boxButtonFont: font(boxFontSize semibold); defaultBoxButton: RoundButton(defaultLightButton) { width: -24px; height: 36px; - padding: margins(0px, 0px, 0px, 0px); - - textTop: 8px; - font: boxButtonFont; - - ripple: RippleAnimation(defaultRippleAnimation) { - color: lightButtonBgRipple; - } } -cancelBoxButton: defaultBoxButton; - attentionBoxButton: RoundButton(defaultBoxButton) { textFg: attentionButtonFg; textFgOver: attentionButtonFgOver; @@ -118,8 +108,12 @@ boxMediumSkip: 20px; boxButtonPadding: margins(8px, 12px, 13px, 12px); boxLayerButtonPadding: margins(8px, 8px, 8px, 8px); boxLabel: FlatLabel(defaultFlatLabel) { - font: font(boxFontSize); align: align(topleft); + style: TextStyle(defaultTextStyle) { + font: font(boxFontSize); + linkFont: font(boxFontSize); + linkFontOver: font(boxFontSize underline); + } } countryRowHeight: 36px; @@ -153,14 +147,17 @@ cropSkip: 13px; cropMinSize: 20px; confirmInviteTitle: FlatLabel(defaultFlatLabel) { - font: font(16px semibold); align: align(center); width: 320px; maxHeight: 24px; textFg: windowBoldFg; + style: TextStyle(defaultTextStyle) { + font: font(16px semibold); + linkFont: font(16px semibold); + linkFontOver: font(16px semibold underline); + } } -confirmInviteStatus: FlatLabel(defaultFlatLabel) { - font: font(boxFontSize); +confirmInviteStatus: FlatLabel(boxLabel) { align: align(center); width: 320px; maxHeight: 20px; @@ -174,7 +171,6 @@ confirmInviteUserHeight: 84px; confirmInviteUserPhotoSize: 56px; confirmInviteUserPhotoTop: 166px; confirmInviteUserName: FlatLabel(defaultFlatLabel) { - font: normalFont; align: align(center); width: 66px; maxHeight: 20px; @@ -187,16 +183,12 @@ confirmPhoneAboutLabel: FlatLabel(defaultFlatLabel) { confirmPhoneCodeField: InputField(defaultInputField) { } -revokePublicLinkStatusStyle: TextStyle(defaultTextStyle) { +revokePublicLinkStatusPalette: TextPalette(defaultTextPalette) { linkFg: contactsStatusFgOnline; - linkFgDown: contactsStatusFgOnline; - linkFlagsOver: font(fsize); } aboutRevokePublicLabel: FlatLabel(defaultFlatLabel) { - font: normalFont; align: align(topleft); width: 320px; - textFg: windowFg; } contactUserIcon: icon {{ "add_contact_user", menuIconFg }}; @@ -228,7 +220,11 @@ contactPhoneSkip: 30px; contactsPhotoSize: 42px; contactsPadding: margins(16px, 7px, 16px, 7px); contactsNameTop: 2px; -contactsNameFont: semiboldFont; +contactsNameStyle: TextStyle(defaultTextStyle) { + font: semiboldFont; + linkFont: semiboldFont; + linkFontOver: semiboldFont; +} contactsStatusTop: 23px; contactsStatusFont: font(fsize); contactsCheckPosition: point(8px, 16px); @@ -255,7 +251,7 @@ contactsMultiSelect: MultiSelect { padding: margins(6px, 7px, 12px, 0px); maxWidth: 128px; height: 32px; - font: normalFont; + style: defaultTextStyle; textBg: contactsBgOver; textFg: windowFg; textActiveBg: activeButtonBg; @@ -345,7 +341,11 @@ sharePhotoCheckbox: RoundImageCheckbox(contactsPhotoCheckbox) { imageRadius: 28px; imageSmallRadius: 24px; } -shareNameFont: font(11px); +shareNameStyle: TextStyle(defaultTextStyle) { + font: font(11px); + linkFont: font(11px); + linkFontOver: font(11px); +} shareNameFg: windowFg; shareNameActiveFg: windowActiveTextFg; shareNameTop: 6px; @@ -460,12 +460,11 @@ aboutVersionLink: LinkButton(defaultLinkButton) { aboutTextTop: 34px; aboutSkip: 14px; aboutLabel: FlatLabel(defaultFlatLabel) { - font: normalFont; width: 330px; align: align(topleft); -} -aboutTextStyle: TextStyle(defaultTextStyle) { - lineHeight: 22px; + style: TextStyle(defaultTextStyle) { + lineHeight: 22px; + } } autoDownloadTopDelta: 10px; @@ -513,10 +512,16 @@ backgroundScroll: ScrollArea(boxLayerScroll) { deltab: 10px; } +passcodeTextStyle: TextStyle(defaultTextStyle) { + lineHeight: 20px; +} + usernamePadding: margins(23px, 6px, 21px, 12px); usernameSkip: 49px; -usernameTextStyle: TextStyle(defaultTextStyle) { - lineHeight: 20px; +usernameTextStyle: TextStyle(passcodeTextStyle) { + font: boxTextFont; + linkFont: boxTextFont; + linkFontOver: font(boxFontSize underline); } usernameDefaultFg: windowSubTextFg; diff --git a/Telegram/SourceFiles/boxes/confirmbox.cpp b/Telegram/SourceFiles/boxes/confirmbox.cpp index 646591bc8..f11226cf3 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.cpp +++ b/Telegram/SourceFiles/boxes/confirmbox.cpp @@ -102,18 +102,17 @@ ConfirmBox::ConfirmBox(const InformBoxTag &, const QString &text, const QString } base::lambda ConfirmBox::generateInformCallback(const base::lambda_copy &closedCallback) { - return base::lambda_guarded(this, [this, closedCallback] { + auto callback = closedCallback; + return base::lambda_guarded(this, [this, callback] { closeBox(); - if (closedCallback) { - closedCallback(); + if (callback) { + callback(); } }); } void ConfirmBox::init(const QString &text) { - textstyleSet(&st::boxTextStyle); - _text.setText(st::boxTextFont, text, _informative ? _confirmBoxTextOptions : _textPlainOptions); - textstyleRestore(); + _text.setText(st::boxTextStyle, text, _informative ? _confirmBoxTextOptions : _textPlainOptions); } void ConfirmBox::prepare() { @@ -125,11 +124,9 @@ void ConfirmBox::prepare() { } void ConfirmBox::textUpdated() { - textstyleSet(&st::boxTextStyle); _textWidth = st::boxWidth - st::boxPadding.left() - st::boxButtonPadding.right(); _textHeight = qMin(_text.countHeight(_textWidth), 16 * int(st::boxTextStyle.lineHeight)); setDimensions(st::boxWidth, st::boxPadding.top() + _textHeight + st::boxPadding.bottom()); - textstyleRestore(); setMouseTracking(_text.hasLinks()); } @@ -192,9 +189,7 @@ void ConfirmBox::updateLink() { void ConfirmBox::updateHover() { QPoint m(mapFromGlobal(_lastMousePos)); - textstyleSet(&st::boxTextStyle); auto state = _text.getStateLeft(m.x() - st::boxPadding.left(), m.y() - st::boxPadding.top(), _textWidth, width()); - textstyleRestore(); ClickHandler::setActive(state.link, this); } @@ -214,9 +209,7 @@ void ConfirmBox::paintEvent(QPaintEvent *e) { // draw box title / text p.setPen(st::boxTextFg); - textstyleSet(&st::boxTextStyle); _text.drawLeftElided(p, st::boxPadding.left(), st::boxPadding.top(), _textWidth, width(), 16, style::al_left); - textstyleRestore(); } InformBox::InformBox(QWidget*, const QString &text, base::lambda_copy &&closedCallback) : ConfirmBox(ConfirmBox::InformBoxTag(), text, lang(lng_box_ok), std_::move(closedCallback)) { @@ -226,7 +219,7 @@ InformBox::InformBox(QWidget*, const QString &text, const QString &doneText, bas } MaxInviteBox::MaxInviteBox(QWidget*, const QString &link) -: _text(st::boxTextFont, lng_participant_invite_sorry(lt_count, Global::ChatSizeMax()), _confirmBoxTextOptions, st::boxWidth - st::boxPadding.left() - st::boxButtonPadding.right()) +: _text(st::boxTextStyle, lng_participant_invite_sorry(lt_count, Global::ChatSizeMax()), _confirmBoxTextOptions, st::boxWidth - st::boxPadding.left() - st::boxButtonPadding.right()) , _link(link) { } @@ -309,13 +302,11 @@ void ConvertToSupergroupBox::prepare() { addButton(lang(lng_profile_convert_confirm), [this] { convertToSupergroup(); }); addButton(lang(lng_cancel), [this] { closeBox(); }); - textstyleSet(&st::boxTextStyle); - _text.setText(st::boxTextFont, text.join('\n'), _confirmBoxTextOptions); - _note.setText(st::boxTextFont, lng_profile_convert_warning(lt_bold_start, textcmdStartSemibold(), lt_bold_end, textcmdStopSemibold()), _confirmBoxTextOptions); + _text.setText(st::boxTextStyle, text.join('\n'), _confirmBoxTextOptions); + _note.setText(st::boxTextStyle, lng_profile_convert_warning(lt_bold_start, textcmdStartSemibold(), lt_bold_end, textcmdStopSemibold()), _confirmBoxTextOptions); _textWidth = st::boxWideWidth - st::boxPadding.left() - st::boxButtonPadding.right(); _textHeight = _text.countHeight(_textWidth); setDimensions(st::boxWideWidth, _textHeight + st::boxPadding.bottom() + _note.countHeight(_textWidth)); - textstyleRestore(); } void ConvertToSupergroupBox::convertToSupergroup() { @@ -368,10 +359,8 @@ void ConvertToSupergroupBox::paintEvent(QPaintEvent *e) { // draw box title / text p.setPen(st::boxTextFg); - textstyleSet(&st::boxTextStyle); _text.drawLeft(p, st::boxPadding.left(), 0, _textWidth, width()); _note.drawLeft(p, st::boxPadding.left(), _textHeight + st::boxPadding.bottom(), _textWidth, width()); - textstyleRestore(); } PinMessageBox::PinMessageBox(QWidget*, ChannelData *channel, MsgId msgId) diff --git a/Telegram/SourceFiles/boxes/contactsbox.cpp b/Telegram/SourceFiles/boxes/contactsbox.cpp index ce20acadb..12b908698 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.cpp +++ b/Telegram/SourceFiles/boxes/contactsbox.cpp @@ -562,8 +562,8 @@ ContactsBox::Inner::Inner(QWidget *parent, ChatData *chat, MembersFilter members , _membersFilter(membersFilter) , _allAdmins(this, lang(lng_chat_all_members_admins), !_chat->adminsEnabled(), st::defaultBoxCheckbox) , _aboutWidth(st::boxWideWidth - st::contactsPadding.left() - st::contactsPadding.right()) -, _aboutAllAdmins(st::normalFont, lang(lng_chat_about_all_admins), _defaultOptions, _aboutWidth) -, _aboutAdmins(st::normalFont, lang(lng_chat_about_admins), _defaultOptions, _aboutWidth) +, _aboutAllAdmins(st::defaultTextStyle, lang(lng_chat_about_all_admins), _defaultOptions, _aboutWidth) +, _aboutAdmins(st::defaultTextStyle, lang(lng_chat_about_admins), _defaultOptions, _aboutWidth) , _customList((membersFilter == MembersFilter::Recent) ? std_::unique_ptr() : std_::make_unique(Dialogs::SortMode::Add)) , _contacts((membersFilter == MembersFilter::Recent) ? App::main()->contactsList() : _customList.get()) , _addContactLnk(this, lang(lng_add_contact_button)) { @@ -640,8 +640,7 @@ void ContactsBox::Inner::init() { using Update = Window::Theme::BackgroundUpdate; subscribe(Window::Theme::Background(), [this](const Update &update) { - if (update.type == Update::Type::TestingTheme - || update.type == Update::Type::RevertingTheme) { + if (update.paletteChanged()) { invalidateCache(); } }); @@ -897,7 +896,7 @@ ContactsBox::Inner::ContactData *ContactsBox::Inner::contactData(Dialogs::Row *r if (usingMultiSelect() && _checkedContacts.contains(peer)) { data->checkbox->setChecked(true, Ui::RoundImageCheckbox::SetStyle::Fast); } - data->name.setText(st::contactsNameFont, peer->name, _textNameOptions); + data->name.setText(st::contactsNameStyle, peer->name, _textNameOptions); if (peer->isUser()) { data->statusText = App::onlineText(peer->asUser(), _time); data->statusHasOnlineColor = App::onlineColorUse(peer->asUser(), _time); @@ -1746,7 +1745,7 @@ void ContactsBox::Inner::peopleReceived(const QString &query, const QVectorcheckbox->setChecked(true, Ui::RoundImageCheckbox::SetStyle::Fast); } - data->name.setText(st::contactsNameFont, peer->name, _textNameOptions); + data->name.setText(st::contactsNameStyle, peer->name, _textNameOptions); data->statusText = '@' + peer->userName(); _byUsernameFiltered.push_back(peer); diff --git a/Telegram/SourceFiles/boxes/members_box.cpp b/Telegram/SourceFiles/boxes/members_box.cpp index 1911053ee..e3a6054a6 100644 --- a/Telegram/SourceFiles/boxes/members_box.cpp +++ b/Telegram/SourceFiles/boxes/members_box.cpp @@ -374,7 +374,7 @@ void MembersBox::Inner::refresh() { resize(width(), st::membersMarginTop + st::noContactsHeight + st::membersMarginBottom); _aboutHeight = 0; } else { - _about.setText(st::boxTextFont, lng_channel_only_last_shown(lt_count, _rows.size())); + _about.setText(st::boxTextStyle, lng_channel_only_last_shown(lt_count, _rows.size())); _aboutHeight = st::membersAboutLimitPadding.top() + _about.countHeight(_aboutWidth) + st::membersAboutLimitPadding.bottom(); if (_filter != MembersFilter::Recent || (_rows.size() >= _channel->membersCount() && _rows.size() < Global::ChatSizeMax())) { _aboutHeight = 0; @@ -420,7 +420,7 @@ MembersBox::Inner::MemberData *MembersBox::Inner::data(int32 index) { return result; } MemberData *result = _datas[index] = new MemberData(); - result->name.setText(st::contactsNameFont, _rows[index]->name, _textNameOptions); + result->name.setText(st::contactsNameStyle, _rows[index]->name, _textNameOptions); int32 t = unixtime(); result->online = App::onlineText(_rows[index], t);// lng_mediaview_date_time(lt_date, _dates[index].date().toString(qsl("dd.MM.yy")), lt_time, _dates[index].time().toString(cTimeFormat())); result->onlineColor = App::onlineColorUse(_rows[index], t); @@ -496,7 +496,7 @@ void MembersBox::Inner::onPeerNameChanged(PeerData *peer, const PeerData::Names for (int32 i = 0, l = _rows.size(); i < l; ++i) { if (_rows.at(i) == peer) { if (_datas.at(i)) { - _datas.at(i)->name.setText(st::contactsNameFont, peer->name, _textNameOptions); + _datas.at(i)->name.setText(st::contactsNameStyle, peer->name, _textNameOptions); update(0, st::membersMarginTop + i * _rowHeight, width(), _rowHeight); } else { break; diff --git a/Telegram/SourceFiles/boxes/passcodebox.cpp b/Telegram/SourceFiles/boxes/passcodebox.cpp index 123107e22..0773a8979 100644 --- a/Telegram/SourceFiles/boxes/passcodebox.cpp +++ b/Telegram/SourceFiles/boxes/passcodebox.cpp @@ -53,19 +53,15 @@ PasscodeBox::PasscodeBox(QWidget*, const QByteArray &newSalt, const QByteArray & , _passwordHint(this, st::defaultInputField, lang(curSalt.isEmpty() ? lng_cloud_password_hint : lng_cloud_password_change_hint)) , _recoverEmail(this, st::defaultInputField, lang(lng_cloud_password_email)) , _recover(this, lang(lng_signin_recover)) { - textstyleSet(&st::usernameTextStyle); - if (!hint.isEmpty()) _hintText.setText(st::normalFont, lng_signin_hint(lt_password_hint, hint)); - textstyleRestore(); + if (!hint.isEmpty()) _hintText.setText(st::passcodeTextStyle, lng_signin_hint(lt_password_hint, hint)); } void PasscodeBox::prepare() { addButton(lang(_turningOff ? lng_passcode_remove_button : lng_settings_save), [this] { onSave(); }); addButton(lang(lng_cancel), [this] { closeBox(); }); - textstyleSet(&st::usernameTextStyle); - _about.setRichText(st::normalFont, lang(_cloudPwd ? lng_cloud_password_about : lng_passcode_about)); + _about.setRichText(st::passcodeTextStyle, lang(_cloudPwd ? lng_cloud_password_about : lng_passcode_about)); _aboutHeight = _about.countHeight(st::boxWidth - st::boxPadding.left() * 1.5); - textstyleRestore(); if (_turningOff) { _oldPasscode->show(); setTitle(lang(_cloudPwd ? lng_cloud_password_remove : lng_passcode_remove)); @@ -146,8 +142,6 @@ void PasscodeBox::paintEvent(QPaintEvent *e) { Painter p(this); - textstyleSet(&st::usernameTextStyle); - int32 w = st::boxWidth - st::boxPadding.left() * 1.5; int32 abouty = (_passwordHint->isHidden() ? (_reenterPasscode->isHidden() ? (_oldPasscode->y() + (_hasRecovery && !_hintText.isEmpty() ? st::passcodeTextLine : 0)) : _reenterPasscode->y()) + st::passcodeSkip : _passwordHint->y() + st::passcodeLittleSkip) + _oldPasscode->height() + st::passcodePadding.bottom(); p.setPen(st::boxTextFg); @@ -171,8 +165,6 @@ void PasscodeBox::paintEvent(QPaintEvent *e) { p.setPen(st::boxTextFgError); p.drawText(QRect(st::boxPadding.left(), _recoverEmail->y() + _recoverEmail->height(), w, st::passcodeTextLine), _emailError, style::al_left); } - - textstyleRestore(); } void PasscodeBox::resizeEvent(QResizeEvent *e) { diff --git a/Telegram/SourceFiles/boxes/send_files_box.cpp b/Telegram/SourceFiles/boxes/send_files_box.cpp index 81753b930..a12e23b28 100644 --- a/Telegram/SourceFiles/boxes/send_files_box.cpp +++ b/Telegram/SourceFiles/boxes/send_files_box.cpp @@ -102,14 +102,14 @@ SendFilesBox::SendFilesBox(QWidget*, const QString &filepath, QImage image, Comp if (_preview.isNull()) { if (filepath.isEmpty()) { auto filename = filedialogDefaultName(qsl("image"), qsl(".png"), QString(), true); - _nameText.setText(st::semiboldFont, filename, _textNameOptions); + _nameText.setText(st::semiboldTextStyle, filename, _textNameOptions); _statusText = qsl("%1x%2").arg(_image.width()).arg(_image.height()); _statusWidth = qMax(_nameText.maxWidth(), st::normalFont->width(_statusText)); _fileIsImage = true; } else { auto fileinfo = QFileInfo(filepath); auto filename = fileinfo.fileName(); - _nameText.setText(st::semiboldFont, filename, _textNameOptions); + _nameText.setText(st::semiboldTextStyle, filename, _textNameOptions); _statusText = formatSizeText(fileinfo.size()); _statusWidth = qMax(_nameText.maxWidth(), st::normalFont->width(_statusText)); _fileIsImage = fileIsImage(filename, mimeTypeForFile(fileinfo).name()); @@ -127,7 +127,7 @@ SendFilesBox::SendFilesBox(QWidget*, const QString &phone, const QString &firstn : _contactPhone(phone) , _contactFirstName(firstname) , _contactLastName(lastname) { - _nameText.setText(st::semiboldFont, lng_full_name(lt_first_name, _contactFirstName, lt_last_name, _contactLastName), _textNameOptions); + _nameText.setText(st::semiboldTextStyle, lng_full_name(lt_first_name, _contactFirstName, lt_last_name, _contactLastName), _textNameOptions); _statusText = _contactPhone; _statusWidth = qMax(_nameText.maxWidth(), st::normalFont->width(_statusText)); } @@ -400,9 +400,9 @@ EditCaptionBox::EditCaptionBox(QWidget*, HistoryItem *msg) if (doc) { if (doc->voice()) { - _name.setText(st::semiboldFont, lang(lng_media_audio), _textNameOptions); + _name.setText(st::semiboldTextStyle, lang(lng_media_audio), _textNameOptions); } else { - _name.setText(st::semiboldFont, documentName(doc), _textNameOptions); + _name.setText(st::semiboldTextStyle, documentName(doc), _textNameOptions); } _status = formatSizeText(doc->size); _statusw = qMax(_name.maxWidth(), st::normalFont->width(_status)); diff --git a/Telegram/SourceFiles/boxes/sharebox.cpp b/Telegram/SourceFiles/boxes/sharebox.cpp index 4a7f9514a..a44b5e970 100644 --- a/Telegram/SourceFiles/boxes/sharebox.cpp +++ b/Telegram/SourceFiles/boxes/sharebox.cpp @@ -298,8 +298,7 @@ ShareBox::Inner::Inner(QWidget *parent, ShareBox::FilterCallback &&filterCallbac using Update = Window::Theme::BackgroundUpdate; subscribe(Window::Theme::Background(), [this](const Update &update) { - if (update.type == Update::Type::TestingTheme - || update.type == Update::Type::RevertingTheme) { + if (update.paletteChanged()) { invalidateCache(); } }); @@ -362,7 +361,7 @@ void ShareBox::Inner::updateChat(PeerData *peer) { } void ShareBox::Inner::updateChatName(Chat *chat, PeerData *peer) { - chat->name.setText(st::shareNameFont, peer->name, _textNameOptions); + chat->name.setText(st::shareNameStyle, peer->name, _textNameOptions); } void ShareBox::Inner::repaintChatAtIndex(int index) { @@ -600,7 +599,7 @@ void ShareBox::Inner::updateUpon(const QPoint &pos) { auto left = _rowsLeft + qFloor(column * _rowWidthReal) + st::shareColumnSkip / 2; auto top = _rowsTop + row * _rowHeight + st::sharePhotoTop; auto xupon = (x >= left) && (x < left + (_rowWidth - st::shareColumnSkip)); - auto yupon = (y >= top) && (y < top + st::sharePhotoCheckbox.imageRadius * 2 + st::shareNameTop + st::shareNameFont->height * 2); + auto yupon = (y >= top) && (y < top + st::sharePhotoCheckbox.imageRadius * 2 + st::shareNameTop + st::shareNameStyle.font->height * 2); auto upon = (xupon && yupon) ? (row * _columnCount + column) : -1; if (upon >= displayedChatsCount()) { upon = -1; diff --git a/Telegram/SourceFiles/boxes/stickers_box.cpp b/Telegram/SourceFiles/boxes/stickers_box.cpp index 5ff8efa88..913bd7064 100644 --- a/Telegram/SourceFiles/boxes/stickers_box.cpp +++ b/Telegram/SourceFiles/boxes/stickers_box.cpp @@ -148,7 +148,7 @@ StickersBox::StickersBox(QWidget*, const Stickers::Order &archivedIds) : _section(Section::ArchivedPart) , _archived(0, this, archivedIds) , _aboutWidth(st::boxWideWidth - 2 * st::stickersReorderPadding.top()) -, _about(st::boxTextFont, lang(lng_stickers_packs_archived), _defaultOptions, _aboutWidth) { +, _about(st::boxTextStyle, lang(lng_stickers_packs_archived), _defaultOptions, _aboutWidth) { } void StickersBox::getArchivedDone(uint64 offsetId, const MTPmessages_ArchivedStickers &result) { @@ -691,7 +691,7 @@ void StickersBox::Inner::paintRow(Painter &p, int index, TimeMs ms) { int statusx = namex; int statusy = st::contactsPadding.top() + st::contactsStatusTop; - p.setFont(st::contactsNameFont); + p.setFont(st::contactsNameStyle.font); p.setPen(st::contactsNameFg); p.drawTextLeft(namex, namey, width(), s->title, s->titleWidth); @@ -1225,10 +1225,10 @@ int StickersBox::Inner::fillSetCount(const Stickers::Set &set) const { QString StickersBox::Inner::fillSetTitle(const Stickers::Set &set, int maxNameWidth, int *outTitleWidth) const { auto result = set.title; - int titleWidth = st::contactsNameFont->width(result); + int titleWidth = st::contactsNameStyle.font->width(result); if (titleWidth > maxNameWidth) { - result = st::contactsNameFont->elided(result, maxNameWidth); - titleWidth = st::contactsNameFont->width(result); + result = st::contactsNameStyle.font->elided(result, maxNameWidth); + titleWidth = st::contactsNameStyle.font->width(result); } if (outTitleWidth) { *outTitleWidth = titleWidth; diff --git a/Telegram/SourceFiles/boxes/usernamebox.cpp b/Telegram/SourceFiles/boxes/usernamebox.cpp index b91250367..757a8c167 100644 --- a/Telegram/SourceFiles/boxes/usernamebox.cpp +++ b/Telegram/SourceFiles/boxes/usernamebox.cpp @@ -49,10 +49,8 @@ void UsernameBox::prepare() { connect(_username, SIGNAL(submitted(bool)), this, SLOT(onSave())); connect(_link, SIGNAL(clicked()), this, SLOT(onLinkClick())); - textstyleSet(&st::usernameTextStyle); - _about.setRichText(st::boxTextFont, lang(lng_username_about)); + _about.setRichText(st::usernameTextStyle, lang(lng_username_about)); setDimensions(st::boxWidth, st::usernamePadding.top() + _username->height() + st::usernameSkip + _about.countHeight(st::boxWidth - st::usernamePadding.left()) + 3 * st::usernameTextStyle.lineHeight + st::usernamePadding.bottom()); - textstyleRestore(); _checkTimer->setSingleShot(true); connect(_checkTimer, SIGNAL(timeout()), this, SLOT(onCheck())); @@ -81,10 +79,8 @@ void UsernameBox::paintEvent(QPaintEvent *e) { p.drawTextLeft(st::usernamePadding.left(), _username->y() + _username->height() + ((st::usernameSkip - st::boxTextFont->height) / 2), width(), lang(lng_username_choose)); } p.setPen(st::boxTextFg); - textstyleSet(&st::usernameTextStyle); int32 availw = st::boxWidth - st::usernamePadding.left(), h = _about.countHeight(availw); _about.drawLeft(p, st::usernamePadding.left(), _username->y() + _username->height() + st::usernameSkip, availw, width()); - textstyleRestore(); int32 linky = _username->y() + _username->height() + st::usernameSkip + h + st::usernameTextStyle.lineHeight + ((st::usernameTextStyle.lineHeight - st::boxTextFont->height) / 2); if (_link->isHidden()) { @@ -102,9 +98,7 @@ void UsernameBox::resizeEvent(QResizeEvent *e) { _username->resize(width() - st::usernamePadding.left() - st::usernamePadding.right(), _username->height()); _username->moveToLeft(st::usernamePadding.left(), st::usernamePadding.top()); - textstyleSet(&st::usernameTextStyle); int32 availw = st::boxWidth - st::usernamePadding.left(), h = _about.countHeight(availw); - textstyleRestore(); int32 linky = _username->y() + _username->height() + st::usernameSkip + h + st::usernameTextStyle.lineHeight + ((st::usernameTextStyle.lineHeight - st::boxTextFont->height) / 2); _link->moveToLeft(st::usernamePadding.left(), linky + st::usernameTextStyle.lineHeight + ((st::usernameTextStyle.lineHeight - st::boxTextFont->height) / 2)); } diff --git a/Telegram/SourceFiles/codegen/style/generator.cpp b/Telegram/SourceFiles/codegen/style/generator.cpp index 4568f6f70..40983ec08 100644 --- a/Telegram/SourceFiles/codegen/style/generator.cpp +++ b/Telegram/SourceFiles/codegen/style/generator.cpp @@ -326,13 +326,7 @@ QString Generator::typeToDefaultValue(structure::Type type) const { QString Generator::valueAssignmentCode(structure::Value value) const { auto copy = value.copyOf(); if (!copy.isEmpty()) { - auto result = "st::" + copy.back(); - - // Copy is disabled for colors. - if (value.type().tag == Tag::Color || value.type().tag == Tag::Struct) { - result += ".clone()"; - } - return result; + return "st::" + copy.back(); } switch (value.type().tag) { @@ -343,7 +337,14 @@ QString Generator::valueAssignmentCode(structure::Value value) const { case Tag::String: return QString("qsl(%1)").arg(stringToEncodedString(value.String())); case Tag::Color: { auto v(value.Color()); - return QString("{ %1, %2, %3, %4 }").arg(v.red).arg(v.green).arg(v.blue).arg(v.alpha); + if (v.red == v.green && v.red == v.blue && v.red == 0 && v.alpha == 255) { + return QString("st::windowFg"); + } else if (v.red == v.green && v.red == v.blue && v.red == 255 && v.alpha == 0) { + return QString("st::transparent"); + } else { + common::logError(common::kErrorInternal, "") << "bad color value"; + return QString(); + } } break; case Tag::Point: { auto v(value.Point()); @@ -449,9 +450,13 @@ public:\n\ \n\ // Created not inited, should be finalized before usage.\n\ void finalize();\n\ -\n"; +\n\ + int indexOfColor(color c) const;\n\ + color colorAtIndex(int index) const;\n\ +\n\ + inline const color &get_transparent() const { return _colors[0]; }; // special color\n"; - int indexInPalette = 0; + int indexInPalette = 1; if (!module_.enumVariables([this, &indexInPalette](const Variable &variable) -> bool { auto name = variable.name.back(); if (variable.value.type().tag != structure::TypeTag::Color) { @@ -459,7 +464,7 @@ public:\n\ } auto index = (indexInPalette++); - header_->stream() << "\tinline const color &" << name << "() const { return _colors[" << index << "]; };\n"; + header_->stream() << "\tinline const color &get_" << name << "() const { return _colors[" << index << "]; };\n"; return true; })) return false; @@ -468,7 +473,7 @@ public:\n\ \n\ palette &operator=(const palette &other) {\n\ auto wasReady = _ready;\n\ - for (int i = 0; i != " << count << "; ++i) {\n\ + for (int i = 0; i != kCount; ++i) {\n\ if (other._status[i] == Status::Loaded) {\n\ if (_status[i] == Status::Initial) {\n\ new (data(i)) internal::ColorData(*other.data(i));\n\ @@ -494,8 +499,10 @@ public:\n\ }\n\ \n\ private:\n\ + static constexpr auto kCount = " << count << ";\n\ +\n\ void clear() {\n\ - for (int i = 0; i != " << count << "; ++i) {\n\ + for (int i = 0; i != kCount; ++i) {\n\ if (_status[i] != Status::Initial) {\n\ data(i)->~ColorData();\n\ _status[i] = Status::Initial;\n\ @@ -540,15 +547,15 @@ private:\n\ Loaded,\n\ };\n\ \n\ - alignas(alignof(internal::ColorData)) char _data[sizeof(internal::ColorData) * " << count << "];\n\ + alignas(alignof(internal::ColorData)) char _data[sizeof(internal::ColorData) * kCount];\n\ \n\ - color _colors[" << count << "] = {\n"; + color _colors[kCount] = {\n"; for (int i = 0; i != count; ++i) { header_->stream() << "\t\tdata(" << i << "),\n"; } header_->stream() << "\ };\n\ - Status _status[" << count << "] = { Status::Initial };\n\ + Status _status[kCount] = { Status::Initial };\n\ bool _ready = false;\n\ \n\ };\n\ @@ -561,11 +568,10 @@ bool setColor(QLatin1String name, uchar r, uchar g, uchar b, uchar a);\n\ bool setColor(QLatin1String name, QLatin1String from);\n\ void apply(const palette &other);\n\ void reset();\n\ +int indexOfColor(color c);\n\ \n\ } // namespace main_palette\n"; - header_->newline(); - return true; } @@ -601,21 +607,8 @@ bool Generator::writeStructsDefinitions() { } bool result = module_.enumStructs([this](const Struct &value) -> bool { - QStringList fields; - for (auto field : value.fields) { - auto clone = field.name.back(); - if (field.type.tag == Tag::Color || field.type.tag == Tag::Struct) { - clone += ".clone()"; - } - fields.push_back(clone); - } header_->stream() << "\ -struct " << value.name.back() << " {\n\ - " << value.name.back() << " clone() const {\n\ - return { " << fields.join(", ") << " };\n\ - }\n"; - if (!fields.empty()) header_->newline(); - +struct " << value.name.back() << " {\n"; for (auto &field : value.fields) { auto type = typeToString(field.type); if (type.isEmpty()) { @@ -638,6 +631,9 @@ bool Generator::writeRefsDeclarations() { header_->pushNamespace("st"); + if (isPalette_) { + header_->stream() << "extern const style::color &transparent; // special color\n"; + } bool result = module_.enumVariables([this](const Variable &value) -> bool { auto name = value.name.back(); auto type = typeToString(value.value.type()); @@ -699,6 +695,9 @@ bool Generator::writeRefsDefinition() { return true; } + if (isPalette_) { + source_->stream() << "const style::color &transparent(_palette.get_transparent()); // special color\n"; + } bool result = module_.enumVariables([this](const Variable &variable) -> bool { auto name = variable.name.back(); auto type = typeToString(variable.value.type()); @@ -707,7 +706,7 @@ bool Generator::writeRefsDefinition() { } source_->stream() << "const " << type << " &" << name << "("; if (isPalette_) { - source_->stream() << "_palette." << name << "()"; + source_->stream() << "_palette.get_" << name << "()"; } else { source_->stream() << "_" << name; } @@ -719,13 +718,30 @@ bool Generator::writeRefsDefinition() { bool Generator::writeSetPaletteColor() { source_->newline(); - source_->stream() << "\ + source_->stream() << "\n\ +int palette::indexOfColor(style::color c) const {\n\ + auto start = data(0);\n\ + if (c._data >= start && c._data < start + kCount) {\n\ + return static_cast(c._data - start);\n\ + }\n\ + return -1;\n\ +}\n\ +\n\ +color palette::colorAtIndex(int index) const {\n\ + t_assert(_ready);\n\ + t_assert(index >= 0 && index < kCount);\n\ + return _colors[index];\n\ +}\n\ +\n\ void palette::finalize() {\n\ if (_ready) return;\n\ - _ready = true;\n\n"; + _ready = true;\n\ +\n\ + compute(0, -1, { 255, 255, 255, 0}); // special color\n"; - int indexInPalette = 0; + int indexInPalette = 1; QByteArray checksumString; + checksumString.append("&transparent:{ 255, 255, 255, 0 }"); bool result = module_.enumVariables([this, &indexInPalette, &checksumString](const Variable &variable) -> bool { auto name = variable.name.back(); auto index = indexInPalette++; @@ -735,8 +751,9 @@ void palette::finalize() {\n\ } auto color = variable.value.Color(); auto fallbackIndex = paletteIndices_.value(colorFallbackName(variable.value), -1); - source_->stream() << "\tcompute(" << index << ", " << fallbackIndex << ", {" << color.red << ", " << color.green << ", " << color.blue << ", " << color.alpha << "});\n"; - checksumString.append('&' + name + ':' + valueAssignmentCode(variable.value)); + auto assignment = QString("{ %1, %2, %3, %4 }").arg(color.red).arg(color.green).arg(color.blue).arg(color.alpha); + source_->stream() << "\tcompute(" << index << ", " << fallbackIndex << ", " << assignment << ");\n"; + checksumString.append('&' + name + ':' + assignment); return true; }); auto count = indexInPalette; @@ -888,6 +905,10 @@ void reset() {\n\ style::internal::resetIcons();\n\ }\n\ \n\ +int indexOfColor(color c) {\n\ + return _palette.indexOfColor(c);\n\ +}\n\ +\n\ } // namespace main_palette\n\ \n"; @@ -1226,8 +1247,12 @@ bool Generator::writeSampleTheme(const QString &filepath) { return false; } auto color = variable.value.Color(); - auto colorString = paletteColorValue(color); + //color.red = uchar(rand() % 256); + //color.green = uchar(rand() % 256); + //color.blue = uchar(rand() % 256); + //auto fallbackIndex = -1; auto fallbackIndex = paletteIndices_.value(colorFallbackName(variable.value), -1); + auto colorString = paletteColorValue(color); if (fallbackIndex >= 0) { auto fallbackVariable = module_.findVariableInModule(names[fallbackIndex], module_); if (!fallbackVariable || fallbackVariable->value.type().tag != structure::TypeTag::Color) { diff --git a/Telegram/SourceFiles/core/lambda.h b/Telegram/SourceFiles/core/lambda.h index e7cafbb3f..1933a3da3 100644 --- a/Telegram/SourceFiles/core/lambda.h +++ b/Telegram/SourceFiles/core/lambda.h @@ -94,47 +94,43 @@ namespace internal { template struct lambda_wrap_helper_move_impl; - // - // Disable large lambda support. - // If you really need it, just store data in some std_::unique_ptr. - // - //template - //struct lambda_wrap_helper_move_impl : public lambda_wrap_helper_base { - // using JustLambda = std_::decay_simple_t; - // using LambdaPtr = std_::unique_ptr; - // using Parent = lambda_wrap_helper_base; - // static void construct_move_other_method(void *lambda, void *source) { - // auto source_lambda = static_cast(source); - // new (lambda) LambdaPtr(std_::move(*source_lambda)); - // } - // static void construct_move_lambda_method(void *lambda, void *source) { - // auto source_lambda = static_cast(source); - // new (lambda) LambdaPtr(std_::make_unique(static_cast(*source_lambda))); - // } - // static Return call_method(const void *lambda, Args... args) { - // return (**static_cast(lambda))(std_::forward(args)...); - // } - // static void destruct_method(const void *lambda) { - // static_cast(lambda)->~LambdaPtr(); - // } - // lambda_wrap_helper_move_impl() : Parent( - // &Parent::bad_construct_copy, - // &lambda_wrap_helper_move_impl::construct_move_other_method, - // &lambda_wrap_helper_move_impl::call_method, - // &lambda_wrap_helper_move_impl::destruct_method) { - // } - // - //protected: - // lambda_wrap_helper_move_impl( - // typename Parent::construct_copy_other_type construct_copy_other - // ) : Parent( - // construct_copy_other, - // &lambda_wrap_helper_move_impl::construct_move_other_method, - // &lambda_wrap_helper_move_impl::call_method, - // &lambda_wrap_helper_move_impl::destruct_method) { - // } - // - //}; + template + struct lambda_wrap_helper_move_impl : public lambda_wrap_helper_base { + using JustLambda = std_::decay_simple_t; + using LambdaPtr = std_::unique_ptr; + using Parent = lambda_wrap_helper_base; + static void construct_move_other_method(void *lambda, void *source) { + auto source_lambda = static_cast(source); + new (lambda) LambdaPtr(std_::move(*source_lambda)); + } + static void construct_move_lambda_method(void *lambda, void *source) { + auto source_lambda = static_cast(source); + new (lambda) LambdaPtr(std_::make_unique(static_cast(*source_lambda))); + } + static Return call_method(const void *lambda, Args... args) { + return (**static_cast(lambda))(std_::forward(args)...); + } + static void destruct_method(const void *lambda) { + static_cast(lambda)->~LambdaPtr(); + } + lambda_wrap_helper_move_impl() : Parent( + &Parent::bad_construct_copy, + &lambda_wrap_helper_move_impl::construct_move_other_method, + &lambda_wrap_helper_move_impl::call_method, + &lambda_wrap_helper_move_impl::destruct_method) { + } + + protected: + lambda_wrap_helper_move_impl( + typename Parent::construct_copy_other_type construct_copy_other + ) : Parent( + construct_copy_other, + &lambda_wrap_helper_move_impl::construct_move_other_method, + &lambda_wrap_helper_move_impl::call_method, + &lambda_wrap_helper_move_impl::destruct_method) { + } + + }; template struct lambda_wrap_helper_move_impl : public lambda_wrap_helper_base { @@ -189,27 +185,23 @@ namespace internal { template struct lambda_wrap_helper_copy_impl; - // - // Disable large lambda support. - // If you really need it, just store data in some QSharedPointer. - // - //template - //struct lambda_wrap_helper_copy_impl : public lambda_wrap_helper_move_impl { - // using JustLambda = std_::decay_simple_t; - // using LambdaPtr = std_::unique_ptr; - // using Parent = lambda_wrap_helper_move_impl; - // static void construct_copy_other_method(void *lambda, const void *source) { - // auto source_lambda = static_cast(source); - // new (lambda) LambdaPtr(std_::make_unique(*source_lambda->get())); - // } - // static void construct_copy_lambda_method(void *lambda, const void *source) { - // auto source_lambda = static_cast(source); - // new (lambda) LambdaPtr(std_::make_unique(static_cast(*source_lambda))); - // } - // lambda_wrap_helper_copy_impl() : Parent(&lambda_wrap_helper_copy_impl::construct_copy_other_method) { - // } - // - //}; + template + struct lambda_wrap_helper_copy_impl : public lambda_wrap_helper_move_impl { + using JustLambda = std_::decay_simple_t; + using LambdaPtr = std_::unique_ptr; + using Parent = lambda_wrap_helper_move_impl; + static void construct_copy_other_method(void *lambda, const void *source) { + auto source_lambda = static_cast(source); + new (lambda) LambdaPtr(std_::make_unique(*source_lambda->get())); + } + static void construct_copy_lambda_method(void *lambda, const void *source) { + auto source_lambda = static_cast(source); + new (lambda) LambdaPtr(std_::make_unique(static_cast(*source_lambda))); + } + lambda_wrap_helper_copy_impl() : Parent(&lambda_wrap_helper_copy_impl::construct_copy_other_method) { + } + + }; template struct lambda_wrap_helper_copy_impl : public lambda_wrap_helper_move_impl { @@ -399,6 +391,13 @@ struct lambda_type_resolver; template struct lambda_type_resolver { using type = lambda; + static constexpr auto is_mutable = false; +}; + +template +struct lambda_type_resolver { + using type = lambda; + static constexpr auto is_mutable = true; }; template diff --git a/Telegram/SourceFiles/core/task_queue.cpp b/Telegram/SourceFiles/core/task_queue.cpp new file mode 100644 index 000000000..297fd09ed --- /dev/null +++ b/Telegram/SourceFiles/core/task_queue.cpp @@ -0,0 +1,415 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org +*/ +#include "stdafx.h" +#include "core/task_queue.h" + +namespace base { +namespace { + +auto MainThreadId = QThread::currentThreadId(); +const auto MaxThreadsCount = qMax(QThread::idealThreadCount(), 2); + +template +class Thread : public QThread { +public: + Thread(Lambda code) : _code(std_::move(code)) { + } + void run() override { + _code(); + } + +private: + Lambda _code; + +}; + +template +object_ptr> MakeThread(Lambda code) { + return object_ptr>(std_::move(code)); +} + +} // namespace + +class TaskQueue::TaskQueueList { +public: + TaskQueueList(); + + void Register(TaskQueue *queue); + void Unregister(TaskQueue *queue); + bool IsInList(TaskQueue *queue) const; + void Clear(); + bool Empty(int list_index_) const; + TaskQueue *TakeFirst(int list_index_); + +private: + void Insert(TaskQueue *queue, int list_index_); + void Remove(TaskQueue *queue, int list_index_); + + TaskQueue *Tail() { return &tail_; } + const TaskQueue *Tail() const { return &tail_; } + + TaskQueue tail_ = { Type::Special, Priority::Normal }; + TaskQueue *(lists_[kQueuesListsCount]); + +}; + +class TaskQueue::TaskThreadPool { + struct Private { + }; + +public: + TaskThreadPool(const Private &) { } + static const QSharedPointer &Instance(); + + void AddQueueTask(TaskQueue *queue, Task &&task); + void RemoveQueue(TaskQueue *queue); + + ~TaskThreadPool(); + +private: + + void ThreadFunction(); + + std_::vector_of_moveable> threads_; + QMutex queues_mutex_; + + // queues_mutex_ must be locked when working with the list. + TaskQueueList queue_list_; + + QWaitCondition thread_condition_; + bool stopped_ = false; + int tasks_in_process_ = 0; + int background_tasks_in_process_ = 0; + +}; + +TaskQueue::TaskQueueList::TaskQueueList() { + for (auto &list : lists_) { + list = &tail_; + } +} + +void TaskQueue::TaskQueueList::Register(TaskQueue *queue) { + t_assert(!queue->SerialTaskInProcess()); + + Insert(queue, kAllQueuesList); + if (queue->priority_ == Priority::Normal) { + Insert(queue, kOnlyNormalQueuesList); + } +} + +void TaskQueue::TaskQueueList::Unregister(TaskQueue *queue) { + Remove(queue, kAllQueuesList); + if (queue->priority_ == Priority::Normal) { + Remove(queue, kOnlyNormalQueuesList); + } +} + +void TaskQueue::TaskQueueList::Insert(TaskQueue *queue, int list_index_) { + t_assert(list_index_ < kQueuesListsCount); + + auto tail = Tail(); + if (lists_[list_index_] == tail) { + lists_[list_index_] = queue; + } + + auto &list_entry = queue->list_entries_[list_index_]; + t_assert(list_entry.after == nullptr); + if ((list_entry.before = tail->list_entries_[list_index_].before)) { + list_entry.before->list_entries_[list_index_].after = queue; + } + list_entry.after = tail; + tail->list_entries_[list_index_].before = queue; +} + +void TaskQueue::TaskQueueList::Remove(TaskQueue *queue, int list_index_) { + t_assert(list_index_ < kQueuesListsCount); + + auto &list_entry = queue->list_entries_[list_index_]; + t_assert(list_entry.after != nullptr); + if (lists_[list_index_] == queue) { + lists_[list_index_] = list_entry.after; + } else { + t_assert(list_entry.before != nullptr); + list_entry.before->list_entries_[list_index_].after = list_entry.after; + } + list_entry.after->list_entries_[list_index_].before = list_entry.before; + list_entry.before = list_entry.after = nullptr; +} + +bool TaskQueue::TaskQueueList::IsInList(TaskQueue *queue) const { + if (queue->list_entries_[kAllQueuesList].after) { + return true; + } + t_assert(queue->list_entries_[kOnlyNormalQueuesList].after == nullptr); + return false; +} + +void TaskQueue::TaskQueueList::Clear() { + auto tail = Tail(); + for (int i = 0; i < kQueuesListsCount; ++i) { + for (auto j = lists_[i], next = j; j != tail; j = next) { + auto &list_entry = j->list_entries_[i]; + next = list_entry.after; + list_entry.before = list_entry.after = nullptr; + } + lists_[i] = tail; + } +} + +bool TaskQueue::TaskQueueList::Empty(int list_index_) const { + t_assert(list_index_ < kQueuesListsCount); + + auto list = lists_[list_index_]; + t_assert(list != nullptr); + return (list->list_entries_[list_index_].after == nullptr); +} + +TaskQueue *TaskQueue::TaskQueueList::TakeFirst(int list_index_) { + t_assert(!Empty(list_index_)); + + auto queue = lists_[list_index_]; + Unregister(queue); +// log_msgs.push_back("Unregistered from list in TakeFirst"); + return queue; +} + +void TaskQueue::TaskThreadPool::AddQueueTask(TaskQueue *queue, Task &&task) { + QMutexLocker lock(&queues_mutex_); + + queue->tasks_.push_back(new Task(std::move(task))); + auto list_was_empty = queue_list_.Empty(kAllQueuesList); + auto threads_count = threads_.size(); + auto all_threads_processing = (threads_count == tasks_in_process_); + auto some_threads_are_vacant = !all_threads_processing && list_was_empty; + auto will_create_thread = !some_threads_are_vacant && (threads_count < MaxThreadsCount); + + if (!queue->SerialTaskInProcess()) { + if (!queue_list_.IsInList(queue)) { + queue_list_.Register(queue); + } + } + if (will_create_thread) { + threads_.push_back(MakeThread([this]() { + ThreadFunction(); + })); + threads_.back()->start(); + } else if (some_threads_are_vacant) { + t_assert(threads_count > tasks_in_process_); + thread_condition_.wakeOne(); + } +} + +void TaskQueue::TaskThreadPool::RemoveQueue(TaskQueue *queue) { + QMutexLocker lock(&queues_mutex_); + if (queue_list_.IsInList(queue)) { + queue_list_.Unregister(queue); + } + if (queue->destroyed_flag_) { + *queue->destroyed_flag_ = true; + } +} + +TaskQueue::TaskThreadPool::~TaskThreadPool() { + { + QMutexLocker lock(&queues_mutex_); + queue_list_.Clear(); + stopped_ = true; + } + thread_condition_.wakeAll(); + for (auto &thread : threads_) { + thread->wait(); + } +} + +const QSharedPointer &TaskQueue::TaskThreadPool::Instance() { // static + static auto Pool = MakeShared(Private()); + return Pool; +} + +void TaskQueue::TaskThreadPool::ThreadFunction() { + // Flag marking that the previous processed task was + // with a Background priority. We count all the background + // tasks being processed. + bool background_task = false; + + // Saved serial queue pointer. When we process a serial + // queue task we don't return the queue to the list until + // the task is processed and we return it on the next cycle. + TaskQueue *serial_queue = nullptr; + bool serial_queue_destroyed = false; + bool task_was_processed = false; + while (true) { + std_::unique_ptr task; + { + QMutexLocker lock(&queues_mutex_); + + // Finish the previous task processing. + if (task_was_processed) { + --tasks_in_process_; + } + if (background_task) { + --background_tasks_in_process_; + background_task = false; + } + if (serial_queue) { + if (!serial_queue_destroyed) { + serial_queue->destroyed_flag_ = nullptr; + if (!serial_queue->tasks_.empty()) { + queue_list_.Register(serial_queue); + } + } + serial_queue = nullptr; + serial_queue_destroyed = false; + } + + // Wait for a task to appear in the queues list. + while (queue_list_.Empty(kAllQueuesList)) { + if (stopped_) { + return; + } + thread_condition_.wait(&queues_mutex_); + } + + // Select a task we will be processing. + auto processing_background = (background_tasks_in_process_ > 0); + auto take_only_normal = processing_background && !queue_list_.Empty(kOnlyNormalQueuesList); + auto take_from_list_ = take_only_normal ? kOnlyNormalQueuesList : kAllQueuesList; + auto queue = queue_list_.TakeFirst(take_from_list_); + + t_assert(!queue->tasks_.empty()); + + task.reset(queue->tasks_.front()); + queue->tasks_.pop_front(); + + if (queue->type_ == Type::Serial) { + // Serial queues are returned in the list for processing + // only after the task is finished. + serial_queue = queue; + t_assert(serial_queue->destroyed_flag_ == nullptr); + serial_queue->destroyed_flag_ = &serial_queue_destroyed; + } else if (!queue->tasks_.empty()) { + queue_list_.Register(queue); + } + + ++tasks_in_process_; + task_was_processed = true; + if (queue->priority_ == Priority::Background) { + ++background_tasks_in_process_; + background_task = true; + } + } + + (*task)(); + } +} + +TaskQueue::TaskQueue(Type type, Priority priority) +: type_(type) +, priority_(priority) { + if (type_ != Type::Main && type_ != Type::Special) { + weak_thread_pool_ = TaskThreadPool::Instance(); + } +} + +TaskQueue::~TaskQueue() { + if (type_ != Type::Main && type_ != Type::Special) { + if (auto thread_pool = weak_thread_pool_.lock()) { + thread_pool->RemoveQueue(this); + } + } + for (auto task : take(tasks_)) { + delete task; + } +} + +void TaskQueue::Put(Task &&task) { + if (type_ == Type::Main) { + QMutexLocker lock(&tasks_mutex_); + tasks_.push_back(new Task(std::move(task))); + + Sandbox::MainThreadTaskAdded(); + } else { + t_assert(type_ != Type::Special); + TaskThreadPool::Instance()->AddQueueTask(this, std::move(task)); + } +} + +void TaskQueue::ProcessMainTasks() { // static + t_assert(QThread::currentThreadId() == MainThreadId); + + while (ProcessOneMainTask()) { + } +} + +void TaskQueue::ProcessMainTasks(TimeMs max_time_spent) { // static + t_assert(QThread::currentThreadId() == MainThreadId); + + auto start_time = getms(); + while (ProcessOneMainTask()) { + if (getms() >= start_time + max_time_spent) { + break; + } + } +} + +bool TaskQueue::ProcessOneMainTask() { // static + std_::unique_ptr task; + { + QMutexLocker lock(&Main().tasks_mutex_); + auto &tasks = Main().tasks_; + if (tasks.empty()) { + return false; + } + + task.reset(tasks.front()); + tasks.pop_front(); + } + + (*task)(); + return true; +} + +bool TaskQueue::IsMyThread() const { + if (type_ == Type::Main) { + return (QThread::currentThreadId() == MainThreadId); + } + t_assert(type_ != Type::Special); + return false; +} + +// Default queues. +TaskQueue &TaskQueue::Main() { // static + static TaskQueue MainQueue { Type::Main, Priority::Normal }; + return MainQueue; +} + +TaskQueue &TaskQueue::Normal() { // static + static TaskQueue NormalQueue { Type::Concurrent, Priority::Normal }; + return NormalQueue; +} + +TaskQueue &TaskQueue::Background() { // static + static TaskQueue BackgroundQueue { Type::Concurrent, Priority::Background }; + return BackgroundQueue; +} + +} // namespace base diff --git a/Telegram/SourceFiles/core/task_queue.h b/Telegram/SourceFiles/core/task_queue.h new file mode 100644 index 000000000..58aa71cc5 --- /dev/null +++ b/Telegram/SourceFiles/core/task_queue.h @@ -0,0 +1,100 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org +*/ +#pragma once + +namespace base { + +using Task = lambda; + +// An attempt to create/use a TaskQueue or one of the default queues +// after the main() has returned leads to an undefined behaviour. +class TaskQueue { + enum class Type { + Main, // Unique queue for main thread tasks. + Serial, + Concurrent, + Special, // Unique special queue for thread pool lists terminal item. + }; + +public: + enum class Priority { + Normal, + Background, + }; + + // Creating custom serial queues. + TaskQueue(Priority priority) : TaskQueue(Type::Serial, priority) { + } + + // Default main and two concurrent queues. + static TaskQueue &Main(); + static TaskQueue &Normal(); + static TaskQueue &Background(); + + void Put(Task &&task); + + static void ProcessMainTasks(); + static void ProcessMainTasks(TimeMs max_time_spent); + + ~TaskQueue(); + +private: + static bool ProcessOneMainTask(); + + TaskQueue(Type type, Priority priority); + + bool IsMyThread() const; + bool SerialTaskInProcess() const { + return (destroyed_flag_ != nullptr); + } + + const Type type_; + const Priority priority_; + + QList tasks_; // TODO: std_::deque_of_moveable + QMutex tasks_mutex_; // Only for the main queue. + + // Only for the other queues, not main. + class TaskThreadPool; + QWeakPointer weak_thread_pool_; + + class TaskQueueList; + + struct TaskQueueListEntry { + TaskQueue *before = nullptr; + TaskQueue *after = nullptr; + }; + + // Thread pool queues linked list. + static constexpr int kAllQueuesList = 0; + + // Thread pool queues linked list with excluded Background queues. + static constexpr int kOnlyNormalQueuesList = 1; + + static constexpr int kQueuesListsCount = 2; + TaskQueueListEntry list_entries_[kQueuesListsCount]; + + // Only for Serial queues: non-null value means a task is currently processed. + bool *destroyed_flag_ = nullptr; + +}; + +} // namespace base diff --git a/Telegram/SourceFiles/dialogs/dialogs.style b/Telegram/SourceFiles/dialogs/dialogs.style index e4582101c..024233007 100644 --- a/Telegram/SourceFiles/dialogs/dialogs.style +++ b/Telegram/SourceFiles/dialogs/dialogs.style @@ -19,7 +19,6 @@ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org */ using "basic.style"; -using "basic_types.style"; using "ui/widgets/widgets.style"; @@ -32,6 +31,11 @@ dialogsRippleBg: windowBgRipple; dialogsRippleBgActive: activeButtonBgRipple; dialogsTextFont: font(fsize); +dialogsTextStyle: TextStyle(defaultTextStyle) { + font: dialogsTextFont; + linkFont: dialogsTextFont; + linkFontOver: dialogsTextFont; +} dialogsDateFont: font(13px); dialogsDateSkip: 5px; dialogsNameTop: 2px; @@ -55,30 +59,23 @@ dialogsScroll: ScrollArea(defaultScrollArea) { bottomsh: 0px; } -dialogsTextStyle: TextStyle(defaultTextStyle) { +dialogsTextPalette: TextPalette(defaultTextPalette) { linkFg: dialogsTextFgService; - linkFgDown: dialogsTextFgService; - linkFlagsOver: font(fsize); } -dialogsTextStyleOver: TextStyle(dialogsTextStyle) { +dialogsTextPaletteOver: TextPalette(defaultTextPalette) { linkFg: dialogsTextFgServiceOver; - linkFgDown: dialogsTextFgServiceOver; } -dialogsTextStyleActive: TextStyle(dialogsTextStyle) { +dialogsTextPaletteActive: TextPalette(defaultTextPalette) { linkFg: dialogsTextFgServiceActive; - linkFgDown: dialogsTextFgServiceActive; } -dialogsTextStyleDraft: TextStyle(dialogsTextStyle) { +dialogsTextPaletteDraft: TextPalette(defaultTextPalette) { linkFg: dialogsDraftFg; - linkFgDown: dialogsDraftFg; } -dialogsTextStyleDraftOver: TextStyle(dialogsTextStyle) { +dialogsTextPaletteDraftOver: TextPalette(defaultTextPalette) { linkFg: dialogsDraftFgOver; - linkFgDown: dialogsDraftFgOver; } -dialogsTextStyleDraftActive: TextStyle(dialogsTextStyle) { +dialogsTextPaletteDraftActive: TextPalette(defaultTextPalette) { linkFg: dialogsDraftFgActive; - linkFgDown: dialogsDraftFgActive; } dialogsMenuToggle: IconButton { diff --git a/Telegram/SourceFiles/dialogs/dialogs_layout.cpp b/Telegram/SourceFiles/dialogs/dialogs_layout.cpp index 067e281d6..ba405597f 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_layout.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_layout.cpp @@ -87,12 +87,12 @@ void paintRow(Painter &p, const RippleRow *row, History *history, HistoryItem *i if (history->cloudDraftTextCache.isEmpty()) { auto draftWrapped = textcmdLink(1, lng_dialogs_text_from_wrapped(lt_from, lang(lng_from_draft))); auto draftText = lng_dialogs_text_with_from(lt_from_part, draftWrapped, lt_message, textClean(draft->textWithTags.text)); - history->cloudDraftTextCache.setText(st::dialogsTextFont, draftText, _textDlgOptions); + history->cloudDraftTextCache.setText(st::dialogsTextStyle, draftText, _textDlgOptions); } p.setPen(active ? st::dialogsTextFgActive : (selected ? st::dialogsTextFgOver : st::dialogsTextFg)); - textstyleSet(&(active ? st::dialogsTextStyleDraftActive : (selected ? st::dialogsTextStyleDraftOver : st::dialogsTextStyleDraft))); + p.setTextPalette(active ? st::dialogsTextPaletteDraftActive : (selected ? st::dialogsTextPaletteDraftOver : st::dialogsTextPaletteDraft)); history->cloudDraftTextCache.drawElided(p, nameleft, texttop, namewidth, 1); - textstyleRestore(); + p.restoreTextPalette(); } } else if (!item) { auto &color = active ? st::dialogsTextFgServiceActive : (selected ? st::dialogsTextFgServiceOver : st::dialogsTextFgService); @@ -127,7 +127,7 @@ void paintRow(Painter &p, const RippleRow *row, History *history, HistoryItem *i sendStateIcon->paint(p, rectForName.topLeft() + QPoint(rectForName.width(), 0), fullWidth); } - if (history->peer->isUser() && history->peer->isVerified()) { + if (history->peer->isVerified()) { auto icon = &(active ? st::dialogsVerifiedIconActive : (selected ? st::dialogsVerifiedIconOver : st::dialogsVerifiedIcon)); rectForName.setWidth(rectForName.width() - icon->width()); icon->paint(p, rectForName.topLeft() + QPoint(qMin(history->peer->dialogName().maxWidth(), rectForName.width()), 0), fullWidth); @@ -144,13 +144,13 @@ struct UnreadBadgeSizeData { class UnreadBadgeStyleData : public Data::AbstractStructure { public: UnreadBadgeSizeData sizes[UnreadBadgeSizesCount]; - const style::color *bg[6] = { - &st::dialogsUnreadBg, - &st::dialogsUnreadBgOver, - &st::dialogsUnreadBgActive, - &st::dialogsUnreadBgMuted, - &st::dialogsUnreadBgMutedOver, - &st::dialogsUnreadBgMutedActive + style::color bg[6] = { + st::dialogsUnreadBg, + st::dialogsUnreadBgOver, + st::dialogsUnreadBgActive, + st::dialogsUnreadBgMuted, + st::dialogsUnreadBgMutedOver, + st::dialogsUnreadBgMutedActive }; }; Data::GlobalStructurePointer unreadBadgeStyle; @@ -161,7 +161,7 @@ void createCircleMask(UnreadBadgeSizeData *data, int size) { data->circle = style::createCircleMask(size); } -QImage colorizeCircleHalf(UnreadBadgeSizeData *data, int size, int half, int xoffset, const style::color &color) { +QImage colorizeCircleHalf(UnreadBadgeSizeData *data, int size, int half, int xoffset, style::color color) { auto result = style::colorizeImage(data->circle, color, QRect(xoffset, 0, half, size)); result.setDevicePixelRatio(cRetinaFactor()); return result; @@ -194,14 +194,14 @@ void paintUnreadBadge(Painter &p, const QRect &rect, const UnreadBadgeStyle &st) if (badgeData->left[index].isNull()) { int imgsize = size * cIntRetinaFactor(), imgsizehalf = sizehalf * cIntRetinaFactor(); createCircleMask(badgeData, size); - badgeData->left[index] = App::pixmapFromImageInPlace(colorizeCircleHalf(badgeData, imgsize, imgsizehalf, 0, *bg)); - badgeData->right[index] = App::pixmapFromImageInPlace(colorizeCircleHalf(badgeData, imgsize, imgsizehalf, imgsize - imgsizehalf, *bg)); + badgeData->left[index] = App::pixmapFromImageInPlace(colorizeCircleHalf(badgeData, imgsize, imgsizehalf, 0, bg)); + badgeData->right[index] = App::pixmapFromImageInPlace(colorizeCircleHalf(badgeData, imgsize, imgsizehalf, imgsize - imgsizehalf, bg)); } int bar = rect.width() - 2 * sizehalf; p.drawPixmap(rect.x(), rect.y(), badgeData->left[index]); if (bar) { - p.fillRect(rect.x() + sizehalf, rect.y(), bar, rect.height(), *bg); + p.fillRect(rect.x() + sizehalf, rect.y(), bar, rect.height(), bg); } p.drawPixmap(rect.x() + sizehalf + bar, rect.y(), badgeData->right[index]); } diff --git a/Telegram/SourceFiles/facades.cpp b/Telegram/SourceFiles/facades.cpp index 217c4ca5c..0aa9f987e 100644 --- a/Telegram/SourceFiles/facades.cpp +++ b/Telegram/SourceFiles/facades.cpp @@ -535,7 +535,18 @@ void WorkingDirReady() { } } +object_ptr MainThreadTaskHandler = { nullptr }; + +void MainThreadTaskAdded() { + if (!started()) { + return; + } + + MainThreadTaskHandler->call(); +} + void start() { + MainThreadTaskHandler.create(QCoreApplication::instance(), "onMainThreadTask"); SandboxData = new internal::Data(); SandboxData->LangSystemISO = psCurrentLanguage(); @@ -556,6 +567,7 @@ bool started() { void finish() { delete SandboxData; SandboxData = nullptr; + MainThreadTaskHandler.destroy(); } uint64 UserTag() { diff --git a/Telegram/SourceFiles/facades.h b/Telegram/SourceFiles/facades.h index 2b6e44ba6..a1888c89e 100644 --- a/Telegram/SourceFiles/facades.h +++ b/Telegram/SourceFiles/facades.h @@ -225,6 +225,8 @@ namespace Sandbox { bool CheckBetaVersionDir(); void WorkingDirReady(); +void MainThreadTaskAdded(); + void start(); bool started(); void finish(); diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 97a93a2dc..567cb926f 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -239,7 +239,7 @@ bool History::mySendActionUpdated(SendAction::Type type, bool doing) { return true; } -bool History::paintSendAction(Painter &p, int x, int y, int availableWidth, int outerWidth, const style::color &color, TimeMs ms) { +bool History::paintSendAction(Painter &p, int x, int y, int availableWidth, int outerWidth, style::color color, TimeMs ms) { if (_sendActionAnimation) { _sendActionAnimation.paint(p, color, x, y + st::normalFont->ascent, outerWidth, ms); auto animationWidth = _sendActionAnimation.width(); @@ -324,7 +324,7 @@ bool History::updateSendActionNeedsAnimating(TimeMs ms, bool force) { } if (_sendActionString != newTypingString) { _sendActionString = newTypingString; - _sendActionText.setText(st::dialogsTextFont, _sendActionString, _textNameOptions); + _sendActionText.setText(st::dialogsTextStyle, _sendActionString, _textNameOptions); } } auto result = (!_typing.isEmpty() || !_sendActions.isEmpty()); diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index 0da6a9285..c1207ca25 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -339,7 +339,7 @@ public: void unregSendAction(UserData *from); bool updateSendActionNeedsAnimating(UserData *user, const MTPSendMessageAction &action); bool mySendActionUpdated(SendAction::Type type, bool doing); - bool paintSendAction(Painter &p, int x, int y, int availableWidth, int outerWidth, const style::color &color, TimeMs ms); + bool paintSendAction(Painter &p, int x, int y, int availableWidth, int outerWidth, style::color color, TimeMs ms); void clearLastKeyboard(); diff --git a/Telegram/SourceFiles/history/history.style b/Telegram/SourceFiles/history/history.style index 0a701e40e..b20845d8f 100644 --- a/Telegram/SourceFiles/history/history.style +++ b/Telegram/SourceFiles/history/history.style @@ -346,7 +346,11 @@ botKbBg: menuBgOver; botKbOverBg: menuBgOver; botKbDownBg: menuBgRipple; botKbColor: windowBoldFgOver; -botKbFont: font(15px semibold); +botKbStyle: TextStyle(defaultTextStyle) { + font: font(15px semibold); + linkFont: font(15px semibold); + linkFontOver: font(15px semibold); +} botKbButton: BotKeyboardButton { margin: 10px; padding: 10px; @@ -404,3 +408,26 @@ historyUnreadBarFont: semiboldFont; historyForwardChooseMargins: margins(30px, 10px, 30px, 10px); historyForwardChooseFont: font(16px); + +msgFileMenuSize: size(36px, 36px); +msgFileSize: 44px; +msgFilePadding: margins(14px, 12px, 11px, 12px); +msgFileThumbSize: 72px; +msgFileThumbPadding: margins(10px, 10px, 14px, 10px); +msgFileThumbNameTop: 12px; +msgFileThumbStatusTop: 32px; +msgFileThumbLinkTop: 60px; +msgFileNameTop: 16px; +msgFileStatusTop: 37px; +msgFileMinWidth: 294px; +msgFileTopMinus: 6px; + +msgFileOverDuration: 200; +msgFileRadialLine: 3px; + +msgVideoSize: size(320px, 240px); + +msgWaveformBar: 2px; +msgWaveformSkip: 1px; +msgWaveformMin: 2px; +msgWaveformMax: 20px; diff --git a/Telegram/SourceFiles/history/history_item.cpp b/Telegram/SourceFiles/history/history_item.cpp index 54c53e996..755db6adc 100644 --- a/Telegram/SourceFiles/history/history_item.cpp +++ b/Telegram/SourceFiles/history/history_item.cpp @@ -111,7 +111,7 @@ ReplyKeyboard::ReplyKeyboard(const HistoryItem *item, StylePtr &&s) auto str = row.at(j).text; button.type = row.at(j).type; button.link = MakeShared(item, i, j); - button.text.setText(_st->textFont(), textOneLine(str), _textPlainOptions); + button.text.setText(_st->textStyle(), textOneLine(str), _textPlainOptions); button.characters = str.isEmpty() ? 1 : str.size(); } _rows.push_back(newRow); @@ -381,12 +381,12 @@ void ReplyKeyboard::Style::paintButton(Painter &p, int outerWidth, const ReplyKe } int tx = rect.x(), tw = rect.width(); - if (tw >= st::botKbFont->elidew + _st->padding * 2) { + if (tw >= st::botKbStyle.font->elidew + _st->padding * 2) { tx += _st->padding; tw -= _st->padding * 2; - } else if (tw > st::botKbFont->elidew) { - tx += (tw - st::botKbFont->elidew) / 2; - tw = st::botKbFont->elidew; + } else if (tw > st::botKbStyle.font->elidew) { + tx += (tw - st::botKbStyle.font->elidew) / 2; + tw = st::botKbStyle.font->elidew; } button.text.drawElided(p, tx, rect.y() + _st->textTop + ((rect.height() - _st->height) / 2), tw, 1, style::al_top); } @@ -928,14 +928,14 @@ QString HistoryItem::inDialogsText() const { void HistoryItem::drawInDialog(Painter &p, const QRect &r, bool active, bool selected, const HistoryItem *&cacheFor, Text &cache) const { if (cacheFor != this) { cacheFor = this; - cache.setText(st::dialogsTextFont, inDialogsText(), _textDlgOptions); + cache.setText(st::dialogsTextStyle, inDialogsText(), _textDlgOptions); } if (r.width()) { - textstyleSet(&(active ? st::dialogsTextStyleActive : (selected ? st::dialogsTextStyleOver : st::dialogsTextStyle))); + p.setTextPalette(active ? st::dialogsTextPaletteActive : (selected ? st::dialogsTextPaletteOver : st::dialogsTextPalette)); p.setFont(st::dialogsTextFont); p.setPen(active ? st::dialogsTextFgActive : (selected ? st::dialogsTextFgOver : st::dialogsTextFg)); cache.drawElided(p, r.left(), r.top(), r.width(), r.height() / st::dialogsTextFont->height); - textstyleRestore(); + p.restoreTextPalette(); } } diff --git a/Telegram/SourceFiles/history/history_item.h b/Telegram/SourceFiles/history/history_item.h index 644343d59..15ca09084 100644 --- a/Telegram/SourceFiles/history/history_item.h +++ b/Telegram/SourceFiles/history/history_item.h @@ -294,7 +294,7 @@ public: } virtual void startPaint(Painter &p) const = 0; - virtual style::font textFont() const = 0; + virtual const style::TextStyle &textStyle() const = 0; int buttonSkip() const; int buttonPadding() const; diff --git a/Telegram/SourceFiles/history/history_media_types.cpp b/Telegram/SourceFiles/history/history_media_types.cpp index db8445fa3..8c0f92b93 100644 --- a/Telegram/SourceFiles/history/history_media_types.cpp +++ b/Telegram/SourceFiles/history/history_media_types.cpp @@ -223,7 +223,7 @@ HistoryPhoto::HistoryPhoto(HistoryItem *parent, PhotoData *photo, const QString , _caption(st::minPhotoSize - st::msgPadding.left() - st::msgPadding.right()) { setLinks(MakeShared(_data), MakeShared(_data), MakeShared(_data)); if (!caption.isEmpty()) { - _caption.setText(st::msgFont, caption + _parent->skipBlock(), itemTextNoMonoOptions(_parent)); + _caption.setText(st::messageTextStyle, caption + _parent->skipBlock(), itemTextNoMonoOptions(_parent)); } init(); } @@ -597,7 +597,7 @@ HistoryVideo::HistoryVideo(HistoryItem *parent, DocumentData *document, const QS , _thumbw(1) , _caption(st::minPhotoSize - st::msgPadding.left() - st::msgPadding.right()) { if (!caption.isEmpty()) { - _caption.setText(st::msgFont, caption + _parent->skipBlock(), itemTextNoMonoOptions(_parent)); + _caption.setText(st::messageTextStyle, caption + _parent->skipBlock(), itemTextNoMonoOptions(_parent)); } setDocumentLinks(_data); @@ -900,10 +900,14 @@ ImagePtr HistoryVideo::replyPreview() { return _data->replyPreview; } +HistoryDocumentCaptioned::HistoryDocumentCaptioned() +: _caption(st::msgFileMinWidth - st::msgPadding.left() - st::msgPadding.right()) { +} + + HistoryDocumentVoicePlayback::HistoryDocumentVoicePlayback(const HistoryDocument *that) - : _position(0) - , a_progress(0., 0.) - , _a_progress(animation(const_cast(that), &HistoryDocument::step_voiceProgress)) { +: a_progress(0., 0.) +, _a_progress(animation(const_cast(that), &HistoryDocument::step_voiceProgress)) { } void HistoryDocumentVoice::ensurePlayback(const HistoryDocument *that) const { @@ -932,7 +936,7 @@ HistoryDocument::HistoryDocument(HistoryItem *parent, DocumentData *document, co setStatusSize(FileStatusSizeReady); if (auto captioned = Get()) { - captioned->_caption.setText(st::msgFont, caption + _parent->skipBlock(), itemTextNoMonoOptions(_parent)); + captioned->_caption.setText(st::messageTextStyle, caption + _parent->skipBlock(), itemTextNoMonoOptions(_parent)); } } @@ -1024,6 +1028,9 @@ void HistoryDocument::initDimensions() { } else { _minh = st::msgFilePadding.top() + st::msgFileSize + st::msgFilePadding.bottom(); } + if (!isBubbleTop()) { + _minh -= st::msgFileTopMinus; + } if (captioned) { auto captionw = _maxw - st::msgPadding.left() - st::msgPadding.right(); @@ -1048,6 +1055,9 @@ int HistoryDocument::resizeGetHeight(int width) { } else { _height = st::msgFilePadding.top() + st::msgFileSize + st::msgFilePadding.bottom(); } + if (!isBubbleTop()) { + _height -= st::msgFileTopMinus; + } auto captionw = _width - st::msgPadding.left() - st::msgPadding.right(); _height += captioned->_caption.countHeight(captionw); if (isBubbleBottom()) { @@ -1077,18 +1087,19 @@ void HistoryDocument::draw(Painter &p, const QRect &r, TextSelection selection, bool showPause = updateStatusText(); bool radial = isRadialAnimation(ms); + auto topMinus = isBubbleTop() ? 0 : st::msgFileTopMinus; int nameleft = 0, nametop = 0, nameright = 0, statustop = 0, linktop = 0, bottom = 0; if (auto thumbed = Get()) { nameleft = st::msgFileThumbPadding.left() + st::msgFileThumbSize + st::msgFileThumbPadding.right(); - nametop = st::msgFileThumbNameTop; + nametop = st::msgFileThumbNameTop - topMinus; nameright = st::msgFileThumbPadding.left(); - statustop = st::msgFileThumbStatusTop; - linktop = st::msgFileThumbLinkTop; - bottom = st::msgFileThumbPadding.top() + st::msgFileThumbSize + st::msgFileThumbPadding.bottom(); + statustop = st::msgFileThumbStatusTop - topMinus; + linktop = st::msgFileThumbLinkTop - topMinus; + bottom = st::msgFileThumbPadding.top() + st::msgFileThumbSize + st::msgFileThumbPadding.bottom() - topMinus; auto inWebPage = (_parent->getMedia() != this); auto roundRadius = inWebPage ? ImageRoundRadius::Small : ImageRoundRadius::Large; - QRect rthumb(rtlrect(st::msgFileThumbPadding.left(), st::msgFileThumbPadding.top(), st::msgFileThumbSize, st::msgFileThumbSize, _width)); + QRect rthumb(rtlrect(st::msgFileThumbPadding.left(), st::msgFileThumbPadding.top() - topMinus, st::msgFileThumbSize, st::msgFileThumbSize, _width)); QPixmap thumb; if (loaded) { thumb = _data->thumb->pixSingle(thumbed->_thumbw, 0, st::msgFileThumbSize, st::msgFileThumbSize, roundRadius); @@ -1098,7 +1109,7 @@ void HistoryDocument::draw(Painter &p, const QRect &r, TextSelection selection, p.drawPixmap(rthumb.topLeft(), thumb); if (selected) { auto overlayCorners = inWebPage ? SelectedOverlaySmallCorners : SelectedOverlayLargeCorners; - App::roundRect(p, rthumb, textstyleCurrent()->selectOverlay, overlayCorners); + App::roundRect(p, rthumb, p.textPalette().selectOverlay, overlayCorners); } if (radial || (!loaded && !_data->loading())) { @@ -1147,12 +1158,12 @@ void HistoryDocument::draw(Painter &p, const QRect &r, TextSelection selection, } } else { nameleft = st::msgFilePadding.left() + st::msgFileSize + st::msgFilePadding.right(); - nametop = st::msgFileNameTop; + nametop = st::msgFileNameTop - topMinus; nameright = st::msgFilePadding.left(); - statustop = st::msgFileStatusTop; - bottom = st::msgFilePadding.top() + st::msgFileSize + st::msgFilePadding.bottom(); + statustop = st::msgFileStatusTop - topMinus; + bottom = st::msgFilePadding.top() + st::msgFileSize + st::msgFilePadding.bottom() - topMinus; - QRect inner(rtlrect(st::msgFilePadding.left(), st::msgFilePadding.top(), st::msgFileSize, st::msgFileSize, _width)); + QRect inner(rtlrect(st::msgFilePadding.left(), st::msgFilePadding.top() - topMinus, st::msgFileSize, st::msgFileSize, _width)); p.setPen(Qt::NoPen); if (selected) { p.setBrush(outbg ? st::msgFileOutBgSelected : st::msgFileInBgSelected); @@ -1192,7 +1203,7 @@ void HistoryDocument::draw(Painter &p, const QRect &r, TextSelection selection, })(); icon->paintInCenter(p, inner); } - int32 namewidth = _width - nameleft - nameright; + auto namewidth = _width - nameleft - nameright; if (auto voice = Get()) { const VoiceWaveform *wf = 0; @@ -1298,12 +1309,13 @@ HistoryTextState HistoryDocument::getState(int x, int y, HistoryStateRequest req bool showPause = updateStatusText(); int32 nameleft = 0, nametop = 0, nameright = 0, statustop = 0, linktop = 0, bottom = 0; + auto topMinus = isBubbleTop() ? 0 : st::msgFileTopMinus; if (auto thumbed = Get()) { nameleft = st::msgFileThumbPadding.left() + st::msgFileThumbSize + st::msgFileThumbPadding.right(); - linktop = st::msgFileThumbLinkTop; - bottom = st::msgFileThumbPadding.top() + st::msgFileThumbSize + st::msgFileThumbPadding.bottom(); + linktop = st::msgFileThumbLinkTop - topMinus; + bottom = st::msgFileThumbPadding.top() + st::msgFileThumbSize + st::msgFileThumbPadding.bottom() - topMinus; - QRect rthumb(rtlrect(st::msgFileThumbPadding.left(), st::msgFileThumbPadding.top(), st::msgFileThumbSize, st::msgFileThumbSize, _width)); + QRect rthumb(rtlrect(st::msgFileThumbPadding.left(), st::msgFileThumbPadding.top() - topMinus, st::msgFileThumbSize, st::msgFileThumbSize, _width)); if ((_data->loading() || _data->uploading() || !loaded) && rthumb.contains(x, y)) { result.link = (_data->loading() || _data->uploading()) ? _cancell : _savel; @@ -1317,9 +1329,9 @@ HistoryTextState HistoryDocument::getState(int x, int y, HistoryStateRequest req } } } else { - bottom = st::msgFilePadding.top() + st::msgFileSize + st::msgFilePadding.bottom(); + bottom = st::msgFilePadding.top() + st::msgFileSize + st::msgFilePadding.bottom() - topMinus; - QRect inner(rtlrect(st::msgFilePadding.left(), st::msgFilePadding.top(), st::msgFileSize, st::msgFileSize, _width)); + QRect inner(rtlrect(st::msgFilePadding.left(), st::msgFilePadding.top() - topMinus, st::msgFileSize, st::msgFileSize, _width)); if ((_data->loading() || _data->uploading() || !loaded) && inner.contains(x, y)) { result.link = (_data->loading() || _data->uploading()) ? _cancell : _savel; return result; @@ -1477,6 +1489,10 @@ bool HistoryDocument::updateStatusText() const { return showPause; } +QMargins HistoryDocument::bubbleMargins() const { + return Get() ? QMargins(st::msgFileThumbPadding.left(), st::msgFileThumbPadding.top(), st::msgFileThumbPadding.left(), st::msgFileThumbPadding.bottom()) : st::msgPadding; +} + void HistoryDocument::step_voiceProgress(float64 ms, bool timer) { if (auto voice = Get()) { if (voice->_playback) { @@ -1529,7 +1545,7 @@ HistoryGif::HistoryGif(HistoryItem *parent, DocumentData *document, const QStrin setStatusSize(FileStatusSizeReady); if (!caption.isEmpty()) { - _caption.setText(st::msgFont, caption + _parent->skipBlock(), itemTextNoMonoOptions(_parent)); + _caption.setText(st::messageTextStyle, caption + _parent->skipBlock(), itemTextNoMonoOptions(_parent)); } _data->thumb->load(); @@ -2215,13 +2231,10 @@ ClickHandlerPtr addContactClickHandler(HistoryItem *item) { HistoryContact::HistoryContact(HistoryItem *parent, int32 userId, const QString &first, const QString &last, const QString &phone) : HistoryMedia(parent) , _userId(userId) -, _contact(0) -, _phonew(0) , _fname(first) , _lname(last) -, _phone(App::formatPhone(phone)) -, _linkw(0) { - _name.setText(st::semiboldFont, lng_full_name(lt_first_name, first, lt_last_name, last).trimmed(), _textNameOptions); +, _phone(App::formatPhone(phone)) { + _name.setText(st::semiboldTextStyle, lng_full_name(lt_first_name, first, lt_last_name, last).trimmed(), _textNameOptions); _phonew = st::normalFont->width(_phone); } @@ -2264,6 +2277,9 @@ void HistoryContact::initDimensions() { } else { _minh = st::msgFilePadding.top() + st::msgFileSize + st::msgFilePadding.bottom(); } + if (!isBubbleTop()) { + _minh -= st::msgFileTopMinus; + } _height = _minh; } @@ -2279,21 +2295,22 @@ void HistoryContact::draw(Painter &p, const QRect &r, TextSelection selection, T } int32 nameleft = 0, nametop = 0, nameright = 0, statustop = 0, linktop = 0; + auto topMinus = isBubbleTop() ? 0 : st::msgFileTopMinus; if (_userId) { nameleft = st::msgFileThumbPadding.left() + st::msgFileThumbSize + st::msgFileThumbPadding.right(); - nametop = st::msgFileThumbNameTop; + nametop = st::msgFileThumbNameTop - topMinus; nameright = st::msgFileThumbPadding.left(); - statustop = st::msgFileThumbStatusTop; - linktop = st::msgFileThumbLinkTop; + statustop = st::msgFileThumbStatusTop - topMinus; + linktop = st::msgFileThumbLinkTop - topMinus; - QRect rthumb(rtlrect(st::msgFileThumbPadding.left(), st::msgFileThumbPadding.top(), st::msgFileThumbSize, st::msgFileThumbSize, width)); + QRect rthumb(rtlrect(st::msgFileThumbPadding.left(), st::msgFileThumbPadding.top() - topMinus, st::msgFileThumbSize, st::msgFileThumbSize, width)); if (_contact) { _contact->paintUserpic(p, st::msgFileThumbSize, rthumb.x(), rthumb.y()); } else { p.drawPixmap(rthumb.topLeft(), userDefPhoto(qAbs(_userId) % kUserColorsCount)->pixCircled(st::msgFileThumbSize, st::msgFileThumbSize)); } if (selected) { - App::roundRect(p, rthumb, textstyleCurrent()->selectOverlay, SelectedOverlaySmallCorners); + App::roundRect(p, rthumb, p.textPalette().selectOverlay, SelectedOverlaySmallCorners); } bool over = ClickHandler::showAsActive(_linkl); @@ -2302,11 +2319,11 @@ void HistoryContact::draw(Painter &p, const QRect &r, TextSelection selection, T p.drawTextLeft(nameleft, linktop, width, _link, _linkw); } else { nameleft = st::msgFilePadding.left() + st::msgFileSize + st::msgFilePadding.right(); - nametop = st::msgFileNameTop; + nametop = st::msgFileNameTop - topMinus; nameright = st::msgFilePadding.left(); - statustop = st::msgFileStatusTop; + statustop = st::msgFileStatusTop - topMinus; - QRect inner(rtlrect(st::msgFilePadding.left(), st::msgFilePadding.top(), st::msgFileSize, st::msgFileSize, width)); + QRect inner(rtlrect(st::msgFilePadding.left(), st::msgFilePadding.top() - topMinus, st::msgFileSize, st::msgFileSize, width)); p.drawPixmap(inner.topLeft(), userDefPhoto(qAbs(_parent->id) % kUserColorsCount)->pixCircled(st::msgFileSize, st::msgFileSize)); } int32 namewidth = width - nameleft - nameright; @@ -2326,9 +2343,10 @@ HistoryTextState HistoryContact::getState(int x, int y, HistoryStateRequest requ bool out = _parent->out(), isPost = _parent->isPost(), outbg = out && !isPost; int32 nameleft = 0, nametop = 0, nameright = 0, statustop = 0, linktop = 0; + auto topMinus = isBubbleTop() ? 0 : st::msgFileTopMinus; if (_userId) { nameleft = st::msgFileThumbPadding.left() + st::msgFileThumbSize + st::msgFileThumbPadding.right(); - linktop = st::msgFileThumbLinkTop; + linktop = st::msgFileThumbLinkTop - topMinus; if (rtlrect(nameleft, linktop, _linkw, st::semiboldFont->height, _width).contains(x, y)) { result.link = _linkl; return result; @@ -2375,6 +2393,7 @@ void HistoryContact::updateSentMedia(const MTPMessageMedia &media) { } namespace { + QString siteNameFromUrl(const QString &url) { QUrl u(url); QString pretty = u.isValid() ? u.toDisplayString() : url; @@ -2400,6 +2419,7 @@ int32 articleThumbHeight(PhotoData *thumb, int32 width) { } int32 _lineHeight = 0; + } // namespace HistoryWebPage::HistoryWebPage(HistoryItem *parent, WebPageData *data) : HistoryMedia(parent) @@ -2479,13 +2499,13 @@ void HistoryWebPage::initDimensions() { } else if (_data->siteName == qstr("Instagram")) { opts = &_instagramDescriptionOptions; } - _description.setText(st::webPageDescriptionFont, text, *opts); + _description.setText(st::webPageDescriptionStyle, text, *opts); } if (_title.isEmpty() && !title.isEmpty()) { if (!_asArticle && !_attach && _description.isEmpty()) { title += _parent->skipBlock(); } - _title.setText(st::webPageTitleFont, title, _webpageTitleOptions); + _title.setText(st::webPageTitleStyle, title, _webpageTitleOptions); } if (!_siteNameWidth && !_data->siteName.isEmpty()) { _siteNameWidth = st::webPageTitleFont->width(_data->siteName); @@ -2682,7 +2702,7 @@ void HistoryWebPage::draw(Painter &p, const QRect &r, TextSelection selection, T } p.drawPixmapLeft(padding.left() + width - pw, tshift, _width, pix); if (selected) { - App::roundRect(p, rtlrect(padding.left() + width - pw, tshift, pw, _pixh, _width), textstyleCurrent()->selectOverlay, SelectedOverlaySmallCorners); + App::roundRect(p, rtlrect(padding.left() + width - pw, tshift, pw, _pixh, _width), p.textPalette().selectOverlay, SelectedOverlaySmallCorners); } width -= pw + st::webPagePhotoDelta; } @@ -2943,11 +2963,11 @@ void HistoryGame::initDimensions() { if (_description.isEmpty() && !_data->description.isEmpty()) { auto text = _data->description; if (!text.isEmpty()) { - _description.setText(st::webPageDescriptionFont, text, _webpageDescriptionOptions); + _description.setText(st::webPageDescriptionStyle, text, _webpageDescriptionOptions); } } if (_title.isEmpty() && !title.isEmpty()) { - _title.setText(st::webPageTitleFont, title, _webpageTitleOptions); + _title.setText(st::webPageTitleStyle, title, _webpageTitleOptions); } // init dimensions @@ -3183,7 +3203,7 @@ TextSelection HistoryGame::adjustSelection(TextSelection selection, TextSelectTy } bool HistoryGame::consumeMessageText(const TextWithEntities &textWithEntities) { - _description.setMarkedText(st::webPageDescriptionFont, textWithEntities, itemTextOptions(_parent)); + _description.setMarkedText(st::webPageDescriptionStyle, textWithEntities, itemTextOptions(_parent)); return true; } @@ -3279,10 +3299,10 @@ HistoryLocation::HistoryLocation(HistoryItem *parent, const LocationCoords &coor , _description(st::msgMinWidth) , _link(new LocationClickHandler(coords)) { if (!title.isEmpty()) { - _title.setText(st::webPageTitleFont, textClean(title), _webpageTitleOptions); + _title.setText(st::webPageTitleStyle, textClean(title), _webpageTitleOptions); } if (!description.isEmpty()) { - _description.setText(st::webPageDescriptionFont, textClean(description), _webpageDescriptionOptions); + _description.setText(st::webPageDescriptionStyle, textClean(description), _webpageDescriptionOptions); } } diff --git a/Telegram/SourceFiles/history/history_media_types.h b/Telegram/SourceFiles/history/history_media_types.h index c58391476..0e9dc6f62 100644 --- a/Telegram/SourceFiles/history/history_media_types.h +++ b/Telegram/SourceFiles/history/history_media_types.h @@ -295,7 +295,9 @@ struct HistoryDocumentThumbed : public RuntimeComponent mutable QString _link; }; struct HistoryDocumentCaptioned : public RuntimeComponent { - Text _caption = { int(st::msgFileMinWidth) - st::msgPadding.left() - st::msgPadding.right() }; + HistoryDocumentCaptioned(); + + Text _caption; }; struct HistoryDocumentNamed : public RuntimeComponent { QString _name; @@ -305,7 +307,7 @@ class HistoryDocument; struct HistoryDocumentVoicePlayback { HistoryDocumentVoicePlayback(const HistoryDocument *that); - int32 _position; + int32 _position = 0; anim::value a_progress; BasicAnimation _a_progress; }; @@ -384,9 +386,7 @@ public: bool customInfoLayout() const override { return false; } - QMargins bubbleMargins() const override { - return Get() ? QMargins(st::msgFileThumbPadding.left(), st::msgFileThumbPadding.top(), st::msgFileThumbPadding.left(), st::msgFileThumbPadding.bottom()) : st::msgPadding; - } + QMargins bubbleMargins() const override; bool hideForwardedFrom() const override { return _data->song(); } @@ -631,14 +631,14 @@ public: private: int32 _userId; - UserData *_contact; + UserData *_contact = nullptr; - int32 _phonew; + int _phonew = 0; QString _fname, _lname, _phone; Text _name; ClickHandlerPtr _linkl; - int32 _linkw; + int _linkw = 0; QString _link; }; diff --git a/Telegram/SourceFiles/history/history_message.cpp b/Telegram/SourceFiles/history/history_message.cpp index cd13a87a9..83a0de382 100644 --- a/Telegram/SourceFiles/history/history_message.cpp +++ b/Telegram/SourceFiles/history/history_message.cpp @@ -112,7 +112,7 @@ void HistoryMessageSigned::create(UserData *from, const QDateTime &date) { if (timew + namew > st::maxSignatureSize) { name = st::msgDateFont->elided(from->firstName, st::maxSignatureSize - timew); } - _signature.setText(st::msgDateFont, name + time, _textNameOptions); + _signature.setText(st::msgDateTextStyle, name + time, _textNameOptions); } int HistoryMessageSigned::maxWidth() const { @@ -123,7 +123,7 @@ void HistoryMessageEdited::create(const QDateTime &editDate, const QDateTime &da _editDate = editDate; QString time = date.toString(cTimeFormat()); - _edited.setText(st::msgDateFont, lang(lng_edited) + ' ' + time, _textNameOptions); + _edited.setText(st::msgDateTextStyle, lang(lng_edited) + ' ' + time, _textNameOptions); } int HistoryMessageEdited::maxWidth() const { @@ -151,9 +151,7 @@ void HistoryMessageForwarded::create(const HistoryMessageVia *via) const { } } TextParseOptions opts = { TextParseRichText, 0, 0, Qt::LayoutDirectionAuto }; - textstyleSet(&st::inFwdTextStyle); - _text.setText(st::msgServiceNameFont, text, opts); - textstyleRestore(); + _text.setText(st::fwdTextStyle, text, opts); _text.setLink(1, (_originalId && _authorOriginal->isChannel()) ? goToMessageClickHandler(_authorOriginal, _originalId) : _authorOriginal->openLink()); if (via) { _text.setLink(2, via->_lnk); @@ -174,7 +172,7 @@ bool HistoryMessageReply::updateData(HistoryMessage *holder, bool force) { } if (replyToMsg) { - replyToText.setText(st::msgFont, textClean(replyToMsg->inReplyText()), _textDlgOptions); + replyToText.setText(st::messageTextStyle, textClean(replyToMsg->inReplyText()), _textDlgOptions); updateName(); @@ -214,7 +212,7 @@ bool HistoryMessageReply::isNameUpdated() const { void HistoryMessageReply::updateName() const { if (replyToMsg) { QString name = (_replyToVia && replyToMsg->author()->isUser()) ? replyToMsg->author()->asUser()->firstName : App::peerName(replyToMsg->author()); - replyToName.setText(st::msgServiceNameFont, name, _textNameOptions); + replyToName.setText(st::fwdTextStyle, name, _textNameOptions); replyToVersion = replyToMsg->author()->nameVersion; bool hasPreview = replyToMsg->getMedia() ? replyToMsg->getMedia()->hasReplyPreview() : false; int32 previewSkip = hasPreview ? (st::msgReplyBarSize.height() + st::msgReplyBarSkip - st::msgReplyBarSize.width() - st::msgReplyBarPos.x()) : 0; @@ -248,12 +246,12 @@ void HistoryMessageReply::itemRemoved(HistoryMessage *holder, HistoryItem *remov void HistoryMessageReply::paint(Painter &p, const HistoryItem *holder, int x, int y, int w, PaintFlags flags) const { bool selected = (flags & PaintSelected), outbg = holder->hasOutLayout(); - const style::color *bar = &st::msgImgReplyBarColor; + style::color bar = st::msgImgReplyBarColor; if (flags & PaintInBubble) { - bar = &((flags & PaintSelected) ? (outbg ? st::msgOutReplyBarSelColor : st::msgInReplyBarSelColor) : (outbg ? st::msgOutReplyBarColor : st::msgInReplyBarColor)); + bar = (flags & PaintSelected) ? (outbg ? st::msgOutReplyBarSelColor : st::msgInReplyBarSelColor) : (outbg ? st::msgOutReplyBarColor : st::msgInReplyBarColor); } QRect rbar(rtlrect(x + st::msgReplyBarPos.x(), y + st::msgReplyPadding.top() + st::msgReplyBarPos.y(), st::msgReplyBarSize.width(), st::msgReplyBarSize.height(), w + 2 * x)); - p.fillRect(rbar, *bar); + p.fillRect(rbar, bar); if (w > st::msgReplyBarSkip) { if (replyToMsg) { @@ -266,7 +264,7 @@ void HistoryMessageReply::paint(Painter &p, const HistoryItem *holder, int x, in QRect to(rtlrect(x + st::msgReplyBarSkip, y + st::msgReplyPadding.top() + st::msgReplyBarPos.y(), st::msgReplyBarSize.height(), st::msgReplyBarSize.height(), w + 2 * x)); p.drawPixmap(to.x(), to.y(), replyPreview->pixSingle(replyPreview->width() / cIntRetinaFactor(), replyPreview->height() / cIntRetinaFactor(), to.width(), to.height(), ImageRoundRadius::Small)); if (selected) { - App::roundRect(p, to, textstyleCurrent()->selectOverlay, SelectedOverlaySmallCorners); + App::roundRect(p, to, p.textPalette().selectOverlay, SelectedOverlaySmallCorners); } } } @@ -305,8 +303,8 @@ void HistoryMessage::KeyboardStyle::startPaint(Painter &p) const { p.setPen(st::msgServiceFg); } -style::font HistoryMessage::KeyboardStyle::textFont() const { - return st::msgServiceFont; +const style::TextStyle &HistoryMessage::KeyboardStyle::textStyle() const { + return st::serviceTextStyle; } void HistoryMessage::KeyboardStyle::repaint(const HistoryItem *item) const { @@ -1026,22 +1024,18 @@ void HistoryMessage::setText(const TextWithEntities &textWithEntities) { if (mediaDisplayed && _media->consumeMessageText(textWithEntities)) { setEmptyText(); } else { - textstyleSet(&((out() && !isPost()) ? st::outTextStyle : st::inTextStyle)); if (_media && _media->isDisplayed() && !_media->isAboveMessage()) { - _text.setMarkedText(st::msgFont, textWithEntities, itemTextOptions(this)); + _text.setMarkedText(st::messageTextStyle, textWithEntities, itemTextOptions(this)); } else { - _text.setMarkedText(st::msgFont, { textWithEntities.text + skipBlock(), textWithEntities.entities }, itemTextOptions(this)); + _text.setMarkedText(st::messageTextStyle, { textWithEntities.text + skipBlock(), textWithEntities.entities }, itemTextOptions(this)); } - textstyleRestore(); _textWidth = -1; _textHeight = 0; } } void HistoryMessage::setEmptyText() { - textstyleSet(&((out() && !isPost()) ? st::outTextStyle : st::inTextStyle)); - _text.setMarkedText(st::msgFont, { QString(), EntitiesInText() }, itemTextOptions(this)); - textstyleRestore(); + _text.setMarkedText(st::messageTextStyle, { QString(), EntitiesInText() }, itemTextOptions(this)); _textWidth = -1; _textHeight = 0; @@ -1271,12 +1265,12 @@ void HistoryMessage::draw(Painter &p, const QRect &r, TextSelection selection, T float64 dt = (animms > st::activeFadeInDuration) ? (1 - (animms - st::activeFadeInDuration) / float64(st::activeFadeOutDuration)) : (animms / float64(st::activeFadeInDuration)); float64 o = p.opacity(); p.setOpacity(o * dt); - p.fillRect(0, skiph, _history->width, height - skiph, textstyleCurrent()->selectOverlay->b); + p.fillRect(0, skiph, _history->width, height - skiph, st::defaultTextPalette.selectOverlay); p.setOpacity(o); } } - textstyleSet(&(outbg ? st::outTextStyle : st::inTextStyle)); + p.setTextPalette(outbg ? st::outTextPalette : st::inTextPalette); if (auto keyboard = inlineReplyKeyboard()) { int h = st::msgBotKbButton.margin + keyboard->naturalHeight(); @@ -1344,7 +1338,7 @@ void HistoryMessage::draw(Painter &p, const QRect &r, TextSelection selection, T p.translate(-left, -top); } - textstyleRestore(); + p.restoreTextPalette(); auto reply = Get(); if (reply && reply->isNameUpdated()) { @@ -1382,9 +1376,9 @@ void HistoryMessage::paintForwardedInfo(Painter &p, QRect &trect, bool selected) auto fwd = Get(); bool breakEverywhere = (fwd->_text.countHeight(trect.width()) > 2 * serviceFont->height); - textstyleSet(&(selected ? (hasOutLayout() ? st::outFwdTextStyleSelected : st::inFwdTextStyleSelected) : (hasOutLayout() ? st::outFwdTextStyle : st::inFwdTextStyle))); + p.setTextPalette(selected ? (hasOutLayout() ? st::outFwdTextPaletteSelected : st::inFwdTextPaletteSelected) : (hasOutLayout() ? st::outFwdTextPalette : st::inFwdTextPalette)); fwd->_text.drawElided(p, trect.x(), trect.y(), trect.width(), 2, style::al_left, 0, -1, 0, breakEverywhere); - textstyleSet(&(hasOutLayout() ? st::outTextStyle : st::inTextStyle)); + p.setTextPalette(hasOutLayout() ? st::outTextPalette : st::inTextPalette); trect.setY(trect.y() + (((fwd->_text.maxWidth() > trect.width()) ? 2 : 1) * serviceFont->height)); } @@ -1478,10 +1472,8 @@ int HistoryMessage::performResizeGetHeight(int width) { } else { auto textWidth = qMax(width - st::msgPadding.left() - st::msgPadding.right(), 1); if (textWidth != _textWidth) { - textstyleSet(&((out() && !isPost()) ? st::outTextStyle : st::inTextStyle)); _textWidth = textWidth; _textHeight = _text.countHeight(textWidth); - textstyleRestore(); } _height = _textHeight; } @@ -1676,9 +1668,7 @@ bool HistoryMessage::getStateForwardedInfo(int x, int y, QRect &trect, HistoryTe if (breakEverywhere) { textRequest.flags |= Text::StateRequest::Flag::BreakEverywhere; } - textstyleSet(&st::inFwdTextStyle); *outResult = fwd->_text.getState(x - trect.left(), y - trect.top(), trect.width(), textRequest); - textstyleRestore(); outResult->symbol = 0; outResult->afterSymbol = false; if (breakEverywhere) { @@ -1722,9 +1712,7 @@ bool HistoryMessage::getStateViaBotIdInfo(int x, int y, QRect &trect, HistoryTex bool HistoryMessage::getStateText(int x, int y, QRect &trect, HistoryTextState *outResult, const HistoryStateRequest &request) const { if (trect.contains(x, y)) { - textstyleSet(&((out() && !isPost()) ? st::outTextStyle : st::inTextStyle)); *outResult = _text.getState(x - trect.x(), y - trect.y(), trect.width(), request.forText()); - textstyleRestore(); return true; } return false; @@ -2105,9 +2093,7 @@ QString HistoryService::inReplyText() const { } void HistoryService::setServiceText(const QString &text, const Links &links) { - textstyleSet(&st::serviceTextStyle); - _text.setText(st::msgServiceFont, text, _historySrvOptions); - textstyleRestore(); + _text.setText(st::serviceTextStyle, text, _historySrvOptions); for (int i = 0, count = links.size(); i != count; ++i) { _text.setLink(1 + i, links.at(i)); } @@ -2169,9 +2155,7 @@ int32 HistoryService::resizeGetHeight_(int32 width) { int32 nwidth = qMax(width - st::msgServicePadding.left() - st::msgServicePadding.right(), 0); if (nwidth != _textWidth) { _textWidth = nwidth; - textstyleSet(&st::serviceTextStyle); _textHeight = _text.countHeight(nwidth); - textstyleRestore(); } if (width >= _maxw) { _height += _minh; @@ -2231,11 +2215,9 @@ HistoryTextState HistoryService::getState(int x, int y, HistoryStateRequest requ auto outer = QRect(left, st::msgServiceMargin.top(), width, height); auto trect = outer.marginsAdded(-st::msgServicePadding); if (trect.contains(x, y)) { - textstyleSet(&st::serviceTextStyle); auto textRequest = request.forText(); textRequest.align = style::al_center; result = _text.getState(x - trect.x(), y - trect.y(), trect.width(), textRequest); - textstyleRestore(); if (auto gamescore = Get()) { if (!result.link && result.cursor == HistoryInTextCursorState && outer.contains(x, y)) { result.link = gamescore->lnk; diff --git a/Telegram/SourceFiles/history/history_message.h b/Telegram/SourceFiles/history/history_message.h index dfaf81cfc..66188beaa 100644 --- a/Telegram/SourceFiles/history/history_message.h +++ b/Telegram/SourceFiles/history/history_message.h @@ -211,7 +211,7 @@ private: int buttonRadius() const override; void startPaint(Painter &p) const override; - style::font textFont() const override; + const style::TextStyle &textStyle() const override; void repaint(const HistoryItem *item) const override; protected: diff --git a/Telegram/SourceFiles/history/history_service_layout.cpp b/Telegram/SourceFiles/history/history_service_layout.cpp index 828df5c06..88c11785e 100644 --- a/Telegram/SourceFiles/history/history_service_layout.cpp +++ b/Telegram/SourceFiles/history/history_service_layout.cpp @@ -196,16 +196,15 @@ void ServiceMessagePainter::paint(Painter &p, const HistoryService *message, con } else { int skiph = st::msgServiceMargin.top() - st::msgServiceMargin.bottom(); - textstyleSet(&st::inTextStyle); float64 dt = (animms > st::activeFadeInDuration) ? (1 - (animms - st::activeFadeInDuration) / float64(st::activeFadeOutDuration)) : (animms / float64(st::activeFadeInDuration)); float64 o = p.opacity(); p.setOpacity(o * dt); - p.fillRect(0, skiph, message->history()->width, message->height() - skiph, textstyleCurrent()->selectOverlay->b); + p.fillRect(0, skiph, message->history()->width, message->height() - skiph, st::defaultTextPalette.selectOverlay); p.setOpacity(o); } } - textstyleSet(&st::serviceTextStyle); + p.setTextPalette(st::serviceTextPalette); if (auto media = message->getMedia()) { height -= st::msgServiceMargin.top() + media->height(); @@ -229,7 +228,7 @@ void ServiceMessagePainter::paint(Painter &p, const HistoryService *message, con p.setFont(st::msgServiceFont); message->_text.draw(p, trect.x(), trect.y(), trect.width(), Qt::AlignCenter, 0, -1, context.selection, false); - textstyleRestore(); + p.restoreTextPalette(); } void ServiceMessagePainter::paintDate(Painter &p, const QDateTime &date, int y, int w) { diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index ba6fd5788..95ca7cbde 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -422,7 +422,7 @@ void HistoryInner::paintEvent(QPaintEvent *e) { bool noHistoryDisplayed = _firstLoading || historyDisplayedEmpty; if (!_firstLoading && _botAbout && !_botAbout->info->text.isEmpty() && _botAbout->height > 0) { if (r.y() < _botAbout->rect.y() + _botAbout->rect.height() && r.y() + r.height() > _botAbout->rect.y()) { - textstyleSet(&st::inTextStyle); + p.setTextPalette(st::inTextPalette); App::roundRect(p, _botAbout->rect, st::msgInBg, MessageInCorners, &st::msgInShadow); p.setFont(st::msgNameFont); @@ -432,7 +432,7 @@ void HistoryInner::paintEvent(QPaintEvent *e) { p.setPen(st::historyTextInFg); _botAbout->info->text.draw(p, _botAbout->rect.left() + st::msgPadding.left(), _botAbout->rect.top() + st::msgPadding.top() + st::msgNameFont->height + st::botDescSkip, _botAbout->width); - textstyleRestore(); + p.restoreTextPalette(); } } else if (noHistoryDisplayed) { HistoryLayout::paintEmpty(p, width(), height()); @@ -1637,7 +1637,7 @@ void HistoryInner::updateBotInfo(bool recount) { int newh = 0; if (_botAbout && !_botAbout->info->description.isEmpty()) { if (_botAbout->info->text.isEmpty()) { - _botAbout->info->text.setText(st::msgFont, _botAbout->info->description, _historyBotNoMonoOptions); + _botAbout->info->text.setText(st::messageTextStyle, _botAbout->info->description, _historyBotNoMonoOptions); if (recount) { int32 tw = _scroll->width() - st::msgMargin.left() - st::msgMargin.right(); if (tw > st::msgMaxWidth) tw = st::msgMaxWidth; @@ -2359,9 +2359,9 @@ MessageField::MessageField(HistoryWidget *history, const style::FlatTextarea &st } bool MessageField::hasSendText() const { - auto &text(getTextWithTags().text); + auto &text = getTextWithTags().text; for (auto *ch = text.constData(), *e = ch + text.size(); ch != e; ++ch) { - ushort code = ch->unicode(); + auto code = ch->unicode(); if (code != ' ' && code != '\n' && code != '\r' && !chReplacedBySpace(code)) { return true; } @@ -2472,11 +2472,11 @@ void BotKeyboard::paintEvent(QPaintEvent *e) { void BotKeyboard::Style::startPaint(Painter &p) const { p.setPen(st::botKbColor); - p.setFont(st::botKbFont); + p.setFont(st::botKbStyle.font); } -style::font BotKeyboard::Style::textFont() const { - return st::botKbFont; +const style::TextStyle &BotKeyboard::Style::textStyle() const { + return st::botKbStyle; } void BotKeyboard::Style::repaint(const HistoryItem *item) const { @@ -2677,28 +2677,28 @@ void BotKeyboard::updateSelected() { HistoryHider::HistoryHider(MainWidget *parent, bool forwardSelected) : TWidget(parent) , _forwardSelected(forwardSelected) , _send(this, lang(lng_forward_send), st::defaultBoxButton) -, _cancel(this, lang(lng_cancel), st::cancelBoxButton) { +, _cancel(this, lang(lng_cancel), st::defaultBoxButton) { init(); } HistoryHider::HistoryHider(MainWidget *parent, UserData *sharedContact) : TWidget(parent) , _sharedContact(sharedContact) , _send(this, lang(lng_forward_send), st::defaultBoxButton) -, _cancel(this, lang(lng_cancel), st::cancelBoxButton) { +, _cancel(this, lang(lng_cancel), st::defaultBoxButton) { init(); } HistoryHider::HistoryHider(MainWidget *parent) : TWidget(parent) , _sendPath(true) , _send(this, lang(lng_forward_send), st::defaultBoxButton) -, _cancel(this, lang(lng_cancel), st::cancelBoxButton) { +, _cancel(this, lang(lng_cancel), st::defaultBoxButton) { init(); } HistoryHider::HistoryHider(MainWidget *parent, const QString &botAndQuery) : TWidget(parent) , _botAndQuery(botAndQuery) , _send(this, lang(lng_forward_send), st::defaultBoxButton) -, _cancel(this, lang(lng_cancel), st::cancelBoxButton) { +, _cancel(this, lang(lng_cancel), st::defaultBoxButton) { init(); } @@ -2706,7 +2706,7 @@ HistoryHider::HistoryHider(MainWidget *parent, const QString &url, const QString , _shareUrl(url) , _shareText(text) , _send(this, lang(lng_forward_send), st::defaultBoxButton) -, _cancel(this, lang(lng_cancel), st::cancelBoxButton) { +, _cancel(this, lang(lng_cancel), st::defaultBoxButton) { init(); } @@ -2746,9 +2746,7 @@ void HistoryHider::paintEvent(QPaintEvent *e) { App::roundRect(p, _box, st::boxBg, BoxCorners); p.setPen(st::boxTextFg); - textstyleSet(&st::boxTextStyle); _toText.drawLeftElided(p, _box.left() + st::boxPadding.left(), _box.y() + st::boxTopMargin + st::boxPadding.top(), _toTextWidth + 2, width(), 1, style::al_left); - textstyleRestore(); } else { auto w = st::historyForwardChooseMargins.left() + _chooseWidth + st::historyForwardChooseMargins.right(); auto h = st::historyForwardChooseMargins.top() + st::historyForwardChooseFont->height + st::historyForwardChooseMargins.bottom(); @@ -2856,7 +2854,7 @@ void HistoryHider::resizeEvent(QResizeEvent *e) { bool HistoryHider::offerPeer(PeerId peer) { if (!peer) { _offered = nullptr; - _toText.setText(st::boxTextFont, QString()); + _toText.setText(st::boxTextStyle, QString()); _toTextWidth = 0; resizeEvent(nullptr); return false; @@ -2896,9 +2894,7 @@ bool HistoryHider::offerPeer(PeerId peer) { return false; } - textstyleSet(&st::boxTextStyle); - _toText.setText(st::boxTextFont, phrase, _textNameOptions); - textstyleRestore(); + _toText.setText(st::boxTextStyle, phrase, _textNameOptions); _toTextWidth = _toText.maxWidth(); if (_toTextWidth > _box.width() - st::boxPadding.left() - st::boxLayerButtonPadding.right()) { _toTextWidth = _box.width() - st::boxPadding.left() - st::boxLayerButtonPadding.right(); @@ -6089,7 +6085,7 @@ void HistoryWidget::onKbToggle(bool manual) { _kbReplyTo = (_peer->isChat() || _peer->isChannel() || _keyboard->forceReply()) ? App::histItemById(_keyboard->forMsgId()) : 0; if (_kbReplyTo && !_editMsgId && !_replyToId && fieldEnabled) { updateReplyToName(); - _replyEditMsgText.setText(st::msgFont, textClean(_kbReplyTo->inReplyText()), _textDlgOptions); + _replyEditMsgText.setText(st::messageTextStyle, textClean(_kbReplyTo->inReplyText()), _textDlgOptions); _fieldBarCancel->show(); updateMouseTracking(); } @@ -6108,7 +6104,7 @@ void HistoryWidget::onKbToggle(bool manual) { _kbReplyTo = (_peer->isChat() || _peer->isChannel() || _keyboard->forceReply()) ? App::histItemById(_keyboard->forMsgId()) : 0; if (_kbReplyTo && !_editMsgId && !_replyToId) { updateReplyToName(); - _replyEditMsgText.setText(st::msgFont, textClean(_kbReplyTo->inReplyText()), _textDlgOptions); + _replyEditMsgText.setText(st::messageTextStyle, textClean(_kbReplyTo->inReplyText()), _textDlgOptions); _fieldBarCancel->show(); updateMouseTracking(); } @@ -6180,15 +6176,14 @@ bool HistoryWidget::paintTopBar(Painter &p, int decreaseWidth, TimeMs ms) { if (!_history) return false; auto increaseLeft = (Adaptive::OneColumn() || !App::main()->stackIsEmpty()) ? (st::topBarArrowPadding.left() - st::topBarArrowPadding.right()) : 0; - decreaseWidth += increaseLeft; auto nameleft = st::topBarArrowPadding.right() + increaseLeft; auto nametop = st::topBarArrowPadding.top(); auto statustop = st::topBarHeight - st::topBarArrowPadding.bottom() - st::dialogsTextFont->height; - auto namewidth = width() - decreaseWidth - st::topBarArrowPadding.left() - st::topBarArrowPadding.right(); + auto namewidth = width() - decreaseWidth - nameleft - st::topBarArrowPadding.right(); p.setFont(st::dialogsTextFont); if (!_history->paintSendAction(p, nameleft, statustop, namewidth, width(), st::historyStatusFgTyping, ms)) { p.setPen(_titlePeerTextOnline ? st::historyStatusFgActive : st::historyStatusFg); - p.drawText(nameleft, st::topBarHeight - st::topBarArrowPadding.bottom() - st::dialogsTextFont->height + st::dialogsTextFont->ascent, _titlePeerText); + p.drawText(nameleft, statustop + st::dialogsTextFont->ascent, _titlePeerText); } p.setPen(st::dialogsNameFg); @@ -6374,8 +6369,8 @@ void HistoryWidget::moveFieldControls() { } void HistoryWidget::updateFieldSize() { - bool kbShowShown = _history && !_kbShown && _keyboard->hasMarkup(); - int fieldWidth = width() - _attachToggle->width(); + auto kbShowShown = _history && !_kbShown && _keyboard->hasMarkup(); + auto fieldWidth = width() - _attachToggle->width() - st::historySendRight; fieldWidth -= _send->width(); fieldWidth -= _attachEmoji->width(); if (kbShowShown) fieldWidth -= _botKeyboardShow->width(); @@ -7382,7 +7377,7 @@ void HistoryWidget::updateBotKeyboard(History *h, bool force) { _kbReplyTo = (_peer->isChat() || _peer->isChannel() || _keyboard->forceReply()) ? App::histItemById(_keyboard->forMsgId()) : 0; if (_kbReplyTo && !_replyToId) { updateReplyToName(); - _replyEditMsgText.setText(st::msgFont, textClean(_kbReplyTo->inReplyText()), _textDlgOptions); + _replyEditMsgText.setText(st::messageTextStyle, textClean(_kbReplyTo->inReplyText()), _textDlgOptions); _fieldBarCancel->show(); updateMouseTracking(); } @@ -7638,7 +7633,7 @@ void HistoryWidget::updatePinnedBar(bool force) { _pinnedBar->msg = App::histItemById(_history->channelId(), _pinnedBar->msgId); } if (_pinnedBar->msg) { - _pinnedBar->text.setText(st::msgFont, textClean(_pinnedBar->msg->notificationText()), _textDlgOptions); + _pinnedBar->text.setText(st::messageTextStyle, textClean(_pinnedBar->msg->notificationText()), _textDlgOptions); update(); } else if (force) { if (_peer && _peer->isMegagroup()) { @@ -7870,7 +7865,7 @@ void HistoryWidget::onReplyToMessage() { } else { _replyEditMsg = to; _replyToId = to->id; - _replyEditMsgText.setText(st::msgFont, textClean(_replyEditMsg->inReplyText()), _textDlgOptions); + _replyEditMsgText.setText(st::messageTextStyle, textClean(_replyEditMsg->inReplyText()), _textDlgOptions); updateBotKeyboard(); @@ -8207,13 +8202,13 @@ void HistoryWidget::updatePreview() { _fieldBarCancel->show(); updateMouseTracking(); if (_previewData->pendingTill) { - _previewTitle.setText(st::msgServiceNameFont, lang(lng_preview_loading), _textNameOptions); + _previewTitle.setText(st::msgNameStyle, lang(lng_preview_loading), _textNameOptions); #ifndef OS_MAC_OLD auto linkText = _previewLinks.splitRef(' ').at(0).toString(); #else // OS_MAC_OLD auto linkText = _previewLinks.split(' ').at(0); #endif // OS_MAC_OLD - _previewDescription.setText(st::msgFont, textClean(linkText), _textDlgOptions); + _previewDescription.setText(st::messageTextStyle, textClean(linkText), _textDlgOptions); int32 t = (_previewData->pendingTill - unixtime()) * 1000; if (t <= 0) t = 1; @@ -8244,8 +8239,8 @@ void HistoryWidget::updatePreview() { title = lang(lng_attach_photo); } } - _previewTitle.setText(st::msgServiceNameFont, title, _textNameOptions); - _previewDescription.setText(st::msgFont, textClean(desc), _textDlgOptions); + _previewTitle.setText(st::msgNameStyle, title, _textNameOptions); + _previewDescription.setText(st::messageTextStyle, textClean(desc), _textDlgOptions); } } else if (!readyToForward() && !replyToId() && !_editMsgId) { _fieldBarCancel->hide(); @@ -8509,7 +8504,7 @@ void HistoryWidget::updateReplyEditTexts(bool force) { _replyEditMsg = App::histItemById(_channel, _editMsgId ? _editMsgId : _replyToId); } if (_replyEditMsg) { - _replyEditMsgText.setText(st::msgFont, textClean(_replyEditMsg->inReplyText()), _textDlgOptions); + _replyEditMsgText.setText(st::messageTextStyle, textClean(_replyEditMsg->inReplyText()), _textDlgOptions); updateBotKeyboard(); @@ -8539,7 +8534,7 @@ void HistoryWidget::updateForwarding(bool force) { void HistoryWidget::updateReplyToName() { if (_editMsgId) return; if (!_replyEditMsg && (_replyToId || !_kbReplyTo)) return; - _replyToName.setText(st::msgServiceNameFont, App::peerName((_replyEditMsg ? _replyEditMsg : _kbReplyTo)->author()), _textNameOptions); + _replyToName.setText(st::msgNameStyle, App::peerName((_replyEditMsg ? _replyEditMsg : _kbReplyTo)->author()), _textNameOptions); _replyToNameVersion = (_replyEditMsg ? _replyEditMsg : _kbReplyTo)->author()->nameVersion; } @@ -8826,7 +8821,7 @@ void HistoryWidget::paintEvent(QPaintEvent *e) { PainterHighQualityEnabler hq(p); QRect to, from; - App::main()->backgroundParams(fill, to, from); + Window::Theme::ComputeBackgroundRects(fill, pix.size(), to, from); to.moveTop(to.top() + fromy); p.drawPixmap(to, pix, from); } diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index c7854da4a..cabbcabba 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -439,7 +439,7 @@ private: int buttonRadius() const override; void startPaint(Painter &p) const override; - style::font textFont() const override; + const style::TextStyle &textStyle() const override; void repaint(const HistoryItem *item) const override; protected: diff --git a/Telegram/SourceFiles/inline_bots/inline_bot_layout_internal.cpp b/Telegram/SourceFiles/inline_bots/inline_bot_layout_internal.cpp index 1139bc23f..d0a47931e 100644 --- a/Telegram/SourceFiles/inline_bots/inline_bot_layout_internal.cpp +++ b/Telegram/SourceFiles/inline_bots/inline_bot_layout_internal.cpp @@ -572,7 +572,7 @@ void Video::initDimensions() { if (title.isEmpty()) { title = lang(lng_media_video); } - _title.setText(st::semiboldFont, title, titleOpts); + _title.setText(st::semiboldTextStyle, title, titleOpts); int32 titleHeight = qMin(_title.countHeight(_maxw), 2 * st::semiboldFont->height); int32 descriptionLines = withThumb ? (titleHeight > st::semiboldFont->height ? 1 : 2) : 3; @@ -582,7 +582,7 @@ void Video::initDimensions() { if (description.isEmpty()) { description = _duration; } - _description.setText(st::normalFont, description, descriptionOpts); + _description.setText(st::defaultTextStyle, description, descriptionOpts); int32 descriptionHeight = qMin(_description.countHeight(_maxw), descriptionLines * st::normalFont->height); _minh = st::inlineThumbSize; @@ -683,10 +683,10 @@ void File::initDimensions() { int textWidth = _maxw - (st::msgFileSize + st::inlineThumbSkip); TextParseOptions titleOpts = { 0, _maxw, st::semiboldFont->height, Qt::LayoutDirectionAuto }; - _title.setText(st::semiboldFont, textOneLine(_result->getLayoutTitle()), titleOpts); + _title.setText(st::semiboldTextStyle, textOneLine(_result->getLayoutTitle()), titleOpts); TextParseOptions descriptionOpts = { TextParseMultiline, _maxw, st::normalFont->height, Qt::LayoutDirectionAuto }; - _description.setText(st::normalFont, _result->getLayoutDescription(), descriptionOpts); + _description.setText(st::defaultTextStyle, _result->getLayoutDescription(), descriptionOpts); _minh = st::msgFileSize; _minh += st::inlineRowMargin * 2 + st::inlineRowBorder; @@ -892,11 +892,11 @@ void Contact::initDimensions() { _maxw = st::emojiPanWidth - st::emojiScroll.width - st::inlineResultsLeft; int32 textWidth = _maxw - (st::inlineThumbSize + st::inlineThumbSkip); TextParseOptions titleOpts = { 0, _maxw, st::semiboldFont->height, Qt::LayoutDirectionAuto }; - _title.setText(st::semiboldFont, textOneLine(_result->getLayoutTitle()), titleOpts); + _title.setText(st::semiboldTextStyle, textOneLine(_result->getLayoutTitle()), titleOpts); int32 titleHeight = qMin(_title.countHeight(_maxw), st::semiboldFont->height); TextParseOptions descriptionOpts = { TextParseMultiline, _maxw, st::normalFont->height, Qt::LayoutDirectionAuto }; - _description.setText(st::normalFont, _result->getLayoutDescription(), descriptionOpts); + _description.setText(st::defaultTextStyle, _result->getLayoutDescription(), descriptionOpts); int32 descriptionHeight = qMin(_description.countHeight(_maxw), st::normalFont->height); _minh = st::msgFileSize; @@ -989,13 +989,13 @@ void Article::initDimensions() { _maxw = st::emojiPanWidth - st::emojiScroll.width - st::inlineResultsLeft; int32 textWidth = _maxw - (_withThumb ? (st::inlineThumbSize + st::inlineThumbSkip) : 0); TextParseOptions titleOpts = { 0, _maxw, 2 * st::semiboldFont->height, Qt::LayoutDirectionAuto }; - _title.setText(st::semiboldFont, textOneLine(_result->getLayoutTitle()), titleOpts); + _title.setText(st::semiboldTextStyle, textOneLine(_result->getLayoutTitle()), titleOpts); int32 titleHeight = qMin(_title.countHeight(_maxw), 2 * st::semiboldFont->height); int32 descriptionLines = (_withThumb || _url) ? 2 : 3; QString description = _result->getLayoutDescription(); TextParseOptions descriptionOpts = { TextParseMultiline, _maxw, descriptionLines * st::normalFont->height, Qt::LayoutDirectionAuto }; - _description.setText(st::normalFont, description, descriptionOpts); + _description.setText(st::defaultTextStyle, description, descriptionOpts); int32 descriptionHeight = qMin(_description.countHeight(_maxw), descriptionLines * st::normalFont->height); _minh = titleHeight + descriptionHeight; @@ -1028,14 +1028,14 @@ void Article::paint(Painter &p, const QRect &clip, const PaintContext *context) ImagePtr thumb = getResultThumb(); if (thumb->isNull() && !_thumbLetter.isEmpty()) { int32 index = (_thumbLetter.at(0).unicode() % 4); - const style::color *colors[] = { - &st::msgFile3Bg, - &st::msgFile4Bg, - &st::msgFile2Bg, - &st::msgFile1Bg + style::color colors[] = { + st::msgFile3Bg, + st::msgFile4Bg, + st::msgFile2Bg, + st::msgFile1Bg }; - p.fillRect(rthumb, *colors[index]); + p.fillRect(rthumb, colors[index]); if (!_thumbLetter.isEmpty()) { p.setFont(st::linksLetterFont); p.setPen(st::linksLetterFg); @@ -1157,13 +1157,13 @@ void Game::initDimensions() { _maxw = st::emojiPanWidth - st::emojiScroll.width - st::inlineResultsLeft; int32 textWidth = _maxw - (st::inlineThumbSize + st::inlineThumbSkip); TextParseOptions titleOpts = { 0, _maxw, 2 * st::semiboldFont->height, Qt::LayoutDirectionAuto }; - _title.setText(st::semiboldFont, textOneLine(_result->getLayoutTitle()), titleOpts); + _title.setText(st::semiboldTextStyle, textOneLine(_result->getLayoutTitle()), titleOpts); int32 titleHeight = qMin(_title.countHeight(_maxw), 2 * st::semiboldFont->height); int32 descriptionLines = 2; QString description = _result->getLayoutDescription(); TextParseOptions descriptionOpts = { TextParseMultiline, _maxw, descriptionLines * st::normalFont->height, Qt::LayoutDirectionAuto }; - _description.setText(st::normalFont, description, descriptionOpts); + _description.setText(st::defaultTextStyle, description, descriptionOpts); int32 descriptionHeight = qMin(_description.countHeight(_maxw), descriptionLines * st::normalFont->height); _minh = titleHeight + descriptionHeight; diff --git a/Telegram/SourceFiles/intro/intro.style b/Telegram/SourceFiles/intro/intro.style index e0b8bfdee..364149d4c 100644 --- a/Telegram/SourceFiles/intro/intro.style +++ b/Telegram/SourceFiles/intro/intro.style @@ -44,31 +44,40 @@ introPhotoIconPosition: point(23px, 25px); introPhotoTop: 10px; introCoverTitle: FlatLabel(defaultFlatLabel) { - font: font(22px semibold); textFg: introTitleFg; align: align(center); + style: TextStyle(defaultTextStyle) { + font: font(22px semibold); + linkFont: font(22px semibold); + linkFontOver: font(22px semibold underline); + } } introCoverTitleTop: 136px; introCoverDescription: FlatLabel(defaultFlatLabel) { - font: font(15px); textFg: introDescriptionFg; align: align(center); -} -introCoverDescriptionTextStyle: TextStyle(defaultTextStyle) { - lineHeight: 24px; + style: TextStyle(defaultTextStyle) { + font: font(15px); + linkFont: font(15px); + linkFontOver: font(15px underline); + lineHeight: 24px; + } } introCoverDescriptionTop: 174px; introTitle: FlatLabel(defaultFlatLabel) { - font: font(17px semibold); textFg: introTitleFg; + style: TextStyle(defaultTextStyle) { + font: font(17px semibold); + linkFont: font(17px semibold); + linkFontOver: font(17px semibold underline); + } } introTitleTop: 1px; introDescription: FlatLabel(defaultFlatLabel) { - font: normalFont; textFg: introDescriptionFg; -} -introDescriptionTextStyle: TextStyle(defaultTextStyle) { - lineHeight: 20px; + style: TextStyle(defaultTextStyle) { + lineHeight: 20px; + } } introDescriptionTop: 34px; @@ -119,7 +128,6 @@ introPasswordHintTop: 151px; introPasswordHint: FlatLabel(introDescription) { textFg: windowFg; } -introPasswordHintTextStyle: introDescriptionTextStyle; introResetButton: RoundButton(defaultLightButton) { textFg: attentionButtonFg; @@ -141,11 +149,11 @@ introErrorTop: 235px; introErrorBelowLinkTop: 220px; introErrorDuration: 200; -introError: introDescription; +introError: FlatLabel(introDescription) { +} introErrorCentered: FlatLabel(introError) { align: align(center); } -introErrorTextStyle: introDescriptionTextStyle; introBackButton: IconButton(defaultIconButton) { width: 56px; diff --git a/Telegram/SourceFiles/intro/introcode.cpp b/Telegram/SourceFiles/intro/introcode.cpp index 021a1a5c3..13431656f 100644 --- a/Telegram/SourceFiles/intro/introcode.cpp +++ b/Telegram/SourceFiles/intro/introcode.cpp @@ -87,7 +87,7 @@ CodeWidget::CodeWidget(QWidget *parent, Widget::Data *data) : Step(parent, data) , _callTimer(this) , _callStatus(getData()->callStatus) , _callTimeout(getData()->callTimeout) -, _callLabel(this, st::introDescription, st::introDescriptionTextStyle) +, _callLabel(this, st::introDescription) , _checkRequest(this) { connect(_code, SIGNAL(changed()), this, SLOT(onInputChange())); connect(_callTimer, SIGNAL(timeout()), this, SLOT(onSendCall())); @@ -153,7 +153,7 @@ void CodeWidget::showCodeError(const QString &text) { } void CodeWidget::setInnerFocus() { - _code->setFocus(); + _code->setFocusFast(); } void CodeWidget::activate() { diff --git a/Telegram/SourceFiles/intro/introphone.cpp b/Telegram/SourceFiles/intro/introphone.cpp index 69e5d51f8..681163c5a 100644 --- a/Telegram/SourceFiles/intro/introphone.cpp +++ b/Telegram/SourceFiles/intro/introphone.cpp @@ -90,7 +90,7 @@ void PhoneWidget::showSignup() { showPhoneError(lang(lng_bad_phone_noreg)); if (!_signup) { auto signupText = lng_phone_notreg(lt_link_start, textcmdStartLink(1), lt_link_end, textcmdStopLink(), lt_signup_start, textcmdStartLink(2), lt_signup_end, textcmdStopLink()); - auto inner = object_ptr(this, signupText, Ui::FlatLabel::InitType::Rich, st::introDescription, st::introDescriptionTextStyle); + auto inner = object_ptr(this, signupText, Ui::FlatLabel::InitType::Rich, st::introDescription); _signup.create(this, std_::move(inner), st::introErrorDuration); _signup->entity()->setLink(1, MakeShared(qsl("https://telegram.org"), false)); _signup->entity()->setLink(2, MakeShared([this] { @@ -231,7 +231,7 @@ void PhoneWidget::selectCountry(const QString &c) { } void PhoneWidget::setInnerFocus() { - _phone->setFocus(); + _phone->setFocusFast(); } void PhoneWidget::activate() { diff --git a/Telegram/SourceFiles/intro/intropwdcheck.cpp b/Telegram/SourceFiles/intro/intropwdcheck.cpp index 74039575f..7edd9d250 100644 --- a/Telegram/SourceFiles/intro/intropwdcheck.cpp +++ b/Telegram/SourceFiles/intro/intropwdcheck.cpp @@ -39,7 +39,7 @@ PwdCheckWidget::PwdCheckWidget(QWidget *parent, Widget::Data *data) : Step(paren , _hasRecovery(getData()->hasRecovery) , _hint(getData()->pwdHint) , _pwdField(this, st::introPassword, lang(lng_signin_password)) -, _pwdHint(this, st::introPasswordHint, st::introPasswordHintTextStyle) +, _pwdHint(this, st::introPasswordHint) , _codeField(this, st::introPassword, lang(lng_signin_code)) , _toRecover(this, lang(lng_signin_recover)) , _toPassword(this, lang(lng_signin_try_password)) @@ -77,9 +77,9 @@ void PwdCheckWidget::resizeEvent(QResizeEvent *e) { void PwdCheckWidget::setInnerFocus() { if (_pwdField->isHidden()) { - _codeField->setFocus(); + _codeField->setFocusFast(); } else { - _pwdField->setFocus(); + _pwdField->setFocusFast(); } } diff --git a/Telegram/SourceFiles/intro/introsignup.cpp b/Telegram/SourceFiles/intro/introsignup.cpp index 3849f9921..c79beb7f3 100644 --- a/Telegram/SourceFiles/intro/introsignup.cpp +++ b/Telegram/SourceFiles/intro/introsignup.cpp @@ -105,9 +105,9 @@ void SignupWidget::resizeEvent(QResizeEvent *e) { void SignupWidget::setInnerFocus() { if (_invertOrder || _last->hasFocus()) { - _last->setFocus(); + _last->setFocusFast(); } else { - _first->setFocus(); + _first->setFocusFast(); } } diff --git a/Telegram/SourceFiles/intro/introwidget.cpp b/Telegram/SourceFiles/intro/introwidget.cpp index f9629fbfa..94f67d3b7 100644 --- a/Telegram/SourceFiles/intro/introwidget.cpp +++ b/Telegram/SourceFiles/intro/introwidget.cpp @@ -647,8 +647,7 @@ void Widget::Step::showError(const QString &text) { if (_error) _error->hideAnimated(); } else { if (!_error) { - auto &st = _errorCentered ? st::introErrorCentered : st::introError; - _error.create(this, object_ptr(this, st, st::introErrorTextStyle), st::introErrorDuration); + _error.create(this, object_ptr(this, _errorCentered ? st::introErrorCentered : st::introError), st::introErrorDuration); _error->hideFast(); } _error->entity()->setText(text); @@ -660,12 +659,13 @@ void Widget::Step::showError(const QString &text) { Widget::Step::Step(QWidget *parent, Data *data, bool hasCover) : TWidget(parent) , _data(data) , _hasCover(hasCover) -, _title(this, _hasCover ? st::introCoverTitle : st::introTitle, st::defaultTextStyle) -, _description(this, object_ptr(this, _hasCover ? st::introCoverDescription : st::introDescription, _hasCover ? st::introCoverDescriptionTextStyle : st::introDescriptionTextStyle), st::introErrorDuration) { +, _title(this, _hasCover ? st::introCoverTitle : st::introTitle) +, _description(this, object_ptr(this, _hasCover ? st::introCoverDescription : st::introDescription), st::introErrorDuration) { hide(); } void Widget::Step::prepareShowAnimated(Step *after) { + setInnerFocus(); if (hasCover() || after->hasCover()) { _coverAnimation = prepareCoverAnimation(after); prepareCoverMask(); diff --git a/Telegram/SourceFiles/layerwidget.cpp b/Telegram/SourceFiles/layerwidget.cpp index 7ff203715..a73374703 100644 --- a/Telegram/SourceFiles/layerwidget.cpp +++ b/Telegram/SourceFiles/layerwidget.cpp @@ -383,16 +383,6 @@ bool LayerStackWidget::layerShown() const { void LayerStackWidget::setCacheImages() { auto bodyCache = QPixmap(), mainMenuCache = QPixmap(); - if (isAncestorOf(App::wnd()->focusWidget())) { - setFocus(); - } - if (_mainMenu) { - setAttribute(Qt::WA_OpaquePaintEvent, false); - hideChildren(); - bodyCache = myGrab(App::wnd()->bodyWidget()); - showChildren(); - mainMenuCache = Ui::Shadow::grab(_mainMenu, st::boxRoundShadow, Ui::Shadow::Side::Right); - } auto specialLayerCache = QPixmap(); if (_specialLayer) { auto sides = Ui::Shadow::Side::Left | Ui::Shadow::Side::Right; @@ -408,6 +398,16 @@ void LayerStackWidget::setCacheImages() { if (auto layer = currentLayer()) { layerCache = Ui::Shadow::grab(layer, st::boxRoundShadow); } + if (isAncestorOf(App::wnd()->focusWidget())) { + setFocus(); + } + if (_mainMenu) { + setAttribute(Qt::WA_OpaquePaintEvent, false); + hideChildren(); + bodyCache = myGrab(App::wnd()->bodyWidget()); + showChildren(); + mainMenuCache = Ui::Shadow::grab(_mainMenu, st::boxRoundShadow, Ui::Shadow::Side::Right); + } setAttribute(Qt::WA_OpaquePaintEvent, !bodyCache.isNull()); updateLayerBoxes(); _background->setCacheImages(std_::move(bodyCache), std_::move(mainMenuCache), std_::move(specialLayerCache), std_::move(layerCache)); diff --git a/Telegram/SourceFiles/layout.cpp b/Telegram/SourceFiles/layout.cpp index c30aa186a..6508cd1a4 100644 --- a/Telegram/SourceFiles/layout.cpp +++ b/Telegram/SourceFiles/layout.cpp @@ -210,44 +210,44 @@ int32 documentColorIndex(DocumentData *document, QString &ext) { return colorIndex; } -const style::color &documentColor(int32 colorIndex) { - static const style::color *colors[] = { - &st::msgFile1Bg, - &st::msgFile2Bg, - &st::msgFile3Bg, - &st::msgFile4Bg +style::color documentColor(int32 colorIndex) { + const style::color colors[] = { + st::msgFile1Bg, + st::msgFile2Bg, + st::msgFile3Bg, + st::msgFile4Bg }; - return *colors[colorIndex & 3]; + return colors[colorIndex & 3]; } -const style::color &documentDarkColor(int32 colorIndex) { - static const style::color *colors[] = { - &st::msgFile1BgDark, - &st::msgFile2BgDark, - &st::msgFile3BgDark, - &st::msgFile4BgDark +style::color documentDarkColor(int32 colorIndex) { + static style::color colors[] = { + st::msgFile1BgDark, + st::msgFile2BgDark, + st::msgFile3BgDark, + st::msgFile4BgDark }; - return *colors[colorIndex & 3]; + return colors[colorIndex & 3]; } -const style::color &documentOverColor(int32 colorIndex) { - static const style::color *colors[] = { - &st::msgFile1BgOver, - &st::msgFile2BgOver, - &st::msgFile3BgOver, - &st::msgFile4BgOver +style::color documentOverColor(int32 colorIndex) { + static style::color colors[] = { + st::msgFile1BgOver, + st::msgFile2BgOver, + st::msgFile3BgOver, + st::msgFile4BgOver }; - return *colors[colorIndex & 3]; + return colors[colorIndex & 3]; } -const style::color &documentSelectedColor(int32 colorIndex) { - static const style::color *colors[] = { - &st::msgFile1BgSelected, - &st::msgFile2BgSelected, - &st::msgFile3BgSelected, - &st::msgFile4BgSelected +style::color documentSelectedColor(int32 colorIndex) { + static style::color colors[] = { + st::msgFile1BgSelected, + st::msgFile2BgSelected, + st::msgFile3BgSelected, + st::msgFile4BgSelected }; - return *colors[colorIndex & 3]; + return colors[colorIndex & 3]; } RoundCorners documentCorners(int32 colorIndex) { diff --git a/Telegram/SourceFiles/layout.h b/Telegram/SourceFiles/layout.h index 458cfe54c..fb6a754b6 100644 --- a/Telegram/SourceFiles/layout.h +++ b/Telegram/SourceFiles/layout.h @@ -84,10 +84,10 @@ QString formatPlayedText(qint64 played, qint64 duration); QString documentName(DocumentData *document); TextWithEntities documentNameWithEntities(DocumentData *document); int32 documentColorIndex(DocumentData *document, QString &ext); -const style::color &documentColor(int colorIndex); -const style::color &documentDarkColor(int colorIndex); -const style::color &documentOverColor(int colorIndex); -const style::color &documentSelectedColor(int colorIndex); +style::color documentColor(int colorIndex); +style::color documentDarkColor(int colorIndex); +style::color documentOverColor(int colorIndex); +style::color documentSelectedColor(int colorIndex); RoundCorners documentCorners(int colorIndex); bool documentIsValidMediaFile(const QString &filepath); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index 6b27f0a37..a957d553e 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -299,8 +299,8 @@ void MainWidget::updateForwardingTexts() { text = lng_forward_messages(lt_count, _toForward.size()); } } - _toForwardFrom.setText(st::msgServiceNameFont, from, _textNameOptions); - _toForwardText.setText(st::msgFont, textClean(text), _textDlgOptions); + _toForwardFrom.setText(st::msgNameStyle, from, _textNameOptions); + _toForwardText.setText(st::messageTextStyle, textClean(text), _textDlgOptions); _toForwardNameVersion = version; } @@ -1087,7 +1087,7 @@ void MainWidget::onCacheBackground() { _cachedBackground = App::pixmapFromImageInPlace(std_::move(result)); } else { QRect to, from; - backgroundParams(_willCacheFor, to, from); + Window::Theme::ComputeBackgroundRects(_willCacheFor, bg.size(), to, from); _cachedX = to.x(); _cachedY = to.y(); _cachedBackground = App::pixmapFromImageInPlace(bg.toImage().copy(from).scaled(to.width() * cIntRetinaFactor(), to.height() * cIntRetinaFactor(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); @@ -1854,31 +1854,6 @@ QPixmap MainWidget::cachedBackground(const QRect &forRect, int &x, int &y) { return QPixmap(); } -void MainWidget::backgroundParams(const QRect &forRect, QRect &to, QRect &from) const { - auto bg = Window::Theme::Background()->image().size(); - if (uint64(bg.width()) * forRect.height() > uint64(bg.height()) * forRect.width()) { - float64 pxsize = forRect.height() / float64(bg.height()); - int takewidth = qCeil(forRect.width() / pxsize); - if (takewidth > bg.width()) { - takewidth = bg.width(); - } else if ((bg.width() % 2) != (takewidth % 2)) { - ++takewidth; - } - to = QRect(int((forRect.width() - takewidth * pxsize) / 2.), 0, qCeil(takewidth * pxsize), forRect.height()); - from = QRect((bg.width() - takewidth) / 2, 0, takewidth, bg.height()); - } else { - float64 pxsize = forRect.width() / float64(bg.width()); - int takeheight = qCeil(forRect.height() / pxsize); - if (takeheight > bg.height()) { - takeheight = bg.height(); - } else if ((bg.height() % 2) != (takeheight % 2)) { - ++takeheight; - } - to = QRect(0, int((forRect.height() - takeheight * pxsize) / 2.), forRect.width(), qCeil(takeheight * pxsize)); - from = QRect(0, (bg.height() - takeheight) / 2, bg.width(), takeheight); - } -} - void MainWidget::updateScrollColors() { _history->updateScrollColors(); } diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index ab12d5423..244f3caf6 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -316,7 +316,6 @@ public: bool isIdle() const; QPixmap cachedBackground(const QRect &forRect, int &x, int &y); - void backgroundParams(const QRect &forRect, QRect &to, QRect &from) const; void updateScrollColors(); void setChatBackground(const App::WallPaper &wp); diff --git a/Telegram/SourceFiles/mainwindow.cpp b/Telegram/SourceFiles/mainwindow.cpp index 74f64226f..8472df3a9 100644 --- a/Telegram/SourceFiles/mainwindow.cpp +++ b/Telegram/SourceFiles/mainwindow.cpp @@ -262,6 +262,7 @@ void MainWindow::setupPasscode() { updateControlsGeometry(); if (_main) _main->hide(); + _mediaView->hide(); Ui::hideSettingsAndLayer(true); if (_intro) _intro->hide(); if (animated) { @@ -1291,7 +1292,7 @@ QImage MainWindow::iconLarge() const { return iconbig256; } -void MainWindow::placeSmallCounter(QImage &img, int size, int count, const style::color &bg, const QPoint &shift, const style::color &color) { +void MainWindow::placeSmallCounter(QImage &img, int size, int count, style::color bg, const QPoint &shift, style::color color) { QPainter p(&img); QString cnt = (count < 100) ? QString("%1").arg(count) : QString("..%1").arg(count % 10, 1, 10, QChar('0')); @@ -1329,7 +1330,7 @@ void MainWindow::placeSmallCounter(QImage &img, int size, int count, const style } -QImage MainWindow::iconWithCounter(int size, int count, const style::color &bg, const style::color &fg, bool smallIcon) { +QImage MainWindow::iconWithCounter(int size, int count, style::color bg, style::color fg, bool smallIcon) { bool layer = false; if (size < 0) { size = -size; diff --git a/Telegram/SourceFiles/mainwindow.h b/Telegram/SourceFiles/mainwindow.h index f69587007..41535c0ba 100644 --- a/Telegram/SourceFiles/mainwindow.h +++ b/Telegram/SourceFiles/mainwindow.h @@ -144,7 +144,7 @@ public: bool isActive(bool cached = true) const; void hideMediaview(); - QImage iconWithCounter(int size, int count, const style::color &bg, const style::color &fg, bool smallIcon) override; + QImage iconWithCounter(int size, int count, style::color bg, style::color fg, bool smallIcon) override; bool contentOverlapped(const QRect &globalRect); bool contentOverlapped(QWidget *w, QPaintEvent *e) { @@ -226,7 +226,7 @@ private: QPixmap grabInner(); - void placeSmallCounter(QImage &img, int size, int count, const style::color &bg, const QPoint &shift, const style::color &color) override; + void placeSmallCounter(QImage &img, int size, int count, style::color bg, const QPoint &shift, style::color color) override; QImage icon16, icon32, icon64, iconbig16, iconbig32, iconbig64; struct DelayedServiceMsg { diff --git a/Telegram/SourceFiles/media/player/media_player.style b/Telegram/SourceFiles/media/player/media_player.style index 067147e94..210dae4aa 100644 --- a/Telegram/SourceFiles/media/player/media_player.style +++ b/Telegram/SourceFiles/media/player/media_player.style @@ -54,7 +54,6 @@ mediaPlayerCloseRight: 0px; mediaPlayerName: FlatLabel(defaultFlatLabel) { maxHeight: 20px; - textFg: windowFg; } mediaPlayerTime: LabelSimple(defaultLabelSimple) { textFg: windowSubTextFg; diff --git a/Telegram/SourceFiles/media/player/media_player_cover.cpp b/Telegram/SourceFiles/media/player/media_player_cover.cpp index 417904fa3..9159541f5 100644 --- a/Telegram/SourceFiles/media/player/media_player_cover.cpp +++ b/Telegram/SourceFiles/media/player/media_player_cover.cpp @@ -229,7 +229,7 @@ void CoverWidget::updatePlayPrevNextPositions() { } void CoverWidget::updateLabelPositions() { - _nameLabel->moveToLeft(st::mediaPlayerPanelPadding, st::mediaPlayerPanelNameTop - st::mediaPlayerName.font->ascent); + _nameLabel->moveToLeft(st::mediaPlayerPanelPadding, st::mediaPlayerPanelNameTop - st::mediaPlayerName.style.font->ascent); _timeLabel->moveToRight(st::mediaPlayerPanelPadding, st::mediaPlayerPanelNameTop - st::mediaPlayerTime.font->ascent); } diff --git a/Telegram/SourceFiles/media/player/media_player_widget.cpp b/Telegram/SourceFiles/media/player/media_player_widget.cpp index dabfd554d..b56bcda22 100644 --- a/Telegram/SourceFiles/media/player/media_player_widget.cpp +++ b/Telegram/SourceFiles/media/player/media_player_widget.cpp @@ -301,7 +301,7 @@ void Widget::updateLabelsGeometry() { widthForName -= _timeLabel->width() + 2 * st::normalFont->spacew; _nameLabel->resizeToWidth(widthForName); - _nameLabel->moveToLeft(left, st::mediaPlayerNameTop - st::mediaPlayerName.font->ascent); + _nameLabel->moveToLeft(left, st::mediaPlayerNameTop - st::mediaPlayerName.style.font->ascent); _timeLabel->moveToRight(right, st::mediaPlayerNameTop - st::mediaPlayerTime.font->ascent); } diff --git a/Telegram/SourceFiles/media/view/media_clip_controller.cpp b/Telegram/SourceFiles/media/view/media_clip_controller.cpp index ddad573d3..847e9f645 100644 --- a/Telegram/SourceFiles/media/view/media_clip_controller.cpp +++ b/Telegram/SourceFiles/media/view/media_clip_controller.cpp @@ -81,13 +81,13 @@ void Controller::handleSeekFinished(float64 progress) { void Controller::showAnimated() { startFading([this]() { - _fadeAnimation->fadeIn(st::mvShowDuration); + _fadeAnimation->fadeIn(st::mediaviewShowDuration); }); } void Controller::hideAnimated() { startFading([this]() { - _fadeAnimation->fadeOut(st::mvHideDuration); + _fadeAnimation->fadeOut(st::mediaviewHideDuration); }); } diff --git a/Telegram/SourceFiles/media/view/mediaview.style b/Telegram/SourceFiles/media/view/mediaview.style index a18ee47de..0fd201b43 100644 --- a/Telegram/SourceFiles/media/view/mediaview.style +++ b/Telegram/SourceFiles/media/view/mediaview.style @@ -150,3 +150,70 @@ mediaviewDropdownMenu: DropdownMenu(defaultDropdownMenu) { shadow: mediaviewMenuShadow; } } + +mediaviewSaveMsgCheck: icon {{ "mediaview_save_check", mediaviewSaveMsgFg }}; +mediaviewSaveMsgPadding: margins(55px, 19px, 29px, 20px); +mediaviewSaveMsgCheckPos: point(23px, 21px); +mediaviewSaveMsgShowing: 200; +mediaviewSaveMsgShown: 2000; +mediaviewSaveMsgHiding: 2500; +mediaviewSaveMsgStyle: TextStyle(defaultTextStyle) { + font: font(16px); + linkFont: font(16px); + linkFontOver: font(16px underline); +} +mediaviewTextPalette: TextPalette(defaultTextPalette) { + linkFg: mediaviewTextLinkFg; +} + +mediaviewCaptionStyle: defaultTextStyle; + +mediaviewThickFont: semiboldFont; +mediaviewFont: normalFont; +mediaviewTextStyle: defaultTextStyle; + +mediaviewTextLeft: 16px; +mediaviewTextSkip: 10px; +mediaviewHeaderTop: 48px; +mediaviewTextTop: 24px; +mediaviewTextOpacity: 0.5; +mediaviewTextOverOpacity: 1; + +mediaviewIconOpacity: 0.45; +mediaviewIconOverOpacity: 1; +mediaviewControlBgOpacity: 0.3; +mediaviewControlMargin: 0px; +mediaviewControlSize: 90px; +mediaviewIconSize: size(60px, 56px); + +mediaviewWaitHide: 2000; +mediaviewHideDuration: 1000; +mediaviewShowDuration: 200; +mediaviewFadeDuration: 150; + +mediaviewDeltaFromLastAction: 5px; +mediaviewSwipeDistance: 80px; + +mediaviewCaptionPadding: margins(18px, 10px, 18px, 10px); +mediaviewCaptionMargin: size(11px, 11px); +mediaviewCaptionRadius: 2px; + +themePreviewSize: size(903px, 584px); +themePreviewBg: windowBg; +themePreviewOverlayOpacity: 0.7; +themePreviewMargin: margins(36px, 52px, 36px, 88px); +themePreviewTitleTop: 14px; +themePreviewTitleFg: windowBoldFg; +themePreviewTitleFont: font(17px semibold); +themePreviewLoadingFont: font(16px); +themePreviewLoadingFg: windowSubTextFg; +themePreviewApplyButton: RoundButton(defaultActiveButton) { + height: 38px; + font: font(15px semibold); +} +themePreviewCancelButton: RoundButton(defaultLightButton) { + height: 38px; + font: font(15px semibold); +} +themePreviewButtonsSkip: 20px; +themePreviewDialogsWidth: 312px; diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index 8e5446ae5..c46551c52 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -34,6 +34,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "styles/style_history.h" #include "media/media_audio.h" #include "history/history_media_types.h" +#include "window/window_theme_preview.h" +#include "core/task_queue.h" namespace { @@ -71,13 +73,13 @@ MediaView::MediaView() : TWidget(App::wnd()) , _docSaveAs(this, lang(lng_mediaview_save_as), st::mediaviewFileLink) , _docCancel(this, lang(lng_cancel), st::mediaviewFileLink) , _radial(animation(this, &MediaView::step_radial)) -, _lastAction(-st::mvDeltaFromLastAction, -st::mvDeltaFromLastAction) +, _lastAction(-st::mediaviewDeltaFromLastAction, -st::mediaviewDeltaFromLastAction) , _a_state(animation(this, &MediaView::step_state)) , _dropdown(this, st::mediaviewDropdownMenu) { TextCustomTagsMap custom; custom.insert(QChar('c'), qMakePair(textcmdStartLink(1), textcmdStopLink())); - _saveMsgText.setRichText(st::medviewSaveMsgFont, lang(lng_mediaview_saved), _textDlgOptions, custom); - _saveMsg = QRect(0, 0, _saveMsgText.maxWidth() + st::medviewSaveMsgPadding.left() + st::medviewSaveMsgPadding.right(), st::medviewSaveMsgFont->height + st::medviewSaveMsgPadding.top() + st::medviewSaveMsgPadding.bottom()); + _saveMsgText.setRichText(st::mediaviewSaveMsgStyle, lang(lng_mediaview_saved), _textDlgOptions, custom); + _saveMsg = QRect(0, 0, _saveMsgText.maxWidth() + st::mediaviewSaveMsgPadding.left() + st::mediaviewSaveMsgPadding.right(), st::mediaviewSaveMsgStyle.font->height + st::mediaviewSaveMsgPadding.top() + st::mediaviewSaveMsgPadding.bottom()); _saveMsgText.setLink(1, MakeShared([this] { showSaveMsgFile(); })); connect(QApplication::desktop(), SIGNAL(resized(int)), this, SLOT(onScreenResized(int))); @@ -132,12 +134,12 @@ void MediaView::moveToScreen() { setGeometry(avail); } - int32 navSkip = 2 * st::mvControlMargin + st::mvControlSize; - _closeNav = myrtlrect(width() - st::mvControlMargin - st::mvControlSize, st::mvControlMargin, st::mvControlSize, st::mvControlSize); + int32 navSkip = 2 * st::mediaviewControlMargin + st::mediaviewControlSize; + _closeNav = myrtlrect(width() - st::mediaviewControlMargin - st::mediaviewControlSize, st::mediaviewControlMargin, st::mediaviewControlSize, st::mediaviewControlSize); _closeNavIcon = centerrect(_closeNav, st::mediaviewClose); - _leftNav = myrtlrect(st::mvControlMargin, navSkip, st::mvControlSize, height() - 2 * navSkip); + _leftNav = myrtlrect(st::mediaviewControlMargin, navSkip, st::mediaviewControlSize, height() - 2 * navSkip); _leftNavIcon = centerrect(_leftNav, st::mediaviewLeft); - _rightNav = myrtlrect(width() - st::mvControlMargin - st::mvControlSize, navSkip, st::mvControlSize, height() - 2 * navSkip); + _rightNav = myrtlrect(width() - st::mediaviewControlMargin - st::mediaviewControlSize, navSkip, st::mediaviewControlSize, height() - 2 * navSkip); _rightNavIcon = centerrect(_rightNav, st::mediaviewRight); _saveMsg.moveTo((width() - _saveMsg.width()) / 2, (height() - _saveMsg.height()) / 2); @@ -194,6 +196,10 @@ bool MediaView::fileShown() const { return !_current.isNull() || gifShown(); } +bool MediaView::fileBubbleShown() const { + return _doc && !fileShown() && !_themePreviewShown; +} + bool MediaView::gifShown() const { if (_gif && _gif->ready()) { if (!_gif->started()) { @@ -220,7 +226,7 @@ void MediaView::stopGif() { } void MediaView::documentUpdated(DocumentData *doc) { - if (_doc && _doc == doc && !fileShown()) { + if (fileBubbleShown() && _doc == doc) { if ((_doc->loading() && _docCancel->isHidden()) || (!_doc->loading() && !_docCancel->isHidden())) { updateControls(); } else if (_doc->loading()) { @@ -238,7 +244,7 @@ void MediaView::changingMsgId(HistoryItem *row, MsgId newId) { } void MediaView::updateDocSize() { - if (!_doc || fileShown()) return; + if (!fileBubbleShown()) return; if (_doc->loading()) { quint64 ready = _doc->loadOffset(), total = _doc->size; @@ -262,16 +268,16 @@ void MediaView::updateDocSize() { } else { _docSize = formatSizeText(_doc->size); } - _docSizeWidth = st::mvFont->width(_docSize); + _docSizeWidth = st::mediaviewFont->width(_docSize); int32 maxw = st::mediaviewFileSize.width() - st::mediaviewFileIconSize - st::mediaviewFilePadding * 3; if (_docSizeWidth > maxw) { - _docSize = st::mvFont->elided(_docSize, maxw); - _docSizeWidth = st::mvFont->width(_docSize); + _docSize = st::mediaviewFont->elided(_docSize, maxw); + _docSizeWidth = st::mediaviewFont->width(_docSize); } } void MediaView::updateControls() { - if (_doc && !fileShown()) { + if (fileBubbleShown()) { if (_doc->loading()) { _docDownload->hide(); _docSaveAs->hide(); @@ -299,10 +305,12 @@ void MediaView::updateControls() { } radialStart(); + updateThemePreviewGeometry(); + _saveVisible = ((_photo && _photo->loaded()) || (_doc && (_doc->loaded(DocumentData::FilePathResolveChecked) || (!fileShown() && (_photo || _doc))))); - _saveNav = myrtlrect(width() - st::mvIconSize.width() * 2, height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height()); + _saveNav = myrtlrect(width() - st::mediaviewIconSize.width() * 2, height() - st::mediaviewIconSize.height(), st::mediaviewIconSize.width(), st::mediaviewIconSize.height()); _saveNavIcon = centerrect(_saveNav, st::mediaviewSave); - _moreNav = myrtlrect(width() - st::mvIconSize.width(), height() - st::mvIconSize.height(), st::mvIconSize.width(), st::mvIconSize.height()); + _moreNav = myrtlrect(width() - st::mediaviewIconSize.width(), height() - st::mediaviewIconSize.height(), st::mediaviewIconSize.width(), st::mediaviewIconSize.height()); _moreNavIcon = centerrect(_moreNav, st::mediaviewMore); QDateTime d, dNow(date(unixtime())); @@ -321,12 +329,12 @@ void MediaView::updateControls() { _dateText = lng_mediaview_date_time(lt_date, d.date().toString(qsl("dd.MM.yy")), lt_time, d.time().toString(cTimeFormat())); } if (_from) { - _fromName.setText(st::mvFont, (_from->migrateTo() ? _from->migrateTo() : _from)->name, _textNameOptions); - _nameNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, qMin(_fromName.maxWidth(), width() / 3), st::mvFont->height); - _dateNav = myrtlrect(st::mvTextLeft + _nameNav.width() + st::mvTextSkip, height() - st::mvTextTop, st::mvFont->width(_dateText), st::mvFont->height); + _fromName.setText(st::mediaviewTextStyle, (_from->migrateTo() ? _from->migrateTo() : _from)->name, _textNameOptions); + _nameNav = myrtlrect(st::mediaviewTextLeft, height() - st::mediaviewTextTop, qMin(_fromName.maxWidth(), width() / 3), st::mediaviewFont->height); + _dateNav = myrtlrect(st::mediaviewTextLeft + _nameNav.width() + st::mediaviewTextSkip, height() - st::mediaviewTextTop, st::mediaviewFont->width(_dateText), st::mediaviewFont->height); } else { _nameNav = QRect(); - _dateNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, st::mvFont->width(_dateText), st::mvFont->height); + _dateNav = myrtlrect(st::mediaviewTextLeft, height() - st::mediaviewTextTop, st::mediaviewFont->width(_dateText), st::mediaviewFont->height); } updateHeader(); if (_photo || (_history && (_overview == OverviewPhotos || _overview == OverviewChatPhotos || _overview == OverviewFiles || _overview == OverviewVideos))) { @@ -354,9 +362,9 @@ void MediaView::updateControls() { if (!_caption.isEmpty()) { int32 skipw = qMax(_dateNav.left() + _dateNav.width(), _headerNav.left() + _headerNav.width()); - int32 maxw = qMin(qMax(width() - 2 * skipw - st::mvCaptionPadding.left() - st::mvCaptionPadding.right() - 2 * st::mvCaptionMargin.width(), int(st::msgMinWidth)), _caption.maxWidth()); - int32 maxh = qMin(_caption.countHeight(maxw), int(height() / 4 - st::mvCaptionPadding.top() - st::mvCaptionPadding.bottom() - 2 * st::mvCaptionMargin.height())); - _captionRect = QRect((width() - maxw) / 2, height() - maxh - st::mvCaptionPadding.bottom() - st::mvCaptionMargin.height(), maxw, maxh); + int32 maxw = qMin(qMax(width() - 2 * skipw - st::mediaviewCaptionPadding.left() - st::mediaviewCaptionPadding.right() - 2 * st::mediaviewCaptionMargin.width(), int(st::msgMinWidth)), _caption.maxWidth()); + int32 maxh = qMin(_caption.countHeight(maxw), int(height() / 4 - st::mediaviewCaptionPadding.top() - st::mediaviewCaptionPadding.bottom() - 2 * st::mediaviewCaptionMargin.height())); + _captionRect = QRect((width() - maxw) / 2, height() - maxh - st::mediaviewCaptionPadding.bottom() - st::mediaviewCaptionMargin.height(), maxw, maxh); } else { _captionRect = QRect(); } @@ -410,7 +418,7 @@ void MediaView::step_state(TimeMs ms, bool timer) { case OverMore: update(_moreNav); break; default: break; } - float64 dt = float64(ms - start) / st::mvFadeDuration; + float64 dt = float64(ms - start) / st::mediaviewFadeDuration; if (dt >= 1) { _animOpacities.remove(i.key()); i = _animations.erase(i); @@ -420,7 +428,7 @@ void MediaView::step_state(TimeMs ms, bool timer) { } } if (_controlsState == ControlsShowing || _controlsState == ControlsHiding) { - float64 dt = float64(ms - _controlsAnimStarted) / (_controlsState == ControlsShowing ? st::mvShowDuration : st::mvHideDuration); + float64 dt = float64(ms - _controlsAnimStarted) / (_controlsState == ControlsShowing ? st::mediaviewShowDuration : st::mediaviewHideDuration); if (dt >= 1) { a_cOpacity.finish(); _controlsState = (_controlsState == ControlsShowing ? ControlsShown : ControlsHidden); @@ -428,7 +436,7 @@ void MediaView::step_state(TimeMs ms, bool timer) { } else { a_cOpacity.update(dt, anim::linear); } - QRegion toUpdate = QRegion() + (_over == OverLeftNav ? _leftNav : _leftNavIcon) + (_over == OverRightNav ? _rightNav : _rightNavIcon) + (_over == OverClose ? _closeNav : _closeNavIcon) + _saveNavIcon + _moreNavIcon + _headerNav + _nameNav + _dateNav + _captionRect.marginsAdded(st::mvCaptionPadding); + QRegion toUpdate = QRegion() + (_over == OverLeftNav ? _leftNav : _leftNavIcon) + (_over == OverRightNav ? _rightNav : _rightNavIcon) + (_over == OverClose ? _closeNav : _closeNavIcon) + _saveNavIcon + _moreNavIcon + _headerNav + _nameNav + _dateNav + _captionRect.marginsAdded(st::mediaviewCaptionPadding); update(toUpdate); if (dt < 1) result = true; } @@ -500,7 +508,7 @@ void MediaView::step_radial(TimeMs ms, bool timer) { } else { const FileLocation &location(_doc->location(true)); if (location.accessEnable()) { - if (_doc->isAnimation() || _doc->isVideo() || QImageReader(location.name()).canRead()) { + if (_doc->isAnimation() || _doc->isVideo() || _doc->isTheme() || QImageReader(location.name()).canRead()) { displayDocument(_doc, App::histItemById(_msgmigrated ? 0 : _channel, _msgid)); } location.accessDisable(); @@ -626,7 +634,7 @@ void MediaView::close() { void MediaView::activateControls() { if (!_menu && !_mousePressed) { - _controlsHideTimer.start(int(st::mvWaitHide)); + _controlsHideTimer.start(int(st::mediaviewWaitHide)); } if (_fullScreenVideo) { if (_clipController) { @@ -1120,6 +1128,7 @@ void MediaView::showDocument(DocumentData *doc, HistoryItem *context) { void MediaView::displayPhoto(PhotoData *photo, HistoryItem *item) { stopGif(); + destroyThemePreview(); _doc = nullptr; _fullScreenVideo = false; _photo = photo; @@ -1132,7 +1141,7 @@ void MediaView::displayPhoto(PhotoData *photo, HistoryItem *item) { _caption = Text(); if (HistoryMessage *itemMsg = item ? item->toHistoryMessage() : nullptr) { if (HistoryPhoto *photoMsg = dynamic_cast(itemMsg->getMedia())) { - _caption.setMarkedText(st::mvCaptionFont, photoMsg->getCaption(), (item->author()->isUser() && item->author()->asUser()->botInfo) ? _captionBotOptions : _captionTextOptions); + _caption.setMarkedText(st::mediaviewCaptionStyle, photoMsg->getCaption(), (item->author()->isUser() && item->author()->asUser()->botInfo) ? _captionBotOptions : _captionTextOptions); } } @@ -1166,14 +1175,25 @@ void MediaView::displayPhoto(PhotoData *photo, HistoryItem *item) { displayFinished(); } +void MediaView::destroyThemePreview() { + _themePreviewShown = false; + _themePreview.reset(); + _themeApply.destroy(); + _themeCancel.destroy(); +} + void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // empty messages shown as docs: doc can be NULL - if (!doc || (!doc->isAnimation() && !doc->isVideo()) || doc != _doc || (item && (item->id != _msgid || (item->history() != (_msgmigrated ? _migrated : _history))))) { + auto documentChanged = (!doc || doc != _doc || (item && (item->id != _msgid || (item->history() != (_msgmigrated ? _migrated : _history))))); + if (documentChanged || (!doc->isAnimation() && !doc->isVideo())) { _fullScreenVideo = false; _current = QPixmap(); stopGif(); } else if (gifShown()) { _current = QPixmap(); } + if (documentChanged || !doc->isTheme()) { + destroyThemePreview(); + } _doc = doc; _photo = nullptr; _radial.stop(); @@ -1196,6 +1216,8 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // empty if (_doc->isAnimation() || _doc->isVideo()) { initAnimation(); + } else if (_doc->isTheme()) { + initThemePreview(); } else { const FileLocation &location(_doc->location(true)); if (location.accessEnable()) { @@ -1209,10 +1231,10 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // empty } _docIconRect = QRect((width() - st::mediaviewFileIconSize) / 2, (height() - st::mediaviewFileIconSize) / 2, st::mediaviewFileIconSize, st::mediaviewFileIconSize); - if (!fileShown()) { + if (fileBubbleShown()) { if (!_doc || _doc->thumb->isNull()) { int32 colorIndex = documentColorIndex(_doc, _docExt); - _docIconColor = &documentColor(colorIndex); + _docIconColor = documentColor(colorIndex); const style::icon *(thumbs[]) = { &st::mediaviewFileBlue, &st::mediaviewFileGreen, &st::mediaviewFileRed, &st::mediaviewFileYellow }; _docIcon = thumbs[colorIndex]; @@ -1255,6 +1277,8 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // empty _docRect = QRect((width() - st::mediaviewFileSize.width()) / 2, (height() - st::mediaviewFileSize.height()) / 2, st::mediaviewFileSize.width(), st::mediaviewFileSize.height()); _docIconRect = myrtlrect(_docRect.x() + st::mediaviewFilePadding, _docRect.y() + st::mediaviewFilePadding, st::mediaviewFileIconSize, st::mediaviewFileIconSize); + } else if (_themePreviewShown) { + updateThemePreviewGeometry(); } else if (!_current.isNull()) { _current.setDevicePixelRatio(cRetinaFactor()); _w = convertScale(_current.width()); @@ -1304,6 +1328,25 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // empty displayFinished(); } +void MediaView::updateThemePreviewGeometry() { + if (_themePreviewShown) { + auto previewRect = QRect((width() - st::themePreviewSize.width()) / 2, (height() - st::themePreviewSize.height()) / 2, st::themePreviewSize.width(), st::themePreviewSize.height()); + _themePreviewRect = previewRect.marginsAdded(st::themePreviewMargin); + if (_themeApply) { + auto right = width() - _themePreviewRect.x() - _themePreviewRect.width() + st::themePreviewMargin.right(); + _themeApply->moveToRight(right, _themePreviewRect.y() + _themePreviewRect.height() - st::themePreviewMargin.bottom() + (st::themePreviewMargin.bottom() - _themeApply->height()) / 2); + right += _themeApply->width() + st::themePreviewButtonsSkip; + _themeCancel->moveToRight(right, _themeApply->y()); + } + + // For context menu event. + _x = _themePreviewRect.x(); + _y = _themePreviewRect.y(); + _w = _themePreviewRect.width(); + _h = _themePreviewRect.height(); + } +} + void MediaView::displayFinished() { updateControls(); if (isHidden()) { @@ -1363,6 +1406,59 @@ void MediaView::createClipReader() { createClipController(); } +void MediaView::initThemePreview() { + t_assert(_doc && _doc->isTheme()); + + auto &location = _doc->location(); + if (!location.isEmpty() && location.accessEnable()) { + _themePreviewShown = true; + auto path = _doc->location().name(); + auto id = _themePreviewId = rand_value(); + auto ready = base::lambda_guarded(this, [this, id](std_::unique_ptr result) { + if (id != _themePreviewId) { + return; + } + _themePreviewId = 0; + _themePreview = std_::move(result); + if (_themePreview) { + _themeApply.create(this, lang(lng_theme_preview_apply), st::themePreviewApplyButton); + _themeApply->show(); + _themeApply->setClickedCallback([this] { + auto preview = std_::move(_themePreview); + close(); + Window::Theme::Apply(std_::move(preview)); + }); + _themeCancel.create(this, lang(lng_cancel), st::themePreviewCancelButton); + _themeCancel->show(); + _themeCancel->setClickedCallback([this] { close(); }); + updateControls(); + } + update(); + }); + struct mutable_ready { + mutable_ready(decltype(ready) value) : value(std_::move(value)) { + } + mutable decltype(ready) value; + }; + struct mutable_result { + mutable_result(std_::unique_ptr value) : value(std_::move(value)) { + } + mutable std_::unique_ptr value; + }; + Window::Theme::CurrentData current; + current.backgroundId = Window::Theme::Background()->id(); + current.backgroundImage = Window::Theme::Background()->image(); + current.backgroundTiled = Window::Theme::Background()->tile(); + base::TaskQueue::Normal().Put([path, current, callback = mutable_ready(std_::move(ready))]() { + auto preview = Window::Theme::GeneratePreview(path, current); + base::TaskQueue::Main().Put([result = mutable_result(std_::move(preview)), callback = std_::move(callback.value)]() { + callback(std_::move(result.value)); + }); + }); + location.accessDisable(); + } +} + void MediaView::createClipController() { if (!_doc->isVideo()) return; @@ -1389,7 +1485,7 @@ void MediaView::setClipControllerGeometry() { int controllerBottom = _captionRect.isEmpty() ? height() : _captionRect.y(); _clipController->setGeometry( (width() - _clipController->width()) / 2, - controllerBottom - _clipController->height() - st::mvCaptionPadding.bottom() - st::mvCaptionMargin.height(), + controllerBottom - _clipController->height() - st::mediaviewCaptionPadding.bottom() - st::mediaviewCaptionMargin.height(), st::mediaviewControllerSize.width(), st::mediaviewControllerSize.height()); myEnsureResized(_clipController); @@ -1603,26 +1699,26 @@ void MediaView::paintEvent(QPaintEvent *e) { if (_saveMsgStarted) { auto ms = getms(); - float64 dt = float64(ms) - _saveMsgStarted, hidingDt = dt - st::medviewSaveMsgShowing - st::medviewSaveMsgShown; - if (dt < st::medviewSaveMsgShowing + st::medviewSaveMsgShown + st::medviewSaveMsgHiding) { + float64 dt = float64(ms) - _saveMsgStarted, hidingDt = dt - st::mediaviewSaveMsgShowing - st::mediaviewSaveMsgShown; + if (dt < st::mediaviewSaveMsgShowing + st::mediaviewSaveMsgShown + st::mediaviewSaveMsgHiding) { if (hidingDt >= 0 && _saveMsgOpacity.to() > 0.5) { _saveMsgOpacity.start(0); } - float64 progress = (hidingDt >= 0) ? (hidingDt / st::medviewSaveMsgHiding) : (dt / st::medviewSaveMsgShowing); + float64 progress = (hidingDt >= 0) ? (hidingDt / st::mediaviewSaveMsgHiding) : (dt / st::mediaviewSaveMsgShowing); _saveMsgOpacity.update(qMin(progress, 1.), anim::linear); if (_saveMsgOpacity.current() > 0) { p.setOpacity(_saveMsgOpacity.current()); App::roundRect(p, _saveMsg, st::mediaviewSaveMsgBg, MediaviewSaveCorners); - st::medviewSaveMsgCheck.paint(p, _saveMsg.topLeft() + st::medviewSaveMsgCheckPos, width()); + st::mediaviewSaveMsgCheck.paint(p, _saveMsg.topLeft() + st::mediaviewSaveMsgCheckPos, width()); p.setPen(st::mediaviewSaveMsgFg); - textstyleSet(&st::mediaviewTextStyle); - _saveMsgText.draw(p, _saveMsg.x() + st::medviewSaveMsgPadding.left(), _saveMsg.y() + st::medviewSaveMsgPadding.top(), _saveMsg.width() - st::medviewSaveMsgPadding.left() - st::medviewSaveMsgPadding.right()); - textstyleRestore(); + p.setTextPalette(st::mediaviewTextPalette); + _saveMsgText.draw(p, _saveMsg.x() + st::mediaviewSaveMsgPadding.left(), _saveMsg.y() + st::mediaviewSaveMsgPadding.top(), _saveMsg.width() - st::mediaviewSaveMsgPadding.left() - st::mediaviewSaveMsgPadding.right()); + p.restoreTextPalette(); p.setOpacity(1); } if (_full >= 1) { - auto nextFrame = (dt < st::medviewSaveMsgShowing || hidingDt >= 0) ? int(AnimationTimerDelta) : (st::medviewSaveMsgShowing + st::medviewSaveMsgShown + 1 - dt); + auto nextFrame = (dt < st::mediaviewSaveMsgShowing || hidingDt >= 0) ? int(AnimationTimerDelta) : (st::mediaviewSaveMsgShowing + st::mediaviewSaveMsgShown + 1 - dt); _saveMsgUpdater.start(nextFrame); } } else { @@ -1630,6 +1726,8 @@ void MediaView::paintEvent(QPaintEvent *e) { } } } + } else if (_themePreviewShown) { + paintThemePreview(p, r); } else { if (_docRect.intersects(r)) { p.fillRect(_docRect, st::mediaviewFileBg); @@ -1642,7 +1740,7 @@ void MediaView::paintEvent(QPaintEvent *e) { radialOpacity = _radial.opacity(); } if (!_doc || _doc->thumb->isNull()) { - p.fillRect(_docIconRect, (*_docIconColor)->b); + p.fillRect(_docIconRect, _docIconColor); if ((!_doc || _doc->loaded()) && (!radial || radialOpacity < 1) && _docIcon) { _docIcon->paint(p, _docIconRect.x() + (_docIconRect.width() - _docIcon->width()), _docIconRect.y(), width()); p.setPen(st::mediaviewFileExtFg); @@ -1666,7 +1764,7 @@ void MediaView::paintEvent(QPaintEvent *e) { p.drawTextLeft(_docRect.x() + 2 * st::mediaviewFilePadding + st::mediaviewFileIconSize, _docRect.y() + st::mediaviewFilePadding + st::mediaviewFileNameTop, width(), _docName, _docNameWidth); p.setPen(st::mediaviewFileSizeFg); - p.setFont(st::mvFont); + p.setFont(st::mediaviewFont); p.drawTextLeft(_docRect.x() + 2 * st::mediaviewFilePadding + st::mediaviewFileIconSize, _docRect.y() + st::mediaviewFilePadding + st::mediaviewFileSizeTop, width(), _docSize, _docSizeWidth); } } @@ -1685,7 +1783,7 @@ void MediaView::paintEvent(QPaintEvent *e) { } } if (_leftNavIcon.intersects(r)) { - p.setOpacity((o * st::mvIconOverOpacity + (1 - o) * st::mvIconOpacity) * co); + p.setOpacity((o * st::mediaviewIconOverOpacity + (1 - o) * st::mediaviewIconOpacity) * co); st::mediaviewLeft.paintInCenter(p, _leftNavIcon); } } @@ -1701,7 +1799,7 @@ void MediaView::paintEvent(QPaintEvent *e) { } } if (_rightNavIcon.intersects(r)) { - p.setOpacity((o * st::mvIconOverOpacity + (1 - o) * st::mvIconOpacity) * co); + p.setOpacity((o * st::mediaviewIconOverOpacity + (1 - o) * st::mediaviewIconOpacity) * co); st::mediaviewRight.paintInCenter(p, _rightNavIcon); } } @@ -1717,7 +1815,7 @@ void MediaView::paintEvent(QPaintEvent *e) { } } if (_closeNavIcon.intersects(r)) { - p.setOpacity((o * st::mvIconOverOpacity + (1 - o) * st::mvIconOpacity) * co); + p.setOpacity((o * st::mediaviewIconOverOpacity + (1 - o) * st::mediaviewIconOpacity) * co); st::mediaviewClose.paintInCenter(p, _closeNavIcon); } } @@ -1725,71 +1823,71 @@ void MediaView::paintEvent(QPaintEvent *e) { // save button if (_saveVisible && _saveNavIcon.intersects(r)) { auto o = overLevel(OverSave); - p.setOpacity((o * st::mvIconOverOpacity + (1 - o) * st::mvIconOpacity) * co); + p.setOpacity((o * st::mediaviewIconOverOpacity + (1 - o) * st::mediaviewIconOpacity) * co); st::mediaviewSave.paintInCenter(p, _saveNavIcon); } // more area if (_moreNavIcon.intersects(r)) { auto o = overLevel(OverMore); - p.setOpacity((o * st::mvIconOverOpacity + (1 - o) * st::mvIconOpacity) * co); + p.setOpacity((o * st::mediaviewIconOverOpacity + (1 - o) * st::mediaviewIconOpacity) * co); st::mediaviewMore.paintInCenter(p, _moreNavIcon); } p.setPen(st::mediaviewControlFg); - p.setFont(st::mvThickFont); + p.setFont(st::mediaviewThickFont); // header if (_headerNav.intersects(r)) { auto o = _headerHasLink ? overLevel(OverHeader) : 0; - p.setOpacity((o * st::mvIconOverOpacity + (1 - o) * st::mvIconOpacity) * co); - p.drawText(_headerNav.left(), _headerNav.top() + st::mvThickFont->ascent, _headerText); + p.setOpacity((o * st::mediaviewIconOverOpacity + (1 - o) * st::mediaviewIconOpacity) * co); + p.drawText(_headerNav.left(), _headerNav.top() + st::mediaviewThickFont->ascent, _headerText); if (o > 0) { p.setOpacity(o * co); - p.drawLine(_headerNav.left(), _headerNav.top() + st::mvThickFont->ascent + 1, _headerNav.right(), _headerNav.top() + st::mvThickFont->ascent + 1); + p.drawLine(_headerNav.left(), _headerNav.top() + st::mediaviewThickFont->ascent + 1, _headerNav.right(), _headerNav.top() + st::mediaviewThickFont->ascent + 1); } } - p.setFont(st::mvFont); + p.setFont(st::mediaviewFont); // name if (_from && _nameNav.intersects(r)) { float64 o = overLevel(OverName); - p.setOpacity((o * st::mvIconOverOpacity + (1 - o) * st::mvIconOpacity) * co); + p.setOpacity((o * st::mediaviewIconOverOpacity + (1 - o) * st::mediaviewIconOpacity) * co); _fromName.drawElided(p, _nameNav.left(), _nameNav.top(), _nameNav.width()); if (o > 0) { p.setOpacity(o * co); - p.drawLine(_nameNav.left(), _nameNav.top() + st::mvFont->ascent + 1, _nameNav.right(), _nameNav.top() + st::mvFont->ascent + 1); + p.drawLine(_nameNav.left(), _nameNav.top() + st::mediaviewFont->ascent + 1, _nameNav.right(), _nameNav.top() + st::mediaviewFont->ascent + 1); } } // date if (_dateNav.intersects(r)) { float64 o = overLevel(OverDate); - p.setOpacity((o * st::mvIconOverOpacity + (1 - o) * st::mvIconOpacity) * co); - p.drawText(_dateNav.left(), _dateNav.top() + st::mvFont->ascent, _dateText); + p.setOpacity((o * st::mediaviewIconOverOpacity + (1 - o) * st::mediaviewIconOpacity) * co); + p.drawText(_dateNav.left(), _dateNav.top() + st::mediaviewFont->ascent, _dateText); if (o > 0) { p.setOpacity(o * co); - p.drawLine(_dateNav.left(), _dateNav.top() + st::mvFont->ascent + 1, _dateNav.right(), _dateNav.top() + st::mvFont->ascent + 1); + p.drawLine(_dateNav.left(), _dateNav.top() + st::mediaviewFont->ascent + 1, _dateNav.right(), _dateNav.top() + st::mediaviewFont->ascent + 1); } } // caption if (!_caption.isEmpty()) { - QRect outer(_captionRect.marginsAdded(st::mvCaptionPadding)); + QRect outer(_captionRect.marginsAdded(st::mediaviewCaptionPadding)); if (outer.intersects(r)) { p.setOpacity(co); p.setBrush(st::mediaviewCaptionBg); p.setPen(Qt::NoPen); - p.drawRoundedRect(outer, st::mvCaptionRadius, st::mvCaptionRadius); + p.drawRoundedRect(outer, st::mediaviewCaptionRadius, st::mediaviewCaptionRadius); if (_captionRect.intersects(r)) { - textstyleSet(&st::mediaviewTextStyle); + p.setTextPalette(st::mediaviewTextPalette); p.setPen(st::mediaviewCaptionFg); - _caption.drawElided(p, _captionRect.x(), _captionRect.y(), _captionRect.width(), _captionRect.height() / st::mvCaptionFont->height); - textstyleRestore(); + _caption.drawElided(p, _captionRect.x(), _captionRect.y(), _captionRect.width(), _captionRect.height() / st::mediaviewCaptionStyle.font->height); + p.restoreTextPalette(); } } } @@ -1828,6 +1926,49 @@ void MediaView::paintDocRadialLoading(Painter &p, bool radial, float64 radialOpa } } +void MediaView::paintThemePreview(Painter &p, QRect clip) { + auto fill = _themePreviewRect.intersected(clip); + if (!fill.isEmpty()) { + if (_themePreview) { + p.drawPixmapLeft(_themePreviewRect.x(), _themePreviewRect.y(), width(), _themePreview->preview); + } else { + p.fillRect(fill, st::themePreviewBg); + p.setFont(st::themePreviewLoadingFont); + p.setPen(st::themePreviewLoadingFg); + p.drawText(_themePreviewRect, lang(_themePreviewId ? lng_theme_preview_generating : lng_theme_preview_invalid), QTextOption(style::al_center)); + } + } + + auto fillOverlay = [this, &p, clip](QRect fill) { + auto clipped = fill.intersected(clip); + if (!clipped.isEmpty()) { + p.setOpacity(st::themePreviewOverlayOpacity); + p.fillRect(clipped, st::themePreviewBg); + p.setOpacity(1.); + } + }; + auto titleRect = QRect(_themePreviewRect.x(), _themePreviewRect.y(), _themePreviewRect.width(), st::themePreviewMargin.top()); + if (titleRect.x() < 0) { + titleRect = QRect(0, _themePreviewRect.y(), width(), st::themePreviewMargin.top()); + } + if (auto fillTitleRect = (titleRect.y() < 0)) { + titleRect.moveTop(0); + fillOverlay(titleRect); + } + titleRect = titleRect.marginsRemoved(QMargins(st::themePreviewMargin.left(), st::themePreviewTitleTop, st::themePreviewMargin.right(), titleRect.height() - st::themePreviewTitleTop - st::themePreviewTitleFont->height)); + if (titleRect.intersects(clip)) { + p.setFont(st::themePreviewTitleFont); + p.setPen(st::themePreviewTitleFg); + p.drawTextLeft(titleRect.x(), titleRect.y(), width(), lang(lng_theme_preview_title)); + } + + auto buttonsRect = QRect(_themePreviewRect.x(), _themePreviewRect.y() + _themePreviewRect.height() - st::themePreviewMargin.bottom(), _themePreviewRect.width(), st::themePreviewMargin.bottom()); + if (auto fillButtonsRect = (buttonsRect.y() + buttonsRect.height() > height())) { + buttonsRect.moveTop(height() - buttonsRect.height()); + fillOverlay(buttonsRect); + } +} + void MediaView::keyPressEvent(QKeyEvent *e) { if (_clipController) { auto toggle1 = (e->key() == Qt::Key_F && e->modifiers().testFlag(Qt::ControlModifier)); @@ -1856,7 +1997,7 @@ void MediaView::keyPressEvent(QKeyEvent *e) { } else if (e->key() == Qt::Key_Copy || (e->key() == Qt::Key_C && e->modifiers().testFlag(Qt::ControlModifier))) { onCopy(); } else if (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return || e->key() == Qt::Key_Space) { - if (_doc && !_doc->loading() && (!fileShown() || !_doc->loaded())) { + if (_doc && !_doc->loading() && (fileBubbleShown() || !_doc->loaded())) { onDocClick(); } else if (_doc && _doc->isVideo()) { onVideoPauseResume(); @@ -1957,8 +2098,8 @@ bool MediaView::moveToNext(int32 delta) { _channel = _history ? _history->channelId() : NoChannel; _canForward = _msgid > 0; _canDelete = lastChatPhoto.item->canDelete(); - stopGif(); - displayPhoto(lastChatPhoto.photo, lastChatPhoto.item); preloadData(delta); + displayPhoto(lastChatPhoto.photo, lastChatPhoto.item); + preloadData(delta); return true; } else if (_history && (_history->overviewCount(OverviewChatPhotos) != 0 || ( _migrated && _migrated->overviewCount(OverviewChatPhotos) != 0))) { @@ -1994,7 +2135,7 @@ bool MediaView::moveToNext(int32 delta) { _canForward = _msgid > 0; _canDelete = item->canDelete(); stopGif(); - if (HistoryMedia *media = item->getMedia()) { + if (auto media = item->getMedia()) { switch (media->type()) { case MediaTypePhoto: displayPhoto(static_cast(item->getMedia())->photo(), item); preloadData(delta); break; case MediaTypeFile: @@ -2013,7 +2154,6 @@ bool MediaView::moveToNext(int32 delta) { _msgmigrated = false; _canForward = false; _canDelete = false; - stopGif(); displayPhoto(_additionalChatPhoto, 0); } if (delta < 0 && _index < MediaOverviewStartPerPage) { @@ -2189,8 +2329,8 @@ void MediaView::snapXY() { void MediaView::mouseMoveEvent(QMouseEvent *e) { updateOver(e->pos()); - if (_lastAction.x() >= 0 && (e->pos() - _lastAction).manhattanLength() >= st::mvDeltaFromLastAction) { - _lastAction = QPoint(-st::mvDeltaFromLastAction, -st::mvDeltaFromLastAction); + if (_lastAction.x() >= 0 && (e->pos() - _lastAction).manhattanLength() >= st::mediaviewDeltaFromLastAction) { + _lastAction = QPoint(-st::mediaviewDeltaFromLastAction, -st::mediaviewDeltaFromLastAction); } if (_pressed) { if (!_dragging && (e->pos() - _mStart).manhattanLength() >= QApplication::startDragDistance()) { @@ -2267,7 +2407,7 @@ void MediaView::updateOver(QPoint pos) { ClickHandlerHost *lnkhost = nullptr; if (_saveMsgStarted && _saveMsg.contains(pos)) { - auto textState = _saveMsgText.getState(pos.x() - _saveMsg.x() - st::medviewSaveMsgPadding.left(), pos.y() - _saveMsg.y() - st::medviewSaveMsgPadding.top(), _saveMsg.width() - st::medviewSaveMsgPadding.left() - st::medviewSaveMsgPadding.right()); + auto textState = _saveMsgText.getState(pos.x() - _saveMsg.x() - st::mediaviewSaveMsgPadding.left(), pos.y() - _saveMsg.y() - st::mediaviewSaveMsgPadding.top(), _saveMsg.width() - st::mediaviewSaveMsgPadding.left() - st::mediaviewSaveMsgPadding.right()); lnk = textState.link; lnkhost = this; } else if (_captionRect.contains(pos)) { @@ -2302,7 +2442,7 @@ void MediaView::updateOver(QPoint pos) { updateOverState(OverHeader); } else if (_saveVisible && _saveNav.contains(pos)) { updateOverState(OverSave); - } else if (_doc && !fileShown() && _docIconRect.contains(pos)) { + } else if (_doc && fileBubbleShown() && _docIconRect.contains(pos)) { updateOverState(OverIcon); } else if (_moreNav.contains(pos)) { updateOverState(OverMore); @@ -2358,8 +2498,14 @@ void MediaView::mouseReleaseEvent(QMouseEvent *e) { } _dragging = 0; setCursor(style::cur_default); - } else if ((e->pos() - _lastAction).manhattanLength() >= st::mvDeltaFromLastAction && (!_doc || fileShown() || !_docRect.contains(e->pos()))) { - close(); + } else if ((e->pos() - _lastAction).manhattanLength() >= st::mediaviewDeltaFromLastAction) { + if (_themePreviewShown) { + if (!_themePreviewRect.contains(e->pos())) { + close(); + } + } else if (!_doc || fileShown() || !_docRect.contains(e->pos())) { + close(); + } } _pressed = false; } @@ -2422,7 +2568,7 @@ void MediaView::touchEvent(QTouchEvent *e) { } else if (_touchMove) { if ((!_leftNavVisible || !_leftNav.contains(mapFromGlobal(_touchStart))) && (!_rightNavVisible || !_rightNav.contains(mapFromGlobal(_touchStart)))) { QPoint d = (e->touchPoints().cbegin()->screenPos().toPoint() - _touchStart); - if (d.x() * d.x() > d.y() * d.y() && (d.x() > st::mvSwipeDistance || d.x() < -st::mvSwipeDistance)) { + if (d.x() * d.x() > d.y() * d.y() && (d.x() > st::mediaviewSwipeDistance || d.x() < -st::mediaviewSwipeDistance)) { moveToNext(d.x() > 0 ? -1 : 1); } } @@ -2500,6 +2646,7 @@ void MediaView::setVisible(bool visible) { Sandbox::removeEventFilter(this); stopGif(); + destroyThemePreview(); _radial.stop(); Notify::clipStopperHidden(ClipStopperMediaview); } @@ -2746,12 +2893,12 @@ void MediaView::updateHeader() { } } _headerHasLink = _history && typeHasMediaOverview(_overview); - int32 hwidth = st::mvThickFont->width(_headerText); + int32 hwidth = st::mediaviewThickFont->width(_headerText); if (hwidth > width() / 3) { hwidth = width() / 3; - _headerText = st::mvThickFont->elided(_headerText, hwidth, Qt::ElideMiddle); + _headerText = st::mediaviewThickFont->elided(_headerText, hwidth, Qt::ElideMiddle); } - _headerNav = myrtlrect(st::mvTextLeft, height() - st::mvHeaderTop, hwidth, st::mvThickFont->height); + _headerNav = myrtlrect(st::mediaviewTextLeft, height() - st::mediaviewHeaderTop, hwidth, st::mediaviewThickFont->height); } float64 MediaView::overLevel(OverState control) const { diff --git a/Telegram/SourceFiles/mediaview.h b/Telegram/SourceFiles/mediaview.h index 2271554cb..60cd2a8f3 100644 --- a/Telegram/SourceFiles/mediaview.h +++ b/Telegram/SourceFiles/mediaview.h @@ -32,8 +32,15 @@ class Controller; namespace Ui { class PopupMenu; class LinkButton; +class RoundButton; } // namespace Ui +namespace Window { +namespace Theme { +struct Preview; +} // namespace Theme +} // namespace Window + struct AudioPlaybackState; class MediaView : public TWidget, private base::Subscriber, public RPCSender, public ClickHandlerHost { @@ -127,6 +134,20 @@ private slots: void onVideoPlayProgress(const AudioMsgId &audioId); private: + enum OverState { + OverNone, + OverLeftNav, + OverRightNav, + OverClose, + OverHeader, + OverName, + OverDate, + OverSave, + OverMore, + OverIcon, + OverVideo, + }; + void showSaveMsgFile(); void dropdownHidden(); @@ -155,6 +176,10 @@ private: void initAnimation(); void createClipReader(); + void initThemePreview(); + void destroyThemePreview(); + void updateThemePreviewGeometry(); + // Radial animation interface. float64 radialProgress() const; bool radialLoading() const; @@ -187,6 +212,11 @@ private: void zoomUpdate(int32 &newZoom); void paintDocRadialLoading(Painter &p, bool radial, float64 radialOpacity); + void paintThemePreview(Painter &p, QRect clip); + + void updateOverRect(OverState state); + bool updateOverState(OverState newState); + float64 overLevel(OverState control) const; QBrush _transparentBrush; @@ -236,10 +266,11 @@ private: bool fileShown() const; bool gifShown() const; + bool fileBubbleShown() const; void stopGif(); const style::icon *_docIcon = nullptr; - const style::color *_docIconColor = nullptr; + style::color _docIconColor; QString _docName, _docSize, _docExt; int _docNameWidth = 0, _docSizeWidth = 0, _docExtWidth = 0; QRect _docRect, _docIconRect; @@ -278,19 +309,6 @@ private: mtpRequestId _loadRequest = 0; - enum OverState { - OverNone, - OverLeftNav, - OverRightNav, - OverClose, - OverHeader, - OverName, - OverDate, - OverSave, - OverMore, - OverIcon, - OverVideo, - }; OverState _over = OverNone; OverState _down = OverNone; QPoint _lastAction, _lastMouseMovePos; @@ -340,8 +358,11 @@ private: int _verticalWheelDelta = 0; - void updateOverRect(OverState state); - bool updateOverState(OverState newState); - float64 overLevel(OverState control) const; + bool _themePreviewShown = false; + uint64 _themePreviewId = 0; + QRect _themePreviewRect; + std_::unique_ptr _themePreview; + object_ptr _themeApply = { nullptr }; + object_ptr _themeCancel = { nullptr }; }; diff --git a/Telegram/SourceFiles/overview/overview_layout.cpp b/Telegram/SourceFiles/overview/overview_layout.cpp index 1169d85f3..3640f2a3d 100644 --- a/Telegram/SourceFiles/overview/overview_layout.cpp +++ b/Telegram/SourceFiles/overview/overview_layout.cpp @@ -493,7 +493,7 @@ Voice::Voice(DocumentData *voice, HistoryItem *parent, const style::OverviewFile updateName(); QString d = textcmdLink(1, textRichPrepare(langDateTime(date(_data->date)))); TextParseOptions opts = { TextParseRichText, 0, 0, Qt::LayoutDirectionAuto }; - _details.setText(st::normalFont, lng_date_and_duration(lt_date, d, lt_duration, formatDurationText(_data->voice()->duration)), opts); + _details.setText(st::defaultTextStyle, lng_date_and_duration(lt_date, d, lt_duration, formatDurationText(_data->voice()->duration)), opts); _details.setLink(1, goToMessageClickHandler(parent)); } @@ -578,9 +578,9 @@ void Voice::paint(Painter &p, const QRect &clip, TextSelection selection, const p.setPen(selected ? st::mediaInFgSelected : st::mediaInFg); int32 unreadx = nameleft; if (_status.size() == FileStatusSizeLoaded || _status.size() == FileStatusSizeReady) { - textstyleSet(&(selected ? st::mediaInStyleSelected : st::mediaInStyle)); + p.setTextPalette(selected ? st::mediaInPaletteSelected : st::mediaInPalette); _details.drawLeftElided(p, nameleft, statustop, namewidth, _width); - textstyleRestore(); + p.restoreTextPalette(); unreadx += _details.maxWidth(); } else { int32 statusw = st::normalFont->width(_status.text()); @@ -631,12 +631,12 @@ void Voice::updateName() { int32 version = 0; if (const HistoryMessageForwarded *fwd = _parent->Get()) { if (_parent->fromOriginal()->isChannel()) { - _name.setText(st::semiboldFont, lng_forwarded_channel(lt_channel, App::peerName(_parent->fromOriginal())), _textNameOptions); + _name.setText(st::semiboldTextStyle, lng_forwarded_channel(lt_channel, App::peerName(_parent->fromOriginal())), _textNameOptions); } else { - _name.setText(st::semiboldFont, lng_forwarded(lt_user, App::peerName(_parent->fromOriginal())), _textNameOptions); + _name.setText(st::semiboldTextStyle, lng_forwarded(lt_user, App::peerName(_parent->fromOriginal())), _textNameOptions); } } else { - _name.setText(st::semiboldFont, App::peerName(_parent->from()), _textNameOptions); + _name.setText(st::semiboldTextStyle, App::peerName(_parent->from()), _textNameOptions); } version = _parent->fromOriginal()->nameVersion; _nameVersion = version; @@ -675,7 +675,7 @@ Document::Document(DocumentData *document, HistoryItem *parent, const style::Ove , _date(langDateTime(date(_data->date))) , _datew(st::normalFont->width(_date)) , _colorIndex(documentColorIndex(_data, _ext)) { - _name.setMarkedText(st::normalFont, documentNameWithEntities(_data), _documentNameOptions); + _name.setMarkedText(st::defaultTextStyle, documentNameWithEntities(_data), _documentNameOptions); AddComponents(Info::Bit()); @@ -806,7 +806,7 @@ void Document::paint(Painter &p, const QRect &clip, TextSelection selection, con } } if (selected) { - p.fillRect(rthumb, textstyleCurrent()->selectOverlay); + p.fillRect(rthumb, st::defaultTextPalette.selectOverlay); } if (radial || (!loaded && !_data->loading())) { @@ -1029,7 +1029,7 @@ Link::Link(HistoryMedia *media, HistoryItem *parent) : ItemBase(parent) { } if (till > from) { TextParseOptions opts = { TextParseMultiline, int32(st::linksMaxWidth), 3 * st::normalFont->height, Qt::LayoutDirectionAuto }; - _text.setText(st::normalFont, text.mid(from, till - from), opts); + _text.setText(st::defaultTextStyle, text.mid(from, till - from), opts); } int32 tw = 0, th = 0; if (_page && _page->photo) { diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index dd904f3b5..bb2e39aba 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -87,8 +87,7 @@ OverviewInner::OverviewInner(OverviewWidget *overview, Ui::ScrollArea *scroll, P using Update = Window::Theme::BackgroundUpdate; subscribe(Window::Theme::Background(), [this](const Update &update) { - if (update.type == Update::Type::TestingTheme - || update.type == Update::Type::RevertingTheme) { + if (update.paletteChanged()) { invalidateCache(); } }); diff --git a/Telegram/SourceFiles/platform/linux/main_window_linux.h b/Telegram/SourceFiles/platform/linux/main_window_linux.h index 17a0a0199..7246f6cb7 100644 --- a/Telegram/SourceFiles/platform/linux/main_window_linux.h +++ b/Telegram/SourceFiles/platform/linux/main_window_linux.h @@ -45,7 +45,7 @@ public: bool psHasNativeNotifications(); - virtual QImage iconWithCounter(int size, int count, const style::color &bg, const style::color &fg, bool smallIcon) = 0; + virtual QImage iconWithCounter(int size, int count, style::color bg, style::color fg, bool smallIcon) = 0; static void LibsLoaded(); @@ -71,7 +71,7 @@ protected: void psTrayMenuUpdated(); void psSetupTrayIcon(); - virtual void placeSmallCounter(QImage &img, int size, int count, const style::color &bg, const QPoint &shift, const style::color &color) = 0; + virtual void placeSmallCounter(QImage &img, int size, int count, style::color bg, const QPoint &shift, style::color color) = 0; private: void updateIconCounters(); diff --git a/Telegram/SourceFiles/platform/mac/main_window_mac.h b/Telegram/SourceFiles/platform/mac/main_window_mac.h index da0490c5c..a9feffd74 100644 --- a/Telegram/SourceFiles/platform/mac/main_window_mac.h +++ b/Telegram/SourceFiles/platform/mac/main_window_mac.h @@ -49,7 +49,7 @@ public: return !(QSysInfo::macVersion() < QSysInfo::MV_10_8); } - virtual QImage iconWithCounter(int size, int count, const style::color &bg, const style::color &fg, bool smallIcon) = 0; + virtual QImage iconWithCounter(int size, int count, style::color bg, style::color fg, bool smallIcon) = 0; void closeWithoutDestroy() override; @@ -99,7 +99,7 @@ protected: void psTrayMenuUpdated(); void psSetupTrayIcon(); - virtual void placeSmallCounter(QImage &img, int size, int count, const style::color &bg, const QPoint &shift, const style::color &color) = 0; + virtual void placeSmallCounter(QImage &img, int size, int count, style::color bg, const QPoint &shift, style::color color) = 0; QTimer psUpdatedPositionTimer; diff --git a/Telegram/SourceFiles/platform/mac/main_window_mac.mm b/Telegram/SourceFiles/platform/mac/main_window_mac.mm index 73359553a..aa60566c5 100644 --- a/Telegram/SourceFiles/platform/mac/main_window_mac.mm +++ b/Telegram/SourceFiles/platform/mac/main_window_mac.mm @@ -205,9 +205,8 @@ MainWindow::MainWindow() , iconbig256(qsl(":/gui/art/iconbig256.png")) , wndIcon(QPixmap::fromImage(iconbig256, Qt::ColorOnly)) , _private(std_::make_unique(this)) { - QImage tray(qsl(":/gui/art/osxtray.png")); - trayImg = tray.copy(0, cRetina() ? 0 : tray.width() / 2, tray.width() / (cRetina() ? 2 : 4), tray.width() / (cRetina() ? 2 : 4)); - trayImgSel = tray.copy(tray.width() / (cRetina() ? 2 : 4), cRetina() ? 0 : tray.width() / 2, tray.width() / (cRetina() ? 2 : 4), tray.width() / (cRetina() ? 2 : 4)); + trayImg = st::macTrayIcon.instance(QColor(0, 0, 0, 180), dbisOne); + trayImgSel = st::macTrayIcon.instance(QColor(255, 255, 255), dbisOne); _hideAfterFullScreenTimer.setSingleShot(true); connect(&_hideAfterFullScreenTimer, SIGNAL(timeout()), this, SLOT(onHideAfterFullScreen())); @@ -292,39 +291,45 @@ void MainWindow::psUpdateWorkmode() { } } -void _placeCounter(QImage &img, int size, int count, const style::color &bg, const style::color &color) { +void _placeCounter(QImage &img, int size, int count, style::color bg, style::color color) { if (!count) return; + auto savedRatio = img.devicePixelRatio(); + img.setDevicePixelRatio(1.); - QPainter p(&img); - QString cnt = (count < 100) ? QString("%1").arg(count) : QString("..%1").arg(count % 100, 2, 10, QChar('0')); - int32 cntSize = cnt.size(); + { + Painter p(&img); + PainterHighQualityEnabler hq(p); - p.setBrush(bg->b); - p.setPen(Qt::NoPen); - p.setRenderHint(QPainter::Antialiasing); - int32 fontSize, skip; - if (size == 22) { - skip = 1; - fontSize = 8; - } else { - skip = 2; - fontSize = 16; + auto cnt = (count < 100) ? QString("%1").arg(count) : QString("..%1").arg(count % 100, 2, 10, QChar('0')); + auto cntSize = cnt.size(); + + p.setBrush(bg); + p.setPen(Qt::NoPen); + int32 fontSize, skip; + if (size == 22) { + skip = 1; + fontSize = 8; + } else { + skip = 2; + fontSize = 16; + } + style::font f(fontSize, 0, 0); + int32 w = f->width(cnt), d, r; + if (size == 22) { + d = (cntSize < 2) ? 3 : 2; + r = (cntSize < 2) ? 6 : 5; + } else { + d = (cntSize < 2) ? 6 : 5; + r = (cntSize < 2) ? 9 : 11; + } + p.drawRoundedRect(QRect(size - w - d * 2 - skip, size - f->height - skip, w + d * 2, f->height), r, r); + + p.setCompositionMode(QPainter::CompositionMode_Source); + p.setFont(f); + p.setPen(color); + p.drawText(size - w - d - skip, size - f->height + f->ascent - skip, cnt); } - style::font f(fontSize, 0, 0); - int32 w = f->width(cnt), d, r; - if (size == 22) { - d = (cntSize < 2) ? 3 : 2; - r = (cntSize < 2) ? 6 : 5; - } else { - d = (cntSize < 2) ? 6 : 5; - r = (cntSize < 2) ? 9 : 11; - } - p.drawRoundedRect(QRect(size - w - d * 2 - skip, size - f->height - skip, w + d * 2, f->height), r, r); - - p.setCompositionMode(QPainter::CompositionMode_Source); - p.setFont(f->f); - p.setPen(color->p); - p.drawText(size - w - d - skip, size - f->height + f->ascent - skip, cnt); + img.setDevicePixelRatio(savedRatio); } void MainWindow::updateTitleCounter() { diff --git a/Telegram/SourceFiles/platform/mac/window_title_mac.h b/Telegram/SourceFiles/platform/mac/window_title_mac.h index 48d165ed5..3e2477545 100644 --- a/Telegram/SourceFiles/platform/mac/window_title_mac.h +++ b/Telegram/SourceFiles/platform/mac/window_title_mac.h @@ -47,4 +47,7 @@ private: object_ptr CreateTitleWidget(QWidget *parent); +int PreviewTitleHeight(); +void PreviewWindowFramePaint(QImage &preview, const style::palette &palette, QRect body, int outerWidth); + } // namespace Platform diff --git a/Telegram/SourceFiles/platform/mac/window_title_mac.mm b/Telegram/SourceFiles/platform/mac/window_title_mac.mm index a0cdc64e1..decbad759 100644 --- a/Telegram/SourceFiles/platform/mac/window_title_mac.mm +++ b/Telegram/SourceFiles/platform/mac/window_title_mac.mm @@ -21,10 +21,15 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "stdafx.h" #include "platform/mac/window_title_mac.h" +#include "mainwindow.h" #include "ui/widgets/shadow.h" #include "styles/style_window.h" +#include "styles/style_mediaview.h" #include "platform/platform_main_window.h" +#include +#include + namespace Platform { TitleWidget::TitleWidget(MainWindow *parent, int height) : Window::TitleWidget(parent) @@ -84,4 +89,138 @@ object_ptr CreateTitleWidget(QWidget *parent) { return { nullptr }; } +// All the window decorations preview is done without taking cScale() into +// account, with dbisOne scale and without "px" dimensions, because thats +// how it will look in real launched macOS app. +int PreviewTitleHeight() { + if (auto window = qobject_cast(App::wnd())) { + if (auto height = window->getCustomTitleHeight()) { + return height; + } + } + return 22; +} + +QImage PreviewWindowSystemButton(QColor inner, QColor border) { + auto buttonSize = 12; + auto fullSize = buttonSize * cIntRetinaFactor(); + auto result = QImage(fullSize, fullSize, QImage::Format_ARGB32_Premultiplied); + result.fill(Qt::transparent); + { + Painter p(&result); + PainterHighQualityEnabler hq(p); + + p.setPen(border); + p.setBrush(inner); + p.drawEllipse(QRectF(0.5, 0.5, fullSize - 1., fullSize - 1.)); + } + result.setDevicePixelRatio(cRetinaFactor()); + return std_::move(result); +} + +void PreviewWindowTitle(Painter &p, const style::palette &palette, QRect body, int titleHeight, int outerWidth) { + auto titleRect = QRect(body.x(), body.y() - titleHeight, body.width(), titleHeight); + p.fillRect(titleRect, QColor(0, 0, 0)); + p.fillRect(titleRect, st::titleBg[palette]); + p.fillRect(titleRect.x(), titleRect.y() + titleRect.height() - st::lineWidth, titleRect.width(), st::lineWidth, st::titleShadow[palette]); + + auto useSystemFont = false; + QFont font; +#ifndef OS_MAC_OLD + QStringList families = { qsl(".SF NS Text"), qsl("Helvetica Neue") }; + for (auto family : families) { + font.setFamily(family); + if (QFontInfo(font).family() == font.family()) { + useSystemFont = true; + break; + } + } +#endif // OS_MAC_OLD + + if (useSystemFont) { + font.setPixelSize((titleHeight * 15) / 24); + } else { + font = st::normalFont; + } + + p.setPen(st::titleFgActive[palette]); + p.setFont(font); + + p.drawText(titleRect, qsl("Telegram"), style::al_center); + + auto isGraphite = ([NSColor currentControlTint] == NSGraphiteControlTint); + auto buttonSkip = 8; + auto graphiteInner = QColor(141, 141, 146); + auto graphiteBorder = QColor(104, 104, 109); + auto closeInner = isGraphite ? graphiteInner : QColor(252, 96, 92); + auto closeBorder = isGraphite ? graphiteBorder : QColor(222, 64, 59); + auto minimizeInner = isGraphite ? graphiteInner : QColor(254, 192, 65); + auto minimizeBorder = isGraphite ? graphiteBorder : QColor(221, 152, 25); + auto maximizeInner = isGraphite ? graphiteInner : QColor(52, 200, 74); + auto maximizeBorder = isGraphite ? graphiteBorder : QColor(21, 164, 41); + auto close = PreviewWindowSystemButton(closeInner, closeBorder); + auto left = buttonSkip; + p.drawImage(titleRect.x() + left, titleRect.y() + (titleRect.height() - (close.height() / cIntRetinaFactor())) / 2, close); + left += (close.width() / cIntRetinaFactor()) + buttonSkip; + auto minimize = PreviewWindowSystemButton(minimizeInner, minimizeBorder); + p.drawImage(titleRect.x() + left, titleRect.y() + (titleRect.height() - (minimize.height() / cIntRetinaFactor())) / 2, minimize); + left += (minimize.width() / cIntRetinaFactor()) + buttonSkip; + auto maximize = PreviewWindowSystemButton(maximizeInner, maximizeBorder); + p.drawImage(titleRect.x() + left, titleRect.y() + (titleRect.height() - (maximize.height() / cIntRetinaFactor())) / 2, maximize); +} + +void PreviewWindowFramePaint(QImage &preview, const style::palette &palette, QRect body, int outerWidth) { + auto retina = cIntRetinaFactor(); + auto titleHeight = PreviewTitleHeight(); + { + Painter p(&preview); + PreviewWindowTitle(p, palette, body, titleHeight, outerWidth); + } + auto inner = QRect(body.x(), body.y() - titleHeight, body.width(), body.height() + titleHeight); + + auto retinaRadius = st::macWindowRoundRadius * retina; + auto roundMask = QImage(2 * retinaRadius, 2 * retinaRadius, QImage::Format_ARGB32_Premultiplied); + roundMask.setDevicePixelRatio(cRetinaFactor()); + roundMask.fill(Qt::transparent); + { + Painter p(&roundMask); + PainterHighQualityEnabler hq(p); + + p.setPen(Qt::NoPen); + p.setBrush(QColor(255, 255, 255)); + p.drawRoundedRect(0, 0, 2 * st::macWindowRoundRadius, 2 * st::macWindowRoundRadius, st::macWindowRoundRadius, st::macWindowRoundRadius); + } + QImage corners[4]; + corners[0] = roundMask.copy(0, 0, retinaRadius, retinaRadius); + corners[1] = roundMask.copy(retinaRadius, 0, retinaRadius, retinaRadius); + corners[2] = roundMask.copy(0, retinaRadius, retinaRadius, retinaRadius); + corners[3] = roundMask.copy(retinaRadius, retinaRadius, retinaRadius, retinaRadius); + QImage *cornersPointers[] = { &corners[0], &corners[1], &corners[2], &corners[3] }; + auto rounded = preview.copy(inner.x() * retina, inner.y() * retina, inner.width() * retina, inner.height() * retina); + Images::prepareRound(rounded, cornersPointers); + preview.fill(st::themePreviewBg->c); + + auto topLeft = st::macWindowShadowTopLeft.instance(QColor(0, 0, 0), dbisOne); + auto topRight = topLeft.mirrored(true, false); + auto bottomLeft = topLeft.mirrored(false, true); + auto bottomRight = bottomLeft.mirrored(true, false); + auto extend = QMargins(37, 28, 37, 28); + auto left = topLeft.copy(0, topLeft.height() - retina, extend.left() * retina, retina); + auto top = topLeft.copy(topLeft.width() - retina, 0, retina, extend.top() * retina); + auto right = topRight.copy(topRight.width() - (extend.right() * retina), topRight.height() - retina, extend.right() * retina, retina); + auto bottom = bottomRight.copy(0, bottomRight.height() - (extend.bottom() * retina), retina, extend.bottom() * retina); + { + Painter p(&preview); + p.drawImage(inner.x() - extend.left(), inner.y() - extend.top(), topLeft); + p.drawImage(inner.x() + inner.width() + extend.right() - (topRight.width() / retina), inner.y() - extend.top(), topRight); + p.drawImage(inner.x() - extend.left(), inner.y() + inner.height() + extend.bottom() - (bottomLeft.height() / retina), bottomLeft); + p.drawImage(inner.x() + inner.width() + extend.right() - (bottomRight.width() / retina), inner.y() + inner.height() + extend.bottom() - (bottomRight.height() / retina), bottomRight); + p.drawImage(QRect(inner.x() - extend.left(), inner.y() - extend.top() + (topLeft.height() / retina), extend.left(), extend.top() + inner.height() + extend.bottom() - (topLeft.height() / retina) - (bottomLeft.height() / retina)), left); + p.drawImage(QRect(inner.x() - extend.left() + (topLeft.width() / retina), inner.y() - extend.top(), extend.left() + inner.width() + extend.right() - (topLeft.width() / retina) - (topRight.width() / retina), extend.top()), top); + p.drawImage(QRect(inner.x() + inner.width(), inner.y() - extend.top() + (topRight.height() / retina), extend.right(), extend.top() + inner.height() + extend.bottom() - (topRight.height() / retina) - (bottomRight.height() / retina)), right); + p.drawImage(QRect(inner.x() - extend.left() + (bottomLeft.width() / retina), inner.y() + inner.height(), extend.left() + inner.width() + extend.right() - (bottomLeft.width() / retina) - (bottomRight.width() / retina), extend.bottom()), bottom); + p.drawImage(inner.x(), inner.y(), rounded); + } +} + } // namespace Platform diff --git a/Telegram/SourceFiles/platform/platform_window_title.h b/Telegram/SourceFiles/platform/platform_window_title.h index 2a1f45752..711289cda 100644 --- a/Telegram/SourceFiles/platform/platform_window_title.h +++ b/Telegram/SourceFiles/platform/platform_window_title.h @@ -22,6 +22,15 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "window/window_title.h" +namespace Window { +namespace Theme { + +int DefaultPreviewTitleHeight(); +void DefaultPreviewWindowFramePaint(QImage &preview, const style::palette &palette, QRect body, int outerWidth); + +} // namespace Theme +} // namespace Window + #ifdef Q_OS_MAC #include "platform/mac/window_title_mac.h" #elif defined Q_OS_WIN // Q_OS_MAC @@ -34,6 +43,14 @@ inline object_ptr CreateTitleWidget(QWidget *parent) { return { nullptr }; } +inline int PreviewTitleHeight() { + return Window::Theme::DefaultPreviewTitleHeight(); +} + +inline void PreviewWindowFramePaint(QImage &preview, const style::palette &palette, QRect body, int outerWidth) { + return Window::Theme::DefaultPreviewWindowFramePaint(preview, palette, body, outerWidth); +} + } // namespace Platform #endif // Q_OS_MAC || Q_OS_WIN || Q_OS_WINRT || Q_OS_LINUX diff --git a/Telegram/SourceFiles/platform/win/main_window_win.cpp b/Telegram/SourceFiles/platform/win/main_window_win.cpp index bd128bf19..a83cfc8a2 100644 --- a/Telegram/SourceFiles/platform/win/main_window_win.cpp +++ b/Telegram/SourceFiles/platform/win/main_window_win.cpp @@ -30,6 +30,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "lang.h" #include "localstorage.h" #include "ui/widgets/popup_menu.h" +#include "window/window_theme.h" #include @@ -143,11 +144,11 @@ public: bool init(QColor c) { _fullsize = st::windowShadow.width(); _shift = st::windowShadowShift; - QImage cornersImage(_fullsize, _fullsize, QImage::Format_ARGB32_Premultiplied); + auto cornersImage = QImage(_fullsize, _fullsize, QImage::Format_ARGB32_Premultiplied); { Painter p(&cornersImage); p.setCompositionMode(QPainter::CompositionMode_Source); - st::windowShadow.paint(p, 0, 0, _fullsize); + st::windowShadow.paint(p, 0, 0, _fullsize, QColor(0, 0, 0)); } if (rtl()) cornersImage = cornersImage.mirrored(true, false); @@ -529,7 +530,6 @@ private: }; _PsShadowWindows _psShadowWindows; -QColor _shActive(0, 0, 0)/*, _shInactive(0, 0, 0)*/; LRESULT CALLBACK _PsShadowWindows::wndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { auto wnd = App::wnd(); @@ -618,6 +618,12 @@ MainWindow::MainWindow() if (!_taskbarCreatedMsgId) { _taskbarCreatedMsgId = RegisterWindowMessage(L"TaskbarButtonCreated"); } + using Update = Window::Theme::BackgroundUpdate; + subscribe(Window::Theme::Background(), [this](const Update &update) { + if (update.paletteChanged()) { + _psShadowWindows.setColor(st::windowShadowFg->c); + } + }); } void MainWindow::TaskbarCreated() { @@ -791,7 +797,7 @@ bool MainWindow::psHasNativeNotifications() { Q_DECLARE_METATYPE(QMargins); void MainWindow::psFirstShow() { - _psShadowWindows.init(_shActive); + _psShadowWindows.init(st::windowShadowFg->c); _shadowsWorking = true; psUpdateMargins(); diff --git a/Telegram/SourceFiles/platform/win/main_window_win.h b/Telegram/SourceFiles/platform/win/main_window_win.h index 4a00efd6e..4659fd100 100644 --- a/Telegram/SourceFiles/platform/win/main_window_win.h +++ b/Telegram/SourceFiles/platform/win/main_window_win.h @@ -52,7 +52,7 @@ public: bool psHasNativeNotifications(); - virtual QImage iconWithCounter(int size, int count, const style::color &bg, const style::color &fg, bool smallIcon) = 0; + virtual QImage iconWithCounter(int size, int count, style::color bg, style::color fg, bool smallIcon) = 0; static UINT TaskbarCreatedMsgId() { return _taskbarCreatedMsgId; @@ -104,13 +104,13 @@ protected: void psTrayMenuUpdated(); void psSetupTrayIcon(); - virtual void placeSmallCounter(QImage &img, int size, int count, const style::color &bg, const QPoint &shift, const style::color &color) = 0; + virtual void placeSmallCounter(QImage &img, int size, int count, style::color bg, const QPoint &shift, style::color color) = 0; QTimer psUpdatedPositionTimer; private: void updateIconCounters(); - + void psDestroyIcons(); static UINT _taskbarCreatedMsgId; diff --git a/Telegram/SourceFiles/platform/win/window_title_win.h b/Telegram/SourceFiles/platform/win/window_title_win.h index 261bb2f5b..a33985df6 100644 --- a/Telegram/SourceFiles/platform/win/window_title_win.h +++ b/Telegram/SourceFiles/platform/win/window_title_win.h @@ -27,6 +27,15 @@ class IconButton; class PlainShadow; } // namespace Ui +namespace Window { +namespace Theme { + +int DefaultPreviewTitleHeight(); +void DefaultPreviewWindowFramePaint(QImage &preview, const style::palette &palette, QRect body, int outerWidth); + +} // namespace Theme +} // namespace Window + namespace Platform { class TitleWidget : public Window::TitleWidget, private base::Subscriber { @@ -64,4 +73,12 @@ inline object_ptr CreateTitleWidget(QWidget *parent) { return object_ptr(parent); } +inline int PreviewTitleHeight() { + return Window::Theme::DefaultPreviewTitleHeight(); +} + +inline void PreviewWindowFramePaint(QImage &preview, const style::palette &palette, QRect body, int outerWidth) { + return Window::Theme::DefaultPreviewWindowFramePaint(preview, palette, body, outerWidth); +} + } // namespace Platform diff --git a/Telegram/SourceFiles/profile/profile.style b/Telegram/SourceFiles/profile/profile.style index b0e323d90..da08e063c 100644 --- a/Telegram/SourceFiles/profile/profile.style +++ b/Telegram/SourceFiles/profile/profile.style @@ -19,7 +19,6 @@ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org */ using "basic.style"; -using "basic_types.style"; using "ui/widgets/widgets.style"; using "window/window.style"; @@ -38,12 +37,14 @@ profileNameLeft: 26px; profileNameTop: 9px; profileNameLabel: FlatLabel(defaultFlatLabel) { margin: margins(10px, 5px, 10px, 5px); - font: font(16px semibold); width: 160px; maxHeight: 24px; textFg: windowBoldFg; -} -profileNameTextStyle: TextStyle(defaultTextStyle) { + style: TextStyle(defaultTextStyle) { + font: font(16px semibold); + linkFont: font(16px semibold); + linkFontOver: font(16px semibold underline); + } } profileStatusLeft: 27px; profileStatusTop: 35px; @@ -135,9 +136,9 @@ profileMemberAdminIcon: icon {{ "profile_admin_star", windowBgActive, point(4px, profileLimitReachedLabel: FlatLabel(defaultFlatLabel) { width: 180px; margin: margins(profileMemberPaddingLeft, 9px, profileMemberPaddingLeft, 6px); -} -profileLimitReachedStyle: TextStyle(defaultTextStyle) { - lineHeight: 19px; + style: TextStyle(defaultTextStyle) { + lineHeight: 19px; + } } profileReportReasonOther: InputField(defaultInputField) { diff --git a/Telegram/SourceFiles/profile/profile_block_group_members.cpp b/Telegram/SourceFiles/profile/profile_block_group_members.cpp index d4da91f86..ba51b5ee3 100644 --- a/Telegram/SourceFiles/profile/profile_block_group_members.cpp +++ b/Telegram/SourceFiles/profile/profile_block_group_members.cpp @@ -209,7 +209,7 @@ void GroupMembersWidget::refreshLimitReached() { bool limitReachedShown = (itemsCount() >= Global::ChatSizeMax()) && chat->amCreator() && !emptyTitle(); if (limitReachedShown && !_limitReachedInfo) { - _limitReachedInfo.create(this, st::profileLimitReachedLabel, st::profileLimitReachedStyle); + _limitReachedInfo.create(this, st::profileLimitReachedLabel); QString title = textRichPrepare(lng_profile_migrate_reached(lt_count, Global::ChatSizeMax())); QString body = textRichPrepare(lang(lng_profile_migrate_body)); QString link = textRichPrepare(lang(lng_profile_migrate_learn_more)); diff --git a/Telegram/SourceFiles/profile/profile_block_peer_list.cpp b/Telegram/SourceFiles/profile/profile_block_peer_list.cpp index e9b5f4f5c..069b413c3 100644 --- a/Telegram/SourceFiles/profile/profile_block_peer_list.cpp +++ b/Telegram/SourceFiles/profile/profile_block_peer_list.cpp @@ -99,7 +99,7 @@ void PeerListWidget::paintItem(Painter &p, int x, int y, Item *item, bool select item->peer->paintUserpicLeft(p, st::profileMemberPhotoSize, x + st::profileMemberPhotoPosition.x(), y + st::profileMemberPhotoPosition.y(), width()); if (item->name.isEmpty()) { - item->name.setText(st::semiboldFont, App::peerName(item->peer), _textNameOptions); + item->name.setText(st::msgNameStyle, App::peerName(item->peer), _textNameOptions); } int nameLeft = x + st::profileMemberNamePosition.x(); int nameTop = y + st::profileMemberNamePosition.y(); diff --git a/Telegram/SourceFiles/profile/profile_common_groups_section.cpp b/Telegram/SourceFiles/profile/profile_common_groups_section.cpp index 25be4db04..4930077ab 100644 --- a/Telegram/SourceFiles/profile/profile_common_groups_section.cpp +++ b/Telegram/SourceFiles/profile/profile_common_groups_section.cpp @@ -242,7 +242,7 @@ void InnerWidget::paintRow(Painter &p, int index, TimeMs ms) { y += st::profileCommonGroupsNameTop; auto nameWidth = _contentWidth - (x - _contentLeft) - st::profileCommonGroupsPadding.right(); if (item->name.isEmpty()) { - item->name.setText(st::semiboldFont, App::peerName(item->peer), _textNameOptions); + item->name.setText(st::msgNameStyle, App::peerName(item->peer), _textNameOptions); } _items[index]->name.drawLeftElided(p, x, y, nameWidth, width()); } diff --git a/Telegram/SourceFiles/settings/settings.style b/Telegram/SourceFiles/settings/settings.style index 3012bbe32..d14de8753 100644 --- a/Telegram/SourceFiles/settings/settings.style +++ b/Telegram/SourceFiles/settings/settings.style @@ -19,7 +19,6 @@ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org */ using "basic.style"; -using "basic_types.style"; using "dialogs/dialogs.style"; using "ui/widgets/widgets.style"; using "boxes/boxes.style"; @@ -50,12 +49,14 @@ settingsNameLeft: 26px; settingsNameTop: 9px; settingsNameLabel: FlatLabel(defaultFlatLabel) { margin: margins(10px, 5px, 10px, 5px); - font: font(16px semibold); width: 160px; maxHeight: 24px; textFg: windowBoldFg; -} -settingsNameTextStyle: TextStyle(defaultTextStyle) { + style: TextStyle(defaultTextStyle) { + font: font(16px semibold); + linkFont: font(16px semibold); + linkFontOver: font(16px semibold underline); + } } settingsStatusLeft: 27px; settingsStatusTop: 35px; @@ -87,7 +88,11 @@ settingsBlockTitleFont: font(15px semibold); settingsBlockTitleFg: windowBoldFg; settingsBlockTitleTop: 0px; settingsPrimaryLabel: FlatLabel(defaultFlatLabel) { - font: boxTextFont; + style: TextStyle(defaultTextStyle) { + font: boxTextFont; + linkFont: boxTextFont; + linkFontOver: font(boxFontSize underline); + } } settingsBlockLabel: FlatLabel(settingsPrimaryLabel) { textFg: windowSubTextFg; diff --git a/Telegram/SourceFiles/stdafx.h b/Telegram/SourceFiles/stdafx.h index 3a53d4a17..04e7c13dd 100644 --- a/Telegram/SourceFiles/stdafx.h +++ b/Telegram/SourceFiles/stdafx.h @@ -66,7 +66,6 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "ui/style/style_core.h" #include "styles/palette.h" -#include "styles/style_basic_types.h" #include "styles/style_basic.h" #include "ui/animation.h" diff --git a/Telegram/SourceFiles/stickers/stickers.cpp b/Telegram/SourceFiles/stickers/stickers.cpp index 107611106..f97612ab9 100644 --- a/Telegram/SourceFiles/stickers/stickers.cpp +++ b/Telegram/SourceFiles/stickers/stickers.cpp @@ -27,6 +27,9 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "apiwrap.h" #include "localstorage.h" #include "mainwidget.h" +#include "mainwindow.h" +#include "ui/toast/toast.h" +#include "styles/style_stickers.h" namespace Stickers { namespace { @@ -78,16 +81,19 @@ void applyArchivedResult(const MTPDmessages_stickerSetInstallResultArchive &d) { } Local::writeInstalledStickers(); Local::writeArchivedStickers(); - Ui::show(Box(archived), KeepOtherLayers); + + Ui::Toast::Config toast; + toast.text = lang(lng_stickers_packs_archived); + toast.maxWidth = st::stickersToastMaxWidth; + toast.padding = st::stickersToastPadding; + Ui::Toast::Show(App::wnd(), toast); +// Ui::show(Box(archived), KeepOtherLayers); emit App::main()->stickersUpdated(); } // For testing: Just apply random subset or your sticker sets as archived. bool applyArchivedResultFake() { - if (rand_value() % 128 < 64) { - return false; - } auto sets = QVector(); for (auto &set : Global::RefStickerSets()) { if ((set.flags & MTPDstickerSet::Flag::f_installed) && !(set.flags & MTPDstickerSet_ClientFlag::f_special)) { diff --git a/Telegram/SourceFiles/stickers/stickers.style b/Telegram/SourceFiles/stickers/stickers.style index 7a9308c47..9c370f7b6 100644 --- a/Telegram/SourceFiles/stickers/stickers.style +++ b/Telegram/SourceFiles/stickers/stickers.style @@ -202,3 +202,6 @@ hashtagClose: IconButton { color: windowBgOver; } } + +stickersToastMaxWidth: 340px; +stickersToastPadding: margins(16px, 13px, 16px, 12px); diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index b2d513412..b0bc174ed 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -60,18 +60,18 @@ ImagePtr generateUserpicImage(const style::icon &icon) { } // namespace -const style::color &peerColor(int index) { - static const style::color *peerColors[kUserColorsCount] = { - &st::historyPeer1NameFg, - &st::historyPeer2NameFg, - &st::historyPeer3NameFg, - &st::historyPeer4NameFg, - &st::historyPeer5NameFg, - &st::historyPeer6NameFg, - &st::historyPeer7NameFg, - &st::historyPeer8NameFg, +style::color peerColor(int index) { + static style::color peerColors[kUserColorsCount] = { + st::historyPeer1NameFg, + st::historyPeer2NameFg, + st::historyPeer3NameFg, + st::historyPeer4NameFg, + st::historyPeer5NameFg, + st::historyPeer6NameFg, + st::historyPeer7NameFg, + st::historyPeer8NameFg, }; - return *peerColors[index]; + return peerColors[index]; } ImagePtr userDefPhoto(int index) { @@ -117,7 +117,7 @@ PeerData::PeerData(const PeerId &id) : id(id) , colorIndex(peerColorIndex(id)) , color(peerColor(colorIndex)) , _userpic(isUser() ? userDefPhoto(colorIndex) : ((isChat() || isMegagroup()) ? chatDefPhoto(colorIndex) : channelDefPhoto(colorIndex))) { - nameText.setText(st::msgNameFont, QString(), _textNameOptions); + nameText.setText(st::msgNameStyle, QString(), _textNameOptions); } void PeerData::updateNameDelayed(const QString &newName, const QString &newNameOrPhone, const QString &newUsername) { @@ -137,7 +137,7 @@ void PeerData::updateNameDelayed(const QString &newName, const QString &newNameO ++nameVersion; name = newName; - nameText.setText(st::msgNameFont, name, _textNameOptions); + nameText.setText(st::msgNameStyle, name, _textNameOptions); Notify::PeerUpdate update(this); update.flags |= UpdateFlag::NameChanged; @@ -207,7 +207,7 @@ QPixmap PeerData::genUserpic(int size) const { const Text &BotCommand::descriptionText() const { if (_descriptionText.isEmpty() && !_description.isEmpty()) { - _descriptionText.setText(st::mentionFont, _description, _textNameOptions); + _descriptionText.setText(st::defaultTextStyle, _description, _textNameOptions); } return _descriptionText; } @@ -387,7 +387,7 @@ void UserData::setBotInfo(const MTPBotInfo &info) { void UserData::setNameOrPhone(const QString &newNameOrPhone) { if (nameOrPhone != newNameOrPhone) { nameOrPhone = newNameOrPhone; - phoneText.setText(st::msgNameFont, nameOrPhone, _textNameOptions); + phoneText.setText(st::msgNameStyle, nameOrPhone, _textNameOptions); } } @@ -986,11 +986,9 @@ void DocumentOpenClickHandler::doOpen(DocumentData *data, HistoryItem *context, bool playVideo = data->isVideo() && audioPlayer(); bool playAnimation = data->isAnimation(); auto &location = data->location(true); - if (auto applyTheme = data->name.endsWith(qstr(".tdesktop-theme"))) { + if (auto applyTheme = data->isTheme()) { if (!location.isEmpty() && location.accessEnable()) { - if (!Window::Theme::Apply(location.name())) { - // show error? - } + App::wnd()->showDocument(data, context); location.accessDisable(); return; } @@ -1295,11 +1293,9 @@ void DocumentData::performActionOnLoad() { bool playVoice = voice() && audioPlayer() && (_actionOnLoad == ActionOnLoadPlayInline || _actionOnLoad == ActionOnLoadOpen); bool playMusic = song() && audioPlayer() && (_actionOnLoad == ActionOnLoadPlayInline || _actionOnLoad == ActionOnLoadOpen); bool playAnimation = isAnimation() && (_actionOnLoad == ActionOnLoadPlayInline || _actionOnLoad == ActionOnLoadOpen) && showImage && item && item->getMedia(); - if (auto applyTheme = name.endsWith(qstr(".tdesktop-theme"))) { + if (auto applyTheme = isTheme()) { if (!loc.isEmpty() && loc.accessEnable()) { - if (!Window::Theme::Apply(loc.name())) { - // show error? - } + App::wnd()->showDocument(this, item); loc.accessDisable(); return; } diff --git a/Telegram/SourceFiles/structs.h b/Telegram/SourceFiles/structs.h index 8265c26a7..f30c21c4e 100644 --- a/Telegram/SourceFiles/structs.h +++ b/Telegram/SourceFiles/structs.h @@ -203,7 +203,7 @@ static constexpr int kUserColorsCount = 8; static constexpr int kChatColorsCount = 4; static constexpr int kChannelColorsCount = 4; -const style::color &peerColor(int index); +style::color peerColor(int index); ImagePtr userDefPhoto(int index); ImagePtr chatDefPhoto(int index); ImagePtr channelDefPhoto(int index); @@ -289,7 +289,7 @@ public: MTPinputPeer input; int colorIndex; - const style::color &color; + style::color color; void setUserpic(ImagePtr userpic); void paintUserpic(Painter &p, int size, int x, int y) const; @@ -1136,6 +1136,9 @@ public: bool isGifv() const { return (type == AnimatedDocument) && !mime.compare(qstr("video/mp4"), Qt::CaseInsensitive); } + bool isTheme() const { + return name.endsWith(qstr(".tdesktop-theme"), Qt::CaseInsensitive); + } bool isMusic() const { if (auto s = song()) { return (s->duration > 0); diff --git a/Telegram/SourceFiles/ui/animation.h b/Telegram/SourceFiles/ui/animation.h index 508689120..dce5c34fb 100644 --- a/Telegram/SourceFiles/ui/animation.h +++ b/Telegram/SourceFiles/ui/animation.h @@ -337,15 +337,15 @@ FORCE_INLINE QColor color(QColor a, QColor b, float64 b_ratio) { #endif // SHIFTED_USE_32BIT -FORCE_INLINE QColor color(const style::color &a, QColor b, float64 b_ratio) { +FORCE_INLINE QColor color(style::color a, QColor b, float64 b_ratio) { return color(a->c, b, b_ratio); } -FORCE_INLINE QColor color(QColor a, const style::color &b, float64 b_ratio) { +FORCE_INLINE QColor color(QColor a, style::color b, float64 b_ratio) { return color(a, b->c, b_ratio); } -FORCE_INLINE QColor color(const style::color &a, const style::color &b, float64 b_ratio) { +FORCE_INLINE QColor color(style::color a, style::color b, float64 b_ratio) { return color(a->c, b->c, b_ratio); } @@ -353,15 +353,15 @@ FORCE_INLINE QPen pen(QColor a, QColor b, float64 b_ratio) { return color(a, b, b_ratio); } -FORCE_INLINE QPen pen(const style::color &a, QColor b, float64 b_ratio) { +FORCE_INLINE QPen pen(style::color a, QColor b, float64 b_ratio) { return (b_ratio > 0) ? pen(a->c, b, b_ratio) : a; } -FORCE_INLINE QPen pen(QColor a, const style::color &b, float64 b_ratio) { +FORCE_INLINE QPen pen(QColor a, style::color b, float64 b_ratio) { return (b_ratio < 1) ? pen(a, b->c, b_ratio) : b; } -FORCE_INLINE QPen pen(const style::color &a, const style::color &b, float64 b_ratio) { +FORCE_INLINE QPen pen(style::color a, style::color b, float64 b_ratio) { return (b_ratio > 0) ? ((b_ratio < 1) ? pen(a->c, b->c, b_ratio) : b) : a; } @@ -369,15 +369,15 @@ FORCE_INLINE QBrush brush(QColor a, QColor b, float64 b_ratio) { return color(a, b, b_ratio); } -FORCE_INLINE QBrush brush(const style::color &a, QColor b, float64 b_ratio) { +FORCE_INLINE QBrush brush(style::color a, QColor b, float64 b_ratio) { return (b_ratio > 0) ? brush(a->c, b, b_ratio) : a; } -FORCE_INLINE QBrush brush(QColor a, const style::color &b, float64 b_ratio) { +FORCE_INLINE QBrush brush(QColor a, style::color b, float64 b_ratio) { return (b_ratio < 1) ? brush(a, b->c, b_ratio) : b; } -FORCE_INLINE QBrush brush(const style::color &a, const style::color &b, float64 b_ratio) { +FORCE_INLINE QBrush brush(style::color a, style::color b, float64 b_ratio) { return (b_ratio > 0) ? ((b_ratio < 1) ? brush(a->c, b->c, b_ratio) : b) : a; } diff --git a/Telegram/SourceFiles/ui/effects/cross_animation.cpp b/Telegram/SourceFiles/ui/effects/cross_animation.cpp index d1d6d9c4e..d12cd7f6a 100644 --- a/Telegram/SourceFiles/ui/effects/cross_animation.cpp +++ b/Telegram/SourceFiles/ui/effects/cross_animation.cpp @@ -23,7 +23,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org namespace Ui { -void CrossAnimation::paint(Painter &p, const style::CrossAnimation &st, const style::color &color, int x, int y, int outerWidth, float64 shown) { +void CrossAnimation::paint(Painter &p, const style::CrossAnimation &st, style::color color, int x, int y, int outerWidth, float64 shown) { PainterHighQualityEnabler hq(p); auto deleteScale = shown + st.minScale * (1. - shown); diff --git a/Telegram/SourceFiles/ui/effects/cross_animation.h b/Telegram/SourceFiles/ui/effects/cross_animation.h index 33583b783..45a9fdbd2 100644 --- a/Telegram/SourceFiles/ui/effects/cross_animation.h +++ b/Telegram/SourceFiles/ui/effects/cross_animation.h @@ -26,7 +26,7 @@ namespace Ui { class CrossAnimation { public: - static void paint(Painter &p, const style::CrossAnimation &st, const style::color &color, int x, int y, int outerWidth, float64 shown); + static void paint(Painter &p, const style::CrossAnimation &st, style::color color, int x, int y, int outerWidth, float64 shown); }; diff --git a/Telegram/SourceFiles/ui/effects/radial_animation.cpp b/Telegram/SourceFiles/ui/effects/radial_animation.cpp index 80cb84b96..f721b539e 100644 --- a/Telegram/SourceFiles/ui/effects/radial_animation.cpp +++ b/Telegram/SourceFiles/ui/effects/radial_animation.cpp @@ -70,7 +70,7 @@ void RadialAnimation::step(TimeMs ms) { _animation.step(ms); } -void RadialAnimation::draw(Painter &p, const QRect &inner, int32 thickness, const style::color &color) { +void RadialAnimation::draw(Painter &p, const QRect &inner, int32 thickness, style::color color) { float64 o = p.opacity(); p.setOpacity(o * _opacity); diff --git a/Telegram/SourceFiles/ui/effects/radial_animation.h b/Telegram/SourceFiles/ui/effects/radial_animation.h index addf33698..15ac27e09 100644 --- a/Telegram/SourceFiles/ui/effects/radial_animation.h +++ b/Telegram/SourceFiles/ui/effects/radial_animation.h @@ -42,7 +42,7 @@ public: step(getms()); } - void draw(Painter &p, const QRect &inner, int32 thickness, const style::color &color); + void draw(Painter &p, const QRect &inner, int32 thickness, style::color color); private: TimeMs _firstStart = 0; diff --git a/Telegram/SourceFiles/ui/effects/send_action_animations.cpp b/Telegram/SourceFiles/ui/effects/send_action_animations.cpp index 18004ed1f..af73c9cb2 100644 --- a/Telegram/SourceFiles/ui/effects/send_action_animations.cpp +++ b/Telegram/SourceFiles/ui/effects/send_action_animations.cpp @@ -51,13 +51,13 @@ public: } private: - void paintFrame(Painter &p, const style::color &color, int x, int y, int outerWidth, int frameMs) override; + void paintFrame(Painter &p, style::color color, int x, int y, int outerWidth, int frameMs) override; }; const TypingAnimation::MetaData TypingAnimation::kMeta = { 0, &TypingAnimation::create }; -void TypingAnimation::paintFrame(Painter &p, const style::color &color, int x, int y, int outerWidth, int frameMs) { +void TypingAnimation::paintFrame(Painter &p, style::color color, int x, int y, int outerWidth, int frameMs) { PainterHighQualityEnabler hq(p); p.setPen(Qt::NoPen); p.setBrush(color); @@ -96,13 +96,13 @@ public: } private: - void paintFrame(Painter &p, const style::color &color, int x, int y, int outerWidth, int frameMs) override; + void paintFrame(Painter &p, style::color color, int x, int y, int outerWidth, int frameMs) override; }; const RecordAnimation::MetaData RecordAnimation::kMeta = { 0, &RecordAnimation::create }; -void RecordAnimation::paintFrame(Painter &p, const style::color &color, int x, int y, int outerWidth, int frameMs) { +void RecordAnimation::paintFrame(Painter &p, style::color color, int x, int y, int outerWidth, int frameMs) { PainterHighQualityEnabler hq(p); auto pen = color->p; pen.setWidth(st::historySendActionRecordStrokeNumerator / st::historySendActionRecordDenominator); @@ -140,13 +140,13 @@ public: } private: - void paintFrame(Painter &p, const style::color &color, int x, int y, int outerWidth, int frameMs) override; + void paintFrame(Painter &p, style::color color, int x, int y, int outerWidth, int frameMs) override; }; const UploadAnimation::MetaData UploadAnimation::kMeta = { 0, &UploadAnimation::create }; -void UploadAnimation::paintFrame(Painter &p, const style::color &color, int x, int y, int outerWidth, int frameMs) { +void UploadAnimation::paintFrame(Painter &p, style::color color, int x, int y, int outerWidth, int frameMs) { PainterHighQualityEnabler hq(p); auto pen = color->p; pen.setWidth(st::historySendActionUploadStrokeNumerator / st::historySendActionUploadDenominator); diff --git a/Telegram/SourceFiles/ui/effects/send_action_animations.h b/Telegram/SourceFiles/ui/effects/send_action_animations.h index bfb802e50..d29f263bf 100644 --- a/Telegram/SourceFiles/ui/effects/send_action_animations.h +++ b/Telegram/SourceFiles/ui/effects/send_action_animations.h @@ -32,7 +32,7 @@ public: int width() const { return _impl ? _impl->width() : 0; } - void paint(Painter &p, const style::color &color, int x, int y, int outerWidth, TimeMs ms) { + void paint(Painter &p, style::color color, int x, int y, int outerWidth, TimeMs ms) { if (_impl) { _impl->paint(p, color, x, y, outerWidth, ms); } @@ -57,14 +57,14 @@ public: bool supports(Type type) const; virtual int width() const = 0; - void paint(Painter &p, const style::color &color, int x, int y, int outerWidth, TimeMs ms) { + void paint(Painter &p, style::color color, int x, int y, int outerWidth, TimeMs ms) { paintFrame(p, color, x, y, outerWidth, qMax(ms - _started, 0LL) % _period); } virtual ~Impl() = default; private: - virtual void paintFrame(Painter &p, const style::color &color, int x, int y, int outerWidth, int frameMs) = 0; + virtual void paintFrame(Painter &p, style::color color, int x, int y, int outerWidth, int frameMs) = 0; int _period = 1; TimeMs _started = 0; diff --git a/Telegram/SourceFiles/ui/images.cpp b/Telegram/SourceFiles/ui/images.cpp index ab705545a..36c86bca6 100644 --- a/Telegram/SourceFiles/ui/images.cpp +++ b/Telegram/SourceFiles/ui/images.cpp @@ -200,14 +200,15 @@ void prepareRound(QImage &image, ImageRoundRadius radius, ImageRoundCorners corn t_assert(!image.isNull()); QImage **masks = App::cornersMask(radius); - auto cornerWidth = masks[0]->width(); - auto cornerHeight = masks[0]->height(); + prepareRound(image, masks, corners); +} + +void prepareRound(QImage &image, QImage **cornerMasks, ImageRoundCorners corners) { + auto cornerWidth = cornerMasks[0]->width(); + auto cornerHeight = cornerMasks[0]->height(); auto imageWidth = image.width(); auto imageHeight = image.height(); if (imageWidth < 2 * cornerWidth || imageHeight < 2 * cornerHeight) { - if (radius == ImageRoundRadius::Large) { - return prepareRound(image, ImageRoundRadius::Small, corners); - } return; } constexpr auto imageIntsPerPixel = 1; @@ -242,13 +243,13 @@ void prepareRound(QImage &image, ImageRoundRadius radius, ImageRoundCorners corn imageInts += imageIntsAdded; } }; - if (corners & ImageRoundCorner::TopLeft) maskCorner(intsTopLeft, masks[0]); - if (corners & ImageRoundCorner::TopRight) maskCorner(intsTopRight, masks[1]); - if (corners & ImageRoundCorner::BottomLeft) maskCorner(intsBottomLeft, masks[2]); - if (corners & ImageRoundCorner::BottomRight) maskCorner(intsBottomRight, masks[3]); + if (corners & ImageRoundCorner::TopLeft) maskCorner(intsTopLeft, cornerMasks[0]); + if (corners & ImageRoundCorner::TopRight) maskCorner(intsTopRight, cornerMasks[1]); + if (corners & ImageRoundCorner::BottomLeft) maskCorner(intsBottomLeft, cornerMasks[2]); + if (corners & ImageRoundCorner::BottomRight) maskCorner(intsBottomRight, cornerMasks[3]); } -QImage prepareColored(const style::color &add, QImage image) { +QImage prepareColored(style::color add, QImage image) { auto format = image.format(); if (format != QImage::Format_RGB32 && format != QImage::Format_ARGB32_Premultiplied) { image = std_::move(image).convertToFormat(QImage::Format_ARGB32_Premultiplied); @@ -547,7 +548,7 @@ const QPixmap &Image::pixBlurred(int32 w, int32 h) const { return i.value(); } -const QPixmap &Image::pixColored(const style::color &add, int32 w, int32 h) const { +const QPixmap &Image::pixColored(style::color add, int32 w, int32 h) const { checkload(); if (w <= 0 || !width() || !height()) { @@ -570,7 +571,7 @@ const QPixmap &Image::pixColored(const style::color &add, int32 w, int32 h) cons return i.value(); } -const QPixmap &Image::pixBlurredColored(const style::color &add, int32 w, int32 h) const { +const QPixmap &Image::pixBlurredColored(style::color add, int32 w, int32 h) const { checkload(); if (w <= 0 || !width() || !height()) { @@ -721,7 +722,7 @@ QPixmap Image::pixNoCache(int w, int h, Images::Options options, int outerw, int return Images::pixmap(_data.toImage(), w, h, options, outerw, outerh); } -QPixmap Image::pixColoredNoCache(const style::color &add, int32 w, int32 h, bool smooth) const { +QPixmap Image::pixColoredNoCache(style::color add, int32 w, int32 h, bool smooth) const { const_cast(this)->load(); restore(); if (_data.isNull()) return blank()->pix(); @@ -734,7 +735,7 @@ QPixmap Image::pixColoredNoCache(const style::color &add, int32 w, int32 h, bool return App::pixmapFromImageInPlace(Images::prepareColored(add, img.scaled(w, h, Qt::IgnoreAspectRatio, smooth ? Qt::SmoothTransformation : Qt::FastTransformation))); } -QPixmap Image::pixBlurredColoredNoCache(const style::color &add, int32 w, int32 h) const { +QPixmap Image::pixBlurredColoredNoCache(style::color add, int32 w, int32 h) const { const_cast(this)->load(); restore(); if (_data.isNull()) return blank()->pix(); diff --git a/Telegram/SourceFiles/ui/images.h b/Telegram/SourceFiles/ui/images.h index cf8ca01b4..bf54efad0 100644 --- a/Telegram/SourceFiles/ui/images.h +++ b/Telegram/SourceFiles/ui/images.h @@ -124,8 +124,9 @@ namespace Images { QImage prepareBlur(QImage image); void prepareRound(QImage &image, ImageRoundRadius radius, ImageRoundCorners corners = ImageRoundCorner::All); +void prepareRound(QImage &image, QImage **cornerMasks, ImageRoundCorners corners = ImageRoundCorner::All); void prepareCircle(QImage &image); -QImage prepareColored(const style::color &add, QImage image); +QImage prepareColored(style::color add, QImage image); QImage prepareOpaque(QImage image); enum class Option { @@ -188,15 +189,15 @@ public: const QPixmap &pix(int32 w = 0, int32 h = 0) const; const QPixmap &pixRounded(int32 w = 0, int32 h = 0, ImageRoundRadius radius = ImageRoundRadius::None, ImageRoundCorners corners = ImageRoundCorner::All) const; const QPixmap &pixBlurred(int32 w = 0, int32 h = 0) const; - const QPixmap &pixColored(const style::color &add, int32 w = 0, int32 h = 0) const; - const QPixmap &pixBlurredColored(const style::color &add, int32 w = 0, int32 h = 0) const; + const QPixmap &pixColored(style::color add, int32 w = 0, int32 h = 0) const; + const QPixmap &pixBlurredColored(style::color add, int32 w = 0, int32 h = 0) const; const QPixmap &pixSingle(int32 w, int32 h, int32 outerw, int32 outerh, ImageRoundRadius radius, ImageRoundCorners corners = ImageRoundCorner::All) const; const QPixmap &pixBlurredSingle(int32 w, int32 h, int32 outerw, int32 outerh, ImageRoundRadius radius, ImageRoundCorners corners = ImageRoundCorner::All) const; const QPixmap &pixCircled(int32 w = 0, int32 h = 0) const; const QPixmap &pixBlurredCircled(int32 w = 0, int32 h = 0) const; QPixmap pixNoCache(int w = 0, int h = 0, Images::Options options = 0, int outerw = -1, int outerh = -1) const; - QPixmap pixColoredNoCache(const style::color &add, int32 w = 0, int32 h = 0, bool smooth = false) const; - QPixmap pixBlurredColoredNoCache(const style::color &add, int32 w, int32 h = 0) const; + QPixmap pixColoredNoCache(style::color add, int32 w = 0, int32 h = 0, bool smooth = false) const; + QPixmap pixBlurredColoredNoCache(style::color add, int32 w, int32 h = 0) const; int32 width() const { return qMax(countWidth(), 1); diff --git a/Telegram/SourceFiles/ui/style/style_core.cpp b/Telegram/SourceFiles/ui/style/style_core.cpp index 08659f8cf..c2b22c2e8 100644 --- a/Telegram/SourceFiles/ui/style/style_core.cpp +++ b/Telegram/SourceFiles/ui/style/style_core.cpp @@ -71,7 +71,6 @@ void startManager() { void stopManager() { internal::stopModules(); internal::destroyFonts(); - internal::destroyColors(); internal::destroyIcons(); } diff --git a/Telegram/SourceFiles/ui/style/style_core_color.cpp b/Telegram/SourceFiles/ui/style/style_core_color.cpp index edaa9533b..586440528 100644 --- a/Telegram/SourceFiles/ui/style/style_core_color.cpp +++ b/Telegram/SourceFiles/ui/style/style_core_color.cpp @@ -23,63 +23,17 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org namespace style { namespace internal { -namespace { -typedef QMap ColorDatas; -ColorDatas colorsMap; - -uint32 colorKey(uchar r, uchar g, uchar b, uchar a) { - return (((((uint32(r) << 8) | uint32(g)) << 8) | uint32(b)) << 8) | uint32(a); -} - -} // namespace - -void destroyColors() { - for (auto colorData : colorsMap) { - delete colorData; - } - colorsMap.clear(); -} - -Color::Color(ColorData *data) : ptr(data) { -} - -Color::Color(uchar r, uchar g, uchar b, uchar a) { - init(r, g, b, a); -} - -Color::Color(Color &&other) : ptr(other.ptr) { -} - -Color &Color::operator=(Color &&other) { - ptr = other.ptr; - return *this; -} - -void Color::set(uchar r, uchar g, uchar b, uchar a) const { - ptr->set(r, g, b, a); -} - -void Color::init(uchar r, uchar g, uchar b, uchar a) { - if (ptr) { - return set(r, g, b, a); - } - auto key = colorKey(r, g, b, a); - auto i = colorsMap.constFind(key); - if (i == colorsMap.cend()) { - i = colorsMap.insert(key, new ColorData(r, g, b, a)); - } - ptr = i.value(); -} - -ColorData::ColorData() : p(Qt::NoPen), b(Qt::NoBrush) { +Color::Proxy Color::operator[](const style::palette &paletteOverride) const { + auto index = main_palette::indexOfColor(*this); + return Proxy((index >= 0) ? paletteOverride.colorAtIndex(index) : (*this)); } ColorData::ColorData(uchar r, uchar g, uchar b, uchar a) : c(int(r), int(g), int(b), int(a)), p(c), b(c) { } void ColorData::set(uchar r, uchar g, uchar b, uchar a) { - this->c = QColor(r, g, b, a); + this->c = QColor(int(r), int(g), int(b), int(a)); this->p = QPen(c); this->b = QBrush(c); } diff --git a/Telegram/SourceFiles/ui/style/style_core_color.h b/Telegram/SourceFiles/ui/style/style_core_color.h index 0c8fed354..f40de92e7 100644 --- a/Telegram/SourceFiles/ui/style/style_core_color.h +++ b/Telegram/SourceFiles/ui/style/style_core_color.h @@ -26,8 +26,6 @@ class palette; namespace internal { -void destroyColors(); - class Color; class ColorData { public: @@ -40,8 +38,10 @@ public: } private: - ColorData(); ColorData(uchar r, uchar g, uchar b, uchar a); + ColorData(const ColorData &other) = default; + ColorData &operator=(const ColorData &other) = default; + void set(uchar r, uchar g, uchar b, uchar a); friend class Color; @@ -53,52 +53,67 @@ class Color { public: Color(Qt::Initialization = Qt::Uninitialized) { } - Color(uchar r, uchar g, uchar b, uchar a); - Color(const Color &other) = delete; - Color &operator=(const Color &other) = delete; - Color(Color &&other); - Color &operator=(Color &&other); + Color(const Color &other) = default; + Color &operator=(const Color &other) = default; - Color clone() const { - return Color(ptr); + void set(uchar r, uchar g, uchar b, uchar a) const { + _data->set(r, g, b, a); } - void set(uchar r, uchar g, uchar b, uchar a) const; - operator const QBrush &() const { - return ptr->b; + return _data->b; } operator const QPen &() const { - return ptr->p; + return _data->p; } ColorData *operator->() const { - return ptr; + return _data; } ColorData *v() const { - return ptr; + return _data; } explicit operator bool() const { - return !!ptr; + return !!_data; } + class Proxy; + Proxy operator[](const style::palette &paletteOverride) const; + private: - Color(ColorData *data); - void init(uchar r, uchar g, uchar b, uchar a); - - ColorData *ptr = nullptr; - friend class style::palette; + Color(ColorData *data) : _data(data) { + } + + ColorData *_data = nullptr; }; -inline bool operator==(const Color &a, const Color &b) { +class Color::Proxy { +public: + Proxy(Color color) : _color(color) { + } + Proxy(const Proxy &other) = default; + + operator const QBrush &() const { return _color; } + operator const QPen &() const { return _color; } + ColorData *operator->() const { return _color.v(); } + ColorData *v() const { return _color.v(); } + explicit operator bool() const { return _color ? true : false; } + Color clone() const { return _color; } + +private: + Color _color; + +}; + +inline bool operator==(Color a, Color b) { return a->c == b->c; } -inline bool operator!=(const Color &a, const Color &b) { +inline bool operator!=(Color a, Color b) { return a->c != b->c; } diff --git a/Telegram/SourceFiles/ui/style/style_core_icon.cpp b/Telegram/SourceFiles/ui/style/style_core_icon.cpp index 0e6d80da1..2b4edd278 100644 --- a/Telegram/SourceFiles/ui/style/style_core_icon.cpp +++ b/Telegram/SourceFiles/ui/style/style_core_icon.cpp @@ -43,7 +43,7 @@ inline int pxAdjust(int value, int scale) { return qFloor((value * scale / 4.) + 0.1); } -QImage createIconMask(const IconMask *mask) { +QImage createIconMask(const IconMask *mask, DBIScale scale) { auto maskImage = QImage::fromData(mask->data(), mask->size(), "PNG"); maskImage.setDevicePixelRatio(cRetinaFactor()); t_assert(!maskImage.isNull()); @@ -54,15 +54,15 @@ QImage createIconMask(const IconMask *mask) { int width = maskImage.width() / 3; int height = qRound((maskImage.height() * 2) / 7.); auto r = QRect(0, 0, width * 2, height * 2); - if (!cRetina() && cScale() != dbisTwo) { - if (cScale() == dbisOne) { + if (!cRetina() && scale != dbisTwo) { + if (scale == dbisOne) { r = QRect(width * 2, 0, width, height); } else { int width125 = pxAdjust(width, 5); int height125 = pxAdjust(height, 5); int width150 = pxAdjust(width, 6); int height150 = pxAdjust(height, 6); - if (cScale() == dbisOneAndQuarter) { + if (scale == dbisOneAndQuarter) { r = QRect(width150, height * 2, width125, height125); } else { r = QRect(0, height * 2, width150, height150); @@ -72,9 +72,45 @@ QImage createIconMask(const IconMask *mask) { return maskImage.copy(r); } +QSize readGeneratedSize(const IconMask *mask, DBIScale scale) { + auto data = mask->data(); + auto size = mask->size(); + + auto generateTag = qstr("GENERATE:"); + if (size > generateTag.size() && !memcmp(data, generateTag.data(), generateTag.size())) { + size -= generateTag.size(); + data += generateTag.size(); + auto sizeTag = qstr("SIZE:"); + if (size > sizeTag.size() && !memcmp(data, sizeTag.data(), sizeTag.size())) { + size -= sizeTag.size(); + data += sizeTag.size(); + auto baForStream = QByteArray::fromRawData(reinterpret_cast(data), size); + QBuffer buffer(&baForStream); + buffer.open(QIODevice::ReadOnly); + + QDataStream stream(&buffer); + stream.setVersion(QDataStream::Qt_5_1); + + qint32 width = 0, height = 0; + stream >> width >> height; + t_assert(stream.status() == QDataStream::Ok); + + switch (scale) { + case dbisOne: return QSize(width, height); + case dbisOneAndQuarter: return QSize(pxAdjust(width, 5), pxAdjust(height, 5)); + case dbisOneAndHalf: return QSize(pxAdjust(width, 6), pxAdjust(height, 6)); + case dbisTwo: return QSize(width * 2, height * 2); + } + } else { + t_assert(!"Bad data in generated icon!"); + } + } + return QSize(); +} + } // namespace -MonoIcon::MonoIcon(const IconMask *mask, Color &&color, QPoint offset) +MonoIcon::MonoIcon(const IconMask *mask, Color color, QPoint offset) : _mask(mask) , _color(std_::move(color)) , _offset(offset) { @@ -152,6 +188,57 @@ void MonoIcon::fill(QPainter &p, const QRect &rect, QColor colorOverride) const } } +void MonoIcon::paint(QPainter &p, const QPoint &pos, int outerw, const style::palette &paletteOverride) const { + int w = width(), h = height(); + QPoint fullOffset = pos + offset(); + int partPosX = rtl() ? (outerw - fullOffset.x() - w) : fullOffset.x(); + int partPosY = fullOffset.y(); + + ensureLoaded(); + if (_pixmap.isNull()) { + p.fillRect(partPosX, partPosY, w, h, _color[paletteOverride]); + } else { + ensureColorizedImage(_color[paletteOverride]->c); + p.drawImage(partPosX, partPosY, _colorizedImage); + } +} + +void MonoIcon::fill(QPainter &p, const QRect &rect, const style::palette &paletteOverride) const { + ensureLoaded(); + if (_pixmap.isNull()) { + p.fillRect(rect, _color[paletteOverride]); + } else { + ensureColorizedImage(_color[paletteOverride]->c); + p.drawImage(rect, _colorizedImage, _colorizedImage.rect()); + } +} + +QImage MonoIcon::instance(QColor colorOverride, DBIScale scale) const { + if (scale == dbisAuto) { + ensureLoaded(); + auto result = QImage(size() * cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied); + result.setDevicePixelRatio(cRetinaFactor()); + if (_pixmap.isNull()) { + result.fill(colorOverride); + } else { + colorizeImage(_maskImage, colorOverride, &result); + } + return std_::move(result); + } + auto size = readGeneratedSize(_mask, scale); + if (!size.isEmpty()) { + auto result = QImage(size * cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied); + result.setDevicePixelRatio(cRetinaFactor()); + result.fill(colorOverride); + return std_::move(result); + } + auto mask = createIconMask(_mask, scale); + auto result = QImage(mask.size(), QImage::Format_ARGB32_Premultiplied); + result.setDevicePixelRatio(cRetinaFactor()); + colorizeImage(mask, colorOverride, &result); + return std_::move(result); +} + void MonoIcon::ensureLoaded() const { if (_size.isValid()) { return; @@ -161,42 +248,12 @@ void MonoIcon::ensureLoaded() const { return; } - auto data = _mask->data(); - auto size = _mask->size(); - - auto generateTag = qstr("GENERATE:"); - if (size > generateTag.size() && !memcmp(data, generateTag.data(), generateTag.size())) { - size -= generateTag.size(); - data += generateTag.size(); - auto sizeTag = qstr("SIZE:"); - if (size > sizeTag.size() && !memcmp(data, sizeTag.data(), sizeTag.size())) { - size -= sizeTag.size(); - data += sizeTag.size(); - auto baForStream = QByteArray::fromRawData(reinterpret_cast(data), size); - QBuffer buffer(&baForStream); - buffer.open(QIODevice::ReadOnly); - - QDataStream stream(&buffer); - stream.setVersion(QDataStream::Qt_5_1); - - qint32 width = 0, height = 0; - stream >> width >> height; - t_assert(stream.status() == QDataStream::Ok); - - switch (cScale()) { - case dbisOne: _size = QSize(width, height); break; - case dbisOneAndQuarter: _size = QSize(pxAdjust(width, 5), pxAdjust(height, 5)); break; - case dbisOneAndHalf: _size = QSize(pxAdjust(width, 6), pxAdjust(height, 6)); break; - case dbisTwo: _size = QSize(width * 2, height * 2); break; - } - } else { - t_assert(!"Bad data in generated icon!"); - } - } else { + _size = readGeneratedSize(_mask, cScale()); + if (_size.isEmpty()) { iconMasks.createIfNull(); auto i = iconMasks->constFind(_mask); if (i == iconMasks->cend()) { - i = iconMasks->insert(_mask, createIconMask(_mask)); + i = iconMasks->insert(_mask, createIconMask(_mask, cScale())); } _maskImage = i.value(); @@ -229,7 +286,7 @@ void IconData::created() { void IconData::fill(QPainter &p, const QRect &rect) const { if (_parts.isEmpty()) return; - auto partSize = _parts.at(0).size(); + auto partSize = _parts[0].size(); for_const (auto &part, _parts) { t_assert(part.offset() == QPoint(0, 0)); t_assert(part.size() == partSize); @@ -240,7 +297,7 @@ void IconData::fill(QPainter &p, const QRect &rect) const { void IconData::fill(QPainter &p, const QRect &rect, QColor colorOverride) const { if (_parts.isEmpty()) return; - auto partSize = _parts.at(0).size(); + auto partSize = _parts[0].size(); for_const (auto &part, _parts) { t_assert(part.offset() == QPoint(0, 0)); t_assert(part.size() == partSize); @@ -248,6 +305,13 @@ void IconData::fill(QPainter &p, const QRect &rect, QColor colorOverride) const } } +QImage IconData::instance(QColor colorOverride, DBIScale scale) const { + t_assert(_parts.size() == 1); + auto &part = _parts[0]; + t_assert(part.offset() == QPoint(0, 0)); + return part.instance(colorOverride, scale); +} + int IconData::width() const { if (_width < 0) { _width = 0; diff --git a/Telegram/SourceFiles/ui/style/style_core_icon.h b/Telegram/SourceFiles/ui/style/style_core_icon.h index f2799d7ab..ba88511dd 100644 --- a/Telegram/SourceFiles/ui/style/style_core_icon.h +++ b/Telegram/SourceFiles/ui/style/style_core_icon.h @@ -53,7 +53,7 @@ public: MonoIcon &operator=(const MonoIcon &other) = delete; MonoIcon(MonoIcon &&other) = default; MonoIcon &operator=(MonoIcon &&other) = default; - MonoIcon(const IconMask *mask, Color &&color, QPoint offset); + MonoIcon(const IconMask *mask, Color color, QPoint offset); void reset() const; int width() const; @@ -64,9 +64,15 @@ public: void paint(QPainter &p, const QPoint &pos, int outerw) const; void fill(QPainter &p, const QRect &rect) const; + void paint(QPainter &p, const QPoint &pos, int outerw, QColor colorOverride) const; void fill(QPainter &p, const QRect &rect, QColor colorOverride) const; + void paint(QPainter &p, const QPoint &pos, int outerw, const style::palette &paletteOverride) const; + void fill(QPainter &p, const QRect &rect, const style::palette &paletteOverride) const; + + QImage instance(QColor colorOverride, DBIScale scale) const; + ~MonoIcon() { } @@ -116,6 +122,15 @@ public: } void fill(QPainter &p, const QRect &rect, QColor colorOverride) const; + void paint(QPainter &p, const QPoint &pos, int outerw, const style::palette &paletteOverride) const { + for_const (auto &part, _parts) { + part.paint(p, pos, outerw, paletteOverride); + } + } + void fill(QPainter &p, const QRect &rect, const style::palette &paletteOverride) const; + + QImage instance(QColor colorOverride, DBIScale scale) const; + int width() const; int height() const; @@ -167,6 +182,16 @@ public: return _data->empty(); } + int width() const { + return _data->width(); + } + int height() const { + return _data->height(); + } + QSize size() const { + return QSize(width(), height()); + } + void paint(QPainter &p, const QPoint &pos, int outerw) const { return _data->paint(p, pos, outerw); } @@ -193,14 +218,41 @@ public: return _data->fill(p, rect, colorOverride); } - int width() const { - return _data->width(); + QImage instance(QColor colorOverride, DBIScale scale = dbisAuto) const { + return _data->instance(colorOverride, scale); } - int height() const { - return _data->height(); - } - QSize size() const { - return QSize(width(), height()); + + class Proxy { + public: + Proxy(const Icon &icon, const style::palette &palette) : _icon(icon), _palette(palette) { + } + Proxy(const Proxy &other) = default; + + bool empty() const { return _icon.empty(); } + int width() const { return _icon.width(); } + int height() const { return _icon.height(); } + QSize size() const { return _icon.size(); } + + void paint(QPainter &p, const QPoint &pos, int outerw) const { + return _icon.paintWithPalette(p, pos, outerw, _palette); + } + void paint(QPainter &p, int x, int y, int outerw) const { + return _icon.paintWithPalette(p, x, y, outerw, _palette); + } + void paintInCenter(QPainter &p, const QRect &outer) const { + return _icon.paintInCenterWithPalette(p, outer, _palette); + } + void fill(QPainter &p, const QRect &rect) const { + return _icon.fillWithPalette(p, rect, _palette); + } + + private: + const Icon &_icon; + const style::palette &_palette; + + }; + Proxy operator[](const style::palette &paletteOverride) const { + return Proxy(*this, paletteOverride); } ~Icon() { @@ -212,6 +264,21 @@ public: } private: + friend class Proxy; + + void paintWithPalette(QPainter &p, const QPoint &pos, int outerw, const style::palette &paletteOverride) const { + return _data->paint(p, pos, outerw, paletteOverride); + } + void paintWithPalette(QPainter &p, int x, int y, int outerw, const style::palette &paletteOverride) const { + return _data->paint(p, QPoint(x, y), outerw, paletteOverride); + } + void paintInCenterWithPalette(QPainter &p, const QRect &outer, const style::palette &paletteOverride) const { + return _data->paint(p, QPoint(outer.x() + (outer.width() - width()) / 2, outer.y() + (outer.height() - height()) / 2), outer.x() * 2 + outer.width(), paletteOverride); + } + void fillWithPalette(QPainter &p, const QRect &rect, const style::palette &paletteOverride) const { + return _data->fill(p, rect, paletteOverride); + } + IconData *_data = nullptr; bool _owner = false; diff --git a/Telegram/SourceFiles/ui/text/text.cpp b/Telegram/SourceFiles/ui/text/text.cpp index a4d18eb5e..3a46416d5 100644 --- a/Telegram/SourceFiles/ui/text/text.cpp +++ b/Telegram/SourceFiles/ui/text/text.cpp @@ -32,26 +32,12 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org namespace { -const style::TextStyle *_textStyle = nullptr; - -void initDefault() { - _textStyle = &st::defaultTextStyle; -} - -inline int32 countBlockHeight(const ITextBlock *b, const style::font &font) { - return (b->type() == TextBlockTSkip) ? static_cast(b)->height() : (_textStyle->lineHeight > font->height) ? _textStyle->lineHeight : font->height; +inline int32 countBlockHeight(const ITextBlock *b, const style::TextStyle *st) { + return (b->type() == TextBlockTSkip) ? static_cast(b)->height() : (st->lineHeight > st->font->height) ? st->lineHeight : st->font->height; } } // namespace -const style::TextStyle *textstyleCurrent() { - return _textStyle; -} - -void textstyleSet(const style::TextStyle *style) { - _textStyle = style ? style : &st::defaultTextStyle; -} - QString textcmdSkipBlock(ushort w, ushort h) { static QString cmd(5, TextCommand); cmd[1] = QChar(TextCommandSkipBlock); @@ -194,13 +180,13 @@ public: } lastSkipped = false; if (emoji) { - _t->_blocks.push_back(new EmojiBlock(_t->_font, _t->_text, blockStart, len, flags, lnkIndex, emoji)); + _t->_blocks.push_back(new EmojiBlock(_t->_st->font, _t->_text, blockStart, len, flags, lnkIndex, emoji)); emoji = 0; lastSkipped = true; } else if (newline) { - _t->_blocks.push_back(new NewlineBlock(_t->_font, _t->_text, blockStart, len)); + _t->_blocks.push_back(new NewlineBlock(_t->_st->font, _t->_text, blockStart, len)); } else { - _t->_blocks.push_back(new TextBlock(_t->_font, _t->_text, _t->_minResizeWidth, blockStart, len, flags, lnkIndex)); + _t->_blocks.push_back(new TextBlock(_t->_st->font, _t->_text, _t->_minResizeWidth, blockStart, len, flags, lnkIndex)); } blockStart += len; blockCreated(); @@ -210,7 +196,7 @@ public: void createSkipBlock(int32 w, int32 h) { createBlock(); _t->_text.push_back('_'); - _t->_blocks.push_back(new SkipBlock(_t->_font, _t->_text, blockStart++, w, h, lnkIndex)); + _t->_blocks.push_back(new SkipBlock(_t->_st->font, _t->_text, blockStart++, w, h, lnkIndex)); blockCreated(); } @@ -557,7 +543,7 @@ public: } void parse(const TextParseOptions &options) { if (options.maxw > 0 && options.maxh > 0) { - stopAfterWidth = ((options.maxh / _t->_font->height) + 1) * options.maxw; + stopAfterWidth = ((options.maxh / _t->_st->font->height) + 1) * options.maxw; } start = src.constData(); @@ -587,7 +573,7 @@ public: ch = emojiLookback = 0; lastSkipped = false; - checkTilde = !cRetina() && _t->_font->size() == 13 && _t->_font->flags() == 0; // tilde Open Sans fix + checkTilde = !cRetina() && _t->_st->font->size() == 13 && _t->_st->font->flags() == 0; // tilde Open Sans fix for (; ptr <= end; ++ptr) { while (checkEntities() || (rich && checkCommand())) { } @@ -682,7 +668,7 @@ private: void computeLinkText(const QString &linkData, QString *outLinkText, LinkDisplayStatus *outDisplayStatus) { QUrl url(linkData), good(url.isValid() ? url.toEncoded() : ""); QString readable = good.isValid() ? good.toDisplayString() : linkData; - *outLinkText = _t->_font->elided(readable, st::linkCropLimit); + *outLinkText = _t->_st->font->elided(readable, st::linkCropLimit); *outDisplayStatus = (*outLinkText == readable) ? LinkDisplayedFull : LinkDisplayedElided; } @@ -822,7 +808,7 @@ public: return _blockEnd(t, i, e) - (*i)->from(); } - TextPainter(QPainter *p, const Text *t) : _p(p), _t(t) { + TextPainter(Painter *p, const Text *t) : _p(p), _t(t) { } ~TextPainter() { @@ -894,10 +880,8 @@ public: if (_t->isEmpty()) return; _blocksSize = _t->_blocks.size(); - if (!_textStyle) initDefault(); - if (_p) { - _p->setFont(_t->_font->f); + _p->setFont(_t->_st->font); _originalPen = _p->pen(); } @@ -911,7 +895,7 @@ public: if (_elideLast) { _yToElide = _yTo; if (_elideRemoveFromEnd > 0 && !_t->_blocks.isEmpty()) { - int firstBlockHeight = countBlockHeight(_t->_blocks.front(), _t->_font); + int firstBlockHeight = countBlockHeight(_t->_blocks.front(), _t->_st); if (_y + firstBlockHeight >= _yToElide) { _wLeft -= _elideRemoveFromEnd; } @@ -920,7 +904,7 @@ public: _str = _t->_text.unicode(); if (_p) { - QRectF clip = _p->clipBoundingRect(); + auto clip = _p->hasClipping() ? _p->clipBoundingRect() : QRectF(); if (clip.width() > 0 || clip.height() > 0) { if (_yFrom < clip.y()) _yFrom = clip.y(); if (_yTo < 0 || _yTo > clip.y() + clip.height()) _yTo = clip.y() + clip.height(); @@ -939,7 +923,7 @@ public: _lineStartBlock = 0; _lineHeight = 0; - _fontHeight = _t->_font->height; + _fontHeight = _t->_st->font->height; QFixed last_rBearing = 0, last_rPadding = 0; int32 blockIndex = 0; @@ -948,7 +932,7 @@ public: for (Text::TextBlocks::const_iterator i = _t->_blocks.cbegin(); i != e; ++i, ++blockIndex) { ITextBlock *b = *i; TextBlockType _btype = b->type(); - int32 blockHeight = countBlockHeight(b, _t->_font); + int32 blockHeight = countBlockHeight(b, _t->_st); if (_btype == TextBlockTNewline) { if (!_lineHeight) _lineHeight = blockHeight; @@ -1091,8 +1075,8 @@ public: void drawElided(int32 left, int32 top, int32 w, style::align align, int32 lines, int32 yFrom, int32 yTo, int32 removeFromEnd, bool breakEverywhere, TextSelection selection) { if (lines <= 0 || _t->isNull()) return; - if (yTo < 0 || (lines - 1) * _t->_font->height < yTo) { - yTo = lines * _t->_font->height; + if (yTo < 0 || (lines - 1) * _t->_st->font->height < yTo) { + yTo = lines * _t->_st->font->height; _elideLast = true; _elideRemoveFromEnd = removeFromEnd; } @@ -1127,8 +1111,8 @@ public: _lookupLink = (_lookupRequest.flags & Text::StateRequest::Flag::LookupLink); if (_lookupSymbol || (_lookupX >= 0 && _lookupX < w)) { int yTo = _lookupY + 1; - if (yTo < 0 || (request.lines - 1) * _t->_font->height < yTo) { - yTo = request.lines * _t->_font->height; + if (yTo < 0 || (request.lines - 1) * _t->_st->font->height < yTo) { + yTo = request.lines * _t->_st->font->height; _elideLast = true; _elideRemoveFromEnd = request.removeFromEnd; } @@ -1140,13 +1124,10 @@ public: const QPen &blockPen(ITextBlock *block) { if (block->lnkIndex()) { - if (ClickHandler::showAsPressed(_t->_links.at(block->lnkIndex() - 1))) { - return _textStyle->linkFgDown->p; - } - return _textStyle->linkFg->p; + return _p->textPalette().linkFg->p; } if ((block->flags() & TextBlockFCode) || (block->flags() & TextBlockFPre)) { - return _textStyle->monoFg->p; + return _p->textPalette().monoFg->p; } return _originalPen; } @@ -1249,12 +1230,12 @@ public: if ((selectFromStart && _parDirection == Qt::LeftToRight) || (selectTillEnd && _parDirection == Qt::RightToLeft)) { if (x > _x) { - _p->fillRect(QRectF(_x.toReal(), _y + _yDelta, (x - _x).toReal(), _fontHeight), _textStyle->selectBg->b); + _p->fillRect(QRectF(_x.toReal(), _y + _yDelta, (x - _x).toReal(), _fontHeight), _p->textPalette().selectBg->b); } } if ((selectTillEnd && _parDirection == Qt::LeftToRight) || (selectFromStart && _parDirection == Qt::RightToLeft)) { if (x < _x + _wLeft) { - _p->fillRect(QRectF((x + _w - _wLeft).toReal(), _y + _yDelta, (_x + _wLeft - x).toReal(), _fontHeight), _textStyle->selectBg->b); + _p->fillRect(QRectF((x + _w - _wLeft).toReal(), _y + _yDelta, (_x + _wLeft - x).toReal(), _fontHeight), _p->textPalette().selectBg->b); } } } @@ -1262,7 +1243,7 @@ public: if (!elidedLine) initParagraphBidi(); // if was not inited - _f = _t->_font; + _f = _t->_st->font; QStackTextEngine engine(lineText, _f->f); engine.option.setTextDirection(_parDirection); _e = &engine; @@ -1315,7 +1296,7 @@ public: currentBlock = _t->_blocks[blockIndex]; nextBlock = (++blockIndex < _blocksSize) ? _t->_blocks[blockIndex] : 0; - int32 textY = _y + _yDelta + _t->_font->ascent, emojiY = (_t->_font->height - st::emojiSize) / 2; + int32 textY = _y + _yDelta + _t->_st->font->ascent, emojiY = (_t->_st->font->height - st::emojiSize) / 2; eSetFont(currentBlock); if (_p) _p->setPen(blockPen(currentBlock)); @@ -1391,15 +1372,15 @@ public: const QChar *chFrom = _str + currentBlock->from(), *chTo = chFrom + ((nextBlock ? nextBlock->from() : _t->_text.size()) - currentBlock->from()); if (_localFrom + si.position >= _selection.from) { // could be without space if (chTo == chFrom || (chTo - 1)->unicode() != QChar::Space || _selection.to >= (chTo - _str)) { - _p->fillRect(QRectF(x.toReal(), _y + _yDelta, si.width.toReal(), _fontHeight), _textStyle->selectBg->b); + _p->fillRect(QRectF(x.toReal(), _y + _yDelta, si.width.toReal(), _fontHeight), _p->textPalette().selectBg); } else { // or with space - _p->fillRect(QRectF(glyphX.toReal(), _y + _yDelta, currentBlock->f_width().toReal(), _fontHeight), _textStyle->selectBg->b); + _p->fillRect(QRectF(glyphX.toReal(), _y + _yDelta, currentBlock->f_width().toReal(), _fontHeight), _p->textPalette().selectBg); } } else if (chTo > chFrom && (chTo - 1)->unicode() == QChar::Space && (chTo - 1 - _str) >= _selection.from) { if (rtl) { // rtl space only - _p->fillRect(QRectF(x.toReal(), _y + _yDelta, (glyphX - x).toReal(), _fontHeight), _textStyle->selectBg->b); + _p->fillRect(QRectF(x.toReal(), _y + _yDelta, (glyphX - x).toReal(), _fontHeight), _p->textPalette().selectBg->b); } else { // ltr space only - _p->fillRect(QRectF((x + currentBlock->f_width()).toReal(), _y + _yDelta, (si.width - currentBlock->f_width()).toReal(), _fontHeight), _textStyle->selectBg->b); + _p->fillRect(QRectF((x + currentBlock->f_width()).toReal(), _y + _yDelta, (si.width - currentBlock->f_width()).toReal(), _fontHeight), _p->textPalette().selectBg); } } } @@ -1522,7 +1503,7 @@ public: } } if (rtl) selX = x + itemWidth - (selX - x) - selWidth; - _p->fillRect(QRectF(selX.toReal(), _y + _yDelta, selWidth.toReal(), _fontHeight), _textStyle->selectBg->b); + _p->fillRect(QRectF(selX.toReal(), _y + _yDelta, selWidth.toReal(), _fontHeight), _p->textPalette().selectBg->b); } _p->drawTextItem(QPointF(x.toReal(), textY), gf); @@ -1540,7 +1521,7 @@ public: _elideSavedIndex = blockIndex; _elideSavedBlock = _t->_blocks[blockIndex]; - const_cast(_t)->_blocks[blockIndex] = new TextBlock(_t->_font, _t->_text, QFIXED_MAX, elideStart, 0, _elideSavedBlock->flags(), _elideSavedBlock->lnkIndex()); + const_cast(_t)->_blocks[blockIndex] = new TextBlock(_t->_st->font, _t->_text, QFIXED_MAX, elideStart, 0, _elideSavedBlock->flags(), _elideSavedBlock->lnkIndex()); _blocksSize = blockIndex + 1; _endBlock = (blockIndex + 1 < _t->_blocks.size() ? _t->_blocks[blockIndex + 1] : 0); } @@ -1558,7 +1539,7 @@ public: void prepareElidedLine(QString &lineText, int32 lineStart, int32 &lineLength, ITextBlock *&_endBlock, int repeat = 0) { static const QString _Elide = qsl("..."); - _f = _t->_font; + _f = _t->_st->font; QStackTextEngine engine(lineText, _f->f); engine.option.setTextDirection(_parDirection); _e = &engine; @@ -1718,25 +1699,25 @@ public: } void eSetFont(ITextBlock *block) { - style::font newFont = _t->_font; + style::font newFont = _t->_st->font; int flags = block->flags(); if (flags) { - newFont = applyFlags(flags, _t->_font); + newFont = applyFlags(flags, _t->_st->font); } if (block->lnkIndex()) { if (ClickHandler::showAsActive(_t->_links.at(block->lnkIndex() - 1))) { - if (_t->_font != _textStyle->linkFlagsOver) { - newFont = _textStyle->linkFlagsOver; + if (_t->_st->font != _t->_st->linkFontOver) { + newFont = _t->_st->linkFontOver; } } else { - if (_t->_font != _textStyle->linkFlags) { - newFont = _textStyle->linkFlags; + if (_t->_st->font != _t->_st->linkFont) { + newFont = _t->_st->linkFont; } } } if (newFont != _f) { - if (newFont->family() == _t->_font->family()) { - newFont = applyFlags(flags | newFont->flags(), _t->_font); + if (newFont->family() == _t->_st->font->family()) { + newFont = applyFlags(flags | newFont->flags(), _t->_st->font); } _f = newFont; _e->fnt = _f->f; @@ -2291,7 +2272,7 @@ public: private: - QPainter *_p; + Painter *_p; const Text *_t; bool _elideLast = false; bool _breakEverywhere = false; @@ -2348,14 +2329,14 @@ const TextParseOptions _textPlainOptions = { Qt::LayoutDirectionAuto, // dir }; -Text::Text(int32 minResizeWidth) : _minResizeWidth(minResizeWidth), _maxWidth(0), _minHeight(0), _startDir(Qt::LayoutDirectionAuto) { +Text::Text(int32 minResizeWidth) : _minResizeWidth(minResizeWidth) { } -Text::Text(style::font font, const QString &text, const TextParseOptions &options, int32 minResizeWidth, bool richText) : _minResizeWidth(minResizeWidth) { +Text::Text(const style::TextStyle &st, const QString &text, const TextParseOptions &options, int32 minResizeWidth, bool richText) : _minResizeWidth(minResizeWidth) { if (richText) { - setRichText(font, text, options); + setRichText(st, text, options); } else { - setText(font, text, options); + setText(st, text, options); } } @@ -2364,7 +2345,7 @@ Text::Text(const Text &other) , _maxWidth(other._maxWidth) , _minHeight(other._minHeight) , _text(other._text) -, _font(other._font) +, _st(other._st) , _blocks(other._blocks.size()) , _links(other._links) , _startDir(other._startDir) { @@ -2378,7 +2359,7 @@ Text::Text(Text &&other) , _maxWidth(other._maxWidth) , _minHeight(other._minHeight) , _text(other._text) -, _font(other._font) +, _st(other._st) , _blocks(other._blocks) , _links(other._links) , _startDir(other._startDir) { @@ -2390,7 +2371,7 @@ Text &Text::operator=(const Text &other) { _maxWidth = other._maxWidth; _minHeight = other._minHeight; _text = other._text; - _font = other._font; + _st = other._st; _blocks = TextBlocks(other._blocks.size()); _links = other._links; _startDir = other._startDir; @@ -2405,7 +2386,7 @@ Text &Text::operator=(Text &&other) { _maxWidth = other._maxWidth; _minHeight = other._minHeight; _text = other._text; - _font = other._font; + _st = other._st; _blocks = other._blocks; _links = other._links; _startDir = other._startDir; @@ -2413,9 +2394,8 @@ Text &Text::operator=(Text &&other) { return *this; } -void Text::setText(style::font font, const QString &text, const TextParseOptions &options) { - if (!_textStyle) initDefault(); - _font = font; +void Text::setText(const style::TextStyle &st, const QString &text, const TextParseOptions &options) { + _st = &st; clear(); { TextParser parser(this, text, options); @@ -2433,7 +2413,7 @@ void Text::recountNaturalSize(bool initial, Qt::LayoutDirection optionsDir) { for (TextBlocks::const_iterator i = _blocks.cbegin(), e = _blocks.cend(); i != e; ++i) { ITextBlock *b = *i; TextBlockType _btype = b->type(); - int32 blockHeight = countBlockHeight(b, _font); + int32 blockHeight = countBlockHeight(b, _st); if (_btype == TextBlockTNewline) { if (!lineHeight) lineHeight = blockHeight; if (initial) { @@ -2483,7 +2463,7 @@ void Text::recountNaturalSize(bool initial, Qt::LayoutDirection optionsDir) { } } if (_width > 0) { - if (!lineHeight) lineHeight = countBlockHeight(_blocks.back(), _font); + if (!lineHeight) lineHeight = countBlockHeight(_blocks.back(), _st); _minHeight += lineHeight; if (_maxWidth < _width) { _maxWidth = _width; @@ -2491,9 +2471,8 @@ void Text::recountNaturalSize(bool initial, Qt::LayoutDirection optionsDir) { } } -void Text::setMarkedText(style::font font, const TextWithEntities &textWithEntities, const TextParseOptions &options) { - if (!_textStyle) initDefault(); - _font = font; +void Text::setMarkedText(const style::TextStyle &st, const TextWithEntities &textWithEntities, const TextParseOptions &options) { + _st = &st; clear(); { // QString newText; // utf16 of the text for emoji @@ -2531,7 +2510,7 @@ void Text::setMarkedText(style::font font, const TextWithEntities &textWithEntit recountNaturalSize(true, options.dir); } -void Text::setRichText(style::font font, const QString &text, TextParseOptions options, const TextCustomTagsMap &custom) { +void Text::setRichText(const style::TextStyle &st, const QString &text, TextParseOptions options, const TextCustomTagsMap &custom) { QString parsed; parsed.reserve(text.size()); const QChar *s = text.constData(), *ch = s; @@ -2606,7 +2585,7 @@ void Text::setRichText(style::font font, const QString &text, TextParseOptions o s = ch; options.flags |= TextParseRichText; - setText(font, parsed, options); + setText(st, parsed, options); } void Text::setLink(uint16 lnkIndex, const ClickHandlerPtr &lnk) { @@ -2630,7 +2609,7 @@ void Text::setSkipBlock(int32 width, int32 height) { _blocks.pop_back(); } _text.push_back('_'); - _blocks.push_back(new SkipBlock(_font, _text, _text.size() - 1, width, height, 0)); + _blocks.push_back(new SkipBlock(_st->font, _text, _text.size() - 1, width, height, 0)); recountNaturalSize(false); } @@ -2683,7 +2662,7 @@ void Text::enumerateLines(int w, Callback callback) const { bool longWordLine = true; for_const (auto b, _blocks) { TextBlockType _btype = b->type(); - int blockHeight = countBlockHeight(b, _font); + int blockHeight = countBlockHeight(b, _st); if (_btype == TextBlockTNewline) { if (!lineHeight) lineHeight = blockHeight; @@ -2785,17 +2764,13 @@ void Text::enumerateLines(int w, Callback callback) const { } } -void Text::replaceFont(style::font f) { - _font = f; -} - -void Text::draw(QPainter &painter, int32 left, int32 top, int32 w, style::align align, int32 yFrom, int32 yTo, TextSelection selection, bool fullWidthSelection) const { +void Text::draw(Painter &painter, int32 left, int32 top, int32 w, style::align align, int32 yFrom, int32 yTo, TextSelection selection, bool fullWidthSelection) const { // painter.fillRect(QRect(left, top, w, countHeight(w)), QColor(0, 0, 0, 32)); // debug TextPainter p(&painter, this); p.draw(left, top, w, align, yFrom, yTo, selection, fullWidthSelection); } -void Text::drawElided(QPainter &painter, int32 left, int32 top, int32 w, int32 lines, style::align align, int32 yFrom, int32 yTo, int32 removeFromEnd, bool breakEverywhere, TextSelection selection) const { +void Text::drawElided(Painter &painter, int32 left, int32 top, int32 w, int32 lines, style::align align, int32 yFrom, int32 yTo, int32 removeFromEnd, bool breakEverywhere, TextSelection selection) const { // painter.fillRect(QRect(left, top, w, countHeight(w)), QColor(0, 0, 0, 32)); // debug TextPainter p(&painter, this); p.drawElided(left, top, w, align, lines, yFrom, yTo, removeFromEnd, breakEverywhere, selection); diff --git a/Telegram/SourceFiles/ui/text/text.h b/Telegram/SourceFiles/ui/text/text.h index 4a86dd80c..87f973ade 100644 --- a/Telegram/SourceFiles/ui/text/text.h +++ b/Telegram/SourceFiles/ui/text/text.h @@ -85,7 +85,7 @@ class Text { public: Text(int32 minResizeWidth = QFIXED_MAX); - Text(style::font font, const QString &text, const TextParseOptions &options = _defaultOptions, int32 minResizeWidth = QFIXED_MAX, bool richText = false); + Text(const style::TextStyle &st, const QString &text, const TextParseOptions &options = _defaultOptions, int32 minResizeWidth = QFIXED_MAX, bool richText = false); Text(const Text &other); Text(Text &&other); Text &operator=(const Text &other); @@ -94,9 +94,9 @@ public: int countWidth(int width) const; int countHeight(int width) const; void countLineWidths(int width, QVector *lineWidths) const; - void setText(style::font font, const QString &text, const TextParseOptions &options = _defaultOptions); - void setRichText(style::font font, const QString &text, TextParseOptions options = _defaultOptions, const TextCustomTagsMap &custom = TextCustomTagsMap()); - void setMarkedText(style::font font, const TextWithEntities &textWithEntities, const TextParseOptions &options = _defaultOptions); + void setText(const style::TextStyle &st, const QString &text, const TextParseOptions &options = _defaultOptions); + void setRichText(const style::TextStyle &st, const QString &text, TextParseOptions options = _defaultOptions, const TextCustomTagsMap &custom = TextCustomTagsMap()); + void setMarkedText(const style::TextStyle &st, const TextWithEntities &textWithEntities, const TextParseOptions &options = _defaultOptions); void setLink(uint16 lnkIndex, const ClickHandlerPtr &lnk); bool hasLinks() const; @@ -112,20 +112,18 @@ public: return _minHeight; } - void replaceFont(style::font f); // does not recount anything, use at your own risk! - - void draw(QPainter &p, int32 left, int32 top, int32 width, style::align align = style::al_left, int32 yFrom = 0, int32 yTo = -1, TextSelection selection = { 0, 0 }, bool fullWidthSelection = true) const; - void drawElided(QPainter &p, int32 left, int32 top, int32 width, int32 lines = 1, style::align align = style::al_left, int32 yFrom = 0, int32 yTo = -1, int32 removeFromEnd = 0, bool breakEverywhere = false, TextSelection selection = { 0, 0 }) const; - void drawLeft(QPainter &p, int32 left, int32 top, int32 width, int32 outerw, style::align align = style::al_left, int32 yFrom = 0, int32 yTo = -1, TextSelection selection = { 0, 0 }) const { + void draw(Painter &p, int32 left, int32 top, int32 width, style::align align = style::al_left, int32 yFrom = 0, int32 yTo = -1, TextSelection selection = { 0, 0 }, bool fullWidthSelection = true) const; + void drawElided(Painter &p, int32 left, int32 top, int32 width, int32 lines = 1, style::align align = style::al_left, int32 yFrom = 0, int32 yTo = -1, int32 removeFromEnd = 0, bool breakEverywhere = false, TextSelection selection = { 0, 0 }) const; + void drawLeft(Painter &p, int32 left, int32 top, int32 width, int32 outerw, style::align align = style::al_left, int32 yFrom = 0, int32 yTo = -1, TextSelection selection = { 0, 0 }) const { draw(p, rtl() ? (outerw - left - width) : left, top, width, align, yFrom, yTo, selection); } - void drawLeftElided(QPainter &p, int32 left, int32 top, int32 width, int32 outerw, int32 lines = 1, style::align align = style::al_left, int32 yFrom = 0, int32 yTo = -1, int32 removeFromEnd = 0, bool breakEverywhere = false, TextSelection selection = { 0, 0 }) const { + void drawLeftElided(Painter &p, int32 left, int32 top, int32 width, int32 outerw, int32 lines = 1, style::align align = style::al_left, int32 yFrom = 0, int32 yTo = -1, int32 removeFromEnd = 0, bool breakEverywhere = false, TextSelection selection = { 0, 0 }) const { drawElided(p, rtl() ? (outerw - left - width) : left, top, width, lines, align, yFrom, yTo, removeFromEnd, breakEverywhere, selection); } - void drawRight(QPainter &p, int32 right, int32 top, int32 width, int32 outerw, style::align align = style::al_left, int32 yFrom = 0, int32 yTo = -1, TextSelection selection = { 0, 0 }) const { + void drawRight(Painter &p, int32 right, int32 top, int32 width, int32 outerw, style::align align = style::al_left, int32 yFrom = 0, int32 yTo = -1, TextSelection selection = { 0, 0 }) const { draw(p, rtl() ? right : (outerw - right - width), top, width, align, yFrom, yTo, selection); } - void drawRightElided(QPainter &p, int32 right, int32 top, int32 width, int32 outerw, int32 lines = 1, style::align align = style::al_left, int32 yFrom = 0, int32 yTo = -1, int32 removeFromEnd = 0, bool breakEverywhere = false, TextSelection selection = { 0, 0 }) const { + void drawRightElided(Painter &p, int32 right, int32 top, int32 width, int32 outerw, int32 lines = 1, style::align align = style::al_left, int32 yFrom = 0, int32 yTo = -1, int32 removeFromEnd = 0, bool breakEverywhere = false, TextSelection selection = { 0, 0 }) const { drawElided(p, rtl() ? right : (outerw - right - width), top, width, lines, align, yFrom, yTo, removeFromEnd, breakEverywhere, selection); } @@ -173,7 +171,7 @@ public: bool isEmpty() const; bool isNull() const { - return !_font; + return !_st; } int length() const { return _text.size(); @@ -224,11 +222,12 @@ private: // it is also called from move constructor / assignment operator void clearFields(); - QFixed _minResizeWidth, _maxWidth; - int32 _minHeight; + QFixed _minResizeWidth; + QFixed _maxWidth = 0; + int32 _minHeight = 0; QString _text; - style::font _font; + const style::TextStyle *_st = nullptr; typedef QVector TextBlocks; TextBlocks _blocks; @@ -236,7 +235,7 @@ private: typedef QVector TextLinks; TextLinks _links; - Qt::LayoutDirection _startDir; + Qt::LayoutDirection _startDir = Qt::LayoutDirectionAuto; friend class TextParser; friend class TextPainter; @@ -263,13 +262,6 @@ const QRegularExpression &reMailStart(); const QRegularExpression &reHashtag(); const QRegularExpression &reBotCommand(); -// text style -const style::TextStyle *textstyleCurrent(); -void textstyleSet(const style::TextStyle *style); -inline void textstyleRestore() { - textstyleSet(nullptr); -} - // textcmd QString textcmdSkipBlock(ushort w, ushort h); QString textcmdStartLink(ushort lnkIndex); diff --git a/Telegram/SourceFiles/ui/toast/toast.h b/Telegram/SourceFiles/ui/toast/toast.h index 4acc538cc..d9e9f5c80 100644 --- a/Telegram/SourceFiles/ui/toast/toast.h +++ b/Telegram/SourceFiles/ui/toast/toast.h @@ -32,6 +32,8 @@ static constexpr const int DefaultDuration = 1500; struct Config { QString text; int durationMs = DefaultDuration; + int maxWidth = 0; + QMargins padding; }; void Show(QWidget *parent, const Config &config); diff --git a/Telegram/SourceFiles/ui/toast/toast_widget.cpp b/Telegram/SourceFiles/ui/toast/toast_widget.cpp index f8af6c05e..a9ec95504 100644 --- a/Telegram/SourceFiles/ui/toast/toast_widget.cpp +++ b/Telegram/SourceFiles/ui/toast/toast_widget.cpp @@ -24,10 +24,23 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org namespace Ui { namespace Toast { namespace internal { +namespace { -Widget::Widget(QWidget *parent, const Config &config) : TWidget(parent) { - TextParseOptions toastOptions = { 0, int(st::toastMaxWidth), st::toastFont->height, Qt::LayoutDirectionAuto }; - _text.setText(st::toastFont, textOneLine(config.text), toastOptions); +constexpr auto kToastMaxLines = 16; + +} // namespace + +Widget::Widget(QWidget *parent, const Config &config) : TWidget(parent) +, _multiline(config.maxWidth > 0) +, _maxWidth((config.maxWidth > 0) ? config.maxWidth : st::toastMaxWidth) +, _padding((config.padding.left() > 0) ? config.padding : st::toastPadding) +, _maxTextWidth(_maxWidth - _padding.left() - _padding.right()) +, _text(_multiline ? _maxTextWidth : QFIXED_MAX) { + TextParseOptions toastOptions = { 0, _maxTextWidth, st::toastTextStyle.font->height, Qt::LayoutDirectionAuto }; + if (_multiline) { + toastOptions.maxh *= kToastMaxLines; + } + _text.setText(st::toastTextStyle, _multiline ? config.text : textOneLine(config.text), toastOptions); setAttribute(Qt::WA_TransparentForMouseEvents); @@ -36,11 +49,14 @@ Widget::Widget(QWidget *parent, const Config &config) : TWidget(parent) { } void Widget::onParentResized() { - int width = st::toastMaxWidth; - accumulate_min(width, st::toastPadding.left() + _text.maxWidth() + st::toastPadding.right()); - accumulate_min(width, parentWidget()->width() - 2 * int(st::toastMinMargin)); - int height = st::toastPadding.top() + _text.minHeight() + st::toastPadding.bottom(); - setGeometry((parentWidget()->width() - width) / 2, (parentWidget()->height() - height) / 2, width, height); + auto newWidth = _maxWidth; + accumulate_min(newWidth, _padding.left() + _text.maxWidth() + _padding.right()); + accumulate_min(newWidth, parentWidget()->width() - 2 * st::toastMinMargin); + _textWidth = newWidth - _padding.left() - _padding.right(); + auto maxHeight = kToastMaxLines * st::toastTextStyle.font->height; + auto textHeight = _multiline ? qMin(_text.countHeight(_textWidth), maxHeight) : _text.minHeight(); + auto newHeight = _padding.top() + textHeight + _padding.bottom(); + setGeometry((parentWidget()->width() - newWidth) / 2, (parentWidget()->height() - newHeight) / 2, newWidth, newHeight); } void Widget::setShownLevel(float64 shownLevel) { @@ -49,14 +65,14 @@ void Widget::setShownLevel(float64 shownLevel) { void Widget::paintEvent(QPaintEvent *e) { Painter p(this); + PainterHighQualityEnabler hq(p); p.setOpacity(_shownLevel); App::roundRect(p, rect(), st::toastBg, ImageRoundRadius::Large); + auto lines = _multiline ? kToastMaxLines : 1; p.setPen(st::toastFg); - textstyleSet(&st::defaultTextStyle); - _text.drawElided(p, st::toastPadding.left(), st::toastPadding.top(), width() - st::toastPadding.left() - st::toastPadding.right()); - textstyleRestore(); + _text.drawElided(p, _padding.left(), _padding.top(), _textWidth + 1, lines); } } // namespace internal diff --git a/Telegram/SourceFiles/ui/toast/toast_widget.h b/Telegram/SourceFiles/ui/toast/toast_widget.h index 1d255e2c1..a1529a096 100644 --- a/Telegram/SourceFiles/ui/toast/toast_widget.h +++ b/Telegram/SourceFiles/ui/toast/toast_widget.h @@ -42,6 +42,12 @@ protected: private: float64 _shownLevel = 0; + bool _multiline = false; + int _maxWidth = 0; + QMargins _padding; + + int _maxTextWidth = 0; + int _textWidth = 0; Text _text; }; diff --git a/Telegram/SourceFiles/ui/twidget.h b/Telegram/SourceFiles/ui/twidget.h index 990d81851..1482725ec 100644 --- a/Telegram/SourceFiles/ui/twidget.h +++ b/Telegram/SourceFiles/ui/twidget.h @@ -76,6 +76,19 @@ public: return drawPixmapRight(p.x(), p.y(), outerw, pix); } + void setTextPalette(const style::TextPalette &palette) { + _textPalette = &palette; + } + void restoreTextPalette() { + _textPalette = nullptr; + } + const style::TextPalette &textPalette() const { + return _textPalette ? *_textPalette : st::defaultTextPalette; + } + +private: + const style::TextPalette *_textPalette = nullptr; + }; class PainterHighQualityEnabler { @@ -278,16 +291,14 @@ protected: }; template -class WeakPointed { -public: - QPointer weak() { - return QPointer(static_cast(this)); - } - QPointer weak() const { - return QPointer(static_cast(this)); - } +QPointer weak(Widget *object) { + return QPointer(object); +} -}; +template +QPointer weak(const Widget *object) { + return QPointer(object); +} void myEnsureResized(QWidget *target); QPixmap myGrab(TWidget *target, QRect rect = QRect(), QColor bg = QColor(255, 255, 255, 0)); diff --git a/Telegram/SourceFiles/ui/widgets/input_fields.cpp b/Telegram/SourceFiles/ui/widgets/input_fields.cpp index 237350907..03106237c 100644 --- a/Telegram/SourceFiles/ui/widgets/input_fields.cpp +++ b/Telegram/SourceFiles/ui/widgets/input_fields.cpp @@ -937,7 +937,7 @@ void FlatTextarea::insertEmoji(EmojiPtr emoji, QTextCursor c) { if (c.charFormat().isAnchor()) { imageFormat.setAnchor(true); imageFormat.setAnchorName(c.charFormat().anchorName()); - imageFormat.setForeground(st::defaultTextStyle.linkFg); + imageFormat.setForeground(st::defaultTextPalette.linkFg); } static QString objectReplacement(QChar::ObjectReplacementCharacter); c.insertText(objectReplacement, imageFormat); @@ -969,7 +969,7 @@ void prepareFormattingOptimization(QTextDocument *document) { } } -void removeTags(const style::color &textFg, QTextDocument *document, int from, int end) { +void removeTags(style::color textFg, QTextDocument *document, int from, int end) { QTextCursor c(document->docHandle(), 0); c.setPosition(from); c.setPosition(end, QTextCursor::KeepAnchor); @@ -982,7 +982,7 @@ void removeTags(const style::color &textFg, QTextDocument *document, int from, i } // Returns the position of the first inserted tag or "changedEnd" value if none found. -int processInsertedTags(const style::color &textFg, QTextDocument *document, int changedPosition, int changedEnd, const FlatTextarea::TagList &tags, FlatTextarea::TagMimeProcessor *processor) { +int processInsertedTags(style::color textFg, QTextDocument *document, int changedPosition, int changedEnd, const FlatTextarea::TagList &tags, FlatTextarea::TagMimeProcessor *processor) { int firstTagStart = changedEnd; int applyNoTagFrom = changedEnd; for_const (auto &tag, tags) { @@ -1006,7 +1006,7 @@ int processInsertedTags(const style::color &textFg, QTextDocument *document, int QTextCharFormat format; format.setAnchor(true); format.setAnchorName(tagId + '/' + QString::number(rand_value())); - format.setForeground(st::defaultTextStyle.linkFg); + format.setForeground(st::defaultTextPalette.linkFg); c.mergeCharFormat(format); applyNoTagFrom = tagTo; diff --git a/Telegram/SourceFiles/ui/widgets/labels.cpp b/Telegram/SourceFiles/ui/widgets/labels.cpp index 87bab310b..1a9c788d8 100644 --- a/Telegram/SourceFiles/ui/widgets/labels.cpp +++ b/Telegram/SourceFiles/ui/widgets/labels.cpp @@ -43,7 +43,7 @@ TextParseOptions _labelMarkedOptions = { } // namespace -CrossFadeAnimation::CrossFadeAnimation(const style::color &bg) : _bg(bg) { +CrossFadeAnimation::CrossFadeAnimation(style::color bg) : _bg(bg) { } void CrossFadeAnimation::addLine(Part was, Part now) { @@ -132,18 +132,16 @@ void LabelSimple::paintEvent(QPaintEvent *e) { p.drawTextLeft(0, 0, width(), _text, _textWidth); } -FlatLabel::FlatLabel(QWidget *parent, const style::FlatLabel &st, const style::TextStyle &tst) : TWidget(parent) +FlatLabel::FlatLabel(QWidget *parent, const style::FlatLabel &st) : TWidget(parent) , _text(st.width ? st.width : QFIXED_MAX) , _st(st) -, _tst(tst) , _contextCopyText(lang(lng_context_copy_text)) { init(); } -FlatLabel::FlatLabel(QWidget *parent, const QString &text, InitType initType, const style::FlatLabel &st, const style::TextStyle &tst) : TWidget(parent) +FlatLabel::FlatLabel(QWidget *parent, const QString &text, InitType initType, const style::FlatLabel &st) : TWidget(parent) , _text(st.width ? st.width : QFIXED_MAX) , _st(st) -, _tst(tst) , _contextCopyText(lang(lng_context_copy_text)) { if (initType == InitType::Rich) { setRichText(text); @@ -162,29 +160,27 @@ void FlatLabel::init() { template void FlatLabel::setTextByCallback(SetCallback callback) { - textstyleSet(&_tst); callback(); refreshSize(); - textstyleRestore(); setMouseTracking(_selectable || _text.hasLinks()); update(); } void FlatLabel::setText(const QString &text) { setTextByCallback([this, &text]() { - _text.setText(_st.font, text, _labelOptions); + _text.setText(_st.style, text, _labelOptions); }); } void FlatLabel::setRichText(const QString &text) { setTextByCallback([this, &text]() { - _text.setRichText(_st.font, text, _labelOptions); + _text.setRichText(_st.style, text, _labelOptions); }); } void FlatLabel::setMarkedText(const TextWithEntities &textWithEntities) { setTextByCallback([this, &textWithEntities]() { - _text.setMarkedText(_st.font, textWithEntities, _labelMarkedOptions); + _text.setMarkedText(_st.style, textWithEntities, _labelMarkedOptions); }); } @@ -211,10 +207,8 @@ void FlatLabel::setBreakEverywhere(bool breakEverywhere) { int FlatLabel::resizeGetHeight(int newWidth) { _allowedWidth = newWidth; - textstyleSet(&_tst); int textWidth = countTextWidth(); int textHeight = countTextHeight(textWidth); - textstyleRestore(); return _st.margin.top() + textHeight + _st.margin.bottom(); } @@ -599,7 +593,7 @@ void FlatLabel::clickHandlerPressedChanged(const ClickHandlerPtr &action, bool a update(); } -std_::unique_ptr FlatLabel::CrossFade(FlatLabel *from, FlatLabel *to, const style::color &bg, QPoint fromPosition, QPoint toPosition) { +std_::unique_ptr FlatLabel::CrossFade(FlatLabel *from, FlatLabel *to, style::color bg, QPoint fromPosition, QPoint toPosition) { auto result = std_::make_unique(bg); struct Data { @@ -613,8 +607,8 @@ std_::unique_ptr FlatLabel::CrossFade(FlatLabel *from, FlatL result.full = myGrabImage(label, QRect(), bg->c); auto textWidth = label->width() - label->_st.margin.left() - label->_st.margin.right(); label->_text.countLineWidths(textWidth, &result.lineWidths); - result.lineHeight = label->_st.font->height; - auto addedHeight = (label->_tst.lineHeight - result.lineHeight); + result.lineHeight = label->_st.style.font->height; + auto addedHeight = (label->_st.style.lineHeight - result.lineHeight); if (addedHeight > 0) { result.lineAddTop = addedHeight / 2; result.lineHeight += addedHeight; @@ -646,7 +640,7 @@ std_::unique_ptr FlatLabel::CrossFade(FlatLabel *from, FlatL } else if (label->_st.align & Qt::AlignRight) { left += (fullWidth - lineWidth); } - auto snapshotRect = data.full.rect().intersected(QRect(left * cIntRetinaFactor(), top * cIntRetinaFactor(), lineWidth * cIntRetinaFactor(), label->_st.font->height * cIntRetinaFactor())); + auto snapshotRect = data.full.rect().intersected(QRect(left * cIntRetinaFactor(), top * cIntRetinaFactor(), lineWidth * cIntRetinaFactor(), label->_st.style.font->height * cIntRetinaFactor())); if (!snapshotRect.isEmpty()) { result.snapshot = App::pixmapFromImageInPlace(data.full.copy(snapshotRect)); result.snapshot.setDevicePixelRatio(cRetinaFactor()); @@ -746,12 +740,11 @@ Text::StateResult FlatLabel::getTextState(const QPoint &m) const { } int textWidth = width() - _st.margin.left() - _st.margin.right(); - textstyleSet(&_tst); Text::StateResult state; bool heightExceeded = _st.maxHeight && (_st.maxHeight < _fullTextHeight || textWidth < _text.maxWidth()); bool renderElided = _breakEverywhere || heightExceeded; if (renderElided) { - auto lineHeight = qMax(_tst.lineHeight, _st.font->height); + auto lineHeight = qMax(_st.style.lineHeight, _st.style.font->height); auto lines = _st.maxHeight ? qMax(_st.maxHeight / lineHeight, 1) : ((height() / lineHeight) + 2); request.lines = lines; if (_breakEverywhere) { @@ -761,7 +754,6 @@ Text::StateResult FlatLabel::getTextState(const QPoint &m) const { } else { state = _text.getState(m.x() - _st.margin.left(), m.y() - _st.margin.top(), textWidth, request); } - textstyleRestore(); return state; } @@ -775,19 +767,18 @@ void FlatLabel::paintEvent(QPaintEvent *e) { Painter p(this); p.setOpacity(_opacity); p.setPen(_st.textFg); - textstyleSet(&_tst); + p.setTextPalette(_st.palette); int textWidth = width() - _st.margin.left() - _st.margin.right(); auto selection = _selection.empty() ? (_contextMenu ? _savedSelection : _selection) : _selection; bool heightExceeded = _st.maxHeight && (_st.maxHeight < _fullTextHeight || textWidth < _text.maxWidth()); bool renderElided = _breakEverywhere || heightExceeded; if (renderElided) { - auto lineHeight = qMax(_tst.lineHeight, _st.font->height); + auto lineHeight = qMax(_st.style.lineHeight, _st.style.font->height); auto lines = _st.maxHeight ? qMax(_st.maxHeight / lineHeight, 1) : ((height() / lineHeight) + 2); _text.drawElided(p, _st.margin.left(), _st.margin.top(), textWidth, lines, _st.align, e->rect().y(), e->rect().bottom(), 0, _breakEverywhere, selection); } else { _text.draw(p, _st.margin.left(), _st.margin.top(), textWidth, _st.align, e->rect().y(), e->rect().bottom(), selection); } - textstyleRestore(); } } // namespace Ui diff --git a/Telegram/SourceFiles/ui/widgets/labels.h b/Telegram/SourceFiles/ui/widgets/labels.h index d0da4da7e..c1726f8bd 100644 --- a/Telegram/SourceFiles/ui/widgets/labels.h +++ b/Telegram/SourceFiles/ui/widgets/labels.h @@ -28,7 +28,7 @@ class PopupMenu; class CrossFadeAnimation { public: - CrossFadeAnimation(const style::color &bg); + CrossFadeAnimation(style::color bg); struct Part { QPixmap snapshot; @@ -52,7 +52,7 @@ private: }; void paintLine(Painter &p, const Line &line, float64 positionReady, float64 alphaWas, float64 alphaNow); - const style::color &_bg; + style::color _bg; QList _lines; }; @@ -82,13 +82,13 @@ class FlatLabel : public TWidget, public ClickHandlerHost { Q_OBJECT public: - FlatLabel(QWidget *parent, const style::FlatLabel &st = st::defaultFlatLabel, const style::TextStyle &tst = st::defaultTextStyle); + FlatLabel(QWidget *parent, const style::FlatLabel &st = st::defaultFlatLabel); enum class InitType { Simple, Rich, }; - FlatLabel(QWidget *parent, const QString &text, InitType initType, const style::FlatLabel &st = st::defaultFlatLabel, const style::TextStyle &tst = st::defaultTextStyle); + FlatLabel(QWidget *parent, const QString &text, InitType initType, const style::FlatLabel &st = st::defaultFlatLabel); void setOpacity(float64 o); @@ -112,7 +112,7 @@ public: void clickHandlerActiveChanged(const ClickHandlerPtr &action, bool active) override; void clickHandlerPressedChanged(const ClickHandlerPtr &action, bool pressed) override; - static std_::unique_ptr CrossFade(FlatLabel *from, FlatLabel *to, const style::color &bg, QPoint fromPosition = QPoint(), QPoint toPosition = QPoint()); + static std_::unique_ptr CrossFade(FlatLabel *from, FlatLabel *to, style::color bg, QPoint fromPosition = QPoint(), QPoint toPosition = QPoint()); protected: void paintEvent(QPaintEvent *e) override; @@ -166,7 +166,6 @@ private: Text _text; const style::FlatLabel &_st; - const style::TextStyle &_tst; float64 _opacity = 1.; int _allowedWidth = 0; diff --git a/Telegram/SourceFiles/ui/widgets/multi_select.cpp b/Telegram/SourceFiles/ui/widgets/multi_select.cpp index 42200e994..28bdc8b78 100644 --- a/Telegram/SourceFiles/ui/widgets/multi_select.cpp +++ b/Telegram/SourceFiles/ui/widgets/multi_select.cpp @@ -37,7 +37,7 @@ constexpr int kWideScale = 3; class MultiSelect::Inner::Item { public: - Item(const style::MultiSelectItem &st, uint64 id, const QString &text, const style::color &color, PaintRoundImage &&paintRoundImage); + Item(const style::MultiSelectItem &st, uint64 id, const QString &text, style::color color, PaintRoundImage &&paintRoundImage); uint64 id() const { return _id; @@ -104,7 +104,7 @@ private: int _y = -1; int _width = 0; Text _text; - const style::color &_color; + style::color _color; bool _over = false; QPixmap _cache; Animation _visibility; @@ -117,7 +117,7 @@ private: }; -MultiSelect::Inner::Item::Item(const style::MultiSelectItem &st, uint64 id, const QString &text, const style::color &color, PaintRoundImage &&paintRoundImage) +MultiSelect::Inner::Item::Item(const style::MultiSelectItem &st, uint64 id, const QString &text, style::color color, PaintRoundImage &&paintRoundImage) : _st(st) , _id(id) , _color(color) @@ -126,7 +126,7 @@ MultiSelect::Inner::Item::Item(const style::MultiSelectItem &st, uint64 id, cons } void MultiSelect::Inner::Item::setText(const QString &text) { - _text.setText(_st.font, text, _textNameOptions); + _text.setText(_st.style, text, _textNameOptions); _width = _st.height + _st.padding.left() + _text.maxWidth() + _st.padding.right(); accumulate_min(_width, _st.maxWidth); } @@ -402,7 +402,7 @@ QString MultiSelect::getQuery() const { return _inner->getQuery(); } -void MultiSelect::addItem(uint64 itemId, const QString &text, const style::color &color, PaintRoundImage &&paintRoundImage, AddItemWay way) { +void MultiSelect::addItem(uint64 itemId, const QString &text, style::color color, PaintRoundImage &&paintRoundImage, AddItemWay way) { _inner->addItem(std_::make_unique(_st.item, itemId, text, color, std_::move(paintRoundImage)), way); } diff --git a/Telegram/SourceFiles/ui/widgets/multi_select.h b/Telegram/SourceFiles/ui/widgets/multi_select.h index 32fc912b1..fce6686d1 100644 --- a/Telegram/SourceFiles/ui/widgets/multi_select.h +++ b/Telegram/SourceFiles/ui/widgets/multi_select.h @@ -45,7 +45,7 @@ public: SkipAnimation, }; using PaintRoundImage = base::lambda; - void addItem(uint64 itemId, const QString &text, const style::color &color, PaintRoundImage &&paintRoundImage, AddItemWay way = AddItemWay::Default); + void addItem(uint64 itemId, const QString &text, style::color color, PaintRoundImage &&paintRoundImage, AddItemWay way = AddItemWay::Default); void setItemText(uint64 itemId, const QString &text); void setItemRemovedCallback(base::lambda &&callback); diff --git a/Telegram/SourceFiles/ui/widgets/shadow.h b/Telegram/SourceFiles/ui/widgets/shadow.h index a5a20f810..777210aaa 100644 --- a/Telegram/SourceFiles/ui/widgets/shadow.h +++ b/Telegram/SourceFiles/ui/widgets/shadow.h @@ -23,7 +23,7 @@ namespace Ui { class PlainShadow : public TWidget { public: - PlainShadow(QWidget *parent, const style::color &color) : TWidget(parent), _color(color) { + PlainShadow(QWidget *parent, style::color color) : TWidget(parent), _color(color) { } protected: @@ -32,7 +32,7 @@ protected: } private: - const style::color &_color; + style::color _color; }; diff --git a/Telegram/SourceFiles/ui/widgets/tooltip.cpp b/Telegram/SourceFiles/ui/widgets/tooltip.cpp index a18da282c..2ba943a6c 100644 --- a/Telegram/SourceFiles/ui/widgets/tooltip.cpp +++ b/Telegram/SourceFiles/ui/widgets/tooltip.cpp @@ -19,11 +19,16 @@ #include "ui/widgets/tooltip.h" #include "application.h" +#include "styles/style_widgets.h" namespace Ui { Tooltip *TooltipInstance = nullptr; +const style::Tooltip *AbstractTooltipShower::tooltipSt() const { + return &st::defaultTooltip; +} + AbstractTooltipShower::~AbstractTooltipShower() { if (TooltipInstance && TooltipInstance->_shower == this) { TooltipInstance->_shower = 0; @@ -35,6 +40,7 @@ Tooltip::Tooltip() : TWidget(nullptr) { setWindowFlags(Qt::WindowFlags(Qt::FramelessWindowHint) | Qt::BypassWindowManagerHint | Qt::ToolTip | Qt::NoDropShadowWindowHint); setAttribute(Qt::WA_NoSystemBackground, true); + setAttribute(Qt::WA_TranslucentBackground, true); _showTimer.setSingleShot(true); connect(&_showTimer, SIGNAL(timeout()), this, SLOT(onShow())); @@ -92,7 +98,10 @@ void Tooltip::popup(const QPoint &m, const QString &text, const style::Tooltip * _point = m; _st = st; - _text = Text(_st->textFont, text, _textPlainOptions, _st->widthMax, true); + _text = Text(_st->textStyle, text, _textPlainOptions, _st->widthMax, true); + + _useTransparency = Platform::TransparentWindowsSupported(_point); + setAttribute(Qt::WA_OpaquePaintEvent, !_useTransparency); int32 addw = 2 * st::lineWidth + _st->textPadding.left() + _st->textPadding.right(); int32 addh = 2 * st::lineWidth + _st->textPadding.top() + _st->textPadding.bottom(); @@ -103,7 +112,7 @@ void Tooltip::popup(const QPoint &m, const QString &text, const style::Tooltip * s.setWidth(addw + _text.countWidth(_st->widthMax - addw)); s.setHeight(addh + _text.countHeight(s.width() - addw)); } - int32 maxh = addh + (_st->linesMax * _st->textFont->height); + int32 maxh = addh + (_st->linesMax * _st->textStyle.font->height); if (s.height() > maxh) { s.setHeight(maxh); } @@ -141,14 +150,20 @@ void Tooltip::popup(const QPoint &m, const QString &text, const style::Tooltip * void Tooltip::paintEvent(QPaintEvent *e) { Painter p(this); - p.fillRect(rect(), _st->textBg); + if (_useTransparency) { + p.setPen(_st->textBorder); + p.setBrush(_st->textBg); + PainterHighQualityEnabler hq(p); + p.drawRoundedRect(QRectF(0.5, 0.5, width() - 1., height() - 1.), st::buttonRadius, st::buttonRadius); + } else { + p.fillRect(rect(), _st->textBg); - p.fillRect(QRect(0, 0, width(), st::lineWidth), _st->textBorder); - p.fillRect(QRect(0, height() - st::lineWidth, width(), st::lineWidth), _st->textBorder); - p.fillRect(QRect(0, st::lineWidth, st::lineWidth, height() - 2 * st::lineWidth), _st->textBorder); - p.fillRect(QRect(width() - st::lineWidth, st::lineWidth, st::lineWidth, height() - 2 * st::lineWidth), _st->textBorder); - - int32 lines = qFloor((height() - 2 * st::lineWidth - _st->textPadding.top() - _st->textPadding.bottom()) / _st->textFont->height); + p.fillRect(QRect(0, 0, width(), st::lineWidth), _st->textBorder); + p.fillRect(QRect(0, height() - st::lineWidth, width(), st::lineWidth), _st->textBorder); + p.fillRect(QRect(0, st::lineWidth, st::lineWidth, height() - 2 * st::lineWidth), _st->textBorder); + p.fillRect(QRect(width() - st::lineWidth, st::lineWidth, st::lineWidth, height() - 2 * st::lineWidth), _st->textBorder); + } + int32 lines = qFloor((height() - 2 * st::lineWidth - _st->textPadding.top() - _st->textPadding.bottom()) / _st->textStyle.font->height); p.setPen(_st->textFg); _text.drawElided(p, st::lineWidth + _st->textPadding.left(), st::lineWidth + _st->textPadding.top(), width() - 2 * st::lineWidth - _st->textPadding.left() - _st->textPadding.right(), lines); diff --git a/Telegram/SourceFiles/ui/widgets/tooltip.h b/Telegram/SourceFiles/ui/widgets/tooltip.h index eb1611014..a5fcc4d63 100644 --- a/Telegram/SourceFiles/ui/widgets/tooltip.h +++ b/Telegram/SourceFiles/ui/widgets/tooltip.h @@ -17,15 +17,17 @@ */ #pragma once +namespace style { +struct Tooltip; +} // namespace style + namespace Ui { class AbstractTooltipShower { public: virtual QString tooltipText() const = 0; virtual QPoint tooltipPos() const = 0; - virtual const style::Tooltip *tooltipSt() const { - return &st::defaultTooltip; - } + virtual const style::Tooltip *tooltipSt() const; virtual ~AbstractTooltipShower(); }; @@ -36,7 +38,7 @@ public: static void Show(int32 delay, const AbstractTooltipShower *shower); static void Hide(); - private slots: +private slots: void onShow(); void onWndActiveChanged(); void onHideByLeave(); @@ -63,6 +65,7 @@ private: const style::Tooltip *_st = nullptr; QTimer _hideByLeaveTimer; + bool _useTransparency = true; }; diff --git a/Telegram/SourceFiles/ui/widgets/widgets.style b/Telegram/SourceFiles/ui/widgets/widgets.style index b63f42395..2a9d6cbd0 100644 --- a/Telegram/SourceFiles/ui/widgets/widgets.style +++ b/Telegram/SourceFiles/ui/widgets/widgets.style @@ -28,12 +28,13 @@ LabelSimple { } FlatLabel { - font: font; margin: margins; width: pixels; align: align; textFg: color; maxHeight: pixels; + style: TextStyle; + palette: TextPalette; } LinkButton { @@ -321,7 +322,7 @@ MultiSelectItem { padding: margins; maxWidth: pixels; height: pixels; - font: font; + style: TextStyle; textBg: color; textFg: color; textActiveBg: color; @@ -421,6 +422,20 @@ DropdownMenu { menu: Menu; } +Tooltip { + textBg: color; + textFg: color; + textStyle: TextStyle; + textBorder: color; + textPadding: margins; + + shift: point; + skip: pixels; + + widthMax: pixels; + linesMax: int; +} + defaultLabelSimple: LabelSimple { font: normalFont; maxWidth: 0px; @@ -428,11 +443,12 @@ defaultLabelSimple: LabelSimple { } defaultFlatLabel: FlatLabel { - font: font(fsize); width: 0px; maxHeight: 0px; align: align(left); textFg: windowFg; + style: defaultTextStyle; + palette: defaultTextPalette; } defaultLinkButton: LinkButton { @@ -784,6 +800,20 @@ defaultDropdownMenu: DropdownMenu { menu: defaultMenu; } +defaultTooltip: Tooltip { + textBg: tooltipBg; + textFg: tooltipFg; + textStyle: defaultTextStyle; + textBorder: tooltipBorderFg; + textPadding: margins(5px, 2px, 5px, 2px); + + shift: point(-20px, 20px); + skip: 10px; + + widthMax: 800px; + linesMax: 12; +} + historyToDownBelow: icon { { "history_down_shadow", historyToDownShadow }, { "history_down_circle", windowBg, point(4px, 4px) }, diff --git a/Telegram/SourceFiles/window/main_window.cpp b/Telegram/SourceFiles/window/main_window.cpp index af2f0c879..3d4a00ee8 100644 --- a/Telegram/SourceFiles/window/main_window.cpp +++ b/Telegram/SourceFiles/window/main_window.cpp @@ -34,8 +34,7 @@ MainWindow::MainWindow() : QWidget() , _titleText(qsl("Telegram")) { using Update = Theme::BackgroundUpdate; subscribe(Theme::Background(), [this](const Update &data) { - if (data.type == Update::Type::TestingTheme - || data.type == Update::Type::RevertingTheme) { + if (data.paletteChanged()) { if (_title) { _title->update(); } diff --git a/Telegram/SourceFiles/window/notifications_manager_default.cpp b/Telegram/SourceFiles/window/notifications_manager_default.cpp index dee5d70d1..cfed32531 100644 --- a/Telegram/SourceFiles/window/notifications_manager_default.cpp +++ b/Telegram/SourceFiles/window/notifications_manager_default.cpp @@ -639,7 +639,7 @@ void Notification::updateNotifyDisplay() { } else if (_forwardedCount > 1) { p.setFont(st::dialogsTextFont); if (_author) { - itemTextCache.setText(st::dialogsTextFont, _author->name); + itemTextCache.setText(st::dialogsTextStyle, _author->name); p.setPen(st::dialogsTextFgService); itemTextCache.drawElided(p, r.left(), r.top(), r.width(), st::dialogsTextFont->height); r.setTop(r.top() + st::dialogsTextFont->height); diff --git a/Telegram/SourceFiles/window/top_bar_widget.cpp b/Telegram/SourceFiles/window/top_bar_widget.cpp index b0f1c4d26..e57a02659 100644 --- a/Telegram/SourceFiles/window/top_bar_widget.cpp +++ b/Telegram/SourceFiles/window/top_bar_widget.cpp @@ -106,7 +106,7 @@ void TopBarWidget::showMenu() { if (auto peer = main->peer()) { if (!_menu) { _menu.create(App::main()); - _menu->setHiddenCallback([that = weak(), menu = _menu.data()] { + _menu->setHiddenCallback([that = weak(this), menu = _menu.data()] { menu->deleteLater(); if (that && that->_menu == menu) { that->_menu = nullptr; @@ -159,10 +159,12 @@ void TopBarWidget::paintEvent(QPaintEvent *e) { p.fillRect(QRect(0, 0, width(), st::topBarHeight), st::topBarBg); if (_clearSelection->isHidden()) { p.save(); - int decreaseWidth = 0; + auto decreaseWidth = 0; if (!_info->isHidden()) { decreaseWidth += _info->width(); - decreaseWidth -= st::topBarArrowPadding.left(); + } + if (!_menuToggle->isHidden()) { + decreaseWidth += _menuToggle->width(); } if (!_search->isHidden()) { decreaseWidth += _search->width(); diff --git a/Telegram/SourceFiles/window/top_bar_widget.h b/Telegram/SourceFiles/window/top_bar_widget.h index 8af590e37..caae98021 100644 --- a/Telegram/SourceFiles/window/top_bar_widget.h +++ b/Telegram/SourceFiles/window/top_bar_widget.h @@ -31,7 +31,7 @@ class DropdownMenu; namespace Window { -class TopBarWidget : public TWidget, private base::Subscriber, public WeakPointed { +class TopBarWidget : public TWidget, private base::Subscriber { Q_OBJECT public: diff --git a/Telegram/SourceFiles/window/window.style b/Telegram/SourceFiles/window/window.style index 5ecc22dea..7db7391ee 100644 --- a/Telegram/SourceFiles/window/window.style +++ b/Telegram/SourceFiles/window/window.style @@ -119,24 +119,22 @@ mainMenuHelp: icon {{ "menu_help", menuIconFg }}; mainMenuHelpOver: icon {{ "menu_help", menuIconFgOver }}; mainMenuFooterLeft: 30px; mainMenuTelegramLabel: FlatLabel(defaultFlatLabel) { - font: semiboldFont; align: align(left); textFg: windowSubTextFg; + style: TextStyle(defaultTextStyle) { + font: semiboldFont; + linkFont: semiboldFont; + linkFontOver: font(fsize semibold underline); + } } -mainMenuTelegramStyle: TextStyle(defaultTextStyle) { - linkFlags: semiboldFont; - linkFlagsOver: font(fsize semibold underline); +mainMenuTelegramPalette: TextPalette(defaultTextPalette) { linkFg: windowSubTextFg; - linkFgDown: windowSubTextFg; } mainMenuTelegramBottom: 43px; mainMenuVersionLabel: FlatLabel(mainMenuTelegramLabel) { - font: normalFont; -} -mainMenuVersionStyle: TextStyle(mainMenuTelegramStyle) { - linkFlags: normalFont; - linkFlagsOver: font(fsize underline); + style: defaultTextStyle; } +mainMenuVersionPalette: mainMenuTelegramPalette; mainMenuVersionBottom: 21px; // Windows specific title @@ -233,3 +231,7 @@ macSelectorTop: 6; macAlwaysThisAppTop: 4; macAppHintTop: 8; macCautionIconSize: 16; + +macWindowRoundRadius: 5; +macWindowShadowTopLeft: icon {{ "mac_window_shadow_top_left", windowShadowFg }}; +macTrayIcon: icon {{ "mac_tray_icon", windowFg }}; diff --git a/Telegram/SourceFiles/window/window_main_menu.cpp b/Telegram/SourceFiles/window/window_main_menu.cpp index 1b7573796..42dec52e0 100644 --- a/Telegram/SourceFiles/window/window_main_menu.cpp +++ b/Telegram/SourceFiles/window/window_main_menu.cpp @@ -36,8 +36,8 @@ namespace Window { MainMenu::MainMenu(QWidget *parent) : TWidget(parent) , _menu(this, st::mainMenu) -, _telegram(this, st::mainMenuTelegramLabel, st::mainMenuTelegramStyle) -, _version(this, st::mainMenuVersionLabel, st::mainMenuVersionStyle) { +, _telegram(this, st::mainMenuTelegramLabel) +, _version(this, st::mainMenuVersionLabel) { setAttribute(Qt::WA_OpaquePaintEvent); subscribe(Global::RefSelfChanged(), [this] { diff --git a/Telegram/SourceFiles/window/window_theme.cpp b/Telegram/SourceFiles/window/window_theme.cpp index dfa65f878..a7fc6bbaa 100644 --- a/Telegram/SourceFiles/window/window_theme.cpp +++ b/Telegram/SourceFiles/window/window_theme.cpp @@ -328,7 +328,7 @@ QImage prepareBackgroundImage(QImage &&image) { return std_::move(image); } -void initColor(const style::color &color, float64 hue, float64 saturation) { +void initColor(style::color color, float64 hue, float64 saturation) { auto original = color->c; original.setHslF(hue, saturation, original.lightnessF(), original.alphaF()); color.set(original.red(), original.green(), original.blue(), original.alpha()); @@ -562,19 +562,23 @@ void Unload() { } bool Apply(const QString &filepath) { - QByteArray content; - Instance theme; - if (!LoadFromFile(filepath, &theme, &content)) { + auto preview = std_::make_unique(); + preview->path = filepath; + if (!LoadFromFile(preview->path, &preview->instance, &preview->content)) { return false; } + return Apply(std_::move(preview)); +} + +bool Apply(std_::unique_ptr preview) { instance.createIfNull(); - instance->applying.path = filepath; - instance->applying.content = content; - instance->applying.cached = theme.cached; + instance->applying.path = std_::move(preview->path); + instance->applying.content = std_::move(preview->content); + instance->applying.cached = std_::move(preview->instance.cached); if (instance->applying.paletteForRevert.isEmpty()) { instance->applying.paletteForRevert = style::main_palette::save(); } - Background()->setTestingTheme(std_::move(theme)); + Background()->setTestingTheme(std_::move(preview->instance)); return true; } @@ -619,5 +623,29 @@ bool LoadFromFile(const QString &path, Instance *out, QByteArray *outContent) { return loadTheme(*outContent, out->cached, out); } +void ComputeBackgroundRects(QRect wholeFill, QSize imageSize, QRect &to, QRect &from) { + if (uint64(imageSize.width()) * wholeFill.height() > uint64(imageSize.height()) * wholeFill.width()) { + float64 pxsize = wholeFill.height() / float64(imageSize.height()); + int takewidth = qCeil(wholeFill.width() / pxsize); + if (takewidth > imageSize.width()) { + takewidth = imageSize.width(); + } else if ((imageSize.width() % 2) != (takewidth % 2)) { + ++takewidth; + } + to = QRect(int((wholeFill.width() - takewidth * pxsize) / 2.), 0, qCeil(takewidth * pxsize), wholeFill.height()); + from = QRect((imageSize.width() - takewidth) / 2, 0, takewidth, imageSize.height()); + } else { + float64 pxsize = wholeFill.width() / float64(imageSize.width()); + int takeheight = qCeil(wholeFill.height() / pxsize); + if (takeheight > imageSize.height()) { + takeheight = imageSize.height(); + } else if ((imageSize.height() % 2) != (takeheight % 2)) { + ++takeheight; + } + to = QRect(0, int((wholeFill.height() - takeheight * pxsize) / 2.), wholeFill.width(), qCeil(takeheight * pxsize)); + from = QRect(0, (imageSize.height() - takeheight) / 2, imageSize.width(), takeheight); + } +} + } // namespace Theme } // namespace Window diff --git a/Telegram/SourceFiles/window/window_theme.h b/Telegram/SourceFiles/window/window_theme.h index f2e1800ad..9171ef5a5 100644 --- a/Telegram/SourceFiles/window/window_theme.h +++ b/Telegram/SourceFiles/window/window_theme.h @@ -45,17 +45,26 @@ struct Cached { bool Load(const QString &pathRelative, const QString &pathAbsolute, const QByteArray &content, Cached &cache); void Unload(); -bool Apply(const QString &filepath); -void ApplyDefault(); -void KeepApplied(); -void Revert(); - struct Instance { style::palette palette; QImage background; Cached cached; bool tiled = false; }; + +struct Preview { + QString path; + Instance instance; + QByteArray content; + QPixmap preview; +}; + +bool Apply(const QString &filepath); +bool Apply(std_::unique_ptr preview); +void ApplyDefault(); +void KeepApplied(); +void Revert(); + bool LoadFromFile(const QString &file, Instance *out, QByteArray *outContent); struct BackgroundUpdate { @@ -70,6 +79,9 @@ struct BackgroundUpdate { BackgroundUpdate(Type type, bool tiled) : type(type), tiled(tiled) { } + bool paletteChanged() const { + return (type == Type::TestingTheme || type == Type::RevertingTheme); + } Type type; bool tiled; }; @@ -116,5 +128,7 @@ private: ChatBackground *Background(); +void ComputeBackgroundRects(QRect wholeFill, QSize imageSize, QRect &to, QRect &from); + } // namespace Theme } // namespace Window diff --git a/Telegram/SourceFiles/window/window_theme_preview.cpp b/Telegram/SourceFiles/window/window_theme_preview.cpp new file mode 100644 index 000000000..ea4a0facd --- /dev/null +++ b/Telegram/SourceFiles/window/window_theme_preview.cpp @@ -0,0 +1,906 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org +*/ +#include "stdafx.h" +#include "window/window_theme_preview.h" + +#include "window/window_theme.h" +#include "lang.h" +#include "platform/platform_window_title.h" +#include "styles/style_widgets.h" +#include "styles/style_window.h" +#include "styles/style_mediaview.h" +#include "styles/style_history.h" +#include "styles/style_dialogs.h" + +namespace Window { +namespace Theme { +namespace { + +class Generator { +public: + Generator(const Instance &theme, const CurrentData ¤t); + + QPixmap generate(); + +private: + enum class Status { + None, + Sent, + Received + }; + struct Row { + Text name; + enum class Type { + User, + Group, + Channel + }; + Type type = Type::User; + int peerIndex = 0; + int unreadCounter = 0; + bool muted = false; + bool pinned = false; + QString date; + Text text; + Status status = Status::None; + bool selected = false; + bool active = false; + }; + struct Bubble { + int width = 0; + int height = 0; + bool outbg = false; + Status status = Status::None; + QString date; + bool attached = false; + bool tail = true; + Text text = { st::msgMinWidth }; + QVector waveform; + int waveactive = 0; + QString wavestatus; + QImage photo; + int photoWidth = 0; + int photoHeight = 0; + Text replyName = { st::msgMinWidth }; + Text replyText = { st::msgMinWidth }; + }; + + void prepare(); + + void addRow(QString name, int peerIndex, QString date, QString text); + void addBubble(Bubble bubble, int width, int height, QString date, Status status); + void addAudioBubble(QVector waveform, int waveactive, QString wavestatus, QString date, Status status); + void addTextBubble(QString text, QString date, Status status); + void addDateBubble(QString date); + void addPhotoBubble(QString image, QString caption, QString date, Status status); + QSize computeSkipBlock(Status status, QString date); + int computeInfoWidth(Status status, QString date); + + void generateData(); + + void paintHistoryList(); + void paintHistoryBackground(); + void paintTopBar(); + void paintComposeArea(); + void paintDialogs(); + void paintDialogsList(); + void paintHistoryShadows(); + void paintRow(const Row &row); + void paintBubble(const Bubble &bubble); + void paintService(QString text); + + void paintUserpic(int x, int y, Row::Type type, int index); + + void setTextPalette(const style::TextPalette &st); + void restoreTextPalette(); + + const Instance &_theme; + const style::palette &_palette; + const CurrentData &_current; + Painter *_p = nullptr; + + QRect _rect; + QRect _inner; + QRect _body; + QRect _dialogs; + QRect _dialogsList; + QRect _topBar; + QRect _composeArea; + QRect _history; + + int _rowsTop = 0; + std_::vector_of_moveable _rows; + + Text _topBarName; + QString _topBarStatus; + bool _topBarStatusActive = false; + + int _historyBottom = 0; + std_::vector_of_moveable _bubbles; + + style::TextPalette _textPalette; + +}; + +void Generator::prepare() { + _rect = QRect(0, 0, st::themePreviewMargin.left() + st::themePreviewSize.width() + st::themePreviewMargin.right(), st::themePreviewMargin.top() + st::themePreviewSize.height() + st::themePreviewMargin.bottom()); + _inner = _rect.marginsRemoved(st::themePreviewMargin); + _body = _inner.marginsRemoved(QMargins(0, Platform::PreviewTitleHeight(), 0, 0)); + _dialogs = QRect(_body.x(), _body.y(), st::themePreviewDialogsWidth, _body.height()); + _dialogsList = _dialogs.marginsRemoved(QMargins(0, st::dialogsFilterPadding.y() + st::dialogsMenuToggle.height + st::dialogsFilterPadding.y(), 0, st::dialogsPadding.y())); + _topBar = QRect(_dialogs.x() + _dialogs.width(), _dialogs.y(), _body.width() - _dialogs.width(), st::topBarHeight); + _composeArea = QRect(_topBar.x(), _body.y() + _body.height() - st::historySend.height, _topBar.width(), st::historySend.height); + _history = QRect(_topBar.x(), _topBar.y() + _topBar.height(), _topBar.width(), _body.height() - _topBar.height() - _composeArea.height()); + + generateData(); +} + +void Generator::addRow(QString name, int peerIndex, QString date, QString text) { + Row row; + row.name.setText(st::msgNameStyle, name, _textNameOptions); + row.peerIndex = peerIndex; + row.date = date; + row.text.setRichText(st::dialogsTextStyle, text, _textDlgOptions); + _rows.push_back(std_::move(row)); +} + +void Generator::addBubble(Bubble bubble, int width, int height, QString date, Status status) { + bubble.width = width; + bubble.height = height; + bubble.date = date; + bubble.status = status; + _bubbles.push_back(std_::move(bubble)); +} + +void Generator::addAudioBubble(QVector waveform, int waveactive, QString wavestatus, QString date, Status status) { + Bubble bubble; + bubble.waveform = waveform; + bubble.waveactive = waveactive; + bubble.wavestatus = wavestatus; + + auto skipBlock = computeSkipBlock(status, date); + + auto width = st::msgFileMinWidth; + auto tleft = 0, tright = 0; + tleft = st::msgFilePadding.left() + st::msgFileSize + st::msgFilePadding.right(); + tright = st::msgFileThumbPadding.left(); + accumulate_max(width, tleft + st::normalFont->width(wavestatus) + skipBlock.width() + st::msgPadding.right()); + accumulate_min(width, st::msgMaxWidth); + + auto height = st::msgFilePadding.top() + st::msgFileSize + st::msgFilePadding.bottom(); + addBubble(std_::move(bubble), width, height, date, status); +} + +QSize Generator::computeSkipBlock(Status status, QString date) { + auto infoWidth = computeInfoWidth(status, date); + auto width = st::msgDateSpace + infoWidth - st::msgDateDelta.x(); + auto height = st::msgDateFont->height - st::msgDateDelta.y(); + return QSize(width, height); +} + +int Generator::computeInfoWidth(Status status, QString date) { + auto result = st::msgDateFont->width(date); + if (status != Status::None) { + result += st::historySendStateSpace; + } + return result; +} + +void Generator::addTextBubble(QString text, QString date, Status status) { + Bubble bubble; + auto skipBlock = computeSkipBlock(status, date); + bubble.text.setRichText(st::messageTextStyle, text + textcmdSkipBlock(skipBlock.width(), skipBlock.height()), _historyTextOptions); + + auto width = _history.width() - st::msgMargin.left() - st::msgMargin.right(); + accumulate_min(width, st::msgPadding.left() + bubble.text.maxWidth() + st::msgPadding.right()); + accumulate_min(width, st::msgMaxWidth); + + auto textWidth = qMax(width - st::msgPadding.left() - st::msgPadding.right(), 1); + auto textHeight = bubble.text.countHeight(textWidth); + + auto height = st::msgPadding.top() + textHeight + st::msgPadding.bottom(); + addBubble(std_::move(bubble), width, height, date, status); +} + +void Generator::addDateBubble(QString date) { + Bubble bubble; + addBubble(std_::move(bubble), 0, 0, date, Status::None); +} + +void Generator::addPhotoBubble(QString image, QString caption, QString date, Status status) { + Bubble bubble; + bubble.photo.load(image); + bubble.photoWidth = convertScale(bubble.photo.width() / 2); + bubble.photoHeight = convertScale(bubble.photo.height() / 2); + auto skipBlock = computeSkipBlock(status, date); + bubble.text.setRichText(st::messageTextStyle, caption + textcmdSkipBlock(skipBlock.width(), skipBlock.height()), _historyTextOptions); + + auto width = _history.width() - st::msgMargin.left() - st::msgMargin.right(); + accumulate_min(width, bubble.photoWidth); + accumulate_min(width, st::msgMaxWidth); + + auto textWidth = qMax(width - st::msgPadding.left() - st::msgPadding.right(), 1); + auto textHeight = bubble.text.countHeight(textWidth); + + auto height = st::mediaCaptionSkip + textHeight + st::msgPadding.bottom(); + addBubble(std_::move(bubble), width, height, date, status); +} + +void Generator::generateData() { + _rows.reserve(9); + addRow("Eva Summer", 0, "11:00", "Reminds me of a Chinese proverb: the best time to plant a tree was 20 years ago."); + _rows.back().active = true; + _rows.back().pinned = true; + addRow("Alexandra Smith", 1, "10:00", "This is amazing!"); + _rows.back().unreadCounter = 2; + addRow("Mike Apple", 2, "9:00", textcmdLink(1, QChar(55357) + QString() + QChar(56836) + " Sticker")); + _rows.back().unreadCounter = 2; + _rows.back().muted = true; + addRow("Evening Club", 3, "8:00", textcmdLink(1, "Eva: Photo")); + _rows.back().type = Row::Type::Group; + addRow("Old Pirates", 4, "7:00", textcmdLink(1, "Max:") + " Yo-ho-ho!"); + _rows.back().type = Row::Type::Group; + addRow("Max Bright", 5, "6:00", "How about some coffee?"); + _rows.back().status = Status::Received; + addRow("Natalie Parker", 6, "5:00", "OK, great)"); + _rows.back().status = Status::Received; + addRow("Davy Jones", 7, "4:00", textcmdLink(1, "Keynote.pdf")); + addRow("Eva Summer", 8, "3:00", "Reminds me of a Chinese proverb: the best time to plant a tree was 20 years ago."); + + _topBarName.setText(st::msgNameStyle, "Eva Summer", _textNameOptions); + _topBarStatus = "online"; + _topBarStatusActive = true; + + addPhotoBubble(":/gui/art/sunrise.jpg", "Nearly missed this sunrise", "7:00", Status::None); + int wavedata[] = { 0, 0, 0, 0, 27, 31, 4, 1, 0, 0, 23, 30, 18, 9, 7, 19, 4, 2, 2, 2, 0, 0, 15, 15, 15, 15, 3, 15, 19, 3, 2, 0, 0, 0, 0, 0, 3, 12, 16, 6, 4, 6, 14, 12, 2, 12, 12, 11, 3, 0, 7, 5, 7, 4, 7, 5, 2, 4, 0, 9, 5, 7, 6, 2, 2, 0, 0 }; + auto waveform = QVector(base::array_size(wavedata)); + memcpy(waveform.data(), wavedata, sizeof(wavedata)); + addAudioBubble(waveform, 33, "0:07", "8:00", Status::None); + _bubbles.back().outbg = true; + _bubbles.back().status = Status::Received; + addDateBubble("December 26"); + addTextBubble("Twenty years from now you will be more disappointed by the things that you didn't do than by the ones you did do, so throw off the bowlines, sail away from safe harbor, catch the trade winds in your sails.", "9:00", Status::Received); + _bubbles.back().tail = false; + _bubbles.back().outbg = true; + addTextBubble("Mark Twain said that " + QString() + QChar(9757) + QChar(55356) + QChar(57339), "9:00", Status::Received); + _bubbles.back().outbg = true; + _bubbles.back().attached = true; + _bubbles.back().tail = true; + addTextBubble("Reminds me of a Chinese proverb: the best time to plant a tree was 20 years ago. The second best time is now.", "9:00", Status::None); + _bubbles.back().replyName.setText(st::msgNameStyle, "Alex Cassio", _textNameOptions); + _bubbles.back().replyText.setText(st::messageTextStyle, "Mark Twain said that " + QString() + QChar(9757) + QChar(55356) + QChar(57339), _textDlgOptions); +} + +Generator::Generator(const Instance &theme, const CurrentData ¤t) +: _theme(theme) +, _palette(_theme.palette) +, _current(current) { +} + +QPixmap Generator::generate() { + prepare(); + + auto result = QImage(_rect.size() * cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied); + result.setDevicePixelRatio(cRetinaFactor()); + result.fill(st::themePreviewBg->c); + + { + Painter p(&result); + PainterHighQualityEnabler hq(p); + _p = &p; + + _p->fillRect(_body, QColor(0, 0, 0)); + _p->fillRect(_body, st::windowBg[_palette]); + + paintHistoryList(); + paintTopBar(); + paintComposeArea(); + paintDialogs(); + paintHistoryShadows(); + } + Platform::PreviewWindowFramePaint(result, _palette, _body, _rect.width()); + + return App::pixmapFromImageInPlace(std_::move(result)); +} + +void Generator::paintHistoryList() { + paintHistoryBackground(); + + _historyBottom = _history.y() + _history.height(); + _historyBottom -= st::historyPaddingBottom; + for (auto i = _bubbles.size(); i != 0;) { + auto &bubble = _bubbles[--i]; + if (bubble.width > 0) { + paintBubble(bubble); + } else { + paintService(bubble.date); + } + } + + _p->setClipping(false); +} + +void Generator::paintHistoryBackground() { + auto fromy = (-st::topBarHeight); + auto background = _theme.background; + auto tiled = _theme.tiled; + if (background.isNull()) { + if (_current.backgroundId == Window::Theme::kThemeBackground) { + background.load(qsl(":/gui/art/bg.jpg")); + tiled = false; + } else { + background = _current.backgroundImage.toImage(); + tiled = _current.backgroundTiled; + } + } + _p->setClipRect(_history); + if (tiled) { + auto left = _history.x(), top = _history.y(), right = _history.x() + _history.width(), bottom = _history.y() + _history.height(); + auto w = background.width() / cRetinaFactor(); + auto h = background.height() / cRetinaFactor(); + auto sx = qFloor(left / w); + auto sy = qFloor((top - fromy) / h); + auto cx = qCeil(right / w); + auto cy = qCeil((bottom - fromy) / h); + for (auto i = sx; i != cx; ++i) { + for (auto j = sy; j != cy; ++j) { + _p->drawImage(QPointF(_history.x() + i * w, _history.y() + fromy + j * h), background); + } + } + } else { + PainterHighQualityEnabler hq(*_p); + + auto fill = QRect(_topBar.x(), _topBar.y(), _topBar.width(), _body.height()); + QRect to, from; + ComputeBackgroundRects(fill, background.size(), to, from); + to.moveTop(to.top() + fromy); + to.moveTopLeft(to.topLeft() + _history.topLeft()); + _p->drawImage(to, background, from); + } + _p->setClipping(false); +} + +void Generator::paintTopBar() { + _p->fillRect(_topBar, st::topBarBg[_palette]); + + auto right = st::topBarMenuToggle.width; + st::topBarMenuToggle.icon[_palette].paint(*_p, _topBar.x() + _topBar.width() - right + st::topBarMenuToggle.iconPosition.x(), _topBar.y() + st::topBarMenuToggle.iconPosition.y(), _rect.width()); + right += st::topBarSearch.width; + st::topBarSearch.icon[_palette].paint(*_p, _topBar.x() + _topBar.width() - right + st::topBarSearch.iconPosition.x(), _topBar.y() + st::topBarSearch.iconPosition.y(), _rect.width()); + + auto decreaseWidth = st::topBarSearch.width + st::topBarMenuToggle.width; + auto nameleft = _topBar.x() + st::topBarArrowPadding.right(); + auto nametop = _topBar.y() + st::topBarArrowPadding.top(); + auto statustop = _topBar.y() + st::topBarHeight - st::topBarArrowPadding.bottom() - st::dialogsTextFont->height; + auto namewidth = _topBar.x() + _topBar.width() - decreaseWidth - nameleft - st::topBarArrowPadding.right(); + _p->setFont(st::dialogsTextFont); + _p->setPen(_topBarStatusActive ? st::historyStatusFgActive[_palette] : st::historyStatusFg[_palette]); + _p->drawText(nameleft, statustop + st::dialogsTextFont->ascent, _topBarStatus); + + _p->setPen(st::dialogsNameFg[_palette]); + _topBarName.drawElided(*_p, nameleft, nametop, namewidth); +} + +void Generator::paintComposeArea() { + _p->fillRect(_composeArea, st::historyReplyBg[_palette]); + + auto controlsTop = _composeArea.y() + _composeArea.height() - st::historySend.height; + st::historyAttach.icon[_palette].paint(*_p, _composeArea.x() + st::historyAttach.iconPosition.x(), controlsTop + st::historyAttach.iconPosition.y(), _rect.width()); + auto right = st::historySendRight + st::historySend.width; + st::historyRecordVoice[_palette].paintInCenter(*_p, QRect(_composeArea.x() + _composeArea.width() - right, controlsTop, st::historySend.width, st::historySend.height)); + + right += st::historyAttachEmoji.width; + auto attachEmojiLeft = _composeArea.x() + _composeArea.width() - right; + _p->fillRect(attachEmojiLeft, controlsTop, st::historyAttachEmoji.width, st::historyAttachEmoji.height, st::historyComposeAreaBg[_palette]); + st::historyAttachEmoji.icon[_palette].paint(*_p, attachEmojiLeft + st::historyAttachEmoji.iconPosition.x(), controlsTop + st::historyAttachEmoji.iconPosition.y(), _rect.width()); + + auto pen = st::historyEmojiCircleFg[_palette]->p; + pen.setWidth(st::historyEmojiCircleLine); + pen.setCapStyle(Qt::RoundCap); + _p->setPen(pen); + _p->setBrush(Qt::NoBrush); + + PainterHighQualityEnabler hq(*_p); + auto inner = QRect(QPoint(attachEmojiLeft + (st::historyAttachEmoji.width - st::historyEmojiCircle.width()) / 2, controlsTop + st::historyEmojiCircleTop), st::historyEmojiCircle); + _p->drawEllipse(inner); + + auto fakeMargin = 0; + switch (cScale()) { + case dbisOneAndQuarter: fakeMargin = 1; break; + case dbisOneAndHalf: fakeMargin = 2; break; + case dbisTwo: fakeMargin = 4; break; + } + + auto fieldLeft = _composeArea.x() + st::historyAttach.width + fakeMargin; + auto fieldTop = _composeArea.y() + _composeArea.height() - st::historyAttach.height + st::historySendPadding + fakeMargin; + auto fieldWidth = _composeArea.width() - st::historyAttach.width - st::historySend.width - st::historySendRight - st::historyAttachEmoji.width - 2 * fakeMargin; + auto fieldHeight = st::historySend.height - 2 * st::historySendPadding - 2 * fakeMargin; + auto field = QRect(fieldLeft, fieldTop, fieldWidth, fieldHeight); + _p->fillRect(field, st::historyComposeField.bgColor[_palette]); + + _p->save(); + _p->setClipRect(field); + _p->setFont(st::historyComposeField.font); + _p->setPen(st::historyComposeField.phColor[_palette]); + + auto phRect = QRect(field.x() + st::historyComposeField.textMrg.left() - fakeMargin + st::historyComposeField.phPos.x(), field.y() + st::historyComposeField.textMrg.top() - fakeMargin + st::historyComposeField.phPos.y(), field.width() - st::historyComposeField.textMrg.left() - st::historyComposeField.textMrg.right(), field.height() - st::historyComposeField.textMrg.top() - st::historyComposeField.textMrg.bottom()); + _p->drawText(phRect, lang(lng_message_ph), QTextOption(st::historyComposeField.phAlign)); + + _p->restore(); + _p->setClipping(false); +} + +void Generator::paintDialogs() { + _p->fillRect(_dialogs, st::dialogsBg[_palette]); + + st::dialogsMenuToggle.icon[_palette].paint(*_p, _dialogs.x() + st::dialogsFilterPadding.x() + st::dialogsMenuToggle.iconPosition.x(), _dialogs.y() + st::dialogsFilterPadding.y() + st::dialogsMenuToggle.iconPosition.y(), _rect.width()); + + auto filterLeft = _dialogs.x() + st::dialogsFilterPadding.x() + st::dialogsMenuToggle.width + st::dialogsFilterPadding.x(); + auto filterRight = st::dialogsFilterSkip + st::dialogsFilterPadding.x(); + auto filterWidth = _dialogs.width() - filterLeft - filterRight; + auto filterAreaHeight = st::dialogsFilterPadding.y() + st::dialogsMenuToggle.height + st::dialogsFilterPadding.y(); + auto filterTop = _dialogs.y() + (filterAreaHeight - st::dialogsFilter.height) / 2; + auto filter = QRect(filterLeft, filterTop, filterWidth, st::dialogsFilter.height); + + auto pen = st::dialogsFilter.borderColor[_palette]->p; + pen.setWidth(st::dialogsFilter.borderWidth); + _p->setPen(pen); + _p->setBrush(st::dialogsFilter.bgColor[_palette]); + { + PainterHighQualityEnabler hq(*_p); + _p->drawRoundedRect(QRectF(filter).marginsRemoved(QMarginsF(st::dialogsFilter.borderWidth / 2., st::dialogsFilter.borderWidth / 2., st::dialogsFilter.borderWidth / 2., st::dialogsFilter.borderWidth / 2.)), st::buttonRadius - (st::dialogsFilter.borderWidth / 2.), st::buttonRadius - (st::dialogsFilter.borderWidth / 2.)); + } + + if (!st::dialogsFilter.icon.empty()) { + st::dialogsFilter.icon[_palette].paint(*_p, filter.x(), filter.y(), _rect.width()); + } + + _p->save(); + _p->setClipRect(filter); + auto phRect = QRect(filter.x() + st::dialogsFilter.textMrg.left() + st::dialogsFilter.phPos.x(), filter.y() + st::dialogsFilter.textMrg.top() + st::dialogsFilter.phPos.y(), filter.width() - st::dialogsFilter.textMrg.left() - st::dialogsFilter.textMrg.right(), filter.height() - st::dialogsFilter.textMrg.top() - st::dialogsFilter.textMrg.bottom());; + _p->setFont(st::dialogsFilter.font); + _p->setPen(st::dialogsFilter.phColor[_palette]); + _p->drawText(phRect, lang(lng_dlg_filter), QTextOption(st::dialogsFilter.phAlign)); + _p->restore(); + _p->setClipping(false); + + paintDialogsList(); +} + +void Generator::paintDialogsList() { + _p->setClipRect(_dialogsList); + _rowsTop = _dialogsList.y(); + for (auto &row : _rows) { + paintRow(row); + _rowsTop += st::dialogsRowHeight; + } + _p->setClipping(false); +} + +void Generator::paintRow(const Row &row) { + auto x = _dialogsList.x(); + auto y = _rowsTop; + auto fullWidth = _dialogsList.width(); + auto fullRect = QRect(x, y, fullWidth, st::dialogsRowHeight); + if (row.active || row.selected) { + _p->fillRect(fullRect, row.active ? st::dialogsBgActive[_palette] : st::dialogsBgOver[_palette]); + } + paintUserpic(x + st::dialogsPadding.x(), y + st::dialogsPadding.y(), row.type, row.peerIndex); + + auto nameleft = x + st::dialogsPadding.x() + st::dialogsPhotoSize + st::dialogsPhotoPadding; + auto namewidth = x + fullWidth - nameleft - st::dialogsPadding.x(); + auto rectForName = QRect(nameleft, y + st::dialogsPadding.y() + st::dialogsNameTop, namewidth, st::msgNameFont->height); + + auto chatTypeIcon = ([&row]() -> const style::icon * { + if (row.type == Row::Type::Group) { + return &(row.active ? st::dialogsChatIconActive : (row.selected ? st::dialogsChatIconOver : st::dialogsChatIcon)); + } else if (row.type == Row::Type::Channel) { + return &(row.active ? st::dialogsChannelIconActive : (row.selected ? st::dialogsChannelIconOver : st::dialogsChannelIcon)); + } + return nullptr; + })(); + if (chatTypeIcon) { + (*chatTypeIcon)[_palette].paint(*_p, rectForName.topLeft(), fullWidth); + rectForName.setLeft(rectForName.left() + st::dialogsChatTypeSkip); + } + + auto texttop = y + st::dialogsPadding.y() + st::msgNameFont->height + st::dialogsSkip; + + auto dateWidth = st::dialogsDateFont->width(row.date); + rectForName.setWidth(rectForName.width() - dateWidth - st::dialogsDateSkip); + _p->setFont(st::dialogsDateFont); + _p->setPen(row.active ? st::dialogsDateFgActive[_palette] : (row.selected ? st::dialogsDateFgOver[_palette] : st::dialogsDateFg[_palette])); + _p->drawText(rectForName.left() + rectForName.width() + st::dialogsDateSkip, rectForName.top() + st::msgNameFont->height - st::msgDateFont->descent, row.date); + + auto availableWidth = namewidth; + if (row.unreadCounter) { + auto counter = QString::number(row.unreadCounter); + auto mutedCounter = row.muted; + auto unreadRight = x + fullWidth - st::dialogsPadding.x(); + auto unreadTop = texttop + st::dialogsTextFont->ascent - st::dialogsUnreadFont->ascent - (st::dialogsUnreadHeight - st::dialogsUnreadFont->height) / 2; + + auto unreadWidth = st::dialogsUnreadFont->width(counter); + auto unreadRectWidth = unreadWidth + 2 * st::dialogsUnreadPadding; + auto unreadRectHeight = st::dialogsUnreadHeight; + accumulate_max(unreadRectWidth, unreadRectHeight); + + auto unreadRectLeft = unreadRight - unreadRectWidth; + auto unreadRectTop = unreadTop; + availableWidth -= unreadRectWidth + st::dialogsUnreadPadding; + + style::color bg[] = { + st::dialogsUnreadBg, + st::dialogsUnreadBgOver, + st::dialogsUnreadBgActive, + st::dialogsUnreadBgMuted, + st::dialogsUnreadBgMutedOver, + st::dialogsUnreadBgMutedActive + }; + + auto index = (row.active ? 2 : row.selected ? 1 : 0) + (row.muted ? 3 : 0); + _p->setPen(Qt::NoPen); + _p->setBrush(bg[index][_palette]); + _p->drawRoundedRect(QRectF(unreadRectLeft, unreadRectTop, unreadRectWidth, unreadRectHeight), unreadRectHeight / 2., unreadRectHeight / 2.); + + auto textTop = (unreadRectHeight - st::dialogsUnreadFont->height) / 2; + _p->setFont(st::dialogsUnreadFont); + _p->setPen(row.active ? st::dialogsUnreadFgActive[_palette] : (row.selected ? st::dialogsUnreadFgOver[_palette] : st::dialogsUnreadFg[_palette])); + _p->drawText(unreadRectLeft + (unreadRectWidth - unreadWidth) / 2, unreadRectTop + textTop + st::dialogsUnreadFont->ascent, counter); + } else if (row.pinned) { + auto icon = (row.active ? st::dialogsPinnedIconActive[_palette] : (row.selected ? st::dialogsPinnedIconOver[_palette] : st::dialogsPinnedIcon[_palette])); + icon.paint(*_p, x + fullWidth - st::dialogsPadding.x() - icon.width(), texttop, fullWidth); + availableWidth -= icon.width() + st::dialogsUnreadPadding; + } + auto textRect = QRect(nameleft, texttop, availableWidth, st::dialogsTextFont->height); + setTextPalette(row.active ? st::dialogsTextPaletteActive : (row.selected ? st::dialogsTextPaletteOver : st::dialogsTextPalette)); + _p->setFont(st::dialogsTextFont); + _p->setPen(row.active ? st::dialogsTextFgActive[_palette] : (row.selected ? st::dialogsTextFgOver[_palette] : st::dialogsTextFg[_palette])); + row.text.drawElided(*_p, textRect.left(), textRect.top(), textRect.width(), textRect.height() / st::dialogsTextFont->height); + restoreTextPalette(); + + auto sendStateIcon = ([&row]() -> const style::icon* { + if (row.status == Status::Sent) { + return &(row.active ? st::dialogsSentIconActive : (row.selected ? st::dialogsSentIconOver : st::dialogsSentIcon)); + } else if (row.status == Status::Received) { + return &(row.active ? st::dialogsReceivedIconActive : (row.selected ? st::dialogsReceivedIconOver : st::dialogsReceivedIcon)); + } + return nullptr; + })(); + if (sendStateIcon) { + rectForName.setWidth(rectForName.width() - st::dialogsSendStateSkip); + (*sendStateIcon)[_palette].paint(*_p, rectForName.topLeft() + QPoint(rectForName.width(), 0), fullWidth); + } + _p->setPen(row.active ? st::dialogsNameFgActive[_palette] : (row.selected ? st::dialogsNameFgOver[_palette] : st::dialogsNameFg[_palette])); + row.name.drawElided(*_p, rectForName.left(), rectForName.top(), rectForName.width()); +} + +void Generator::paintBubble(const Bubble &bubble) { + auto height = bubble.height; + if (!bubble.replyName.isEmpty()) { + height += st::msgReplyPadding.top() + st::msgReplyBarSize.height() + st::msgReplyPadding.bottom(); + } + auto isPhoto = !bubble.photo.isNull(); + + auto x = _history.x(); + auto y = _historyBottom - st::msgMargin.bottom() - height; + auto bubbleTop = y; + auto bubbleHeight = height; + if (isPhoto) { + bubbleTop -= st::historyMessageRadius + 1; + bubbleHeight += st::historyMessageRadius + 1; + } + + auto left = bubble.outbg ? st::msgMargin.right() : st::msgMargin.left(); + if (bubble.outbg) { + left += _history.width() - st::msgMargin.left() - st::msgMargin.right() - bubble.width; + } + x += left; + + _p->setPen(Qt::NoPen); + auto tailclip = st::historyMessageRadius + 1; + if (bubble.tail) { + if (bubble.outbg) { + _p->setClipRegion(QRegion(_history) - QRect(x + bubble.width - tailclip, bubbleTop + bubbleHeight - tailclip, tailclip + st::historyMessageRadius, tailclip + st::historyMessageRadius)); + } else { + _p->setClipRegion(QRegion(_history) - QRect(x - st::historyMessageRadius, bubbleTop + bubbleHeight - tailclip, tailclip + st::historyMessageRadius, tailclip + st::historyMessageRadius)); + } + } + auto sh = bubble.outbg ? st::msgOutShadow[_palette] : st::msgInShadow[_palette]; + _p->setBrush(sh); + _p->drawRoundedRect(x, bubbleTop + st::msgShadow, bubble.width, bubbleHeight, st::historyMessageRadius, st::historyMessageRadius); + auto bg = bubble.outbg ? st::msgOutBg[_palette] : st::msgInBg[_palette]; + _p->setBrush(bg); + _p->drawRoundedRect(x, bubbleTop, bubble.width, bubbleHeight, st::historyMessageRadius, st::historyMessageRadius); + if (bubble.tail) { + _p->setClipRect(_history); + if (bubble.outbg) { + _p->fillRect(QRect(x + bubble.width - tailclip, bubbleTop + bubbleHeight - tailclip, tailclip, tailclip), bg); + _p->fillRect(QRect(x + bubble.width - tailclip, bubbleTop + bubbleHeight, tailclip + st::historyBubbleTailOutRight.width(), st::msgShadow), sh); + st::historyBubbleTailOutRight[_palette].paint(*_p, x + bubble.width, bubbleTop + bubbleHeight - st::historyBubbleTailOutRight.height(), _rect.width()); + } else { + _p->fillRect(QRect(x, bubbleTop + bubbleHeight - tailclip, tailclip, tailclip), bg); + _p->fillRect(QRect(x - st::historyBubbleTailInLeft.width(), bubbleTop + bubbleHeight, tailclip + st::historyBubbleTailInLeft.width(), st::msgShadow), sh); + st::historyBubbleTailInLeft[_palette].paint(*_p, x - st::historyBubbleTailInLeft.width(), bubbleTop + bubbleHeight - st::historyBubbleTailOutRight.height(), _rect.width()); + } + } + + auto trect = QRect(x, y, bubble.width, bubble.height); + if (isPhoto) { + trect = trect.marginsRemoved(QMargins(st::msgPadding.left(), st::mediaCaptionSkip, st::msgPadding.right(), st::msgPadding.bottom())); + } else { + trect = trect.marginsRemoved(st::msgPadding); + } + if (!bubble.replyName.isEmpty()) { + auto h = st::msgReplyPadding.top() + st::msgReplyBarSize.height() + st::msgReplyPadding.bottom(); + + auto bar = (bubble.outbg ? st::msgOutReplyBarColor[_palette] : st::msgInReplyBarColor[_palette]); + auto rbar = rtlrect(trect.x() + st::msgReplyBarPos.x(), trect.y() + st::msgReplyPadding.top() + st::msgReplyBarPos.y(), st::msgReplyBarSize.width(), st::msgReplyBarSize.height(), _rect.width()); + _p->fillRect(rbar, bar); + + _p->setPen(bubble.outbg ? st::msgOutServiceFg[_palette] : st::msgInServiceFg[_palette]); + bubble.replyName.drawLeftElided(*_p, trect.x() + st::msgReplyBarSkip, trect.y() + st::msgReplyPadding.top(), bubble.width - st::msgReplyBarSkip, _rect.width()); + + _p->setPen(bubble.outbg ? st::historyTextOutFg[_palette] : st::historyTextInFg[_palette]); + bubble.replyText.drawLeftElided(*_p, trect.x() + st::msgReplyBarSkip, trect.y() + st::msgReplyPadding.top() + st::msgServiceNameFont->height, bubble.width - st::msgReplyBarSkip, _rect.width()); + + trect.setY(trect.y() + h); + } + + if (!bubble.text.isEmpty()) { + setTextPalette(bubble.outbg ? st::outTextPalette : st::inTextPalette); + _p->setPen(bubble.outbg ? st::historyTextOutFg[_palette] : st::historyTextInFg[_palette]); + _p->setFont(st::msgFont); + bubble.text.draw(*_p, trect.x(), trect.y(), trect.width()); + } else if (!bubble.waveform.isEmpty()) { + auto nameleft = x + st::msgFilePadding.left() + st::msgFileSize + st::msgFilePadding.right(); + auto nametop = y + st::msgFileNameTop; + auto nameright = st::msgFilePadding.left(); + auto statustop = y + st::msgFileStatusTop; + auto bottom = y + st::msgFilePadding.top() + st::msgFileSize + st::msgFilePadding.bottom(); + + auto inner = rtlrect(x + st::msgFilePadding.left(), y + st::msgFilePadding.top(), st::msgFileSize, st::msgFileSize, _rect.width()); + _p->setPen(Qt::NoPen); + _p->setBrush(bubble.outbg ? st::msgFileOutBg[_palette] : st::msgFileInBg[_palette]); + + _p->drawEllipse(inner); + + auto icon = ([&bubble] { + return &(bubble.outbg ? st::historyFileOutPlay : st::historyFileInPlay); + })(); + (*icon)[_palette].paintInCenter(*_p, inner); + + auto namewidth = x + bubble.width - nameleft - nameright; + + // rescale waveform by going in waveform.size * bar_count 1D grid + auto active = bubble.outbg ? st::msgWaveformOutActive[_palette] : st::msgWaveformInActive[_palette]; + auto inactive = bubble.outbg ? st::msgWaveformOutInactive[_palette] : st::msgWaveformInInactive[_palette]; + int32 wf_size = bubble.waveform.size(), availw = namewidth + st::msgWaveformSkip; + int32 bar_count = wf_size; + int32 max_delta = st::msgWaveformMax - st::msgWaveformMin; + auto wave_bottom = y + st::msgFilePadding.top() + st::msgWaveformMax; + _p->setPen(Qt::NoPen); + auto norm_value = uchar(31); + for (auto i = 0, bar_x = 0; i != wf_size; ++i) { + uchar value = bubble.waveform[i]; + auto max_value = value; + int32 bar_value = ((max_value * max_delta) + ((norm_value + 1) / 2)) / (norm_value + 1); + + if (i >= bubble.waveactive) { + _p->fillRect(nameleft + bar_x, wave_bottom - bar_value, st::msgWaveformBar, st::msgWaveformMin + bar_value, inactive); + } else { + _p->fillRect(nameleft + bar_x, wave_bottom - bar_value, st::msgWaveformBar, st::msgWaveformMin + bar_value, active); + } + bar_x += st::msgWaveformBar + st::msgWaveformSkip; + } + + auto status = bubble.outbg ? st::mediaOutFg[_palette] : st::mediaInFg[_palette]; + _p->setFont(st::normalFont); + _p->setPen(status); + _p->drawTextLeft(nameleft, statustop, _rect.width(), bubble.wavestatus); + } + + _p->setFont(st::msgDateFont); + auto infoRight = x + bubble.width - st::msgPadding.right() + st::msgDateDelta.x(); + auto infoBottom = y + height - st::msgPadding.bottom() + st::msgDateDelta.y(); + _p->setPen(bubble.outbg ? st::msgOutDateFg[_palette] : st::msgInDateFg[_palette]); + auto infoWidth = computeInfoWidth(bubble.status, bubble.date); + + auto dateX = infoRight - infoWidth; + auto dateY = infoBottom - st::msgDateFont->height; + _p->drawText(dateX, dateY + st::msgDateFont->ascent, bubble.date); + auto icon = ([&bubble]() -> const style::icon * { + if (bubble.status == Status::Sent) { + return &st::historySentIcon; + } else if (bubble.status == Status::Received) { + return &st::historyReceivedIcon; + } + return nullptr; + })(); + if (icon) { + (*icon)[_palette].paint(*_p, QPoint(infoRight, infoBottom) + st::historySendStatePosition, _rect.width()); + } + + _historyBottom = y - (bubble.attached ? st::msgMarginTopAttached : st::msgMargin.top()); + + if (isPhoto) { + auto image = bubble.photo.scaled(bubble.photoWidth * cIntRetinaFactor(), bubble.photoHeight * cIntRetinaFactor(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + image.setDevicePixelRatio(cRetinaFactor()); + _p->drawImage(x, y - bubble.photoHeight, image); + _historyBottom -= bubble.photoHeight; + } +} + +void Generator::paintService(QString text) { + auto bubbleHeight = st::msgServicePadding.top() + st::msgServiceFont->height + st::msgServicePadding.bottom(); + auto bubbleTop = _historyBottom - st::msgServiceMargin.bottom() - bubbleHeight; + auto textWidth = st::msgServiceFont->width(text); + auto bubbleWidth = st::msgServicePadding.left() + textWidth + st::msgServicePadding.right(); + auto radius = bubbleHeight / 2; + _p->setPen(Qt::NoPen); + _p->setBrush(st::msgServiceBg[_palette]); + auto bubbleLeft = _history.x() + (_history.width() - bubbleWidth) / 2; + _p->drawRoundedRect(bubbleLeft, bubbleTop, bubbleWidth, bubbleHeight, radius, radius); + _p->setPen(st::msgServiceFg[_palette]); + _p->drawText(bubbleLeft + st::msgServicePadding.left(), bubbleTop + st::msgServicePadding.top() + st::msgServiceFont->ascent, text); + _historyBottom = bubbleTop - st::msgServiceMargin.top(); +} + +void Generator::paintUserpic(int x, int y, Row::Type type, int index) { + const style::icon *userIcons[] = { + &st::historyPeer1UserpicPerson, + &st::historyPeer2UserpicPerson, + &st::historyPeer3UserpicPerson, + &st::historyPeer4UserpicPerson, + &st::historyPeer5UserpicPerson, + &st::historyPeer6UserpicPerson, + &st::historyPeer7UserpicPerson, + &st::historyPeer8UserpicPerson, + }; + const style::icon *chatIcons[] = { + &st::historyPeer1UserpicChat, + &st::historyPeer2UserpicChat, + &st::historyPeer3UserpicChat, + &st::historyPeer4UserpicChat, + }; + const style::icon *channelIcons[] = { + &st::historyPeer1UserpicChannel, + &st::historyPeer2UserpicChannel, + &st::historyPeer3UserpicChannel, + &st::historyPeer4UserpicChannel, + }; + auto userpic = (type == Row::Type::User) ? userIcons[index % base::array_size(userIcons)] : (type == Row::Type::Group) ? chatIcons[index % base::array_size(chatIcons)] : channelIcons[index % base::array_size(channelIcons)]; + + auto image = QImage(userpic->width() * cIntRetinaFactor(), userpic->height() * cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied); + image.setDevicePixelRatio(cRetinaFactor()); + { + Painter p(&image); + userpic->paint(p, 0, 0, userpic->width()); + } + image = std_::move(image).scaled(st::dialogsPhotoSize * cIntRetinaFactor(), st::dialogsPhotoSize * cIntRetinaFactor(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); + Images::prepareCircle(image); + _p->drawImage(rtl() ? (_rect.width() - x - st::dialogsPhotoSize) : x, y, image); +} + +void Generator::paintHistoryShadows() { + _p->fillRect(_history.x() + st::lineWidth, _history.y(), _history.width() - st::lineWidth, st::lineWidth, st::shadowFg[_palette]); + _p->fillRect(_history.x() + st::lineWidth, _history.y() + _history.height() - st::lineWidth, _history.width() - st::lineWidth, st::lineWidth, st::shadowFg[_palette]); + _p->fillRect(_history.x(), _body.y(), st::lineWidth, _body.height(), st::shadowFg[_palette]); +} + +void Generator::setTextPalette(const style::TextPalette &st) { + _textPalette.linkFg = st.linkFg[_palette].clone(); + _textPalette.monoFg = st.monoFg[_palette].clone(); + _textPalette.selectBg = st.selectBg[_palette].clone(); + _textPalette.selectOverlay = st.selectOverlay[_palette].clone(); + _p->setTextPalette(_textPalette); +} + +void Generator::restoreTextPalette() { + _p->restoreTextPalette(); +} + +} // namespace + +std_::unique_ptr GeneratePreview(const QString &filepath, const CurrentData &data) { + auto result = std_::make_unique(); + result->path = filepath; + if (!LoadFromFile(filepath, &result->instance, &result->content)) { + return std_::unique_ptr(); + } + result->preview = Generator(result->instance, data).generate(); + return std_::move(result); +} + +int DefaultPreviewTitleHeight() { + return st::titleHeight; +} + +void DefaultPreviewWindowTitle(Painter &p, const style::palette &palette, QRect body, int outerWidth) { + auto titleRect = QRect(body.x(), body.y() - st::titleHeight, body.width(), st::titleHeight); + p.fillRect(titleRect, QColor(0, 0, 0)); + p.fillRect(titleRect, st::titleBg[palette]); + auto right = st::titleButtonClose.width; + st::titleButtonClose.icon[palette].paint(p, titleRect.x() + titleRect.width() - right + st::titleButtonClose.iconPosition.x(), titleRect.y() + st::titleButtonClose.iconPosition.y(), outerWidth); + right += st::titleButtonMaximize.width; + st::titleButtonMaximize.icon[palette].paint(p, titleRect.x() + titleRect.width() - right + st::titleButtonMaximize.iconPosition.x(), titleRect.y() + st::titleButtonMaximize.iconPosition.y(), outerWidth); + right += st::titleButtonMinimize.width; + st::titleButtonMinimize.icon[palette].paint(p, titleRect.x() + titleRect.width() - right + st::titleButtonMinimize.iconPosition.x(), titleRect.y() + st::titleButtonMinimize.iconPosition.y(), outerWidth); + p.fillRect(titleRect.x(), titleRect.y() + titleRect.height() - st::lineWidth, titleRect.width(), st::lineWidth, st::titleShadow[palette]); +} + +void DefaultPreviewWindowFramePaint(QImage &preview, const style::palette &palette, QRect body, int outerWidth) { + auto mask = QImage(st::windowShadow.size() * cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied); + mask.setDevicePixelRatio(cRetinaFactor()); + { + Painter p(&mask); + p.setCompositionMode(QPainter::CompositionMode_Source); + st::windowShadow.paint(p, 0, 0, st::windowShadow.width(), QColor(0, 0, 0)); + } + auto maxSize = 0; + auto currentInt = static_cast(0); + auto lastLineInts = reinterpret_cast(mask.constBits() + (mask.height() - 1) * mask.bytesPerLine()); + for (auto end = lastLineInts + mask.width(); lastLineInts != end; ++lastLineInts) { + if (*lastLineInts < currentInt) { + break; + } + currentInt = *lastLineInts; + ++maxSize; + } + if (cRetina() && (maxSize % cIntRetinaFactor())) { + maxSize -= (maxSize % cIntRetinaFactor()); + } + auto size = maxSize / cIntRetinaFactor(); + auto bottom = size; + auto left = size - st::windowShadowShift; + auto right = left; + auto top = size - 2 * st::windowShadowShift; + + auto sprite = st::windowShadow[palette]; + auto topLeft = QImage(sprite.size() * cIntRetinaFactor(), QImage::Format_ARGB32_Premultiplied); + topLeft.setDevicePixelRatio(cRetinaFactor()); + { + Painter p(&topLeft); + p.setCompositionMode(QPainter::CompositionMode_Source); + sprite.paint(p, 0, 0, sprite.width()); + } + auto width = sprite.width(); + auto height = sprite.height(); + auto topRight = topLeft.mirrored(true, false); + auto bottomRight = topLeft.mirrored(true, true); + auto bottomLeft = topLeft.mirrored(false, true); + + Painter p(&preview); + DefaultPreviewWindowTitle(p, palette, body, outerWidth); + + auto inner = QRect(body.x(), body.y() - st::titleHeight, body.width(), body.height() + st::titleHeight); + p.setClipRegion(QRegion(inner.marginsAdded(QMargins(size, size, size, size))) - inner); + p.drawImage(inner.x() - left, inner.y() - top, topLeft); + p.drawImage(inner.x() + inner.width() + right - width, inner.y() - top, topRight); + p.drawImage(inner.x() + inner.width() + right - width, inner.y() + inner.height() + bottom - height, bottomRight); + p.drawImage(inner.x() - left, inner.y() + inner.height() + bottom - height, bottomLeft); + p.drawImage(QRect(inner.x() - left, inner.y() - top + height, left, top + inner.height() + bottom - 2 * height), topLeft, QRect(0, topLeft.height() - cIntRetinaFactor(), left * cIntRetinaFactor(), cIntRetinaFactor())); + p.drawImage(QRect(inner.x() - left + width, inner.y() - top, left + inner.width() + right - 2 * width, top), topLeft, QRect(topLeft.width() - cIntRetinaFactor(), 0, cIntRetinaFactor(), top * cIntRetinaFactor())); + p.drawImage(QRect(inner.x() + inner.width(), inner.y() - top + height, right, top + inner.height() + bottom - 2 * height), topRight, QRect(topRight.width() - right * cIntRetinaFactor(), topRight.height() - cIntRetinaFactor(), right * cIntRetinaFactor(), cIntRetinaFactor())); + p.drawImage(QRect(inner.x() - left + width, inner.y() + inner.height(), left + inner.width() + right - 2 * width, bottom), bottomRight, QRect(0, bottomRight.height() - bottom * cIntRetinaFactor(), cIntRetinaFactor(), bottom * cIntRetinaFactor())); +} + +} // namespace Theme +} // namespace Window diff --git a/Telegram/Resources/basic_types.style b/Telegram/SourceFiles/window/window_theme_preview.h similarity index 72% rename from Telegram/Resources/basic_types.style rename to Telegram/SourceFiles/window/window_theme_preview.h index 07875c2a9..882e2ece5 100644 --- a/Telegram/Resources/basic_types.style +++ b/Telegram/SourceFiles/window/window_theme_preview.h @@ -18,28 +18,20 @@ to link the code of portions of this program with the OpenSSL library. Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org */ +#pragma once -TextStyle { - linkFlags: font; - linkFlagsOver: font; - linkFg: color; - linkFgDown: color; - monoFg: color; - selectBg: color; - selectOverlay: color; - lineHeight: pixels; -} +#include "window/window_theme.h" -Tooltip { - textBg: color; - textFg: color; - textFont: font; - textBorder: color; - textPadding: margins; +namespace Window { +namespace Theme { - shift: point; - skip: pixels; +struct CurrentData { + int32 backgroundId = 0; + QPixmap backgroundImage; + bool backgroundTiled = false; +}; - widthMax: pixels; - linesMax: int; -} +std_::unique_ptr GeneratePreview(const QString &filepath, const CurrentData &data); + +} // namespace Theme +} // namespace Window diff --git a/Telegram/SourceFiles/window/window_theme_warning.cpp b/Telegram/SourceFiles/window/window_theme_warning.cpp index f52855174..250291fc6 100644 --- a/Telegram/SourceFiles/window/window_theme_warning.cpp +++ b/Telegram/SourceFiles/window/window_theme_warning.cpp @@ -38,7 +38,7 @@ constexpr int kWaitBeforeRevertMs = 15999; WarningWidget::WarningWidget(QWidget *parent) : TWidget(parent) , _secondsLeft(kWaitBeforeRevertMs / 1000) , _keepChanges(this, lang(lng_theme_keep_changes), st::defaultBoxButton) -, _revert(this, lang(lng_theme_revert), st::cancelBoxButton) { +, _revert(this, lang(lng_theme_revert), st::defaultBoxButton) { _keepChanges->setClickedCallback([] { Window::Theme::KeepApplied(); }); _revert->setClickedCallback([] { Window::Theme::Revert(); }); _timer.setTimeoutHandler([this] { handleTimer(); }); diff --git a/Telegram/gyp/Telegram.gyp b/Telegram/gyp/Telegram.gyp index 5c746da56..28d112845 100644 --- a/Telegram/gyp/Telegram.gyp +++ b/Telegram/gyp/Telegram.gyp @@ -36,7 +36,6 @@ 'style_files': [ '<(res_loc)/colors.palette', '<(res_loc)/basic.style', - '<(res_loc)/basic_types.style', '<(src_loc)/boxes/boxes.style', '<(src_loc)/dialogs/dialogs.style', '<(src_loc)/history/history.style', @@ -221,6 +220,8 @@ '<(src_loc)/core/single_timer.cpp', '<(src_loc)/core/single_timer.h', '<(src_loc)/core/stl_subset.h', + '<(src_loc)/core/task_queue.h', + '<(src_loc)/core/task_queue.cpp', '<(src_loc)/core/type_traits.h', '<(src_loc)/core/utils.cpp', '<(src_loc)/core/utils.h', @@ -566,6 +567,8 @@ '<(src_loc)/window/window_main_menu.h', '<(src_loc)/window/window_theme.cpp', '<(src_loc)/window/window_theme.h', + '<(src_loc)/window/window_theme_preview.cpp', + '<(src_loc)/window/window_theme_preview.h', '<(src_loc)/window/window_theme_warning.cpp', '<(src_loc)/window/window_theme_warning.h', '<(src_loc)/window/window_title.h', diff --git a/Telegram/prepare.bat b/Telegram/prepare.bat new file mode 100644 index 000000000..0c5d63d8c --- /dev/null +++ b/Telegram/prepare.bat @@ -0,0 +1,120 @@ +@echo off +setlocal enabledelayedexpansion +set "FullScriptPath=%~dp0" +set "FullExecPath=%cd%" + +set "Command=%1" +if "%Command%" == "module" ( + call :write_module %2 + exit /b %errorlevel% +) else if "%Command%" == "header" ( + call :write_header %2 + exit /b %errorlevel% +) else if "%Command%" == "source" ( + call :write_source %2 + exit /b %errorlevel% +) + +cd gyp +call refresh.bat +cd .. + +exit /b + +:write_module +( + set "CommandPath=%1" + set "CommandPathUnix=!CommandPath:\=/!" + if "!CommandPathUnix!" == "" ( + echo Provide module path. + exit /b 1 + ) + echo Generating module !CommandPathUnix!.. + call prepare.bat header !CommandPathUnix! + call prepare.bat source !CommandPathUnix! + exit /b +) + +:write_header +( + set "CommandPath=%1" + set "CommandPathUnix=!CommandPath:\=/!" + set "CommandPathWin=!CommandPath:/=\!" + + if "!CommandPathUnix!" == "" ( + echo Provide header path. + exit /b 1 + ) else if exist "SourceFiles\!CommandPathWin!.h" ( + echo This header already exists. + exit /b 1 + ) + echo Generating header !CommandPathUnix!.h.. + mkdir "SourceFiles\!CommandPathWin!.h" + rmdir "SourceFiles\!CommandPathWin!.h" + + call :write_comment !CommandPathWin!.h + set "header1=#pragma once" + ( + echo !header1! + echo. + )>> "SourceFiles\!CommandPathWin!.h" + exit /b +) + +:write_source +( + set "CommandPath=%1" + set "CommandPathUnix=!CommandPath:\=/!" + set "CommandPathWin=!CommandPath:/=\!" + + if "!CommandPathUnix!" == "" ( + echo Provide source path. + exit /b 1 + ) else if exist "SourceFiles\!CommandPathWin!.cpp" ( + echo This source already exists. + exit /b 1 + ) + echo Generating source !CommandPathUnix!.cpp.. + mkdir "SourceFiles\!CommandPathWin!.cpp" + rmdir "SourceFiles\!CommandPathWin!.cpp" + + call :write_comment !CommandPathWin!.cpp + set "quote=""" + set "quote=!quote:~0,1!" + set "source1=#include !quote!stdafx.h!quote!" + set "source2=#include !quote!!CommandPathUnix!.h!quote!" + ( + echo !source1! + echo !source2! + echo. + )>> "SourceFiles\!CommandPathWin!.cpp" + exit /b +) + +:write_comment +( + set "Path=%1" + ( + echo /* + echo This file is part of Telegram Desktop, + echo the official desktop version of Telegram messaging app, see https://telegram.org + echo. + echo Telegram Desktop is free software: you can redistribute it and/or modify + echo it under the terms of the GNU General Public License as published by + echo the Free Software Foundation, either version 3 of the License, or + echo ^(at your option^) any later version. + echo. + echo It is distributed in the hope that it will be useful, + echo but WITHOUT ANY WARRANTY; without even the implied warranty of + echo MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + echo GNU General Public License for more details. + echo. + echo In addition, as a special exception, the copyright holders give permission + echo to link the code of portions of this program with the OpenSSL library. + echo. + echo Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE + echo Copyright ^(c^) 2014-2016 John Preston, https://desktop.telegram.org + echo */ + )> "SourceFiles\!Path!" + exit /b +)