From f7374aa7b7a75d2ed3b2b9222b4d6990967e3dab Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 28 Oct 2016 00:19:38 +0300 Subject: [PATCH] Almost all icons moved from sprite. It is a broken build, some of sprite()s are in stickers.style file. --- Telegram/Resources/art/sprite.png | Bin 22300 -> 5286 bytes Telegram/Resources/art/sprite_200x.png | Bin 48811 -> 10769 bytes Telegram/Resources/basic.style | 113 ++-------- .../{box_search_cancel.png => box_cancel.png} | Bin ...search_cancel@2x.png => box_cancel@2x.png} | Bin .../Resources/icons/dialogs_add_contact.png | Bin 0 -> 124 bytes .../icons/dialogs_add_contact@2x.png | Bin 0 -> 163 bytes .../Resources/icons/dialogs_cancel_search.png | Bin 0 -> 197 bytes .../icons/dialogs_cancel_search@2x.png | Bin 0 -> 273 bytes .../Resources/icons/history_action_edit.png | Bin 0 -> 445 bytes .../icons/history_action_edit@2x.png | Bin 0 -> 1011 bytes .../icons/history_action_forward.png | Bin 0 -> 311 bytes .../icons/history_action_forward@2x.png | Bin 0 -> 600 bytes .../Resources/icons/history_action_reply.png | Bin 0 -> 446 bytes .../icons/history_action_reply@2x.png | Bin 0 -> 864 bytes Telegram/Resources/icons/media_video_play.png | Bin 0 -> 419 bytes .../Resources/icons/media_video_play@2x.png | Bin 0 -> 720 bytes .../Resources/icons/media_video_play_bg.png | Bin 0 -> 899 bytes .../icons/media_video_play_bg@2x.png | Bin 0 -> 2591 bytes .../Resources/icons/media_youtube_play.png | Bin 0 -> 286 bytes .../Resources/icons/media_youtube_play@2x.png | Bin 0 -> 530 bytes .../Resources/icons/media_youtube_play_bg.png | Bin 0 -> 812 bytes .../icons/media_youtube_play_bg@2x.png | Bin 0 -> 1731 bytes Telegram/Resources/icons/new_chat_photo.png | Bin 0 -> 642 bytes .../Resources/icons/new_chat_photo@2x.png | Bin 0 -> 1268 bytes .../icons/send_control_silent_off.png | Bin 0 -> 518 bytes .../icons/send_control_silent_off@2x.png | Bin 0 -> 1029 bytes .../icons/send_control_silent_on.png | Bin 0 -> 685 bytes .../icons/send_control_silent_on@2x.png | Bin 0 -> 1487 bytes Telegram/Resources/icons/settings_close.png | Bin 187 -> 0 bytes .../Resources/icons/settings_close@2x.png | Bin 296 -> 0 bytes Telegram/Resources/icons/simple_close.png | Bin 0 -> 178 bytes Telegram/Resources/icons/simple_close@2x.png | Bin 0 -> 354 bytes Telegram/SourceFiles/boxes/addcontactbox.cpp | 2 +- Telegram/SourceFiles/boxes/boxes.style | 32 ++- .../SourceFiles/boxes/notifications_box.cpp | 3 +- Telegram/SourceFiles/boxes/sessionsbox.cpp | 16 +- Telegram/SourceFiles/boxes/sessionsbox.h | 6 +- Telegram/SourceFiles/boxes/stickers_box.cpp | 1 + Telegram/SourceFiles/dialogs/dialogs.style | 26 ++- Telegram/SourceFiles/dialogswidget.cpp | 51 ++--- Telegram/SourceFiles/dialogswidget.h | 9 +- .../history/field_autocomplete.cpp | 4 +- Telegram/SourceFiles/history/history.style | 39 +++- .../history/history_media_types.cpp | 4 +- Telegram/SourceFiles/historywidget.cpp | 212 +++++++++--------- Telegram/SourceFiles/historywidget.h | 28 ++- Telegram/SourceFiles/intro/intro.style | 7 +- Telegram/SourceFiles/intro/introsignup.cpp | 2 +- Telegram/SourceFiles/overviewwidget.cpp | 20 +- Telegram/SourceFiles/overviewwidget.h | 3 +- Telegram/SourceFiles/settings/settings.style | 6 +- Telegram/SourceFiles/stickers/emoji_pan.cpp | 6 +- Telegram/SourceFiles/stickers/emoji_pan.h | 2 +- Telegram/SourceFiles/stickers/stickers.style | 9 + .../SourceFiles/ui/buttons/icon_button.cpp | 6 +- Telegram/SourceFiles/ui/widgets/widgets.style | 6 + .../window/notifications_manager_default.h | 2 +- Telegram/SourceFiles/window/window.style | 15 +- 59 files changed, 316 insertions(+), 314 deletions(-) rename Telegram/Resources/icons/{box_search_cancel.png => box_cancel.png} (100%) rename Telegram/Resources/icons/{box_search_cancel@2x.png => box_cancel@2x.png} (100%) create mode 100644 Telegram/Resources/icons/dialogs_add_contact.png create mode 100644 Telegram/Resources/icons/dialogs_add_contact@2x.png create mode 100644 Telegram/Resources/icons/dialogs_cancel_search.png create mode 100644 Telegram/Resources/icons/dialogs_cancel_search@2x.png create mode 100644 Telegram/Resources/icons/history_action_edit.png create mode 100644 Telegram/Resources/icons/history_action_edit@2x.png create mode 100644 Telegram/Resources/icons/history_action_forward.png create mode 100644 Telegram/Resources/icons/history_action_forward@2x.png create mode 100644 Telegram/Resources/icons/history_action_reply.png create mode 100644 Telegram/Resources/icons/history_action_reply@2x.png create mode 100644 Telegram/Resources/icons/media_video_play.png create mode 100644 Telegram/Resources/icons/media_video_play@2x.png create mode 100644 Telegram/Resources/icons/media_video_play_bg.png create mode 100644 Telegram/Resources/icons/media_video_play_bg@2x.png create mode 100644 Telegram/Resources/icons/media_youtube_play.png create mode 100644 Telegram/Resources/icons/media_youtube_play@2x.png create mode 100644 Telegram/Resources/icons/media_youtube_play_bg.png create mode 100644 Telegram/Resources/icons/media_youtube_play_bg@2x.png create mode 100644 Telegram/Resources/icons/new_chat_photo.png create mode 100644 Telegram/Resources/icons/new_chat_photo@2x.png create mode 100644 Telegram/Resources/icons/send_control_silent_off.png create mode 100644 Telegram/Resources/icons/send_control_silent_off@2x.png create mode 100644 Telegram/Resources/icons/send_control_silent_on.png create mode 100644 Telegram/Resources/icons/send_control_silent_on@2x.png delete mode 100644 Telegram/Resources/icons/settings_close.png delete mode 100644 Telegram/Resources/icons/settings_close@2x.png create mode 100644 Telegram/Resources/icons/simple_close.png create mode 100644 Telegram/Resources/icons/simple_close@2x.png diff --git a/Telegram/Resources/art/sprite.png b/Telegram/Resources/art/sprite.png index e8c0edafc83ff70bc7fb89b08fae1f6d319de58f..d76672e0b11f672fbcdc43c98d539ad48c70b9e1 100644 GIT binary patch literal 5286 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 literal 48811 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 VO!Xy8_;F%J5sK;xdGZ$i{|kilPSgMZ diff --git a/Telegram/Resources/basic.style b/Telegram/Resources/basic.style index a3cda0de00..cc07382adc 100644 --- a/Telegram/Resources/basic.style +++ b/Telegram/Resources/basic.style @@ -1027,54 +1027,6 @@ btnUnblock: flatButton(btnSend) { downColor: #db6352; } -silentToggle: flatCheckbox { - textColor: black; - bgColor: white; - disColor: black; - - width: 33px; - height: 46px; - duration: 200; - bgFunc: transition(easeOutCirc); - cursor: cursor(pointer); - - font: normalFont; - - imageRect: sprite(354px, 242px, 21px, 21px); - chkImageRect: sprite(354px, 221px, 21px, 21px); - overImageRect: sprite(375px, 242px, 21px, 21px); - chkOverImageRect: sprite(375px, 221px, 21px, 21px); - disImageRect: sprite(354px, 242px, 21px, 21px); - chkDisImageRect: sprite(354px, 221px, 21px, 21px); - - imagePos: point(6px, 12px); -} - -replySkip: 51px; -replyColor: #377aae; -replyHeight: 49px; -replyTop: 8px; -replyBottom: 6px; -replyIconPos: point(13px, 13px); -replyIcon: sprite(343px, 197px, 24px, 24px); -editIcon: sprite(371px, 286px, 24px, 24px); -replyCancel: iconedButton(btnDefIconed) { - icon: sprite(165px, 24px, 14px, 14px); - iconPos: point(17px, 17px); - downIcon: sprite(165px, 24px, 14px, 14px); - downIconPos: point(17px, 18px); - bgColor: white; - overBgColor: white; - width: 49px; - height: 49px; -} -inlineBotCancel: iconedButton(replyCancel) { - height: 46px; - iconPos: point(-1px, 16px); // < 0 means draw in the center of the button - downIconPos: point(-1px, 17px); -} -forwardIcon: sprite(368px, 197px, 24px, 24px); - historyScroll: flatScroll(scrollDef) { barColor: #89a0b47a; bgColor: #89a0b44c; @@ -1179,31 +1131,7 @@ contactsScroll: flatScroll(boxScroll) { deltab: 0px; } -btnAddContact: iconedButton(btnDefIconed) { - icon: sprite(188px, 93px, 18px, 18px); - iconPos: point(8px, 8px); - downIcon: sprite(188px, 93px, 18px, 18px); - downIconPos: point(8px, 9px); - - bgColor: transparent; - overBgColor: transparent; - width: 36px; - height: 36px; -} -btnCancelSearch: iconedButton(btnAddContact) { - icon: sprite(188px, 43px, 18px, 18px); - downIcon: sprite(188px, 43px, 18px, 18px); -} - -simpleClose: iconedButton(btnDefIconed) { - icon: sprite(167px, 130px, 10px, 10px); - iconPos: point(10px, 10px); - downIcon: sprite(167px, 130px, 10px, 10px); - downIconPos: point(10px, 11px); - - width: 30px; - height: 30px; -} +simpleCloseIcon: icon {{ "simple_close", #000000 }}; boxPhotoPadding: margins(28px, 28px, 28px, 18px); boxPhotoCompressedPadding: margins(0px, 2px, 0px, 22px); @@ -1243,7 +1171,7 @@ newGroupLinkFont: font(16px); newGroupPhotoSize: 76px; newGroupPhotoBg: #4eb5f0; newGroupPhotoBgOver: #3fa9e7; -newGroupPhotoIcon: sprite(74px, 104px, 30px, 27px); +newGroupPhotoIcon: icon {{ "new_chat_photo", #ffffff }}; newGroupPhotoIconPosition: point(23px, 25px); newGroupNamePosition: point(27px, 20px); @@ -1449,8 +1377,14 @@ usernameTextStyle: textStyle(defaultTextStyle) { } usernameDefaultFg: #777; -youtubeIcon: sprite(116px, 338px, 72px, 50px); -videoIcon: sprite(0px, 340px, 60px, 60px); +youtubeIcon: icon { + { "media_youtube_play_bg", #e83131c8 }, + { "media_youtube_play", #ffffff, point(24px, 12px) }, +}; +videoIcon: icon { + { "media_video_play_bg", #0000007f }, + { "media_video_play", #ffffff, point(12px, 12px) }, +}; locationSize: size(320px, 240px); boxOptionListPadding: margins(2px, 20px, 2px, 2px); @@ -1501,30 +1435,6 @@ mentionFgOver: #707070; mentionFgActive: #0080c0; mentionFgOverActive: #0077b3; -sessionsScroll: flatScroll(boxScroll) { - round: 2px; - deltax: 5px; - width: 14px; -} -sessionsHeight: 440px; -sessionHeight: 70px; -sessionCurrentPadding: margins(0px, 7px, 0px, 4px); -sessionCurrentHeight: 118px; -sessionPadding: margins(21px, 10px, 21px, 0px); -sessionNameFont: msgNameFont; -sessionActiveFont: msgDateFont; -sessionActiveColor: #aaa; -sessionInfoFont: msgFont; -sessionInfoColor: #888888; -sessionTerminateTop: 30px; -sessionTerminateSkip: 18px; -sessionTerminate: iconedButton(simpleClose) { - iconPos: point(3px, 3px); - downIconPos: point(3px, 4px); - width: 16px; - height: 16px; -} - webPageLeft: 10px; webPageBar: 2px; webPageTitleFont: semiboldFont; @@ -1575,3 +1485,6 @@ infoButton: PeerAvatarButton { // forward declaration for single "title_previous" usage. profileTopBarBackIconFg: #0290d7; profileTopBarBackIcon: icon {{ "title_previous", profileTopBarBackIconFg }}; + +boxCancelIcon: icon {{ "box_cancel", #000000 }}; +historyReplyCancelIcon: icon {{ "box_cancel", #adadad }}; diff --git a/Telegram/Resources/icons/box_search_cancel.png b/Telegram/Resources/icons/box_cancel.png similarity index 100% rename from Telegram/Resources/icons/box_search_cancel.png rename to Telegram/Resources/icons/box_cancel.png diff --git a/Telegram/Resources/icons/box_search_cancel@2x.png b/Telegram/Resources/icons/box_cancel@2x.png similarity index 100% rename from Telegram/Resources/icons/box_search_cancel@2x.png rename to Telegram/Resources/icons/box_cancel@2x.png diff --git a/Telegram/Resources/icons/dialogs_add_contact.png b/Telegram/Resources/icons/dialogs_add_contact.png new file mode 100644 index 0000000000000000000000000000000000000000..0569c8732303693ade3a5a4c946cf16abde251bb GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|XHOT$5R2Zo6Ak$o6nL2U|Nl>) z6XV@}%%Z}0=Om>AJR5=zn3e4lb&cKkVv$FK_2+3qnL7eSEpk<-F8V(2uj@>U`sut6 X77K{~dMWuGXdHv5tDnm{r-UW|cb6&o literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/dialogs_add_contact@2x.png b/Telegram/Resources/icons/dialogs_add_contact@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6fca9095dd81bd93cd18068d16a86c467c18e9e1 GIT binary patch literal 163 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBvOHZJLn2z=UUTGXFyLW0=aP;7yEdz}J|9G`+Lg+ZCHT9FHg@2^e-rxELL? zHTi$*w)3&67xJ9hCjRE#`}F9J*>LGwth)cd#b<9{$jxlV>zvM7`wVC+gQu&X%Q~lo FCIEcWKMMc= literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/dialogs_cancel_search.png b/Telegram/Resources/icons/dialogs_cancel_search.png new file mode 100644 index 0000000000000000000000000000000000000000..211db7e3539f55466275cbc578ca63f407e8f43a GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rhe9#0p?5R2ZmlfC&E6giwv-}xVB zJ8iRp)E^O(jh)g5kNfjD9AvK5SK#h=^6~K8e8vEeY0Ju%`w5?{OE0ip)uUy6J8e-- z+oe4R?JYRBm_#4kl+%7Gq(oHXj7E=^g5rxXp(&=nIZVvWW?+0g^CIw8IKzA{Cy85}Sb4q9e0K|(-8~^|S literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/dialogs_cancel_search@2x.png b/Telegram/Resources/icons/dialogs_cancel_search@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f20842fbc65d666aa29f8521a84b8682fe414455 GIT binary patch literal 273 zcmV+s0q*{ZP)N!ew+v`b6DTA5T!kt&rq4un7!5gF15ue$|o@d!G@R1g3GKwmJz zJGKMBSOH-7KRbfF^GQrmQQpuQGP6?n0En4|?L)iCdMd$1BVuvT39EDY#6|CNT~7!# z?>vx_fs--B%)DegU6>^1x}d12!tI`#bSSD)YTC6QBL5z;R)@M(+PAtGTa}Jh#kE!Y z(W*gf)xt8xWH>{mLsiAyBc@;B?xLz;`@C literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/history_action_edit.png b/Telegram/Resources/icons/history_action_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..27b1e77a918e59bc1a2055bcd57a9799c5372bee GIT binary patch literal 445 zcmV;u0Yd(XP)nH)125g_VgtrHL_tsOJ^FnFq?x zpy4LB050ddoI3+307Q);b&7ul5P9C}I1Wyy6Fkp*yQYJmrsFt_qKG;?&m#beNV2Y) zsJ?kL8l}WvAs+*>Ixm6bcbZInemou*ij!m*hQ$C8VWZJVrA_A~8OJdvlZib*cW)ye zMbWExF+hvk*b>JvUDvf+MM>X3w51&Ir7iD(r0=%2+-|o#Te1PVXgZx*iR;b_#F=_& zJRT1KK&R6|v)M#m-0yeHW;1Ly8;A&$Qn|IM84QO*_WOMT;BvVv?c6f|57z57&*w9H zy&eH@u~@tf)WY+8z;3rA`P}N=ZkGV)`+lb9l>zN`o0rSQbQ^}Dc@p3EIiJrnH=#Aa zb=}N0u4j@IuLAhdlO7BPX6o1L6^FwC`~4oRR?B>$%2rEO7=Tg=tJMnI?G`~0;CMWm nA`vl5xN0c;`BYcb{#Wq}%RU(QrQn)>00000NkvXXu0mjf$xz9D literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/history_action_edit@2x.png b/Telegram/Resources/icons/history_action_edit@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..13571d1b258174f243ca849684d1c46ae530c92d GIT binary patch literal 1011 zcmVQr0`eRSP7C82A4$(|AOrzf`3J96dOSsOR==Ew6n3%6=Nl8vn+~XC509m zH{RF03Hi=UHoJMkyAWm#!*I?$=ib~z4FKU62WuL@xbdGr)6ob4##n5%EDM*Hm+1HV z=ytoA`^4|8plM!=F=C97VHgB}Ow**7mlqNd1OausT>?P5u7`UWW5hYnI&-=N0EFNd z78YnQ7*H}sqY`dX zqA>!pna?62?9{jdrfJgi^RqN~5z(5EA|R?=_*SgqzVKu6itb6Swry7eFF_(Lb+mN} z?{Utsnh9{6R2XFByr(+*L7BZK8Bd=(-D4v z5E1R}?$XT6Ol*!X>hoovF2^P?KR-`jUtdz-ecz|Y$4BaPI!azof)`&xDuAaJ5@A^u z48us?1_1cJkB5f`IF5s}voko3gQuq__`VNK(+~s!IOhn00IgOFqtPgL75g+z!_UtT z0EG8cB1K?zbv5?)-Q69oudi`+b%pcubM*Ute13k$_UO7^2|VXK1kV`5_xHCFcmUAw z*GD2wPfzjw{*H@_3pkF0UayzR3S$hKrh$kGLHoWB!!S}ACn9K?1^}@$IOobFQUrcm h{QpmV)A8#G`~d}~!uw$HEdT%j002ovPDHLkV1fOR@F@cD5eDRwe!NrIc3Osc9NBdmyF!QoOEfbBiW~co$Ymp(qNo zn|uNGeMg$6=5LV@0_(a$N~!C424IXKiX!d&_bsxezxQQ6)d%EX-|dGOmfQdU002ov JPDHLkV1j1uhDQJZ literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/history_action_forward@2x.png b/Telegram/Resources/icons/history_action_forward@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f3eae397ea13b7130bdd80ea83d58e06e96e1b9e GIT binary patch literal 600 zcmV-e0;m0nP)6vfYmR|Kn|g@u^f#`OLn*a_)GLB-N4U}q(^`3Pd=2hh?|Foh7(307KISSTVE zS_Bk@aJSmWzV)GNj2QzSxXqB9oFB~0oyi9Pf{(?q4)Cbn0Ic-}V68X6ZzM?)0)fC& zygdO(rBWCUhX{p2u6uhng%XJb48wpZimv*4x&~sg7);ZIBuTD$dcKGwkqAbk5oB3* z#gEA@BnScqg8>SK!oyz7wo#tv(d+e~s_H{NO#1-GacH;O&@|1thl_a}tJ!R#)9HZY z?vL~5=Rl*;a3$1tWipwY&s3{bgu`JJi$xp`hr9ggd$E>jniLEM>1VDh^;!T#M6=n9 zL{aoF01?q@wW4@D?q2{RqWykPvMl=-fQaaLJW@WN_b&huk!{N~Mw` z?~D6@*Rm`Nxm*sqt~+|4DZqBSg`y}JkH?NZm;o#n3uLod%;)ome3%?1CX)%0$>hV~ z0R{lNu0xh(Y&IKL{5%EdcDqm%1(s#G=II$gtJOlKQo;FrcHR5wec%@dGRJjsq4Ar1 maiO`UHvntB0a)t|z*?VlC%C|0+Cjqr0000&wsAZjpSy#4y-wS<8CKivmc3q&nx;K2QM=vd`FswY{8Fy#ayT3^ zl}ZHzTCLVgiGxm*&1U_8cs$P8Z1xeze!mYo2`I}l2ZO;!AoKbBcAIv)-J5}qRZgeV#{dA-G>xjN oKK};EG668=QKHh{f0^&<8#_n(9Dd1JU;qFB07*qoM6N<$g2rjhMgRZ+ literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/history_action_reply@2x.png b/Telegram/Resources/icons/history_action_reply@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..84fbad64700ed14843b8ed1df88433795deb56f0 GIT binary patch literal 864 zcmV-m1E2hfP)4hYb0VRlL<=I8cBz662E<8(F5=)KLPg^26c88xfg=_dU8E3DT%3x7gWysq zh|qQt1VM!iDToLbiV*yPqTJu`(T{5BXObq(InWE9B`wc;Uk!bqFFsVk%-rM9OGDEetsU=Y!kNm(?gf&`Bwt=$S{}ZZN~OYNGU;4E(=>j3d;}W4mbJAt`vL<4 z1FTdkL1(Tbole`o10y3Nyt%mvI&&Qx8yoij1JP)dS65d-XRbq4Rr|Y;EX&O2^Fe3+ zgk@Qb$K&?rfFwygIywqE_b0O1tbG9h6a;~LdwW6W{>0qeoPB|6rBW%!3q3wQvQ#S3 zG))?YLDMu@E|;4YD3wZ-B*~co04^^t+nN!ptE-I`AOMP@$ap-?+1XjHudlOMEIOV& znx;7y06HGD41WHRmr0B~q%h^A@!CQz;Z{(f$6 zZ`X-DJw36rv(vpmwfXt^xvv7%ibNvRb)E0;@Bgj!WlMF}xT~v+xm?b7fods=!jqE| zlH|_LPV)i)*wN9!OeWJ3fod%*EHIbLc_RS)JGIm4bjt()u)Dk4JArD+vfMI(+G=>L q^0)A3ofEpCEf6$qfuLy%1kFGCtxuAmha+?V0000+0I5@2*$F9AcmPQu^1tFS z51tQRHZkjN;Rn+!3Hy=E&dd&o2&55)YJq1yLQMz@O{Y_uOeQj2h^U3oVzHp>^-88ygBuQY~wjM%ERaJ$>WH zS(au0HRbmSozG{iRx9<#o==ozS!xR-*PPL4B(#TAA;GFFU#Ml@k|)%$v&#{BVfN`) zsE6sWAE6%S=k7vL6v?<@{D}cuHNg$=a=C~+-Wg$`ccFazc;+M2#20-u$Ri7-+JyiB N002ovPDHLkV1k%Jw|@Wt literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/media_video_play@2x.png b/Telegram/Resources/icons/media_video_play@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2fffaea0a9a35071f7d6ef5fb3040e38576a41a5 GIT binary patch literal 720 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 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/media_youtube_play.png b/Telegram/Resources/icons/media_youtube_play.png new file mode 100644 index 0000000000000000000000000000000000000000..9cf8ff40eb25f05d1dc92847c49674138511a31d GIT binary patch literal 286 zcmV+(0pb3MP)! zF$#k)6o#L15G1pk;1%3Fi3jiyZXQ5z6CAvN$8dJ>5aIy@aS4RKLrEzul+yO6_(32; zcpu~?f8vP<{907*qoM6N<$g70*94gdfE literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/media_youtube_play@2x.png b/Telegram/Resources/icons/media_youtube_play@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9aa7f511753e2cbcd5f9eb3a8cc575c613f641ee GIT binary patch literal 530 zcmV+t0`2{YP)197A*gvp1dGkGB4$C%B3Nu@vj(vVViv?=w)qEG7KgAlEXFYe+hk}M9Nrt` z$mMe34)r=;@PUAPolXaurX?NxeF6&Gwo$26cm)7JN{QuiiF`iKDWC|$5X0dR z>2#V?K(XKN(QGz(1r(dj2IX>@R{#K_D8g(ugJBq)0*d4Dh+eM;UDr7U6t3%{Ua#{C zDAwyWN~IF70C3HZ$z<}3vLqP+h41_5cDs+1CCLgXw%aYL)he$5a4kz#s}%}`0;hl? z3`2}YBV;leP637Id1$p-yaEc#vS6AfuK;k(kNJH5TUo*(pa_Bh{eJ%zS4vs@1rY1l z%gAQ4;&Qq0j#W(46haWrg-)lF7z_r&ah%&biX4zqVzF3oCNb@A)bl*F+ikv!jJA|e z#ayvij1|*c2{?|!Sx(b7G*J{`I-PR1l(bE~>$+$(8qW&+bpk;Ua1OSpM~jwaaSnHB z$Ls3)r(1APub6DxzW4fny?~VR7C7aawN|TPx7)qlqC56f;$5L@>VNVPNE&*9FLF1? Uizp4#IsgCw07*qoM6N<$f~9xuo&W#< literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/media_youtube_play_bg.png b/Telegram/Resources/icons/media_youtube_play_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..76e71cfe0832a799ea00c9cd6434a49cc6218326 GIT binary patch literal 812 zcmV+{1JnG8P)NklFdc?;kTy`-Rr;~%!liZPx(lDjS14Kd0Iqxlap5*^5W8{NO>4W5LKike z8YCu}ySP`mtu}JuwlmoIK|sWh!yz$-%)bIap#)>#9ztqh_<2+EugJOm#XP<+|?14*qQGPqy1_6-ANm{NE;u zBGqoUw->}YSA)SocV2ABqR>205%&h9~5*n+koMN#O^U^EiPvF;2;vxiuT`Fw5*DwC!uNS0-~a~O>zNuoQ0 zv5KOwhgg|7j%`8P*wcK8IF3OUi-qnS##$^EAW}-*IgBNxw5RzpS(e#7sEm{nWICPd z&S9+SbP6&ak9FrT)_6QdUueZKV+Ho8ehN13k+J#}L9LL!_ir~8Lk1i<;!%c%N?}s-y z=c?Q7syxqi=lwQ$o~v%RyJ=2i^Ry2DRjbuhzu({KqVhaf{eEB7YPC;=j+D~1!MU#-rdyIy;^VC=DJ7QIm}#2g?d=U|nj%RO q#Bq$Lrzea?BLqQ!=jZ3r&;JFUzxyXec%VZ70000hPxFJPn$Y-@h_0Ei~bK|2M^wc7x6FHVK`7k zO4()7$&S*>piJh5E9hpLg^-3m-@|6H)6SZ-X4&`sf}r_9{6ya5dGfmpfItWI_4Ps1 zG+e)a9jdBARaNM^4qexws%pbLMNtro#Q*@hu0xjP`t)ctiby0F(4@bD0pWx=v67={7EFzVyq zzI}sfnkbjc9od#Hv>`yfy}cM48$%|O!QH!ekxHeYC`ud3qjqr|2Rl1Ec=zrda=9Ef zH#c!~bkvr03onB#%VK6`My#!^iE6bfC|s)5s#sfF6Eib2LY8Gu8Td6^J~&UFJP~_) zdqMvXs7?0v_QcbtPlci=oefYXlM#hNA?WR;4*BrmgBTqhZGV6iMG=dOi$QN6U6IAb z#g_L*7j~li`}^_g)hpb)ckfS&(LW}i&*S04hZi2b{V_oCcpSN04ugY(?XHhPpj0Yh zY-|jrQmN@OO#?JAFo3PCEes3{bgDiIf&Kk`jEsz6e}Dhn`RAT_i^XEt+}vb%2m=EH z*xcN#pXmMFxdB>UUPdC3=xAXS9*IN(%gf8>&N~yJ+1Xi4PfvHeC<>S9>1oW)&Yqdx z&kJ9lt!a8RGtum@ULSYUXlDP7mGu&~fDt-c3JBof%! z*$K@RZ3;%MRzoV4La|r`aB2@UH#f)d(1j#P!ra_keY^{Rh(sdz`t>WDFKUTl7`S=! zCT!dOxd)neg>?FRSmih3Mo}pA<42FbR85@vMfVtcCRbZMSi{Lg12yx zH0b@=nt$YryqHS9$g<2PjQnAM$QK5Pd|`md7ha7g&mxfsx`YrN z`P>uzKd=cSUl<_rg#jX87$EY60U}?d(;s;yx(v&*Ak}KMpzENJa$T2A82Q5hkuMAo z`N9B^FOuUpLDxVbW!p9++qQ$QgF?!295!L(4^JeLXQpXFs#dE(*FhmwtyXy^n!Kyk zYHY&DJJU4Ti6(z|7*C!#j>7!6S_ z41?!^$h%st#yt>uXBY((ul%jKVYpmMp4_4W0j>!OfYUtdSLTn2FJ z(dHK~UIbPUh0E!zbOETp=J)N}w-^~238E$niLI?I+`oUnKHhLs{rvnqczXvmQ>)c5 zKR@3vtsy}9d>%_nOIKPHg~!s;67u?s2P#D$&ci$o$3Jb3T`IuV2IO+gW@E z=y$!ny+|gL7#tjguItcs9g#=`Jv}{;Wf_{LHT*oel~z?%oO}RSmSyzx^fauqnUnQ| zk?XpDJYjoubX5QS$B!R4d8fDIIQ5fyhGEp#bNXkcQh{yTFbo5xY2xF@k0=xh4eM-& Z{{Xkbo3;j4WHSH&002ovPDHLkV1oJkPPza9 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/new_chat_photo.png b/Telegram/Resources/icons/new_chat_photo.png new file mode 100644 index 0000000000000000000000000000000000000000..3487852470dd88294003875e468f38cf00e38e5e GIT binary patch literal 642 zcmV-|0)737P)Nkl#Nyjx zuLHaHn#Aj_`@z70oP0lqbI!~V5y5X|vsoC10Y4drflMaj>-Vv|6B3C8R;!gS^seP{ ziFiEz8aNt_LRHnk(7O~xK_n9K21g7zEq4 zkxVA(opKz91ORv|^+P|N{lRe@n$PECnkKofOOhl}v)QC{I{lnc(7ITb1zDC64u?N= zXgC~3x7)>byA53DK;ZRyjZ&%PJDa&&4!W-Y9k69tzd@_jDi~wXG!2@jVKSLOk|h2; zpU=axtk=P^EOXONr-SSD`YGpfxuD%{^SoZK_Zrx?ZC=xAwfZIWuJiefa=FZFzT53Q z!6C24o6qNTyWNP0XfPO1G#Y)F8;ixL-|rI<(d~94MNvGP+7oP=CXZ{inx_#FQN3R0 zv0)hB2fME83wtC%5WWwVB#Fn1#ljb+X&R3!m5O(=R|D*JJKkK9B;j(oJj^|vPAC?O zyt(%Ky=Qazj#IbWNK_FaYSfj(k4vdt??01#C8(AeOMphGCE(2vn(5sL^OpDwTT1=KnneLdWCr?NG;YC^VbR-VUBlr$nMCzU_Hy+cw7I cF+@?sPp*R`VvaNZVWmn${xSggN3m__pXTC%gYNcEG&FY;Mv((6h)CLFd|~5Qo)&-nXd&rH8q8$Qi(cjRmEZv zCnqPr2Jra!I2H;8$zZFxySu}&v9Znq>vTHIWHOS&R&{-SjYC62bbuL#LA%|KJkR6f z<73+(q|(#V69$7pTv=H`mSx`qYqeU8L?WHeD4C+sC~CFZS73%=zBO!B7Z(@EFbw`- zwOaqQSS;|}rBvWd3s8lLJ7b0S(gS1oK zoet1${WxHm)B^~D07pkhaD03Wp->1?sTADb-va=ELZJYiP6v9u9!w?^OixdPTrQV3 zkW}klKA%Uo+l>PQ15I!Hlu9LfJRV8+=8^#W{eD!bRKLC7Rjbt)2n3{vMi*EVMO<85 zq;-r#o6Sc3j7<$#6h)kyo1+F>ZDzBXDm1l8%Vx8|{{DW$*IAYYqtOTkg8?)e4FCY7 z(`n#&9!^e9KoEqw@7vwo1(iw#TU%Rng3|cZ{C@cp@54%gP! zu&1Y|p%1O!G%;{KpKmxpjgF4u<>h75UWr5kIgV>Mkz1+-^5fC`3e; z%T?F=@bHkxmk8Kqv(*G*S@zQjs##?+8I;LnHU18VgUFZY@DK`xYWj>uBlP$8lh^{l zYlUKRaZxJw2F6 zB!1gB5{V$gFg3m^l?p4B3Q1)0!-L1;sk;T_I1aPfY|DPv*Vi~aJY3h)=kt-qB?m4P z3aD1A>joSd8NpaA*0fh75@`sl(P;4D;ej+Rof1zV5NLRCXIU0qF4w0Q=jn7BS65f- zevPYbZ*PxARHSy*vb41HX&FW?m&3%w1Q-m4w;j~g)fMnO52vT6btkB*91aI;Zf??u zNvFhv_*%p>o6XdVc=Pk~`274#D<=Iit<`F!2J3J*sKO#jREQ4*0u3j!W|~H$q4t~o zD9Nr`3WWlCz23U(bfczHsnF;1QJIY!N%H&QN~HqF$H#A%X~|^r-DMibac`GtCX)$d zGHLJk{=X3a?)rJa<#M^x8QP{&sRZ5ec)Zg&+NO9s4&6IDJDtwaHf?Wj1F$TM(P&h% zb?>Vv91d3xC$E1ly|}pObSB9Z4u^4YaIm_;`R5q7yu6I(=jT`~7CW7hSjA!y&(6-! eZnwWXcK!t)SfnY(G(FY;0000~#3^?Hyb3CH6R0MO}l9N&HFXEKw?004%=q2r@&w+jHs=kxxd?RFag+&TdO3PE8s)A zu0z*#Fbo4C0z*VtEEbf_W@$Q|(r7dyj^ke2{w?Zs#dFH7zV}T@elVUNrGir z_)A*^{I zwOXy7Ix|J6vodyMbgQknxrX65GsUdV+n3VkZ4z%5Q4Tr+pM+QqK%ut7STG|v`BK3LJ%bc zEs7EbLo9rj*AH}IVSyBi$Ky4x%Ixec@o#Q! z)( zb#+B+d#96=6B1jkR%#zLs3b|X5q+Z9*Vn(rf6>1fsqZux47Cw`qH@rNh6ZXMHK^Ha zCUK!qpe|6U`}=zmcXoDC`=~+N+uKQ;PN%60RO;^Tj>Li>Q2VGs`}+Dwe0Fw5U7%98 zx3?s2X=$PMQG=FmQ$C-kE>NlC<6{y#oz9xPRDG=cq~!5o z6BC+O)a7!Ke4;4ov-KvENpX;{*=(9Y0RS&9E=bOvo*wO69|#11Wmy0Kh(@EDp7?UD zuC9`JYHEtg^W{vk*({m4*Xz|~H30xSIyw{wX^JD?=NCsuM@gb=Hme(?JfhJk$sZ1f z)qxs~M$G5)BvBv`&>gh9yIZlUZEbC}gDx#Ckp%nu`?^EQBNB;_I=j2OwSoG4KE+IX zdwc5!%CfAY*38Td9jL?Mz?YX7Vw{_ss~e;|Mn*;yutP&bUxPL`H)AfBBZi%wow`HH zqx=`HBuVIUxjqJUI-NfTDUY?aH3h8S? zt?G6a3I*zSKgV&<+S*$6K7+vkrBX@p`yT+{9cV2wnM@!ELe)tz3CtEPY1ZT8;~0y@ zP!vT>r_-27Brq5ZBEvAcdXv)*Vk97tE&qpg~MS0Ha0fOLnSdZGz7rc*BABm z^+j9sJdfk!=xEVZibkV&p2x?>2h-Ej0L;zJ6^7Q;)nR5_TwD|d=KJO4W$>YRo<}qq{RzFk zzQ)X`t*xyHn%_Ra)zwv?hb8Is^i=Kb?K(I((BR;p+S=OW`@V{q<2Z6%SCf;IIzKGShbO-)T|Zf@4|^RvR?uzcTFV`HOS*OlwK>gedu-QAtu-rm&O+N#^zTg}eS>c>ju zdngnll}Z8N`#u0qPfs|GQ}BEw63N9%zl?Z1&dbXSW=1xfE%gumTTHI~|7pJg6tt^= Tk_K-Y00000NkvXXu0mjfPZ3b2 literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/send_control_silent_on@2x.png b/Telegram/Resources/icons/send_control_silent_on@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..58a7460a484eecf25f6a5f51172c8bf9b3c3ad09 GIT binary patch literal 1487 zcmV;=1u*)FP)>V;SIhc!>((I}jbeCs7@<%IFJ8PTv@0+l-Me=$ zCnhFnR6cz8z~<)Wy!!e}S62FbK3=$RA*0ikD_7FOsH)0%JkG_%MJ_EZrM2<<{lx+G z`Ft{HI#{pQtLu1vex6-jU97FGrNv^Q*=(lSY-U+m8J$iiJ3Bi$IXS8G@%em(g9d{^ z8Bhqpd-v|iwq3h+Q3xU1A3S(qxTB7a4xR7e!-or>`ktO1-3UB=`jh~8?bdExx%^TS5c8raUK~WR{fXn5=)vH(Y0u@3)Q52BGnl)>R2MPemWD<3Cbr={J zkg&II-Gblm&l&Xl_wN7zMNzPJt?`2~r?dXlsZ+Rn_pbc*csv*!9LyyImY0`hxxBpG zuwTxXlFOGb@4hdyCMHrEGElEU89V z%gZ2%ii!%nd-o3Y_4TX9nVFf9<%)_5!=Qk{^w8hmPm-*usgZSCwrt_l)RgYTX>D!I z8pr8$O54%V(clH=O9RwtKR--$0Iv?^5lupzn(Umjc?z+)xoy4 zwaNB7ckamg)H`q9pi@&*GGI$fi(ybrQ*TQo+0)ZQ0Nl21n;g+ZBEe0YHsuehZ6cC< z`SNAXkeYUPck5uaOLOW4y}P?RKhX8-*K>Y;UIsdO@?_qi0C@iVd6_v#a%5zL)z#IE z#bUCLojZ5t4w^a&Iqb}=+Su4AZ}>t827^J4jEqS5p`oGNKwDZ`bW^o||Nf$Y0$^oj zB^MVL<@!`rRrVu{2DxLH7>(`40sj10iVmKVu0j8FlnwqkMTCG;j&dy4w z;o;$;L#Aq9Utd~SRaLof-@f#q4u?Z7Y#{_ECMNz-NKHFCJ6C{e;&!{Goubi>j*i0R zasdEHA`*$<)vH&itgMvJhg1#xhx{f0-oAZ139r|S6`;9@!{I<# zSsA{3`I7OCP7-Fb8B0q``1tXo;n;q^A0Cefmo8nx{rmTS#mZNYA3wh863`?|BF~s> z-EMd4Yof69^7!%NRo8SR5-CP1D?Aqt4i097j7FohSSQe5vA0Psf3~7fWLqQl4?ll$^=w;G$5T{@&Ip zbk5B4+>>T3X#T+%w}OlB5&w$|j%WN;8NNysPd-?ce|Proi?)9k#;vHATWGZ-Z-cX7 m-C&U>J17(8A5T-G@yGywp}X-3=t diff --git a/Telegram/Resources/icons/settings_close@2x.png b/Telegram/Resources/icons/settings_close@2x.png deleted file mode 100644 index 40d3def3d2c56edb57dc818be15c1add75a32652..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmV+@0oVSCP)CU0sydW8>EyV#t0+joP&9uVc+-f zo-niILPYsU&C5CWy6=MV< us`fKmy!Tx`KwVn9@0000f4ReHKOhDb~;J-?CnhyqXR!~Yz+ zcP#j>;4|f?#>5x{X61kD*7J zRbKDszVTeeRiJL2wKg&B$=??@%H0p}yH&U|X#P={VO{uMr1V_i$GyuR|KYc_P8Y0P ds4gbB?`Nj}=c0M@7Xlr@;OXk;vd$@?2>?z*N0|Ts literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/simple_close@2x.png b/Telegram/Resources/icons/simple_close@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7825b270a12b2ea01fb0a82e7228125846fd0146 GIT binary patch literal 354 zcmV-o0iFJdP)U5QX6%FnuD0#5G4D6~{=Eb8xFvHD6?<3ZCj>?y4^X_^v-A%0O5gkeaUrf9AIg%w3XP?lwOI2<^gPQ-Cc(=@bgy9>+n zoIpgfvMkw(e#1nB0LVmyE$9*kd_VwK)P~JK7jz8+@PK&-@O_^oNr>Z^F;c)Pwg~=4 zhhYFfDP_d~{I6Z$^?LDqKB?;(r4&jj>bkaKRuJHPJ`+XJbdI8k%jIIbvJCzlfH4MR zjMGNVru+>X-^>`}l+!=pQZz&aV+_aR(TdJMmz=Gk6X=4upaGC=!Pd|~Yn^SyY^Zm; z-DD3omgjj~uh(f!Ro8V?RkaI)&xexdIq+G8HzU_L$-_0k>;M1&07*qoM6N<$g6pc8 A8vpb); } - p.drawSprite(phRect.topLeft() + st::newGroupPhotoIconPosition, st::newGroupPhotoIcon); + st::newGroupPhotoIcon.paint(p, phRect.topLeft() + st::newGroupPhotoIconPosition, width()); } else { p.drawPixmap(phRect.topLeft(), _photoSmall); } diff --git a/Telegram/SourceFiles/boxes/boxes.style b/Telegram/SourceFiles/boxes/boxes.style index 1d0266b4c1..c04b07c329 100644 --- a/Telegram/SourceFiles/boxes/boxes.style +++ b/Telegram/SourceFiles/boxes/boxes.style @@ -136,18 +136,16 @@ contactsMultiSelect: MultiSelect { fieldIcon: fieldSearchIcon; fieldIconSkip: 36px; - fieldCancel: IconButton { + fieldCancel: IconButton(defaultIconButton) { width: 41px; height: 48px; opacity: 0.3; overOpacity: 0.4; - icon: icon {{ "box_search_cancel", #000000 }}; + icon: boxCancelIcon; iconPosition: point(8px, 18px); downIconPosition: point(8px, 19px); - - duration: 150; } fieldCancelSkip: 34px; } @@ -206,3 +204,29 @@ notificationSampleNameFg: #939393; membersAboutPadding: margins(0px, 12px, 0px, 12px); membersAboutFg: #777; + +sessionsScroll: flatScroll(boxScroll) { + round: 2px; + deltax: 5px; + width: 14px; +} +sessionsHeight: 440px; +sessionHeight: 70px; +sessionCurrentPadding: margins(0px, 7px, 0px, 4px); +sessionCurrentHeight: 118px; +sessionPadding: margins(21px, 10px, 21px, 0px); +sessionNameFont: msgNameFont; +sessionActiveFont: msgDateFont; +sessionActiveColor: #aaa; +sessionInfoFont: msgFont; +sessionInfoColor: #888888; +sessionTerminateTop: 30px; +sessionTerminateSkip: 18px; +sessionTerminate: IconButton(defaultIconButton) { + width: 16px; + height: 16px; + + icon: simpleCloseIcon; + iconPosition: point(3px, 3px); + downIconPosition: point(3px, 4px); +} diff --git a/Telegram/SourceFiles/boxes/notifications_box.cpp b/Telegram/SourceFiles/boxes/notifications_box.cpp index 98e9a4fe68..dbd16898d7 100644 --- a/Telegram/SourceFiles/boxes/notifications_box.cpp +++ b/Telegram/SourceFiles/boxes/notifications_box.cpp @@ -23,6 +23,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "lang.h" #include "ui/buttons/round_button.h" +#include "ui/buttons/icon_button.h" #include "ui/widgets/discrete_slider.h" #include "styles/style_boxes.h" #include "styles/style_dialogs.h" @@ -289,7 +290,7 @@ void NotificationsBox::prepareNotificationSampleLarge() { p.drawText(rectForName.left(), rectForName.top() + st::msgNameFont->ascent, notifyTitle); p.setOpacity(st::notifyClose.opacity); - p.drawSpriteLeft(w - st::notifyClosePos.x() - st::notifyClose.width + st::notifyClose.iconPos.x(), st::notifyClosePos.y() + st::notifyClose.iconPos.y(), w, st::notifyClose.icon); + st::notifyClose.icon.paint(p, w - st::notifyClosePos.x() - st::notifyClose.width + st::notifyClose.iconPosition.x(), st::notifyClosePos.y() + st::notifyClose.iconPosition.y(), w); } _notificationSampleLarge = App::pixmapFromImageInPlace(std_::move(sampleImage)); diff --git a/Telegram/SourceFiles/boxes/sessionsbox.cpp b/Telegram/SourceFiles/boxes/sessionsbox.cpp index 7cd8d1e25d..cd3c10ad70 100644 --- a/Telegram/SourceFiles/boxes/sessionsbox.cpp +++ b/Telegram/SourceFiles/boxes/sessionsbox.cpp @@ -19,16 +19,16 @@ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org */ #include "stdafx.h" +#include "boxes/sessionsbox.h" + #include "lang.h" - #include "localstorage.h" - -#include "sessionsbox.h" #include "mainwidget.h" #include "mainwindow.h" - #include "countries.h" -#include "confirmbox.h" +#include "boxes/confirmbox.h" +#include "ui/buttons/icon_button.h" +#include "styles/style_boxes.h" SessionsBox::SessionsBox() : ScrollableBox(st::sessionsScroll) , _loading(true) @@ -90,7 +90,7 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) { _shortPollRequest = 0; int32 availCurrent = st::boxWideWidth - st::sessionPadding.left() - st::sessionTerminateSkip; - int32 availOther = availCurrent - st::sessionTerminate.iconPos.x();// -st::sessionTerminate.width - st::sessionTerminateSkip; + int32 availOther = availCurrent - st::sessionTerminate.iconPosition.x();// -st::sessionTerminate.width - st::sessionTerminateSkip; _list.clear(); const auto &v(result.c_account_authorizations().vauthorizations.c_vector().v); @@ -258,7 +258,7 @@ void SessionsBox::Inner::paintEvent(QPaintEvent *e) { Painter p(this); p.fillRect(r, st::white->b); - int32 x = st::sessionPadding.left(), xact = st::sessionTerminateSkip + st::sessionTerminate.iconPos.x();// st::sessionTerminateSkip + st::sessionTerminate.width + st::sessionTerminateSkip; + int32 x = st::sessionPadding.left(), xact = st::sessionTerminateSkip + st::sessionTerminate.iconPosition.x();// st::sessionTerminateSkip + st::sessionTerminate.width + st::sessionTerminateSkip; int32 w = width(); if (_current->active.isEmpty() && _list->isEmpty()) { @@ -414,7 +414,7 @@ void SessionsBox::Inner::listUpdated() { for (int32 i = 0, l = _list->size(); i < l; ++i) { TerminateButtons::iterator j = _terminateButtons.find(_list->at(i).hash); if (j == _terminateButtons.cend()) { - j = _terminateButtons.insert(_list->at(i).hash, new IconedButton(this, st::sessionTerminate)); + j = _terminateButtons.insert(_list->at(i).hash, new Ui::IconButton(this, st::sessionTerminate)); connect(j.value(), SIGNAL(clicked()), this, SLOT(onTerminate())); } j.value()->moveToRight(st::sessionTerminateSkip, st::sessionCurrentHeight + i * st::sessionHeight + st::sessionTerminateTop, width()); diff --git a/Telegram/SourceFiles/boxes/sessionsbox.h b/Telegram/SourceFiles/boxes/sessionsbox.h index 0021162cfe..0b32c9badd 100644 --- a/Telegram/SourceFiles/boxes/sessionsbox.h +++ b/Telegram/SourceFiles/boxes/sessionsbox.h @@ -25,6 +25,10 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org class ConfirmBox; +namespace Ui { +class IconButton; +} // namespace Ui + class SessionsBox : public ScrollableBox, public RPCSender { Q_OBJECT @@ -106,7 +110,7 @@ private: SessionsBox::List *_list; SessionsBox::Data *_current; - typedef QMap TerminateButtons; + typedef QMap TerminateButtons; TerminateButtons _terminateButtons; uint64 _terminating; diff --git a/Telegram/SourceFiles/boxes/stickers_box.cpp b/Telegram/SourceFiles/boxes/stickers_box.cpp index 03c13475e6..d83b2f3605 100644 --- a/Telegram/SourceFiles/boxes/stickers_box.cpp +++ b/Telegram/SourceFiles/boxes/stickers_box.cpp @@ -29,6 +29,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "apiwrap.h" #include "localstorage.h" #include "dialogs/dialogs_layout.h" +#include "styles/style_boxes.h" #include "styles/style_stickers.h" namespace { diff --git a/Telegram/SourceFiles/dialogs/dialogs.style b/Telegram/SourceFiles/dialogs/dialogs.style index abf2223dc8..ec82cc5907 100644 --- a/Telegram/SourceFiles/dialogs/dialogs.style +++ b/Telegram/SourceFiles/dialogs/dialogs.style @@ -21,6 +21,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org using "basic.style"; using "basic_types.style"; +using "ui/widgets/widgets.style"; + dialogsUnreadFg: #ffffff; dialogsUnreadFgActive: #5b94bf; dialogsUnreadBg: windowActiveBg; @@ -81,21 +83,21 @@ dialogsTextStyleDraftActive: textStyle(dialogsTextStyle) { linkFgDown: #c6e1f7; } -dialogsNewChatIcon: icon {{ "dialogs_new_chat", #b7b7b7, point(9px, 10px) }}; -dialogsNewChatButton: RoundButton { +dialogsNewChatButton: IconButton(defaultIconButton) { width: 36px; height: 36px; - icon: dialogsNewChatIcon; - textTop: 5px; - downTextTop: 6px; - - textFg: transparent; - textFgOver: transparent; - secondaryTextFg: transparent; - secondaryTextFgOver: transparent; - textBg: transparent; - textBgOver: transparent; + icon: icon {{ "dialogs_new_chat", #b7b7b7 }}; + iconPosition: point(9px, 10px); + downIconPosition: point(9px, 11px); +} +dialogsAddContact: IconButton(dialogsNewChatButton) { + icon: icon {{ "dialogs_add_contact", #a6a6a6 }}; + iconPosition: point(8px, 8px); + downIconPosition: point(8px, 9px); +} +dialogsCancelSearch: IconButton(dialogsAddContact) { + icon: icon {{ "dialogs_cancel_search", #a6a6a6 }}; } dialogsChatTypeSkip: 22px; diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index eb9007f362..b6de91dbee 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -24,7 +24,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "dialogs/dialogs_indexed_list.h" #include "dialogs/dialogs_layout.h" #include "styles/style_dialogs.h" -#include "ui/buttons/round_button.h" +#include "styles/style_stickers.h" +#include "ui/buttons/icon_button.h" #include "ui/widgets/popup_menu.h" #include "data/data_drafts.h" #include "lang.h" @@ -43,7 +44,7 @@ DialogsInner::DialogsInner(QWidget *parent, MainWidget *main) : SplittedWidget(p , contactsNoDialogs(std_::make_unique(Dialogs::SortMode::Name)) , contacts(std_::make_unique(Dialogs::SortMode::Name)) , _addContactLnk(this, lang(lng_add_contact_button)) -, _cancelSearchInPeer(this, st::btnCancelSearch) { +, _cancelSearchInPeer(this, st::dialogsCancelSearch) { if (Global::DialogsModeEnabled()) { importantDialogs = std_::make_unique(Dialogs::SortMode::Date); } @@ -51,8 +52,8 @@ DialogsInner::DialogsInner(QWidget *parent, MainWidget *main) : SplittedWidget(p connect(main, SIGNAL(peerPhotoChanged(PeerData*)), this, SLOT(onPeerPhotoChanged(PeerData*))); connect(main, SIGNAL(dialogRowReplaced(Dialogs::Row*,Dialogs::Row*)), this, SLOT(onDialogRowReplaced(Dialogs::Row*,Dialogs::Row*))); connect(&_addContactLnk, SIGNAL(clicked()), App::wnd(), SLOT(onShowAddContact())); - connect(&_cancelSearchInPeer, SIGNAL(clicked()), this, SIGNAL(cancelSearchInPeer())); - _cancelSearchInPeer.hide(); + connect(_cancelSearchInPeer, SIGNAL(clicked()), this, SIGNAL(cancelSearchInPeer())); + _cancelSearchInPeer->hide(); subscribe(FileDownload::ImageLoaded(), [this] { update(); }); subscribe(Global::RefItemRemoved(), [this](HistoryItem *item) { @@ -126,8 +127,8 @@ void DialogsInner::paintRegion(Painter &p, const QRegion ®ion, bool paintingO p.fillRect(0, 0, w, st::mentionHeight, (selected ? st::mentionBgOver : st::white)->b); if (!paintingOther) { if (selected) { - int skip = (st::mentionHeight - st::simpleClose.icon.pxHeight()) / 2; - p.drawSprite(QPoint(w - st::simpleClose.icon.pxWidth() - skip, skip), st::simpleClose.icon); + int skip = (st::mentionHeight - st::simpleCloseIcon.height()) / 2; + st::simpleCloseIcon.paint(p, QPoint(w - st::simpleCloseIcon.width() - skip, skip), width()); } QString first = (_hashtagFilter.size() < 2) ? QString() : ('#' + _hashtagResults.at(from).mid(0, _hashtagFilter.size() - 1)), second = (_hashtagFilter.size() < 2) ? ('#' + _hashtagResults.at(from)) : _hashtagResults.at(from).mid(_hashtagFilter.size() - 1); int32 firstwidth = st::mentionFont->width(first), secondwidth = st::mentionFont->width(second); @@ -299,7 +300,7 @@ void DialogsInner::searchInPeerPaint(Painter &p, int32 w, bool onlyBackground) c _searchInPeer->paintUserpicLeft(p, st::dialogsPhotoSize, st::dialogsPadding.x(), st::dialogsPadding.y(), fullWidth()); int32 nameleft = st::dialogsPadding.x() + st::dialogsPhotoSize + st::dialogsPhotoPadding; - int32 namewidth = w - nameleft - st::dialogsPadding.x() * 2 - st::btnCancelSearch.width; + int32 namewidth = w - nameleft - st::dialogsPadding.x() * 2 - st::dialogsCancelSearch.width; QRect rectForName(nameleft, st::dialogsPadding.y() + st::dialogsNameTop, namewidth, st::msgNameFont->height); if (auto chatTypeIcon = Dialogs::Layout::ChatTypeIcon(_searchInPeer, false)) { @@ -408,7 +409,7 @@ void DialogsInner::mousePressEvent(QMouseEvent *e) { void DialogsInner::resizeEvent(QResizeEvent *e) { _addContactLnk.move((width() - _addContactLnk.width()) / 2, (st::noContactsHeight + st::noContactsFont->height) / 2); - _cancelSearchInPeer.move(width() - st::dialogsPadding.x() - st::btnCancelSearch.width, (st::dialogsRowHeight - st::btnCancelSearch.height) / 2); + _cancelSearchInPeer->move(width() - st::dialogsPadding.x() - st::dialogsCancelSearch.width, (st::dialogsRowHeight - st::dialogsCancelSearch.height) / 2); } void DialogsInner::onDialogRowReplaced(Dialogs::Row *oldRow, Dialogs::Row *newRow) { @@ -1260,9 +1261,9 @@ void DialogsInner::searchInPeer(PeerData *peer) { _searchInMigrated = _searchInPeer ? _searchInPeer->migrateFrom() : 0; if (_searchInPeer) { onHashtagFilterUpdate(QStringRef()); - _cancelSearchInPeer.show(); + _cancelSearchInPeer->show(); } else { - _cancelSearchInPeer.hide(); + _cancelSearchInPeer->hide(); } } @@ -1780,9 +1781,9 @@ DialogsWidget::DialogsWidget(MainWidget *parent) : TWidget(parent) , _dialogsRequest(0) , _contactsRequest(0) , _filter(this, st::dlgFilter, lang(lng_dlg_filter)) -, _newGroup(this, QString(), st::dialogsNewChatButton) -, _addContact(this, st::btnAddContact) -, _cancelSearch(this, st::btnCancelSearch) +, _newGroup(this, st::dialogsNewChatButton) +, _addContact(this, st::dialogsAddContact) +, _cancelSearch(this, st::dialogsCancelSearch) , _scroll(this, st::dialogsScroll) , _inner(&_scroll, parent) , _a_show(animation(this, &DialogsWidget::step_show)) @@ -1807,9 +1808,9 @@ DialogsWidget::DialogsWidget(MainWidget *parent) : TWidget(parent) connect(&_filter, SIGNAL(changed()), this, SLOT(onFilterUpdate())); connect(&_filter, SIGNAL(cursorPositionChanged(int,int)), this, SLOT(onFilterCursorMoved(int,int))); connect(parent, SIGNAL(dialogsUpdated()), this, SLOT(onListScroll())); - connect(&_addContact, SIGNAL(clicked()), this, SLOT(onAddContact())); + connect(_addContact, SIGNAL(clicked()), this, SLOT(onAddContact())); connect(_newGroup, SIGNAL(clicked()), this, SLOT(onNewGroup())); - connect(&_cancelSearch, SIGNAL(clicked()), this, SLOT(onCancelSearch())); + connect(_cancelSearch, SIGNAL(clicked()), this, SLOT(onCancelSearch())); _chooseByDragTimer.setSingleShot(true); connect(&_chooseByDragTimer, SIGNAL(timeout()), this, SLOT(onChooseByDrag())); @@ -1824,12 +1825,12 @@ DialogsWidget::DialogsWidget(MainWidget *parent) : TWidget(parent) _filter.move(st::dialogsPadding.x(), st::dialogsFilterPadding); _filter.setFocusPolicy(Qt::StrongFocus); _filter.customUpDown(true); - _addContact.hide(); + _addContact->hide(); _newGroup->show(); - _cancelSearch.hide(); + _cancelSearch->hide(); _newGroup->move(width() - _newGroup->width() - st::dialogsPadding.x(), 0); - _addContact.move(width() - _addContact.width() - st::dialogsPadding.x(), 0); - _cancelSearch.move(width() - _cancelSearch.width() - st::dialogsPadding.x(), 0); + _addContact->move(width() - _addContact->width() - st::dialogsPadding.x(), 0); + _cancelSearch->move(width() - _cancelSearch->width() - st::dialogsPadding.x(), 0); } void DialogsWidget::activate() { @@ -1874,7 +1875,7 @@ void DialogsWidget::showAnimated(Window::SlideDirection direction, const Window: _scroll.hide(); _filter.hide(); - _cancelSearch.hide(); + _cancelSearch->hide(); _newGroup->hide(); int delta = st::slideShift; @@ -2377,10 +2378,10 @@ void DialogsWidget::onFilterUpdate(bool force) { _searchCache.clear(); _searchQueries.clear(); _searchQuery = QString(); - _cancelSearch.hide(); + _cancelSearch->hide(); _newGroup->show(); - } else if (_cancelSearch.isHidden()) { - _cancelSearch.show(); + } else if (_cancelSearch->isHidden()) { + _cancelSearch->show(); _newGroup->hide(); } if (filterText.size() < MinUsernameLength) { @@ -2445,8 +2446,8 @@ void DialogsWidget::resizeEvent(QResizeEvent *e) { int32 w = width(); _filter.setGeometry(st::dialogsPadding.x(), st::dialogsFilterPadding, w - 2 * st::dialogsPadding.x(), _filter.height()); _newGroup->move(w - _newGroup->width() - st::dialogsPadding.x(), _filter.y()); - _addContact.move(w - _addContact.width() - st::dialogsPadding.x(), _filter.y()); - _cancelSearch.move(w - _cancelSearch.width() - st::dialogsPadding.x(), _filter.y()); + _addContact->move(w - _addContact->width() - st::dialogsPadding.x(), _filter.y()); + _cancelSearch->move(w - _cancelSearch->width() - st::dialogsPadding.x(), _filter.y()); _scroll.move(0, _filter.height() + 2 * st::dialogsFilterPadding); int32 addToY = App::main() ? App::main()->contentScrollAddToY() : 0; diff --git a/Telegram/SourceFiles/dialogswidget.h b/Telegram/SourceFiles/dialogswidget.h index 930349072e..e3aec89455 100644 --- a/Telegram/SourceFiles/dialogswidget.h +++ b/Telegram/SourceFiles/dialogswidget.h @@ -29,7 +29,7 @@ class IndexedList; } // namespace Dialogs namespace Ui { -class RoundButton; +class IconButton; class PopupMenu; } // namespace Ui @@ -221,7 +221,7 @@ private: void paintDialog(QPainter &p, Dialogs::Row *dialog); LinkButton _addContactLnk; - IconedButton _cancelSearchInPeer; + ChildWidget _cancelSearchInPeer; bool _overDelete = false; @@ -336,8 +336,9 @@ private: mtpRequestId _dialogsRequest, _contactsRequest; FlatInput _filter; - ChildWidget _newGroup; - IconedButton _addContact, _cancelSearch; + ChildWidget _newGroup; + ChildWidget _addContact; + ChildWidget _cancelSearch; ScrollArea _scroll; DialogsInner _inner; diff --git a/Telegram/SourceFiles/history/field_autocomplete.cpp b/Telegram/SourceFiles/history/field_autocomplete.cpp index c217e8c708..d04c2ab2fa 100644 --- a/Telegram/SourceFiles/history/field_autocomplete.cpp +++ b/Telegram/SourceFiles/history/field_autocomplete.cpp @@ -605,9 +605,9 @@ void FieldAutocompleteInner::paintEvent(QPaintEvent *e) { bool selected = (i == _sel); if (selected) { p.fillRect(0, i * st::mentionHeight, width(), st::mentionHeight, st::mentionBgOver->b); - int skip = (st::mentionHeight - st::simpleClose.icon.pxHeight()) / 2; + int skip = (st::mentionHeight - st::simpleCloseIcon.height()) / 2; if (!_hrows->isEmpty() || (!_mrows->isEmpty() && i < _recentInlineBotsInRows)) { - p.drawSprite(QPoint(width() - st::simpleClose.icon.pxWidth() - skip, i * st::mentionHeight + skip), st::simpleClose.icon); + st::simpleCloseIcon.paint(p, QPoint(width() - st::simpleCloseIcon.width() - skip, i * st::mentionHeight + skip), width()); } } p.setPen(st::black->p); diff --git a/Telegram/SourceFiles/history/history.style b/Telegram/SourceFiles/history/history.style index 7c1ff3156e..eb07e0fe1d 100644 --- a/Telegram/SourceFiles/history/history.style +++ b/Telegram/SourceFiles/history/history.style @@ -147,18 +147,13 @@ historyMediaTypeSong: icon {{ "media_type_song", #bebebe, point(0px, 0px) }}; historyMediaTypeVoice: icon {{ "media_type_voice", #bebebe, point(2px, 2px) }}; historyMediaTypeLink: icon {{ "media_type_link", #bebebe, point(2px, 2px) }}; -historyAttachDocument: IconButton { +historyAttachDocument: IconButton(defaultIconButton) { width: 46px; height: 46px; - opacity: 0.78; - overOpacity: 1.; - icon: historyMediaTypeFile; iconPosition: point(9px, 9px); downIconPosition: point(9px, 10px); - - duration: 150; } historyAttachPhoto: IconButton(historyAttachDocument) { icon: historyMediaTypePhoto; @@ -211,7 +206,35 @@ historyAttachDropdownMenu: DropdownMenu(defaultDropdownMenu) { } } -topBarSearch: IconButton { +historySilentToggle: IconButton(historyBotKeyboardShow) { + icon: icon {{ "send_control_silent_off", #b3b3b3 }}; +} +historySilentToggleOn: icon {{ "send_control_silent_on", #b3b3b3 }}; + +historyReplySkip: 51px; +historyReplyColor: #377aae; +historyReplyHeight: 49px; +historyReplyTop: 8px; +historyReplyBottom: 6px; +historyReplyIconPosition: point(13px, 13px); +historyReplyIcon: icon {{ "history_action_reply", #6fa1d2 }}; +historyForwardIcon: icon {{ "history_action_forward", #6fa1d2 }}; +historyEditIcon: icon {{ "history_action_edit", #6fa1d2 }}; +historyReplyCancel: IconButton(defaultIconButton) { + width: 49px; + height: 49px; + + icon: historyReplyCancelIcon; + iconPosition: point(17px, 17px); + downIconPosition: point(17px, 18px); +} +historyInlineBotCancel: IconButton(historyReplyCancel) { + height: 46px; + iconPosition: point(-1px, 16px); // < 0 means draw in the center of the button + downIconPosition: point(-1px, 17px); +} + +topBarSearch: IconButton(defaultIconButton) { width: 44px; height: topBarHeight; @@ -221,6 +244,4 @@ topBarSearch: IconButton { opacity: 0.22; overOpacity: 0.36; - - duration: 150; } diff --git a/Telegram/SourceFiles/history/history_media_types.cpp b/Telegram/SourceFiles/history/history_media_types.cpp index 490ebb78e2..0281440e0a 100644 --- a/Telegram/SourceFiles/history/history_media_types.cpp +++ b/Telegram/SourceFiles/history/history_media_types.cpp @@ -2733,9 +2733,9 @@ void HistoryWebPage::draw(Painter &p, const QRect &r, TextSelection selection, u if (_data->type == WebPageVideo && _attach->type() == MediaTypePhoto) { if (_attach->isReadyForOpen()) { if (_data->siteName == qstr("YouTube")) { - p.drawSprite(QPoint((pixwidth - st::youtubeIcon.pxWidth()) / 2, (pixheight - st::youtubeIcon.pxHeight()) / 2), st::youtubeIcon); + st::youtubeIcon.paint(p, (pixwidth - st::youtubeIcon.width()) / 2, (pixheight - st::youtubeIcon.height()) / 2, _width); } else { - p.drawSprite(QPoint((pixwidth - st::videoIcon.pxWidth()) / 2, (pixheight - st::videoIcon.pxHeight()) / 2), st::videoIcon); + st::videoIcon.paint(p, (pixwidth - st::videoIcon.width()) / 2, (pixheight - st::videoIcon.height()) / 2, _width); } } if (_durationWidth) { diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index e485171146..9cd79baefd 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -2913,12 +2913,12 @@ HistoryHider::~HistoryHider() { parent()->noHider(this); } -SilentToggle::SilentToggle(QWidget *parent) : FlatCheckbox(parent, QString(), false, st::silentToggle) { +SilentToggle::SilentToggle(QWidget *parent) : IconButton(parent, st::historySilentToggle) { setMouseTracking(true); } void SilentToggle::mouseMoveEvent(QMouseEvent *e) { - FlatCheckbox::mouseMoveEvent(e); + IconButton::mouseMoveEvent(e); if (rect().contains(e->pos())) { Ui::Tooltip::Show(1000, this); } else { @@ -2926,21 +2926,29 @@ void SilentToggle::mouseMoveEvent(QMouseEvent *e) { } } +void SilentToggle::setChecked(bool checked) { + if (_checked != checked) { + _checked = checked; + setIcon(_checked ? &st::historySilentToggleOn : nullptr); + } +} + void SilentToggle::leaveEvent(QEvent *e) { Ui::Tooltip::Hide(); } void SilentToggle::mouseReleaseEvent(QMouseEvent *e) { - FlatCheckbox::mouseReleaseEvent(e); + setChecked(!_checked); + IconButton::mouseReleaseEvent(e); Ui::Tooltip::Show(0, this); - PeerData *p = App::main() ? App::main()->peer() : nullptr; + auto p = App::main() ? App::main()->peer() : nullptr; if (p && p->isChannel() && p->notify != UnknownNotifySettings) { - App::main()->updateNotifySetting(p, NotifySettingDontChange, checked() ? SilentNotifiesSetSilent : SilentNotifiesSetNotify); + App::main()->updateNotifySetting(p, NotifySettingDontChange, _checked ? SilentNotifiesSetSilent : SilentNotifiesSetNotify); } } QString SilentToggle::tooltipText() const { - return lang(checked() ? lng_wont_be_notified : lng_will_be_notified); + return lang(_checked ? lng_wont_be_notified : lng_will_be_notified); } QPoint SilentToggle::tooltipPos() const { @@ -2984,7 +2992,7 @@ TextWithTags::Tags textTagsFromEntities(const EntitiesInText &entities) { } HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) -, _fieldBarCancel(this, st::replyCancel) +, _fieldBarCancel(this, st::historyReplyCancel) , _scroll(this, st::historyScroll, false) , _historyToEnd(this) , _fieldAutocomplete(this) @@ -3024,13 +3032,13 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) connect(&_reportSpamPanel, SIGNAL(hideClicked()), this, SLOT(onReportSpamHide())); connect(&_reportSpamPanel, SIGNAL(clearClicked()), this, SLOT(onReportSpamClear())); connect(_historyToEnd, SIGNAL(clicked()), this, SLOT(onHistoryToEnd())); - connect(&_fieldBarCancel, SIGNAL(clicked()), this, SLOT(onFieldBarCancel())); + connect(_fieldBarCancel, SIGNAL(clicked()), this, SLOT(onFieldBarCancel())); connect(&_send, SIGNAL(clicked()), this, SLOT(onSend())); connect(&_unblock, SIGNAL(clicked()), this, SLOT(onUnblock())); connect(&_botStart, SIGNAL(clicked()), this, SLOT(onBotStart())); connect(&_joinChannel, SIGNAL(clicked()), this, SLOT(onJoinChannel())); connect(&_muteUnmute, SIGNAL(clicked()), this, SLOT(onMuteUnmute())); - connect(&_silent, SIGNAL(clicked()), this, SLOT(onBroadcastSilentChange())); + connect(_silent, SIGNAL(clicked()), this, SLOT(onBroadcastSilentChange())); connect(_attachDocument, SIGNAL(clicked()), this, SLOT(onDocumentSelect())); connect(_attachPhoto, SIGNAL(clicked()), this, SLOT(onPhotoSelect())); connect(&_field, SIGNAL(submitted(bool)), this, SLOT(onSend(bool))); @@ -3077,7 +3085,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) connect(&_field, SIGNAL(cursorPositionChanged()), this, SLOT(onDraftSaveDelayed())); connect(&_field, SIGNAL(cursorPositionChanged()), this, SLOT(onCheckFieldAutocomplete()), Qt::QueuedConnection); - _fieldBarCancel.hide(); + _fieldBarCancel->hide(); _scroll.hide(); @@ -3115,7 +3123,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) _attachEmoji->hide(); _botKeyboardShow->hide(); _botKeyboardHide->hide(); - _silent.hide(); + _silent->hide(); _botCommandStart->hide(); _attachDocument->installEventFilter(_attachType); @@ -3489,7 +3497,7 @@ void HistoryWidget::onRecordDone(QByteArray result, VoiceWaveform waveform, qint App::wnd()->activateWindow(); int32 duration = samples / AudioVoiceMsgFrequency; - _fileLoader.addTask(new FileLoadTask(result, duration, waveform, FileLoadTo(_peer->id, _silent.checked(), replyToId()))); + _fileLoader.addTask(new FileLoadTask(result, duration, waveform, FileLoadTo(_peer->id, _silent->checked(), replyToId()))); cancelReplyAfterMediaSend(lastForceReplyReplied()); } @@ -4203,7 +4211,7 @@ void HistoryWidget::showHistory(const PeerId &peerId, MsgId showAtMsgId, bool re _editMsgId = _replyToId = 0; _previewData = 0; _previewCache.clear(); - _fieldBarCancel.hide(); + _fieldBarCancel->hide(); _membersDropdownShowTimer.stop(); if (_list) _list->deleteLater(); @@ -4363,8 +4371,8 @@ void HistoryWidget::updateNotifySettings() { _muteUnmute.setText(lang(_history->mute() ? lng_channel_unmute : lng_channel_mute)); if (_peer->notify != UnknownNotifySettings) { - _silent.setChecked(_peer->notify != EmptyNotifySettings && (_peer->notify->flags & MTPDpeerNotifySettings::Flag::f_silent)); - if (_silent.isHidden() && hasSilentToggle()) { + _silent->setChecked(_peer->notify != EmptyNotifySettings && (_peer->notify->flags & MTPDpeerNotifySettings::Flag::f_silent)); + if (_silent->isHidden() && hasSilentToggle()) { updateControlsVisibility(); } } @@ -4499,11 +4507,11 @@ void HistoryWidget::updateControlsVisibility() { _muteUnmute.hide(); _fieldAutocomplete->hide(); _field.hide(); - _fieldBarCancel.hide(); + _fieldBarCancel->hide(); _attachDocument->hide(); _attachPhoto->hide(); _attachEmoji->hide(); - _silent.hide(); + _silent->hide(); _historyToEnd->hide(); _botKeyboardShow->hide(); _botKeyboardHide->hide(); @@ -4561,9 +4569,9 @@ void HistoryWidget::updateControlsVisibility() { _botStart.hide(); _attachDocument->hide(); _attachPhoto->hide(); - _silent.hide(); + _silent->hide(); _kbScroll.hide(); - _fieldBarCancel.hide(); + _fieldBarCancel->hide(); _attachDocument->hide(); _attachPhoto->hide(); _attachEmoji->hide(); @@ -4597,9 +4605,9 @@ void HistoryWidget::updateControlsVisibility() { _botCommandStart->hide(); _attachDocument->hide(); _attachPhoto->hide(); - _silent.hide(); + _silent->hide(); _kbScroll.hide(); - _fieldBarCancel.hide(); + _fieldBarCancel->hide(); } else { _unblock.hide(); _botStart.hide(); @@ -4627,7 +4635,7 @@ void HistoryWidget::updateControlsVisibility() { _botCommandStart->hide(); _attachDocument->hide(); _attachPhoto->hide(); - _silent.hide(); + _silent->hide(); if (_kbShown) { _kbScroll.show(); } else { @@ -4671,20 +4679,20 @@ void HistoryWidget::updateControlsVisibility() { _attachPhoto->hide(); } if (hasSilentToggle()) { - _silent.show(); + _silent->show(); } else { - _silent.hide(); + _silent->hide(); } updateFieldPlaceholder(); } if (_editMsgId || _replyToId || readyToForward() || (_previewData && _previewData->pendingTill >= 0) || _kbReplyTo) { - if (_fieldBarCancel.isHidden()) { - _fieldBarCancel.show(); + if (_fieldBarCancel->isHidden()) { + _fieldBarCancel->show(); resizeEvent(0); update(); } } else { - _fieldBarCancel.hide(); + _fieldBarCancel->hide(); } } } else { @@ -4697,9 +4705,9 @@ void HistoryWidget::updateControlsVisibility() { _muteUnmute.hide(); _attachDocument->hide(); _attachPhoto->hide(); - _silent.hide(); + _silent->hide(); _kbScroll.hide(); - _fieldBarCancel.hide(); + _fieldBarCancel->hide(); _attachDocument->hide(); _attachPhoto->hide(); _attachEmoji->hide(); @@ -4719,7 +4727,7 @@ void HistoryWidget::updateControlsVisibility() { } void HistoryWidget::updateMouseTracking() { - bool trackMouse = !_fieldBarCancel.isHidden() || _pinnedBar || (cHasAudioCapture() && _send.isHidden() && !_field.isHidden()); + bool trackMouse = !_fieldBarCancel->isHidden() || _pinnedBar || (cHasAudioCapture() && _send.isHidden() && !_field.isHidden()); setMouseTracking(trackMouse); } @@ -5244,7 +5252,7 @@ void HistoryWidget::onSend(bool ctrlShiftEnter, MsgId replyTo) { message.history = _history; message.textWithTags = _field.getTextWithTags(); message.replyTo = replyTo; - message.silent = _silent.checked(); + message.silent = _silent->checked(); message.webPageId = webPageId; App::main()->sendMessage(message); @@ -5388,7 +5396,7 @@ void HistoryWidget::shareContact(const PeerId &peer, const QString &phone, const bool channelPost = p->isChannel() && !p->isMegagroup(); bool showFromName = !channelPost || p->asChannel()->addsSignature(); - bool silentPost = channelPost && _silent.checked(); + bool silentPost = channelPost && _silent->checked(); if (channelPost) { flags |= MTPDmessage::Flag::f_views; flags |= MTPDmessage::Flag::f_post; @@ -5404,7 +5412,7 @@ void HistoryWidget::shareContact(const PeerId &peer, const QString &phone, const App::historyRegRandom(randomId, newId); - App::main()->finishForwarding(history, _silent.checked()); + App::main()->finishForwarding(history, _silent->checked()); cancelReplyAfterMediaSend(lastKeyboardUsed); } @@ -5459,12 +5467,12 @@ void HistoryWidget::showAnimated(Window::SlideDirection direction, const Window: _attachPhoto->hide(); _attachEmoji->hide(); _fieldAutocomplete->hide(); - _silent.hide(); + _silent->hide(); _botKeyboardShow->hide(); _botKeyboardHide->hide(); _botCommandStart->hide(); _field.hide(); - _fieldBarCancel.hide(); + _fieldBarCancel->hide(); _send.hide(); if (_inlineBotCancel) _inlineBotCancel->hide(); _unblock.hide(); @@ -5664,8 +5672,8 @@ void HistoryWidget::mouseMoveEvent(QMouseEvent *e) { QPoint pos(e ? e->pos() : mapFromGlobal(QCursor::pos())); bool inRecord = _send.geometry().contains(pos); bool inField = pos.y() >= (_scroll.y() + _scroll.height()) && pos.y() < height() && pos.x() >= 0 && pos.x() < width(); - bool inReplyEdit = QRect(st::replySkip, _field.y() - st::sendPadding - st::replyHeight, width() - st::replySkip - _fieldBarCancel.width(), st::replyHeight).contains(pos) && (_editMsgId || replyToId()); - bool inPinnedMsg = QRect(0, 0, width(), st::replyHeight).contains(pos) && _pinnedBar; + bool inReplyEdit = QRect(st::historyReplySkip, _field.y() - st::sendPadding - st::historyReplyHeight, width() - st::historyReplySkip - _fieldBarCancel->width(), st::historyReplyHeight).contains(pos) && (_editMsgId || replyToId()); + bool inPinnedMsg = QRect(0, 0, width(), st::historyReplyHeight).contains(pos) && _pinnedBar; bool startAnim = false; if (inRecord != _inRecord) { _inRecord = inRecord; @@ -5699,7 +5707,7 @@ void HistoryWidget::leaveToChildEvent(QEvent *e, QWidget *child) { // e -- from void HistoryWidget::mouseReleaseEvent(QMouseEvent *e) { if (_replyForwardPressed) { _replyForwardPressed = false; - update(0, _field.y() - st::sendPadding - st::replyHeight, width(), st::replyHeight); + update(0, _field.y() - st::sendPadding - st::historyReplyHeight, width(), st::historyReplyHeight); } if (_attachDrag != DragStateNone || !_attachDragPhoto->isHidden() || !_attachDragDocument->isHidden()) { _attachDrag = DragStateNone; @@ -6150,7 +6158,7 @@ void HistoryWidget::onKbToggle(bool manual) { _kbReplyTo = 0; if (!readyToForward() && (!_previewData || _previewData->pendingTill < 0) && !_editMsgId && !_replyToId) { - _fieldBarCancel.hide(); + _fieldBarCancel->hide(); updateMouseTracking(); } } else { @@ -6175,7 +6183,7 @@ void HistoryWidget::onKbToggle(bool manual) { if (_kbReplyTo && !_editMsgId && !_replyToId && fieldEnabled) { updateReplyToName(); _replyEditMsgText.setText(st::msgFont, textClean(_kbReplyTo->inReplyText()), _textDlgOptions); - _fieldBarCancel.show(); + _fieldBarCancel->show(); updateMouseTracking(); } if (manual && _history) { @@ -6194,7 +6202,7 @@ void HistoryWidget::onKbToggle(bool manual) { if (_kbReplyTo && !_editMsgId && !_replyToId) { updateReplyToName(); _replyEditMsgText.setText(st::msgFont, textClean(_kbReplyTo->inReplyText()), _textDlgOptions); - _fieldBarCancel.show(); + _fieldBarCancel->show(); updateMouseTracking(); } if (manual && _history) { @@ -6455,10 +6463,10 @@ void HistoryWidget::moveFieldControls() { right -= _attachEmoji->width(); _botKeyboardShow->move(right - _botKeyboardShow->width(), buttonsBottom); _botCommandStart->move(right - _botCommandStart->width(), buttonsBottom); - _silent.move(right - _silent.width(), buttonsBottom); + _silent->move(right - _silent->width(), buttonsBottom); right = w; - _fieldBarCancel.move(right - _fieldBarCancel.width(), _field.y() - st::sendPadding - _fieldBarCancel.height()); + _fieldBarCancel->move(right - _fieldBarCancel->width(), _field.y() - st::sendPadding - _fieldBarCancel->height()); _attachType->move(0, _attachDocument->y() - _attachType->height()); _emojiPan->moveBottom(_attachEmoji->y()); @@ -6475,7 +6483,7 @@ void HistoryWidget::updateFieldSize() { fieldWidth -= _attachEmoji->width(); if (kbShowShown) fieldWidth -= _botKeyboardShow->width(); if (_cmdStartShown) fieldWidth -= _botCommandStart->width(); - if (hasSilentToggle()) fieldWidth -= _silent.width(); + if (hasSilentToggle()) fieldWidth -= _silent->width(); if (_field.width() != fieldWidth) { _field.resize(fieldWidth, _field.height()); @@ -6497,7 +6505,7 @@ void HistoryWidget::clearInlineBot() { void HistoryWidget::inlineBotChanged() { bool isInlineBot = _inlineBot && (_inlineBot != LookingUpInlineBot); if (isInlineBot && !_inlineBotCancel) { - _inlineBotCancel = std_::make_unique(this, st::inlineBotCancel); + _inlineBotCancel = std_::make_unique(this, st::historyInlineBotCancel); connect(_inlineBotCancel.get(), SIGNAL(clicked()), this, SLOT(onInlineBotCancel())); _inlineBotCancel->setGeometry(_send.geometry()); _attachEmoji->raise(); @@ -6543,7 +6551,7 @@ void HistoryWidget::updateFieldPlaceholder() { if (_inlineBot && _inlineBot != LookingUpInlineBot) { _field.setPlaceholder(_inlineBot->botInfo->inlinePlaceholder.mid(1), _inlineBot->username.size() + 2); } else { - _field.setPlaceholder(lang((_history && _history->isChannel() && !_history->isMegagroup()) ? (_silent.checked() ? lng_broadcast_silent_ph : lng_broadcast_ph) : lng_message_ph)); + _field.setPlaceholder(lang((_history && _history->isChannel() && !_history->isMegagroup()) ? (_silent->checked() ? lng_broadcast_silent_ph : lng_broadcast_ph) : lng_message_ph)); } _send.setText(lang(lng_send_button)); } @@ -6553,7 +6561,7 @@ void HistoryWidget::uploadImage(const QImage &img, PrepareMediaType type, FileLo if (!_history) return; App::wnd()->activateWindow(); - auto task = new FileLoadTask(img, type, FileLoadTo(_peer->id, _silent.checked(), replyToId()), confirm, source); + auto task = new FileLoadTask(img, type, FileLoadTo(_peer->id, _silent->checked(), replyToId()), confirm, source); if (withText) { _confirmWithTextId = task->fileid(); } @@ -6564,7 +6572,7 @@ void HistoryWidget::uploadFile(const QString &file, PrepareMediaType type, FileL if (!_history) return; App::wnd()->activateWindow(); - FileLoadTask *task = new FileLoadTask(file, type, FileLoadTo(_peer->id, _silent.checked(), replyToId()), confirm); + FileLoadTask *task = new FileLoadTask(file, type, FileLoadTo(_peer->id, _silent->checked(), replyToId()), confirm); if (withText) { _confirmWithTextId = task->fileid(); } @@ -6578,7 +6586,7 @@ void HistoryWidget::uploadFiles(const QStringList &files, PrepareMediaType type) App::wnd()->activateWindow(); - FileLoadTo to(_peer->id, _silent.checked(), replyToId()); + FileLoadTo to(_peer->id, _silent->checked(), replyToId()); TasksList tasks; tasks.reserve(files.size()); @@ -6594,7 +6602,7 @@ void HistoryWidget::uploadFileContent(const QByteArray &fileContent, PrepareMedi if (!_history) return; App::wnd()->activateWindow(); - _fileLoader.addTask(new FileLoadTask(fileContent, type, FileLoadTo(_peer->id, _silent.checked(), replyToId()))); + _fileLoader.addTask(new FileLoadTask(fileContent, type, FileLoadTo(_peer->id, _silent->checked(), replyToId()))); cancelReplyAfterMediaSend(lastForceReplyReplied()); } @@ -7017,13 +7025,13 @@ void HistoryWidget::updateControlsGeometry() { moveFieldControls(); if (_pinnedBar) { - if (_scroll.y() != st::replyHeight) { - _scroll.move(0, st::replyHeight); - _reportSpamPanel.move(0, st::replyHeight); + if (_scroll.y() != st::historyReplyHeight) { + _scroll.move(0, st::historyReplyHeight); + _reportSpamPanel.move(0, st::historyReplyHeight); _fieldAutocomplete->setBoundings(_scroll.geometry()); } _pinnedBar->cancel->move(width() - _pinnedBar->cancel->width(), 0); - _pinnedBar->shadow->setGeometry(0, st::replyHeight, width(), st::lineWidth); + _pinnedBar->shadow->setGeometry(0, st::historyReplyHeight, width(), st::lineWidth); } else if (_scroll.y() != 0) { _scroll.move(0, 0); _reportSpamPanel.move(0, 0); @@ -7114,14 +7122,14 @@ void HistoryWidget::updateListSize(bool initial, bool loadedDown, const ScrollCh newScrollHeight -= (_field.height() + 2 * st::sendPadding); } if (_editMsgId || replyToId() || readyToForward() || (_previewData && _previewData->pendingTill >= 0)) { - newScrollHeight -= st::replyHeight; + newScrollHeight -= st::historyReplyHeight; } if (_kbShown) { newScrollHeight -= _kbScroll.height(); } } if (_pinnedBar) { - newScrollHeight -= st::replyHeight; + newScrollHeight -= st::historyReplyHeight; } int wasScrollTop = _scroll.scrollTop(); bool wasAtBottom = wasScrollTop + 1 > _scroll.scrollTopMax(); @@ -7339,7 +7347,7 @@ void HistoryWidget::updateBotKeyboard(History *h, bool force) { if (_kbReplyTo && !_replyToId) { updateReplyToName(); _replyEditMsgText.setText(st::msgFont, textClean(_kbReplyTo->inReplyText()), _textDlgOptions); - _fieldBarCancel.show(); + _fieldBarCancel->show(); updateMouseTracking(); } } else { @@ -7354,7 +7362,7 @@ void HistoryWidget::updateBotKeyboard(History *h, bool force) { _kbShown = false; _kbReplyTo = 0; if (!readyToForward() && (!_previewData || _previewData->pendingTill < 0) && !_replyToId) { - _fieldBarCancel.hide(); + _fieldBarCancel->hide(); updateMouseTracking(); } } @@ -7370,7 +7378,7 @@ void HistoryWidget::updateBotKeyboard(History *h, bool force) { _kbShown = false; _kbReplyTo = 0; if (!readyToForward() && (!_previewData || _previewData->pendingTill < 0) && !_replyToId && !_editMsgId) { - _fieldBarCancel.hide(); + _fieldBarCancel->hide(); updateMouseTracking(); } } @@ -7414,8 +7422,8 @@ void HistoryWidget::updateToEndVisibility() { } void HistoryWidget::mousePressEvent(QMouseEvent *e) { - _replyForwardPressed = QRect(0, _field.y() - st::sendPadding - st::replyHeight, st::replySkip, st::replyHeight).contains(e->pos()); - if (_replyForwardPressed && !_fieldBarCancel.isHidden()) { + _replyForwardPressed = QRect(0, _field.y() - st::sendPadding - st::historyReplyHeight, st::historyReplySkip, st::historyReplyHeight).contains(e->pos()); + if (_replyForwardPressed && !_fieldBarCancel->isHidden()) { updateField(); } else if (_inRecord && cHasAudioCapture()) { emit audioCapture()->start(); @@ -7505,7 +7513,7 @@ void HistoryWidget::onInlineResultSend(InlineBots::Result *result, UserData *bot } bool channelPost = _peer->isChannel() && !_peer->isMegagroup(); bool showFromName = !channelPost || _peer->asChannel()->addsSignature(); - bool silentPost = channelPost && _silent.checked(); + bool silentPost = channelPost && _silent->checked(); if (channelPost) { flags |= MTPDmessage::Flag::f_views; flags |= MTPDmessage::Flag::f_post; @@ -7528,7 +7536,7 @@ void HistoryWidget::onInlineResultSend(InlineBots::Result *result, UserData *bot result->addToHistory(_history, flags, messageId, messageFromId, messageDate, messageViaBotId, replyToId()); _history->sendRequestId = MTP::send(MTPmessages_SendInlineBotResult(MTP_flags(sendFlags), _peer->input, MTP_int(replyToId()), MTP_long(randomId), MTP_long(result->getQueryId()), MTP_string(result->getId())), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::sendMessageFail), 0, 0, _history->sendRequestId); - App::main()->finishForwarding(_history, _silent.checked()); + App::main()->finishForwarding(_history, _silent->checked()); cancelReply(lastKeyboardUsed); App::historyRegRandom(randomId, newId); @@ -7557,7 +7565,7 @@ void HistoryWidget::onInlineResultSend(InlineBots::Result *result, UserData *bot HistoryWidget::PinnedBar::PinnedBar(MsgId msgId, HistoryWidget *parent) : msgId(msgId) -, cancel(parent, st::replyCancel) +, cancel(parent, st::historyReplyCancel) , shadow(parent, st::shadowColor) { } @@ -7632,7 +7640,7 @@ bool HistoryWidget::pinnedMsgVisibilityUpdated() { result = true; if (_scroll.scrollTop() != unreadBarTop()) { - _scroll.scrollToY(_scroll.scrollTop() + st::replyHeight); + _scroll.scrollToY(_scroll.scrollTop() + st::historyReplyHeight); } } else if (_pinnedBar->msgId != pinnedMsgId) { _pinnedBar->msgId = pinnedMsgId; @@ -7648,7 +7656,7 @@ bool HistoryWidget::pinnedMsgVisibilityUpdated() { destroyPinnedBar(); result = true; if (_scroll.scrollTop() != unreadBarTop()) { - _scroll.scrollToY(_scroll.scrollTop() - st::replyHeight); + _scroll.scrollToY(_scroll.scrollTop() - st::historyReplyHeight); } resizeEvent(0); } @@ -7687,7 +7695,7 @@ bool HistoryWidget::sendExistingDocument(DocumentData *doc, const QString &capti } bool channelPost = _peer->isChannel() && !_peer->isMegagroup(); bool showFromName = !channelPost || _peer->asChannel()->addsSignature(); - bool silentPost = channelPost && _silent.checked(); + bool silentPost = channelPost && _silent->checked(); if (channelPost) { flags |= MTPDmessage::Flag::f_views; flags |= MTPDmessage::Flag::f_post; @@ -7701,7 +7709,7 @@ bool HistoryWidget::sendExistingDocument(DocumentData *doc, const QString &capti _history->addNewDocument(newId.msg, flags, 0, replyToId(), date(MTP_int(unixtime())), showFromName ? MTP::authedId() : 0, doc, caption, MTPnullMarkup); _history->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_flags(sendFlags), _peer->input, MTP_int(replyToId()), MTP_inputMediaDocument(mtpInput, MTP_string(caption)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::sendMessageFail), 0, 0, _history->sendRequestId); - App::main()->finishForwarding(_history, _silent.checked()); + App::main()->finishForwarding(_history, _silent->checked()); cancelReplyAfterMediaSend(lastKeyboardUsed); if (doc->sticker()) App::main()->incrementSticker(doc); @@ -7742,7 +7750,7 @@ void HistoryWidget::sendExistingPhoto(PhotoData *photo, const QString &caption) } bool channelPost = _peer->isChannel() && !_peer->isMegagroup(); bool showFromName = !channelPost || _peer->asChannel()->addsSignature(); - bool silentPost = channelPost && _silent.checked(); + bool silentPost = channelPost && _silent->checked(); if (channelPost) { flags |= MTPDmessage::Flag::f_views; flags |= MTPDmessage::Flag::f_post; @@ -7756,7 +7764,7 @@ void HistoryWidget::sendExistingPhoto(PhotoData *photo, const QString &caption) _history->addNewPhoto(newId.msg, flags, 0, replyToId(), date(MTP_int(unixtime())), showFromName ? MTP::authedId() : 0, photo, caption, MTPnullMarkup); _history->sendRequestId = MTP::send(MTPmessages_SendMedia(MTP_flags(sendFlags), _peer->input, MTP_int(replyToId()), MTP_inputMediaPhoto(MTP_inputPhoto(MTP_long(photo->id), MTP_long(photo->access)), MTP_string(caption)), MTP_long(randomId), MTPnullMarkup), App::main()->rpcDone(&MainWidget::sentUpdatesReceived), App::main()->rpcFail(&MainWidget::sendMessageFail), 0, 0, _history->sendRequestId); - App::main()->finishForwarding(_history, _silent.checked()); + App::main()->finishForwarding(_history, _silent->checked()); cancelReplyAfterMediaSend(lastKeyboardUsed); App::historyRegRandom(randomId, newId); @@ -7818,7 +7826,7 @@ void HistoryWidget::onReplyToMessage() { updateBotKeyboard(); - if (!_field.isHidden()) _fieldBarCancel.show(); + if (!_field.isHidden()) _fieldBarCancel->show(); updateMouseTracking(); updateReplyToName(); resizeEvent(0); @@ -7871,7 +7879,7 @@ void HistoryWidget::onEditMessage() { updateBotKeyboard(); - if (!_field.isHidden()) _fieldBarCancel.show(); + if (!_field.isHidden()) _fieldBarCancel->show(); updateFieldPlaceholder(); updateMouseTracking(); updateReplyToName(); @@ -7964,7 +7972,7 @@ bool HistoryWidget::cancelReply(bool lastKeyboardUsed) { _replyToId = 0; mouseMoveEvent(0); if (!readyToForward() && (!_previewData || _previewData->pendingTill < 0) && !_kbReplyTo) { - _fieldBarCancel.hide(); + _fieldBarCancel->hide(); updateMouseTracking(); } @@ -8026,7 +8034,7 @@ void HistoryWidget::cancelEdit() { mouseMoveEvent(nullptr); if (!readyToForward() && (!_previewData || _previewData->pendingTill < 0) && !replyToId()) { - _fieldBarCancel.hide(); + _fieldBarCancel->hide(); updateMouseTracking(); } @@ -8089,7 +8097,7 @@ void HistoryWidget::previewCancel() { _previewLinks.clear(); updatePreview(); if (!_editMsgId && !_replyToId && !readyToForward() && !_kbReplyTo) { - _fieldBarCancel.hide(); + _fieldBarCancel->hide(); updateMouseTracking(); } } @@ -8155,7 +8163,7 @@ void HistoryWidget::gotPreview(QString links, const MTPMessageMedia &result, mtp void HistoryWidget::updatePreview() { _previewTimer.stop(); if (_previewData && _previewData->pendingTill >= 0) { - _fieldBarCancel.show(); + _fieldBarCancel->show(); updateMouseTracking(); if (_previewData->pendingTill) { _previewTitle.setText(st::msgServiceNameFont, lang(lng_preview_loading), _textNameOptions); @@ -8199,7 +8207,7 @@ void HistoryWidget::updatePreview() { _previewDescription.setText(st::msgFont, textClean(desc), _textDlgOptions); } } else if (!readyToForward() && !replyToId() && !_editMsgId) { - _fieldBarCancel.hide(); + _fieldBarCancel->hide(); updateMouseTracking(); } resizeEvent(0); @@ -8461,7 +8469,7 @@ void HistoryWidget::updateReplyEditTexts(bool force) { updateBotKeyboard(); if (!_field.isHidden() || _recording) { - _fieldBarCancel.show(); + _fieldBarCancel->show(); updateMouseTracking(); } updateReplyToName(); @@ -8505,21 +8513,21 @@ void HistoryWidget::drawField(Painter &p, const QRect &rect) { if (!_editMsgId && drawMsgText && drawMsgText->author()->nameVersion > _replyToNameVersion) { updateReplyToName(); } - backy -= st::replyHeight; - backh += st::replyHeight; + backy -= st::historyReplyHeight; + backh += st::historyReplyHeight; } else if (hasForward) { App::main()->fillForwardingInfo(from, text, serviceColor, preview); - backy -= st::replyHeight; - backh += st::replyHeight; + backy -= st::historyReplyHeight; + backh += st::historyReplyHeight; } else if (_previewData && _previewData->pendingTill >= 0) { - backy -= st::replyHeight; - backh += st::replyHeight; + backy -= st::historyReplyHeight; + backh += st::historyReplyHeight; } bool drawPreview = (_previewData && _previewData->pendingTill >= 0) && !_replyForwardPressed; p.fillRect(0, backy, width(), backh, st::taMsgField.bgColor); if (_editMsgId || _replyToId || (!hasForward && _kbReplyTo)) { - int32 replyLeft = st::replySkip; - p.drawSprite(QPoint(st::replyIconPos.x(), backy + st::replyIconPos.y()), _editMsgId ? st::editIcon : st::replyIcon); + int32 replyLeft = st::historyReplySkip; + (_editMsgId ? st::historyEditIcon : st::historyReplyIcon).paint(p, st::historyReplyIconPosition + QPoint(0, backy), width()); if (!drawPreview) { if (drawMsgText) { if (drawMsgText->getMedia() && drawMsgText->getMedia()->hasReplyPreview()) { @@ -8530,23 +8538,23 @@ void HistoryWidget::drawField(Painter &p, const QRect &rect) { } replyLeft += st::msgReplyBarSize.height() + st::msgReplyBarSkip - st::msgReplyBarSize.width() - st::msgReplyBarPos.x(); } - p.setPen(st::replyColor); + p.setPen(st::historyReplyColor); if (_editMsgId) { paintEditHeader(p, rect, replyLeft, backy); } else { - _replyToName.drawElided(p, replyLeft, backy + st::msgReplyPadding.top(), width() - replyLeft - _fieldBarCancel.width() - st::msgReplyPadding.right()); + _replyToName.drawElided(p, replyLeft, backy + st::msgReplyPadding.top(), width() - replyLeft - _fieldBarCancel->width() - st::msgReplyPadding.right()); } p.setPen((((drawMsgText->toHistoryMessage() && drawMsgText->toHistoryMessage()->emptyText()) || drawMsgText->serviceMsg()) ? st::msgInDateFg : st::msgColor)->p); - _replyEditMsgText.drawElided(p, replyLeft, backy + st::msgReplyPadding.top() + st::msgServiceNameFont->height, width() - replyLeft - _fieldBarCancel.width() - st::msgReplyPadding.right()); + _replyEditMsgText.drawElided(p, replyLeft, backy + st::msgReplyPadding.top() + st::msgServiceNameFont->height, width() - replyLeft - _fieldBarCancel->width() - st::msgReplyPadding.right()); } else { p.setFont(st::msgDateFont->f); p.setPen(st::msgInDateFg->p); - p.drawText(replyLeft, backy + st::msgReplyPadding.top() + (st::msgReplyBarSize.height() - st::msgDateFont->height) / 2 + st::msgDateFont->ascent, st::msgDateFont->elided(lang(lng_profile_loading), width() - replyLeft - _fieldBarCancel.width() - st::msgReplyPadding.right())); + p.drawText(replyLeft, backy + st::msgReplyPadding.top() + (st::msgReplyBarSize.height() - st::msgDateFont->height) / 2 + st::msgDateFont->ascent, st::msgDateFont->elided(lang(lng_profile_loading), width() - replyLeft - _fieldBarCancel->width() - st::msgReplyPadding.right())); } } } else if (from && text) { - int32 forwardLeft = st::replySkip; - p.drawSprite(QPoint(st::replyIconPos.x(), backy + st::replyIconPos.y()), st::forwardIcon); + int forwardLeft = st::historyReplySkip; + st::historyForwardIcon.paint(p, st::historyReplyIconPosition + QPoint(0, backy), width()); if (!drawPreview) { if (!preview->isNull()) { QRect to(forwardLeft, backy + st::msgReplyPadding.top(), st::msgReplyBarSize.height(), st::msgReplyBarSize.height()); @@ -8558,15 +8566,15 @@ void HistoryWidget::drawField(Painter &p, const QRect &rect) { } forwardLeft += st::msgReplyBarSize.height() + st::msgReplyBarSkip - st::msgReplyBarSize.width() - st::msgReplyBarPos.x(); } - p.setPen(st::replyColor->p); - from->drawElided(p, forwardLeft, backy + st::msgReplyPadding.top(), width() - forwardLeft - _fieldBarCancel.width() - st::msgReplyPadding.right()); + p.setPen(st::historyReplyColor->p); + from->drawElided(p, forwardLeft, backy + st::msgReplyPadding.top(), width() - forwardLeft - _fieldBarCancel->width() - st::msgReplyPadding.right()); p.setPen((serviceColor ? st::msgInDateFg : st::msgColor)->p); - text->drawElided(p, forwardLeft, backy + st::msgReplyPadding.top() + st::msgServiceNameFont->height, width() - forwardLeft - _fieldBarCancel.width() - st::msgReplyPadding.right()); + text->drawElided(p, forwardLeft, backy + st::msgReplyPadding.top() + st::msgServiceNameFont->height, width() - forwardLeft - _fieldBarCancel->width() - st::msgReplyPadding.right()); } } if (drawPreview) { - int32 previewLeft = st::replySkip + st::webPageLeft; - p.fillRect(st::replySkip, backy + st::msgReplyPadding.top(), st::webPageBar, st::msgReplyBarSize.height(), st::msgInReplyBarColor->b); + int32 previewLeft = st::historyReplySkip + st::webPageLeft; + p.fillRect(st::historyReplySkip, backy + st::msgReplyPadding.top(), st::webPageBar, st::msgReplyBarSize.height(), st::msgInReplyBarColor->b); if ((_previewData->photo && !_previewData->photo->thumb->isNull()) || (_previewData->document && !_previewData->document->thumb->isNull())) { ImagePtr replyPreview = _previewData->photo ? _previewData->photo->makeReplyPreview() : _previewData->document->makeReplyPreview(); if (!replyPreview->isNull()) { @@ -8580,10 +8588,10 @@ void HistoryWidget::drawField(Painter &p, const QRect &rect) { } previewLeft += st::msgReplyBarSize.height() + st::msgReplyBarSkip - st::msgReplyBarSize.width() - st::msgReplyBarPos.x(); } - p.setPen(st::replyColor->p); - _previewTitle.drawElided(p, previewLeft, backy + st::msgReplyPadding.top(), width() - previewLeft - _fieldBarCancel.width() - st::msgReplyPadding.right()); + p.setPen(st::historyReplyColor->p); + _previewTitle.drawElided(p, previewLeft, backy + st::msgReplyPadding.top(), width() - previewLeft - _fieldBarCancel->width() - st::msgReplyPadding.right()); p.setPen(st::msgColor->p); - _previewDescription.drawElided(p, previewLeft, backy + st::msgReplyPadding.top() + st::msgServiceNameFont->height, width() - previewLeft - _fieldBarCancel.width() - st::msgReplyPadding.right()); + _previewDescription.drawElided(p, previewLeft, backy + st::msgReplyPadding.top() + st::msgServiceNameFont->height, width() - previewLeft - _fieldBarCancel->width() - st::msgReplyPadding.right()); } } @@ -8676,7 +8684,7 @@ void HistoryWidget::drawPinnedBar(Painter &p) { Text *from = 0, *text = 0; bool serviceColor = false, hasForward = readyToForward(); ImagePtr preview; - p.fillRect(0, 0, width(), st::replyHeight, st::taMsgField.bgColor); + p.fillRect(0, 0, width(), st::historyReplyHeight, st::taMsgField.bgColor); QRect rbar(rtlrect(st::msgReplyBarSkip + st::msgReplyBarPos.x(), st::msgReplyPadding.top() + st::msgReplyBarPos.y(), st::msgReplyBarSize.width(), st::msgReplyBarSize.height(), width())); p.fillRect(rbar, st::msgInReplyBarColor); @@ -8691,7 +8699,7 @@ void HistoryWidget::drawPinnedBar(Painter &p) { } left += st::msgReplyBarSize.height() + st::msgReplyBarSkip - st::msgReplyBarSize.width() - st::msgReplyBarPos.x(); } - p.setPen(st::replyColor); + p.setPen(st::historyReplyColor); p.setFont(st::msgServiceNameFont); p.drawText(left, st::msgReplyPadding.top() + st::msgServiceNameFont->ascent, lang(lng_pinned_message)); diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index d5a81ba86b..87999b2bb7 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -23,6 +23,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "localimageloader.h" #include "ui/effects/rect_shadow.h" #include "ui/widgets/tooltip.h" +#include "ui/buttons/icon_button.h" #include "history/history_common.h" #include "history/field_autocomplete.h" #include "window/section_widget.h" @@ -508,18 +509,27 @@ private: }; -class SilentToggle : public FlatCheckbox, public Ui::AbstractTooltipShower { +class SilentToggle : public Ui::IconButton, public Ui::AbstractTooltipShower { public: - SilentToggle(QWidget *parent); - void mouseMoveEvent(QMouseEvent *e) override; - void mouseReleaseEvent(QMouseEvent *e) override; - void leaveEvent(QEvent *e) override; + + void setChecked(bool checked); + bool checked() const { + return _checked; + } // AbstractTooltipShower interface QString tooltipText() const override; QPoint tooltipPos() const override; +protected: + void mouseMoveEvent(QMouseEvent *e) override; + void mouseReleaseEvent(QMouseEvent *e) override; + void leaveEvent(QEvent *e) override; + +private: + bool _checked = false; + }; EntitiesInText entitiesFromTextTags(const TextWithTags::Tags &tags); @@ -885,7 +895,7 @@ private: Text _replyEditMsgText; mutable SingleTimer _updateEditTimeLeftDisplay; - IconedButton _fieldBarCancel; + ChildWidget _fieldBarCancel; void updateReplyEditTexts(bool force = false); struct PinnedBar { @@ -895,7 +905,7 @@ private: MsgId msgId = 0; HistoryItem *msg = nullptr; Text text; - ChildWidget cancel; + ChildWidget cancel; ChildWidget shadow; }; std_::unique_ptr _pinnedBar; @@ -1075,7 +1085,7 @@ private: UserData *_inlineBot = nullptr; QString _inlineBotUsername; mtpRequestId _inlineBotResolveRequestId = 0; - std_::unique_ptr _inlineBotCancel; + std_::unique_ptr _inlineBotCancel; void inlineBotResolveDone(const MTPcontacts_ResolvedPeer &result); bool inlineBotResolveFail(QString name, const RPCError &error); @@ -1096,7 +1106,7 @@ private: ChildWidget _botKeyboardShow; ChildWidget _botKeyboardHide; ChildWidget _botCommandStart; - SilentToggle _silent; + ChildWidget _silent; bool _cmdStartShown = false; MessageField _field; Animation _a_record, _a_recording; diff --git a/Telegram/SourceFiles/intro/intro.style b/Telegram/SourceFiles/intro/intro.style index e56d5f7b7e..a6d8e20771 100644 --- a/Telegram/SourceFiles/intro/intro.style +++ b/Telegram/SourceFiles/intro/intro.style @@ -25,20 +25,15 @@ introErrLabel: flatLabel(labelDefFlat) { font: introErrFont; align: align(center); } -introBackButton: IconButton { +introBackButton: IconButton(defaultIconButton) { width: 40px; height: 40px; - opacity: 0.71; - overOpacity: 1.; - icon: icon { { size(40px, 40px), #eeeeee }, { "title_previous", #969696, point(12px, 12px) }, }; iconPosition: point(0px, 0px); downIconPosition: point(0px, 0px); - - duration: 150; } introBackPosition: point(32px, 32px); diff --git a/Telegram/SourceFiles/intro/introsignup.cpp b/Telegram/SourceFiles/intro/introsignup.cpp index 74034244f7..153e470a41 100644 --- a/Telegram/SourceFiles/intro/introsignup.cpp +++ b/Telegram/SourceFiles/intro/introsignup.cpp @@ -138,7 +138,7 @@ void IntroSignup::paintEvent(QPaintEvent *e) { } else { p.fillRect(phRect, st::newGroupPhotoBg); } - p.drawSpriteCenter(phRect, st::newGroupPhotoIcon); + st::newGroupPhotoIcon.paintInCenter(p, phRect); } else { p.drawPixmap(_phLeft, _phTop, _photoSmall); } diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index e75fd1d1d2..4bf11a7b86 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -21,12 +21,14 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "stdafx.h" #include "styles/style_overview.h" +#include "styles/style_dialogs.h" #include "boxes/addcontactbox.h" #include "boxes/confirmbox.h" #include "boxes/photocropbox.h" #include "ui/filedialog.h" #include "ui/widgets/popup_menu.h" #include "ui/widgets/tooltip.h" +#include "ui/buttons/icon_button.h" #include "window/top_bar_widget.h" #include "window/chat_background.h" #include "lang.h" @@ -52,7 +54,7 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, PeerD , _channel(peerToChannel(_peer->id)) , _rowWidth(st::msgMinWidth) , _search(this, st::dlgFilter, lang(lng_dlg_filter)) -, _cancelSearch(this, st::btnCancelSearch) +, _cancelSearch(this, st::dialogsCancelSearch) , _itemsToBeLoaded(LinksOverviewPerPage * 2) , _width(st::wndMinWidth) { subscribe(FileDownload::ImageLoaded(), [this] { update(); }); @@ -73,14 +75,14 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, PeerD mediaOverviewUpdated(); setMouseTracking(true); - connect(&_cancelSearch, SIGNAL(clicked()), this, SLOT(onCancelSearch())); + connect(_cancelSearch, SIGNAL(clicked()), this, SLOT(onCancelSearch())); connect(&_search, SIGNAL(cancelled()), this, SLOT(onCancel())); connect(&_search, SIGNAL(changed()), this, SLOT(onSearchUpdate())); _searchTimer.setSingleShot(true); connect(&_searchTimer, SIGNAL(timeout()), this, SLOT(onSearchMessages())); - _cancelSearch.hide(); + _cancelSearch->hide(); if (_type == OverviewLinks || _type == OverviewFiles) { _search.show(); } else { @@ -1280,7 +1282,7 @@ int32 OverviewInner::resizeToWidth(int32 nwidth, int32 scrollTop, int32 minHeigh _rowsLeft = (_width - _rowWidth) / 2; _search.setGeometry(_rowsLeft, st::linksSearchMargin.top(), _rowWidth, _search.height()); - _cancelSearch.moveToLeft(_rowsLeft + _rowWidth - _cancelSearch.width(), _search.y()); + _cancelSearch->moveToLeft(_rowsLeft + _rowWidth - _cancelSearch->width(), _search.y()); if (_type == OverviewPhotos || _type == OverviewVideos) { for (int32 i = 0, l = _items.size(); i < l; ++i) { @@ -1341,7 +1343,7 @@ void OverviewInner::switchType(MediaOverviewType type) { _search.updatePlaceholder(); onSearchUpdate(); } - _cancelSearch.hide(); + _cancelSearch->hide(); resizeToWidth(_width, 0, _minHeight, true); } @@ -1470,9 +1472,9 @@ void OverviewInner::onSearchUpdate() { _searchQueries.clear(); _searchQuery = QString(); _searchResults.clear(); - _cancelSearch.hide(); - } else if (_cancelSearch.isHidden()) { - _cancelSearch.show(); + _cancelSearch->hide(); + } else if (_cancelSearch->isHidden()) { + _cancelSearch->show(); } if (changed) { @@ -1494,7 +1496,7 @@ void OverviewInner::onCancel() { bool OverviewInner::onCancelSearch() { if (_search.isHidden()) return false; bool clearing = !_search.text().isEmpty(); - _cancelSearch.hide(); + _cancelSearch->hide(); _search.clear(); _search.updatePlaceholder(); onSearchUpdate(); diff --git a/Telegram/SourceFiles/overviewwidget.h b/Telegram/SourceFiles/overviewwidget.h index abd092a8d3..32a7c7e47e 100644 --- a/Telegram/SourceFiles/overviewwidget.h +++ b/Telegram/SourceFiles/overviewwidget.h @@ -34,6 +34,7 @@ class Date; namespace Ui { class PlainShadow; class PopupMenu; +class IconButton; } // namespace Ui class OverviewWidget; @@ -179,7 +180,7 @@ private: int32 setLayoutItem(int32 index, Overview::Layout::AbstractItem *item, int32 top); FlatInput _search; - IconedButton _cancelSearch; + ChildWidget _cancelSearch; QVector _results; int32 _itemsToBeLoaded; diff --git a/Telegram/SourceFiles/settings/settings.style b/Telegram/SourceFiles/settings/settings.style index e7f9881cbb..7e3d6c00a2 100644 --- a/Telegram/SourceFiles/settings/settings.style +++ b/Telegram/SourceFiles/settings/settings.style @@ -33,18 +33,16 @@ settingsFixedBarFont: font(14px semibold); settingsFixedBarFg: windowTextFg; settingsFixedBarTextLeft: 20px; settingsFixedBarTextTop: 16px; -settingsFixedBarClose: IconButton { +settingsFixedBarClose: IconButton(defaultIconButton) { width: settingsFixedBarHeight; height: settingsFixedBarHeight; opacity: 0.31; overOpacity: 0.5; - icon: icon {{ "settings_close", #000000, point(0px, 0px) }}; + icon: boxCancelIcon; iconPosition: point(20px, 20px); downIconPosition: point(20px, 20px); - - duration: 200; } settingsFixedBarShadowBg1: #00000021; settingsFixedBarShadowBg2: #0000000b; diff --git a/Telegram/SourceFiles/stickers/emoji_pan.cpp b/Telegram/SourceFiles/stickers/emoji_pan.cpp index ffa9974568..c3475d53ca 100644 --- a/Telegram/SourceFiles/stickers/emoji_pan.cpp +++ b/Telegram/SourceFiles/stickers/emoji_pan.cpp @@ -2427,14 +2427,14 @@ EmojiPanel::EmojiPanel(QWidget *parent, const QString &text, uint64 setId, bool , _setId(setId) , _special(special) , _deleteVisible(false) -, _delete(special ? 0 : new IconedButton(this, st::simpleClose)) { // Stickers::NoneSetId if in emoji +, _delete(special ? 0 : new Ui::IconButton(this, st::hashtagClose)) { // Stickers::NoneSetId if in emoji resize(st::emojiPanWidth, st::emojiPanHeader); setMouseTracking(true); setFocusPolicy(Qt::NoFocus); setText(text); if (_delete) { _delete->hide(); - _delete->moveToRight(st::emojiPanHeaderLeft - ((_delete->width() - st::simpleClose.icon.pxWidth()) / 2), (st::emojiPanHeader - _delete->height()) / 2, width()); + _delete->moveToRight(st::emojiPanHeaderLeft - ((_delete->width() - st::hashtagClose.icon.width()) / 2), (st::emojiPanHeader - _delete->height()) / 2, width()); connect(_delete, SIGNAL(clicked()), this, SLOT(onDelete())); } } @@ -2452,7 +2452,7 @@ void EmojiPanel::updateText() { int32 availw = st::emojiPanWidth - st::emojiPanHeaderLeft * 2; if (_deleteVisible) { if (!_special && _setId != Stickers::NoneSetId) { - availw -= st::simpleClose.icon.pxWidth() + st::emojiPanHeaderLeft; + availw -= st::hashtagClose.icon.width() + st::emojiPanHeaderLeft; } } else { auto switchText = ([this]() { diff --git a/Telegram/SourceFiles/stickers/emoji_pan.h b/Telegram/SourceFiles/stickers/emoji_pan.h index 3beab87287..7545ae8051 100644 --- a/Telegram/SourceFiles/stickers/emoji_pan.h +++ b/Telegram/SourceFiles/stickers/emoji_pan.h @@ -459,7 +459,7 @@ private: QString _text, _fullText; uint64 _setId; bool _special, _deleteVisible; - IconedButton *_delete; + Ui::IconButton *_delete; }; diff --git a/Telegram/SourceFiles/stickers/stickers.style b/Telegram/SourceFiles/stickers/stickers.style index 4eea840ee1..f5d08bb549 100644 --- a/Telegram/SourceFiles/stickers/stickers.style +++ b/Telegram/SourceFiles/stickers/stickers.style @@ -162,3 +162,12 @@ stickerIconMove: 400; stickerPreviewDuration: 150; stickerPreviewBg: #FFFFFFB0; stickerPreviewMin: 0.1; + +hashtagClose: IconButton(defaultIconButton) { + width: 30px; + height: 30px; + + icon: simpleCloseIcon; + iconPosition: point(10px, 10px); + downIconPosition: point(10px, 11px); +} diff --git a/Telegram/SourceFiles/ui/buttons/icon_button.cpp b/Telegram/SourceFiles/ui/buttons/icon_button.cpp index 2a562d2894..9720e02889 100644 --- a/Telegram/SourceFiles/ui/buttons/icon_button.cpp +++ b/Telegram/SourceFiles/ui/buttons/icon_button.cpp @@ -40,8 +40,12 @@ void IconButton::paintEvent(QPaintEvent *e) { auto over = _a_over.current(getms(), (_state & StateOver) ? 1. : 0.); p.setOpacity(over * _st.overOpacity + (1. - over) * _st.opacity); + auto icon = (_iconOverride ? _iconOverride : &_st.icon); auto position = (_state & StateDown) ? _st.downIconPosition : _st.iconPosition; - (_iconOverride ? _iconOverride : &_st.icon)->paint(p, position, width()); + if (position.x() < 0) { + position.setX((width() - icon->width()) / 2); + } + icon->paint(p, position, width()); } void IconButton::onStateChanged(int oldState, ButtonStateChangeSource source) { diff --git a/Telegram/SourceFiles/ui/widgets/widgets.style b/Telegram/SourceFiles/ui/widgets/widgets.style index 959c7cc751..48c61dd989 100644 --- a/Telegram/SourceFiles/ui/widgets/widgets.style +++ b/Telegram/SourceFiles/ui/widgets/widgets.style @@ -167,6 +167,12 @@ defaultLabelSimple: LabelSimple { textFg: windowTextFg; } +defaultIconButton: IconButton { + opacity: 0.78; + overOpacity: 1.; + duration: 150; +} + widgetSlideDuration: 200; widgetFadeDuration: 200; diff --git a/Telegram/SourceFiles/window/notifications_manager_default.h b/Telegram/SourceFiles/window/notifications_manager_default.h index 490bad48bd..a4ba920620 100644 --- a/Telegram/SourceFiles/window/notifications_manager_default.h +++ b/Telegram/SourceFiles/window/notifications_manager_default.h @@ -244,7 +244,7 @@ private: PeerData *_author; HistoryItem *_item; int _forwardedCount; - ChildWidget _close; + ChildWidget _close; ChildWidget _reply; ChildWidget _background = { nullptr }; ChildWidget _replyArea = { nullptr }; diff --git a/Telegram/SourceFiles/window/window.style b/Telegram/SourceFiles/window/window.style index a7da80f3b3..7f7cb09b2a 100644 --- a/Telegram/SourceFiles/window/window.style +++ b/Telegram/SourceFiles/window/window.style @@ -37,7 +37,13 @@ notifyPhotoSize: 62px; notifyMacPhotoSize: 64px; notifyPhotoPos: point(9px, 9px); notifyClosePos: point(1px, 2px); -notifyClose: iconedButton(simpleClose) { +notifyClose: IconButton(defaultIconButton) { + width: 30px; + height: 30px; + + icon: simpleCloseIcon; + iconPosition: point(10px, 10px); + downIconPosition: point(10px, 11px); } notifyItemTop: 12px; notifyTextLeft: 12px; @@ -64,16 +70,11 @@ notifyReplyArea: InputArea(defaultInputArea) { borderActive: 0px; borderError: 0px; } -notifySendReply: IconButton { +notifySendReply: IconButton(defaultIconButton) { width: 36px; height: 36px; - opacity: 0.78; - overOpacity: 1.; - icon: icon {{ "notification_send", windowActiveBg, point(3px, 9px) }}; iconPosition: point(0px, 0px); downIconPosition: point(0px, 1px); - - duration: notifyFastAnim; }