From 1859b83e8d13cb2663bb8186f46beab310fbcbf7 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 7 Jun 2016 22:59:39 +0300 Subject: [PATCH] Dialog styles moved from basic.style to dialogs.style. Many minor design improvements in the new profiles. New drafts design in the dialogs list: no icon, red badge. Verified checkbox added to the new profile implementation. Drafts saving to cloud is delayed for 1 second when switching chats. Before quitting the app makes an attempt to save drafts (timeout 1.5s). --- Telegram/Resources/art/sprite.png | Bin 181424 -> 180916 bytes Telegram/Resources/art/sprite_200x.png | Bin 246146 -> 245085 bytes Telegram/Resources/basic.style | 274 +++--------------- Telegram/Resources/basic_types.style | 3 +- .../icons/default_checkbox_check.png | Bin 0 -> 136 bytes .../icons/default_checkbox_check@2x.png | Bin 0 -> 255 bytes Telegram/Resources/icons/dialogs_draft.png | Bin 247 -> 0 bytes Telegram/Resources/icons/dialogs_draft@2x.png | Bin 464 -> 0 bytes .../Resources/icons/profile_admin_star.png | Bin 313 -> 300 bytes .../Resources/icons/profile_admin_star@2x.png | Bin 1078 -> 559 bytes .../icons/profile_verified_check.png | Bin 0 -> 222 bytes .../icons/profile_verified_check@2x.png | Bin 0 -> 375 bytes .../Resources/icons/profile_verified_star.png | Bin 0 -> 345 bytes .../icons/profile_verified_star@2x.png | Bin 0 -> 750 bytes .../Resources/icons/topbar_back_arrow.png | Bin 137 -> 209 bytes .../Resources/icons/topbar_back_arrow@2x.png | Bin 252 -> 344 bytes Telegram/Resources/langs/lang.strings | 1 + Telegram/SourceFiles/apiwrap.cpp | 83 ++++++ Telegram/SourceFiles/apiwrap.h | 8 + Telegram/SourceFiles/app.cpp | 19 ++ Telegram/SourceFiles/app.h | 1 + Telegram/SourceFiles/boxes/photosendbox.cpp | 3 +- Telegram/SourceFiles/config.h | 4 +- Telegram/SourceFiles/dialogs/dialogs.style | 68 ++++- .../SourceFiles/dialogs/dialogs_layout.cpp | 130 ++++----- Telegram/SourceFiles/dialogs/dialogs_list.cpp | 9 +- Telegram/SourceFiles/dialogs/dialogs_row.cpp | 31 ++ Telegram/SourceFiles/dialogs/dialogs_row.h | 5 +- Telegram/SourceFiles/dialogswidget.cpp | 245 ++++++++-------- Telegram/SourceFiles/facades.cpp | 2 + Telegram/SourceFiles/history.cpp | 40 +-- Telegram/SourceFiles/history.h | 6 +- Telegram/SourceFiles/historywidget.cpp | 41 ++- Telegram/SourceFiles/historywidget.h | 3 + Telegram/SourceFiles/mainwidget.cpp | 62 ++-- Telegram/SourceFiles/mainwidget.h | 9 +- Telegram/SourceFiles/mainwindow.cpp | 48 +-- Telegram/SourceFiles/overview/overview.style | 2 + .../SourceFiles/overview/overview_layout.cpp | 60 ++-- Telegram/SourceFiles/profile/profile.style | 35 ++- .../SourceFiles/profile/profile_cover.cpp | 12 +- .../SourceFiles/profile/profile_fixed_bar.cpp | 3 +- .../SourceFiles/profile/profile_fixed_bar.h | 6 +- .../profile/profile_members_widget.cpp | 10 +- .../profile/profile_settings_widget.cpp | 4 +- .../profile/profile_shared_media_widget.cpp | 2 +- Telegram/SourceFiles/pspecific_mac.cpp | 4 +- .../SourceFiles/ui/buttons/round_button.cpp | 52 +++- .../SourceFiles/ui/buttons/round_button.h | 13 + Telegram/SourceFiles/ui/flatbutton.cpp | 29 +- Telegram/SourceFiles/ui/flatbutton.h | 6 - Telegram/SourceFiles/ui/flatcheckbox.cpp | 2 +- .../SourceFiles/window/top_bar_widget.cpp | 169 ++--------- Telegram/SourceFiles/window/top_bar_widget.h | 18 +- Telegram/Telegram.vcxproj | 1 + Telegram/Telegram.vcxproj.filters | 3 + 56 files changed, 725 insertions(+), 801 deletions(-) create mode 100644 Telegram/Resources/icons/default_checkbox_check.png create mode 100644 Telegram/Resources/icons/default_checkbox_check@2x.png delete mode 100644 Telegram/Resources/icons/dialogs_draft.png delete mode 100644 Telegram/Resources/icons/dialogs_draft@2x.png create mode 100644 Telegram/Resources/icons/profile_verified_check.png create mode 100644 Telegram/Resources/icons/profile_verified_check@2x.png create mode 100644 Telegram/Resources/icons/profile_verified_star.png create mode 100644 Telegram/Resources/icons/profile_verified_star@2x.png create mode 100644 Telegram/SourceFiles/dialogs/dialogs_row.cpp diff --git a/Telegram/Resources/art/sprite.png b/Telegram/Resources/art/sprite.png index 3417ad4ca9aac0ebc0343daf3504893475e22826..9c656af6bbc58114558ab0b89de215e3faa2598f 100644 GIT binary patch delta 55569 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�bumQ)PH|A(aQW< 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 H-jV+UO@tuJ delta 56164 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 z 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 Mgz*_dj-eg>fApX~w*UYD diff --git a/Telegram/Resources/art/sprite_200x.png b/Telegram/Resources/art/sprite_200x.png index 5d386cc99203328d300e7e74c401cbd301eec851..da7b930daa5dabd09481f86803730d0357a9fde2 100644 GIT binary patch delta 77684 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 VO}*`!z8V8B!`&vj`PvSr{s%iLO0@t0 delta 78731 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%0AdJ@#-unQofQ&Q7N0qD|Aj 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 EAD4n|RsaA1 diff --git a/Telegram/Resources/basic.style b/Telegram/Resources/basic.style index 8b8c4547f..e39737523 100644 --- a/Telegram/Resources/basic.style +++ b/Telegram/Resources/basic.style @@ -56,6 +56,7 @@ adaptiveNormalWidth: 640px; adaptiveWideWidth: 1366px; windowBg: #fff; // fallback for background: white +windowActiveBg: #40ace3; // fallback for blue filled active areas windowTextFg: #000; // fallback for text color: black windowSubTextFg: #8a8a8a; // fallback for subtext color: gray windowActiveTextFg: #1485c2; // fallback for active color: blue online @@ -114,6 +115,7 @@ defaultBoxButton: BoxButton { width: -24px; height: 36px; + padding: margins(0px, 0px, 0px, 0px); textTop: 8px; @@ -149,7 +151,7 @@ boxLabel: flatLabel(labelDefFlat) { defaultLeftOutlineButton: OutlineButton { outlineWidth: 3px; outlineFg: windowBg; - outlineFgOver: #3fb0e4; + outlineFgOver: windowActiveBg; textBg: windowBg; textBgOver: #f2f7fa; @@ -230,9 +232,9 @@ defaultCheckbox: Checkbox { textFg: black; textBg: white; - checkFg: #d9d9d9; - checkFgOver: #bfbfbf; - checkFgActive: #4eb3ee; + checkFg: #b3b3b3; + checkFgOver: #b3b3b3; + checkFgActive: #40ace3; width: -46px; height: 22px; @@ -240,7 +242,9 @@ defaultCheckbox: Checkbox { textPosition: point(34px, 0px); diameter: 22px; thickness: 2px; - checkIcon: sprite(106px, 136px, 14px, 10px); + checkIcon: icon { + { "default_checkbox_check", #ffffff, point(4px, 7px) } + }; font: boxTextFont; duration: 120; @@ -249,7 +253,7 @@ defaultRadiobutton: Radiobutton { textFg: black; textBg: white; - checkFg: #d9d9d9; + checkFg: #b3b3b3; checkFgOver: #bfbfbf; checkFgActive: #4eb3ee; @@ -908,46 +912,22 @@ btnLogout: flatButton(btnDefFlat, btnDefBig) { overFont: font(18px); } -//// dialogs -dlgFilterPadding: 10px; -dlgPhotoSize: 46px; -dlgPaddingHor: 10px; -dlgPaddingVer: 8px; -dlgHeight: 62px; -dlgPhotoPadding: 12px; - -dlgImportantHeight: 37px; - -noContactsHeight: 100px; -noContactsFont: font(fsize); -noContactsColor: #777; - -dlgSep: 8px; - -dlgMinWidth: 260px; -dlgRichMinWidth: 150px; -dlgMaxWidth: 540px; -dlgFilter: flatInput(inpDefGray) { +searchFlatInput: flatInput(inpDefGray) { font: font(fsize); - height: 34px; bgColor: #f2f2f2; phColor: #949494; phFocusColor: #a4a4a4; - textMrg: margins(34px, 2px, 34px, 4px); imgRect: sprite(227px, 21px, 24px, 24px); - imgPos: point(6px, 5px); - width: 240px; borderWidth: 2px; borderColor: #f2f2f2; borderActive: #80cff9; borderError: #ed8080; } -dlgScroll: flatScroll(scrollDef) { - topsh: 0px; - bottomsh: 0px; -} -dlgFont: font(fsize); + +noContactsHeight: 100px; +noContactsFont: font(fsize); +noContactsColor: #777; dlgDblCheckImg: sprite(302px, 23px, 17px, 11px); dlgCheckImg: sprite(320px, 23px, 17px, 11px); @@ -956,45 +936,17 @@ dlgActiveCheckImg: sprite(320px, 36px, 17px, 11px); dlgSendImg: sprite(122px, 25px, 17px, 11px); dlgActiveSendImg: sprite(142px, 25px, 17px, 11px); -dlgChatImgPos: point(1px, 4px); dlgChatImg: sprite(104px, 26px, 16px, 11px); dlgActiveChatImg: sprite(104px, 37px, 16px, 11px); -dlgChannelImgPos: point(3px, 4px); dlgChannelImg: sprite(105px, 1px, 12px, 11px); dlgActiveChannelImg: sprite(105px, 14px, 12px, 11px); -dlgImgSkip: 22px; -dlgCheckLeft: 5px; -dlgCheckTop: 4px; -dlgCheckSkip: 3px; - -dlgHistFont: font(fsize); -dlgNameColor: #000; -dlgNameTop: 2px; -dlgSystemColor: #4981af; -dlgTextColor: #888; - -dlgDateFont: font(13px); -dlgDateColor: #a8a8a8; -dlgDateSkip: 5px; - -dlgUnreadColor: #FFF; -dlgUnreadBG: #009ce6;//#6fc766; -dlgUnreadMutedBG: #bbb; -dlgUnreadFont: font(12px bold); -dlgUnreadHeight: 19px; -dlgUnreadTop: 1px; -dlgUnreadPaddingHor: 5px; -dlgUnreadRadius: 2px; -dlgBG: #FFF; -dlgHoverBG: #f5f5f5; - -dlgActiveBG: #6a91b1; -dlgActiveUnreadColor: #5b94bf; -dlgActiveUnreadBG: white; -dlgActiveColor: white; -dlgActiveDateColor: #d3e2ee; -dlgActiveUnreadMutedBG: dlgActiveDateColor; +dlgFilter: flatInput(searchFlatInput) { + width: 240px; + height: 34px; + textMrg: margins(34px, 2px, 34px, 4px); + imgPos: point(6px, 5px); +} topBarHeight: 54px; topBarBG: white; @@ -1024,24 +976,23 @@ topBarSearch: iconedButton(btnDefIconed) { height: topBarHeight; } topBarMinPadding: 5px; -topBarButton: flatButton(btnDefFlat) { - color: btnYesColor; - overColor: btnYesHover; - downColor: btnYesHover; +topBarButton: BoxButton { + textFg: #0084c4; + textFgOver: #0084c4; + textBg: white; + textBgOver: #edf4f7; - bgColor: white; - overBgColor: white; - downBgColor: white; + width: -22px; + height: 28px; + padding: margins(0px, 14px, 12px, 12px); - width: -40px; - height: 54px; - - textTop: 19px; - overTextTop: 19px; - downTextTop: 20px; + textTop: 6px; font: font(fsize); - overFont: font(fsize underline); + duration: 200; +} +topBarClearButton: BoxButton(topBarButton) { + padding: margins(8px, 14px, 8px, 14px); } topBarActionButton: flatButton(btnDefNext, btnDefBig) { textTop: 8px; @@ -1243,16 +1194,6 @@ medviewSaveAsTextStyle: textStyle(defaultTextStyle) { linkFgDown: #91d9ff; } -dlgTextStyle: textStyle(defaultTextStyle) { - linkFg: dlgSystemColor; - linkFgDown: dlgSystemColor; - linkFlagsOver: font(fsize); -} -dlgActiveTextStyle: textStyle(defaultTextStyle) { - linkFg: dlgActiveColor; - linkFgDown: dlgActiveColor; - linkFlagsOver: font(fsize); -} introLabelTextStyle: textStyle(defaultTextStyle) { lineHeight: 30px; } @@ -1538,16 +1479,24 @@ taMsgField: flatTextarea(taDefFlat) { maxFieldHeight: 220px; // historyMinHeight: 56px; -reportSpamHide: flatButton(topBarButton) { +reportSpamHide: flatButton(btnDefFlat) { + color: btnYesColor; + overColor: btnYesHover; + downColor: btnYesHover; + + bgColor: transparent; + overBgColor: transparent; + downBgColor: transparent; + + width: -40px; height: 46px; textTop: 15px; overTextTop: 15px; downTextTop: 16px; - bgColor: transparent; - overBgColor: transparent; - downBgColor: transparent; + font: font(fsize); + overFont: font(fsize underline); } reportSpamButton: flatButton(reportSpamHide) { textTop: 6px; @@ -1687,134 +1636,16 @@ confirmCompressedSkip: 10px; profileMaxWidth: 410px; profilePadding: margins(28px, 30px, 28px, 0px); -//profilePhotoSize: 120px; -//profileNameLeft: 21px; -//profileNameTop: -1px; -//profileNameFont: font(20px); -//profileStatusLeft: 22px; -//profileStatusTop: 31px; -//profileStatusFont: font(fsize); -profilePhoneLeft: 22px; -profilePhoneTop: 62px; -profilePhoneFont: font(16px); -//profileButtonTop: 18px; -//profileButtonSkip: 10px; -profileHeaderFont: font(20px); -profileHeaderColor: black; -profileHeaderSkip: 59px; -profileHeaderLeft: -1px; -profileHeaderTop: 22px; -profileListPhotoSize: 46px; -profileListPadding: size(12px, 6px); -profileListNameTop: 8px; -profileListStatusBottom: 6px; -profileHoverBG: #f5f5f5; -profileActiveBG: #6294b9; -profileSubFont: font(fsize); -profileListNameFont: semiboldFont; -profileListNameColor: #000; profileOnlineColor: titleTypingColor; profileOfflineColor: titleStatusColor; -btnShareContact: flatButton(btnDefNext, btnDefBig) { - width: 145px; - height: 42px; - - textTop: 9px; - overTextTop: 9px; - downTextTop: 10px; - - font: font(17px); - overFont: font(17px); -} -btnMigrateToMega: flatButton(btnShareContact) { - width: -40px; -} -profileMinBtnPadding: 10px; membersPadding: margins(0px, 10px, 0px, 10px); forwardMargins: margins(30px, 10px, 30px, 10px); forwardFont: font(16px); forwardBg: rgba(0, 0, 0, 76); -btnProfileCancel: flatButton(btnDefFlat, btnDefBig) { - color: #666d78; - overColor: #666d78; - downColor: #50565e; - bgColor: rgba(0, 0, 0, 63); - overBgColor: rgba(0, 0, 0, 47); - downBgColor: rgba(0, 0, 0, 95); - - width: 145px; - height: 40px; - - textTop: 9px; - overTextTop: 9px; - downTextTop: 10px; - - font: font(18px); - overFont: font(18px); -} - -btnDeleteContact: flatButton(btnDefFlat, btnDefBig) { - color: #fff; - overColor: #fff; - downColor: #ffcbc1; - - bgColor: #ee4928bf; - overBgColor: #ee4928; - downBgColor: #d14024; - - width: 300px; - height: 40px; - - textTop: 9px; - overTextTop: 9px; - downTextTop: 10px; - - font: font(18px); - overFont: font(18px); -} - -profileNameInput: flatInput(setNameInput) { - width: 230px; -} - -participantInnerAdd: flatButton(btnDefNext) { - width: 145px; - height: 40px; - font: font(18px); - overFont: font(18px); - textTop: 9px; - overTextTop: 9px; - downTextTop: 10px; -} -participantInnerCancel: flatButton(participantInnerAdd, btnDefBack) { -} -participantCancel: flatButton(participantInnerAdd, btnDefBack) { - width: 300px; -} -participantFilter: flatInput(inpDefFlat) { - width: 364px; - height: 52px; - font: font(16px); - textMrg: margins(39px, 11px, 10px, 10px); - imgRect: sprite(227px, 21px, 24px, 24px); - imgPos: point(10px, 15px); -} -participantDelta: 12px; - -contactsFilter: flatInput(dlgFilter) { - width: 340px; - height: 38px; - textMrg: margins(34px, 3px, 5px, 4px); - imgPos: point(6px, 7px); -} -inpCountry: flatInput(contactsFilter) { -} - -newGroupLimitFg: #a4a4a4; newGroupAboutFg: #808080; newGroupPadding: margins(4px, 6px, 4px, 3px); newGroupSkip: 17px; @@ -1855,15 +1686,6 @@ connectionPasswordInputField: InputField(defaultInputField) { } connectionIPv6Skip: 11px; -contactsAdd: flatButton(topBarButton) { - width: -40px; - height: 52px; - - textTop: 18px; - overTextTop: 18px; - downTextTop: 19px; -} - aboutIcon: sprite(0px, 0px, 104px, 104px); aboutWidth: 390px; aboutVersionTop: -3px; @@ -2131,8 +1953,6 @@ stickerPreviewDuration: 150; stickerPreviewBg: #FFFFFFB0; stickerPreviewMin: 0.1; -verifiedCheckProfile: sprite(285px, 235px, 18px, 18px); -verifiedCheckProfilePos: point(7px, 6px); verifiedCheck: sprite(285px, 221px, 14px, 14px); verifiedCheckInv: sprite(299px, 221px, 14px, 14px); verifiedCheckPos: point(4px, 2px); @@ -2419,7 +2239,7 @@ sessionNameFont: msgNameFont; sessionActiveFont: msgDateFont; sessionActiveColor: #aaa; sessionInfoFont: msgFont; -sessionInfoColor: dlgTextColor; +sessionInfoColor: #888888; sessionTerminateTop: 30px; sessionTerminateSkip: 18px; sessionTerminate: iconedButton(notifyClose) { diff --git a/Telegram/Resources/basic_types.style b/Telegram/Resources/basic_types.style index 4e2065ec7..000dec9fc 100644 --- a/Telegram/Resources/basic_types.style +++ b/Telegram/Resources/basic_types.style @@ -305,6 +305,7 @@ BoxButton { width: pixels; height: pixels; + padding: margins; textTop: pixels; @@ -328,7 +329,7 @@ Checkbox { textPosition: point; diameter: pixels; thickness: pixels; - checkIcon: sprite; + checkIcon: icon; font: font; duration: int; diff --git a/Telegram/Resources/icons/default_checkbox_check.png b/Telegram/Resources/icons/default_checkbox_check.png new file mode 100644 index 0000000000000000000000000000000000000000..574f57123bd038d32c8e3bf99a69d06c028444c0 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^d_c^_!3HE-Zss2cQvRMUjv*Qor(QV7d%%E$*UC`R$QFGvXLkEW?ufrslO=)(kHYK<-q*XX@dhQcr_PW8$=5?c)tt#)& lA@(iy=|`C_h5pLFyK&;vvwQ2e6$6cC@O1TaS?83{1OOVvFtq>x literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/default_checkbox_check@2x.png b/Telegram/Resources/icons/default_checkbox_check@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6d3859c84cb809ea2feda32901477b47b31768a9 GIT binary patch literal 255 zcmVIfkOX0+BC-g_ve z?q~d%F$Otj06>iKj?Tl5^4`w@Ygo=1T5Eo=g&AY`-|z)C4!*=nkcc3qoQa*_vMdN8 zVB0pV>pBbDK_Ws3p&0C;1K18qDXRfBbPzkQv=wwk8L;xx^iU@3xfZQpChQ5eP$sMn z_RvAB4Yp8g?FiNfuV_jM&bd+SHz>rur$oeo;d7|}sxPY`gfDM-%B%nY002ovPDHLk FV1iQwXb=DZ literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/dialogs_draft.png b/Telegram/Resources/icons/dialogs_draft.png deleted file mode 100644 index af8676033435e7662bb18fdfd0d348336cb83bc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 247 zcmV_nhWLBL+aB5`_VpgIQ?Iz!Vf3L8qm`2>iG3ytv7`ZzZeyva+)!iNETc zqw6}#vP2Tb^E^ER$T_FBZIz~}@;nzH8DqG6FZF%TGwZq{V+_{XuV@@c!Z5txf5`X! z`)(0M5!<$XplO<(2n9hvk|Z3*@onj9Q54j5jU<+3Vc+*(be|;&HBAFR(==pRMjXdT x!dm+Q&Fl42RaKhjS;H{sJWm;81YH07$s3|c#S0WbcEP)322NV0QUQR#&OJ7 zS!ksRJ;RtAvdEzI}*Qj-NiP~5VrW-!-vtE~BF5uvsHXsfPiivvJB7g2W2G)*}e404x~0~%u} zA{>v$rC`J1F!!-P+W~;b;{gC@Hk+u`YWSr4{f^0Gg6(z-V+=&({Us4$uh(Oz(;)yZ z7K^WwJ?CC>11^@s6a_i)L0002ec8n^|W6#dcF-2lM55<=YiUv)LJ zETb`oS(ZJA`o1Sg4#V&a@_nECzLO-6<6sa37sv{N0AUy+ihm-+ag4Go;W!Qez_x9S z@Af-I-)O8(=F}Kaen7=RhS#X-BTWFr=(;+_a zOG%R8PHCE6JOZHWx~F*Sx}K(ao_CFx=Q&AIDaER)2!Lf-QYl4}EQ;a^)pgCbZE0E7 k`H_~zrfFE$^%uAI25>t@cYz?fhyVZp07*qoM6N<$f?iI5$^ZZW delta 299 zcmV+`0o4Ai0=WW^7k>;01^@s6xwkjj00031Nkl+BC0|YGu!JI926-0OOz`)FbZ+;j6;96u^w(9@J z(u|^rBpJu?c1UYYlGIvngMuL7Fbo_OhT#JGy4`L(pU>Fu_kTDX4)A>+LI{lNx(;Po zqN*wwV{pIU0i_g+qTm)4MM0(1&w5fyJ|2&Mf#>r{Ddqg8-EPM`&sTxh>qXafr<<&C z_oiv^`F!w~-tYIUCIC8)!@lpQ?rqyn`7jK09A`P{cs#4 z&-=SZj^n%)#yLmVbsskarSvT@&N(`c^L5wt`+dCKZZAP7rTN;s+wJ}r>~_21U@#Cn zN8|BW7&Mto-gA4uqNku*ttR}kMx!APs@LnnpzoZ^NRlK}Ri#`m^Zfa906u^IOub&mbzOqs&qWCZN+c2#i$#`}mRML=0AOipiNnJ~ zj*pM&_xpd`LkL=kepm=(-+ei*TT+sVSa5eahV29Ezf# zCAwfcX0tqa@PK48IbPFsokF2NE|&`hQuFydvMi%03XwTyun5H@2T-S9bCnrgzQWOdWrl+UTH0{nQ9e>B+^z;NX z2m&rHE*K03^!t4r$Dv-Yv%9;?`T05O(a{l-B$3bOsZ=Te2qBPV`F|llYILEK$>cb< z+wIcnbbmNHIzqX*xmg!NkWQz`<#On{PAnEfmP7T)9gV#9JP+Hp+1S`%dwZLclM@ur z^VWO49>>SW3L%%G}j zD3I&ARI629zI@5sw{Q9O?HjkZx8s;QMhu5TzJC46=H@20ZR2@fsDT*-0k^leV_zDL z2E*a-PRuVIAN@rb$Vj6Z_}@$YM^G#l!!QgYkw~Z(mt`4MRWS^MSS%JEq-h$NOon(o z9)AiXNfOa$luRb`)ASfg{V_q7Wh~1gm&>6j3c$E4TdfwIP6vR=$w@5BB9%%JjYh|L zmSv%;Dnf`mrN0A`Wf@J=$Y!$`hB02hyu9Sor%!zN@PYmPeE?=>XIWleW^r+md_E6A zGMOZs%`!1D!C){z2=QxBEEdDEEOcGx?0@VGAq2f%kDZ+zs?{nVKYpayYywcP*SWa3 zz_x9kJb6MYm7>*ZkxVABEQ_tfHLk9%*xTFV;NW09w?=BW z+q{4Oo?5NO*47r4N(Iw25kg>D7U$>ZzXy%ppwTUFHk<73?s9T+@{_rvC*t(<6eq`V oNF);6zkeU!_t7+M?C(hb01{rWnd^=|YybcN07*qoM6N<$f`V-c5dZ)H diff --git a/Telegram/Resources/icons/profile_verified_check.png b/Telegram/Resources/icons/profile_verified_check.png new file mode 100644 index 0000000000000000000000000000000000000000..fafa4023a3addfcc0f0c7afc3debf6927460f913 GIT binary patch literal 222 zcmV<403rX0P)XmY}3$1{x%U^seCUbbm!Y$&!mFKih?f zAQ`#kKv|%3PO7RBd8mJ?EKA051R$k^s4C9652&td=6MF-I1WMx$TUp=48wq`(sdo% zwgIrNE7sa;K;QSA=Lx{FEIboq#2E8#656(9-}jfwdylGq?|n7aT2e|hP4oA-LNXtI Y2j6LeqI=!#>i_@%07*qoM6N<$f@`c=eEq^ z50hmXX`13*d7gg;)HDsJ(}{ysRW&>zr4;k|{2|OR4Agba!H&lx7K_Eb?~?ew55^cI zN%|AEUa!%%EeA`I1hOpu_7d2(&6y~roXK@v^nK64cDvoccLN>{2hJRZAqXK51OfZ~ zp6m5}58JjMT@8UGNnng|8#kK`vMl3jZQH^$&1VmHNfbpvQ4|(>Z_y07gnnkx~{vy;y8vVito(ouxMEpq9}srd1Eg*8nY{PDoy@T$M5A6{M894C0)7&~2qL#%LVJuMJ)0oTD%d{rJ8nLWt9lwea6P zNRkA@FkG@VjwAZMM;ymbdri|^?hOD;)8zA}X>fPW`J>JAeA-$N1U_GujNGV~A@xFx+u-5v1SZnckJU~R?oWmI7$Fyzs ryNKi1gQ6%p_l+DyUDv3p>Kg<C5j6vs~+GFS)%I|zbg3>0Y)vbZ?;1^fbj0TBw_gf3m2y0~{IVeV>K^-xJypXxj%BxJ?GvK5#g9&7zSL|#c()8DwR4a*57el zfKI0aU#(UvUZ8wFkAKC?$Y!(g04a)s*Vk9<%5j|21F5PCP16D$Yqi=QjITgs9(P%IYFXf*Kl z_67hL3j)8tm>G`aAe~O*%ynIurWtk0gi^29qx0o*88^p9%jJ?N zl}e%2YJr(!U9x7g30>E}liISZSaQj6oZU9Ez3nQM%76J<%#3om9PY&U`1lw(P`zFc ze}pwnGg264mR^~J-JXbunIr3Gv)PO;FE52QVK37(Ez;&16kiBr+je9yL`15p()IOq zc%V|L6e-Y8bL=ISe^rT6qtPhbF4J{g7{K#9%;)oiCw_l_hv#{F&zV_vS=_%O4+aBx zo`>OZh`YNxSeCVM&SWxZG#Y`$lbKPk*Ed^RQ54v=jr;q1j7B3cGrHYw_&VeVk=cj{ z)oN7=B&on*W6K?X8lv8Jf?qPfceZVNYw4I7rfJ3pL_}~LX9Lu1Hjjll9w?noqu=kN g+wCHmOdbvN1xx?^x~viP3IG5A07*qoM6N<$f+eqBxc~qF literal 0 HcmV?d00001 diff --git a/Telegram/Resources/icons/topbar_back_arrow.png b/Telegram/Resources/icons/topbar_back_arrow.png index 7c62fd73de242761ad51e5898bfb1b434c7e92bb..ab084438e09f9a9e51e5d6608fcb2150f0fe0cb2 100644 GIT binary patch delta 194 zcmV;z06qVS0nq`F7k>{31^@s6Hpt}-0001(NklsWr5VDCUcs(^uTSHudF5>YeeMypNr7;HYJ(75+5ylwB7&XuHS^H3!ripFa z04Sv}jw9*--jKDHecu5{DKQMgwS#cZoxrjz-vDyXaU2H#F+0XzKtdq|0BWsRYnyiT wDRs@%y`0000`NklmWlmt`gH|Bvjefv`4&X)&Ff9Pn0`MS7)Giu4UO~Lf_$={( bcdv2*ti=t8>S~0m00000NkvXXu0mjf9@Q}% diff --git a/Telegram/Resources/icons/topbar_back_arrow@2x.png b/Telegram/Resources/icons/topbar_back_arrow@2x.png index 990a5bb66e0509ab3e59a2951041901895460430..22f1481770f8c79e788fdffbe8ba9688610c0677 100644 GIT binary patch delta 330 zcmV-Q0k!`80oVeN7k?fI1^@s6Aq-9|0003WNklALO=;X_drogx@x-i_JGIF4amR|ff89Wf|L5(a7877W9L9=bw82tu+Bsz9EhO5`3=AlHx*Ifo3$5i%mbPy_OX8fK9r#%MFjaxP n!b~N5k8K|jU709t_RpFX-*eo!HE-B200000NkvXXu0mjfrSo9% diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index b7bc6b0ed..3ac7440c1 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -124,6 +124,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org "lng_flood_error" = "Too many tries. Please try again later."; "lng_gif_error" = "An error has occured while reading GIF animation :("; "lng_edit_error" = "You cannot edit this message"; +"lng_join_channel_error" = "Sorry, you have joined too many channels and supergroups. Please leave some before joining."; "lng_edit_deleted" = "This message was deleted"; "lng_edit_too_long" = "Your message text is too long"; "lng_edit_message" = "Edit message"; diff --git a/Telegram/SourceFiles/apiwrap.cpp b/Telegram/SourceFiles/apiwrap.cpp index 9536c908d..661004e48 100644 --- a/Telegram/SourceFiles/apiwrap.cpp +++ b/Telegram/SourceFiles/apiwrap.cpp @@ -26,13 +26,16 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "application.h" #include "mainwindow.h" #include "mainwidget.h" +#include "historywidget.h" #include "localstorage.h" +#include "boxes/confirmbox.h" ApiWrap::ApiWrap(QObject *parent) : QObject(parent) , _messageDataResolveDelayed(new SingleDelayedCall(this, "resolveMessageDatas")) { App::initBackground(); connect(&_webPagesTimer, SIGNAL(timeout()), this, SLOT(resolveWebPages())); + connect(&_draftsSaveTimer, SIGNAL(timeout()), this, SLOT(saveDraftsToCloud())); } void ApiWrap::init() { @@ -717,6 +720,9 @@ void ApiWrap::channelAmInDone(ChannelData *channel, const MTPUpdates &updates) { bool ApiWrap::channelAmInFail(ChannelData *channel, const RPCError &error) { if (MTP::isDefaultHandledError(error)) return false; + if (error.type() == qstr("CHANNELS_TOO_MUCH")) { + Ui::showLayer(new InformBox(lang(lng_join_channel_error))); + } _channelAmInRequests.remove(channel); return true; } @@ -798,6 +804,83 @@ void ApiWrap::requestNotifySetting(PeerData *peer) { _notifySettingRequests.insert(peer, requestId); } +void ApiWrap::saveDraftToCloudDelayed(History *history) { + _draftsSaveRequestIds.insert(history, 0); + if (!_draftsSaveTimer.isActive()) { + _draftsSaveTimer.start(SaveCloudDraftTimeout); + } +} + +bool ApiWrap::hasUnsavedDrafts() const { + return !_draftsSaveRequestIds.isEmpty(); +} + +void ApiWrap::saveDraftsToCloud() { + for (auto i = _draftsSaveRequestIds.begin(), e = _draftsSaveRequestIds.end(); i != e; ++i) { + if (i.value()) continue; // sent already + + auto history = i.key(); + auto cloudDraft = history->cloudDraft(); + auto localDraft = history->localDraft(); + if (cloudDraft && cloudDraft->saveRequestId) { + MTP::cancel(cloudDraft->saveRequestId); + } + cloudDraft = history->createCloudDraft(localDraft); + + MTPmessages_SaveDraft::Flags flags = 0; + auto &textWithTags = cloudDraft->textWithTags; + if (cloudDraft->previewCancelled) { + flags |= MTPmessages_SaveDraft::Flag::f_no_webpage; + } + if (cloudDraft->msgId) { + flags |= MTPmessages_SaveDraft::Flag::f_reply_to_msg_id; + } + if (!textWithTags.tags.isEmpty()) { + flags |= MTPmessages_SaveDraft::Flag::f_entities; + } + auto entities = linksToMTP(entitiesFromTextTags(textWithTags.tags), true); + cloudDraft->saveRequestId = MTP::send(MTPmessages_SaveDraft(MTP_flags(flags), MTP_int(cloudDraft->msgId), history->peer->input, MTP_string(textWithTags.text), entities), rpcDone(&ApiWrap::saveCloudDraftDone, history), rpcFail(&ApiWrap::saveCloudDraftFail, history)); + i.value() = cloudDraft->saveRequestId; + } + if (_draftsSaveRequestIds.isEmpty()) { + App::allDraftsSaved(); // can quit the application + } +} + +void ApiWrap::saveCloudDraftDone(History *history, const MTPBool &result, mtpRequestId requestId) { + if (auto cloudDraft = history->cloudDraft()) { + if (cloudDraft->saveRequestId == requestId) { + cloudDraft->saveRequestId = 0; + history->updateChatListEntry(); + } + } + auto i = _draftsSaveRequestIds.find(history); + if (i != _draftsSaveRequestIds.cend() && i.value() == requestId) { + _draftsSaveRequestIds.remove(history); + if (_draftsSaveRequestIds.isEmpty()) { + App::allDraftsSaved(); // can quit the application + } + } +} + +bool ApiWrap::saveCloudDraftFail(History *history, const RPCError &error, mtpRequestId requestId) { + if (MTP::isDefaultHandledError(error)) return false; + + if (auto cloudDraft = history->cloudDraft()) { + if (cloudDraft->saveRequestId == requestId) { + history->clearCloudDraft(); + } + } + auto i = _draftsSaveRequestIds.find(history); + if (i != _draftsSaveRequestIds.cend() && i.value() == requestId) { + _draftsSaveRequestIds.remove(history); + if (_draftsSaveRequestIds.isEmpty()) { + App::allDraftsSaved(); // can quit the application + } + } + return true; +} + void ApiWrap::notifySettingDone(MTPInputNotifyPeer notifyPeer, const MTPPeerNotifySettings &result) { if (auto requestedPeer = notifySettingReceived(notifyPeer, result)) { _notifySettingRequests.remove(requestedPeer); diff --git a/Telegram/SourceFiles/apiwrap.h b/Telegram/SourceFiles/apiwrap.h index 0469e0139..e4c83a8d6 100644 --- a/Telegram/SourceFiles/apiwrap.h +++ b/Telegram/SourceFiles/apiwrap.h @@ -59,6 +59,9 @@ public: void exportInviteLink(PeerData *peer); void requestNotifySetting(PeerData *peer); + void saveDraftToCloudDelayed(History *history); + bool hasUnsavedDrafts() const; + ~ApiWrap(); signals: @@ -71,6 +74,7 @@ public slots: void resolveWebPages(); void delayedRequestParticipantsCount(); + void saveDraftsToCloud(); private: @@ -150,5 +154,9 @@ private: PeerData *notifySettingReceived(MTPInputNotifyPeer peer, const MTPPeerNotifySettings &settings); bool notifySettingFail(PeerData *peer, const RPCError &error); + QMap _draftsSaveRequestIds; + SingleTimer _draftsSaveTimer; + void saveCloudDraftDone(History *history, const MTPBool &result, mtpRequestId requestId); + bool saveCloudDraftFail(History *history, const RPCError &error, mtpRequestId requestId); }; diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 13f1883c4..6aefddfa9 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -2257,6 +2257,19 @@ namespace { if (quitting()) return; setLaunchState(QuitRequested); + if (auto window = wnd()) { + window->hide(); + } + if (auto mainwidget = main()) { + mainwidget->saveDraftToCloud(); + } + if (auto apiwrap = api()) { + if (apiwrap->hasUnsavedDrafts()) { + apiwrap->saveDraftsToCloud(); + QTimer::singleShot(SaveDraftBeforeQuitTimeout, Application::instance(), SLOT(quit())); + return; + } + } Application::quit(); } @@ -2264,6 +2277,12 @@ namespace { return _launchState != Launched; } + void allDraftsSaved() { + if (quitting()) { + Application::quit(); + } + } + LaunchState launchState() { return _launchState; } diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index 3ce9600e0..5613e68b2 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -228,6 +228,7 @@ namespace App { }; void quit(); bool quitting(); + void allDraftsSaved(); LaunchState launchState(); void setLaunchState(LaunchState state); diff --git a/Telegram/SourceFiles/boxes/photosendbox.cpp b/Telegram/SourceFiles/boxes/photosendbox.cpp index f3e6b47d0..b8c9608b7 100644 --- a/Telegram/SourceFiles/boxes/photosendbox.cpp +++ b/Telegram/SourceFiles/boxes/photosendbox.cpp @@ -656,7 +656,8 @@ void EditCaptionBox::onSave(bool ctrlShiftEnter) { if (!sentEntities.c_vector().v.isEmpty()) { flags |= MTPmessages_EditMessage::Flag::f_entities; } - _saveRequestId = MTP::send(MTPmessages_EditMessage(MTP_flags(flags), item->history()->peer->input, MTP_int(item->id), MTP_string(_field->getLastText()), MTPnullMarkup, sentEntities), rpcDone(&EditCaptionBox::saveDone), rpcFail(&EditCaptionBox::saveFail)); + auto text = prepareText(_field->getLastText(), true); + _saveRequestId = MTP::send(MTPmessages_EditMessage(MTP_flags(flags), item->history()->peer->input, MTP_int(item->id), MTP_string(text), MTPnullMarkup, sentEntities), rpcDone(&EditCaptionBox::saveDone), rpcFail(&EditCaptionBox::saveFail)); } void EditCaptionBox::saveDone(const MTPUpdates &updates) { diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 1ee892abe..93119734f 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -151,8 +151,10 @@ enum { WriteMapTimeout = 1000, SaveDraftTimeout = 1000, // save draft after 1 secs of not changing text - SaveCloudDraftTimeout = 14000, // save draft to the cloud after 14 more seconds SaveDraftAnywayTimeout = 5000, // or save anyway each 5 secs + SaveCloudDraftIdleTimeout = 14000, // save draft to the cloud after 14 more seconds + SaveCloudDraftTimeout = 1000, // save draft to the cloud with 1 sec extra delay + SaveDraftBeforeQuitTimeout = 1500, // give the app 1.5 secs to save drafts to cloud when quitting SetOnlineAfterActivity = 30, // user with hidden last seen stays online for such amount of seconds in the interface diff --git a/Telegram/SourceFiles/dialogs/dialogs.style b/Telegram/SourceFiles/dialogs/dialogs.style index 4989619dc..c65fa301c 100644 --- a/Telegram/SourceFiles/dialogs/dialogs.style +++ b/Telegram/SourceFiles/dialogs/dialogs.style @@ -19,7 +19,69 @@ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org */ using "basic.style"; +using "basic_types.style"; -dialogsDraft: icon { - { "dialogs_draft", #ffffff, point(5px, 4px) }, -}; +dialogsUnreadFg: #ffffff; +dialogsUnreadFgActive: #5b94bf; +dialogsUnreadBg: #009ce6;//#6fc766; +dialogsUnreadBgMuted: #bbb; +dialogsUnreadBgActive: #ffffff; +dialogsUnreadBgMutedActive: #d3e2ee; +dialogsUnreadFont: font(12px bold); +dialogsUnreadHeight: 19px; +dialogsUnreadTop: 1px; +dialogsUnreadPadding: 5px; + +dialogsBg: windowBg; +dialogsBgOver: #f5f5f5; +dialogsBgActive: #6a91b1; +dialogsTextFont: font(fsize); +dialogsTextFg: #888888; +dialogsTextFgService: #4981af; +dialogsTextFgActive: #ffffff; +dialogsDateFont: font(13px); +dialogsDateFgActive: #ffffff; +dialogsDateFg: #a8a8a8; +dialogsDateSkip: 5px; +dialogsNameFg: #000; +dialogsNameTop: 2px; + +dialogsRowHeight: 62px; +dialogsFilterPadding: 10px; +dialogsPhotoSize: 46px; +dialogsPhotoPadding: 12px; +dialogsPadding: point(10px, 8px); + +dialogsImportantBarHeight: 37px; + +dialogsSkip: 8px; + +dialogsWidthMin: 260px; +dialogsWidthMax: 540px; +dialogsTextWidthMin: 150px; +dialogsScroll: flatScroll(scrollDef) { + topsh: 0px; + bottomsh: 0px; +} + +dialogsChatImgPos: point(1px, 4px); +dialogsChannelImgPos: point(3px, 4px); +dialogsImgSkip: 22px; + +dialogsCheckLeft: 5px; +dialogsCheckTop: 4px; +dialogsCheckSkip: 3px; + +dialogsTextStyle: textStyle(defaultTextStyle) { + linkFg: dialogsTextFgService; + linkFgDown: dialogsTextFgService; + linkFlagsOver: font(fsize); +} +dialogsTextStyleDraft: textStyle(dialogsTextStyle) { + linkFg: #dd4b39; + linkFgDown: #dd4b39; +} +dialogsTextStyleActive: textStyle(dialogsTextStyle) { + linkFg: dialogsTextFgActive; + linkFgDown: dialogsTextFgActive; +} diff --git a/Telegram/SourceFiles/dialogs/dialogs_layout.cpp b/Telegram/SourceFiles/dialogs/dialogs_layout.cpp index 5057ec3df..8d17dabcd 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_layout.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_layout.cpp @@ -42,80 +42,68 @@ void paintRowDate(Painter &p, const QDateTime &date, QRect &rectForName, bool ac } else { dt = lastDate.toString(qsl("d.MM.yy")); } - int32 dtWidth = st::dlgDateFont->width(dt); - rectForName.setWidth(rectForName.width() - dtWidth - st::dlgDateSkip); - p.setFont(st::dlgDateFont); - p.setPen(active ? st::dlgActiveDateColor : st::dlgDateColor); - p.drawText(rectForName.left() + rectForName.width() + st::dlgDateSkip, rectForName.top() + st::msgNameFont->height - st::msgDateFont->descent, dt); + int32 dtWidth = st::dialogsDateFont->width(dt); + rectForName.setWidth(rectForName.width() - dtWidth - st::dialogsDateSkip); + p.setFont(st::dialogsDateFont); + p.setPen(active ? st::dialogsDateFgActive : st::dialogsDateFg); + p.drawText(rectForName.left() + rectForName.width() + st::dialogsDateSkip, rectForName.top() + st::msgNameFont->height - st::msgDateFont->descent, dt); } template void paintRow(Painter &p, History *history, HistoryItem *item, HistoryDraft *draft, int w, bool active, bool selected, bool onlyBackground, PaintItemCallback paintItemCallback) { - QRect fullRect(0, 0, w, st::dlgHeight); - p.fillRect(fullRect, active ? st::dlgActiveBG : (selected ? st::dlgHoverBG : st::dlgBG)); + QRect fullRect(0, 0, w, st::dialogsRowHeight); + p.fillRect(fullRect, active ? st::dialogsBgActive : (selected ? st::dialogsBgOver : st::dialogsBg)); if (onlyBackground) return; PeerData *userpicPeer = (history->peer->migrateTo() ? history->peer->migrateTo() : history->peer); - userpicPeer->paintUserpicLeft(p, st::dlgPhotoSize, st::dlgPaddingHor, st::dlgPaddingVer, w); + userpicPeer->paintUserpicLeft(p, st::dialogsPhotoSize, st::dialogsPadding.x(), st::dialogsPadding.y(), w); - int32 nameleft = st::dlgPaddingHor + st::dlgPhotoSize + st::dlgPhotoPadding; - int32 namewidth = w - nameleft - st::dlgPaddingHor; - QRect rectForName(nameleft, st::dlgPaddingVer + st::dlgNameTop, namewidth, st::msgNameFont->height); + int32 nameleft = st::dialogsPadding.x() + st::dialogsPhotoSize + st::dialogsPhotoPadding; + int32 namewidth = w - nameleft - st::dialogsPadding.x(); + QRect rectForName(nameleft, st::dialogsPadding.y() + st::dialogsNameTop, namewidth, st::msgNameFont->height); // draw chat icon if (history->peer->isChat() || history->peer->isMegagroup()) { - p.drawSprite(QPoint(rectForName.left() + st::dlgChatImgPos.x(), rectForName.top() + st::dlgChatImgPos.y()), (active ? st::dlgActiveChatImg : st::dlgChatImg)); - rectForName.setLeft(rectForName.left() + st::dlgImgSkip); + p.drawSprite(QPoint(rectForName.left() + st::dialogsChatImgPos.x(), rectForName.top() + st::dialogsChatImgPos.y()), (active ? st::dlgActiveChatImg : st::dlgChatImg)); + rectForName.setLeft(rectForName.left() + st::dialogsImgSkip); } else if (history->peer->isChannel()) { - p.drawSprite(QPoint(rectForName.left() + st::dlgChannelImgPos.x(), rectForName.top() + st::dlgChannelImgPos.y()), (active ? st::dlgActiveChannelImg : st::dlgChannelImg)); - rectForName.setLeft(rectForName.left() + st::dlgImgSkip); + p.drawSprite(QPoint(rectForName.left() + st::dialogsChannelImgPos.x(), rectForName.top() + st::dialogsChannelImgPos.y()), (active ? st::dlgActiveChannelImg : st::dlgChannelImg)); + rectForName.setLeft(rectForName.left() + st::dialogsImgSkip); } - int texttop = st::dlgPaddingVer + st::dlgFont->height + st::dlgSep; + int texttop = st::dialogsPadding.y() + st::msgNameFont->height + st::dialogsSkip; if (draft) { paintRowDate(p, draft->date, rectForName, active); // draw check if (draft->saveRequestId) { auto check = active ? &st::dlgActiveSendImg : &st::dlgSendImg; - rectForName.setWidth(rectForName.width() - check->pxWidth() - st::dlgCheckSkip); - p.drawSprite(QPoint(rectForName.left() + rectForName.width() + st::dlgCheckLeft, rectForName.top() + st::dlgCheckTop), *check); + rectForName.setWidth(rectForName.width() - check->pxWidth() - st::dialogsCheckSkip); + p.drawSprite(QPoint(rectForName.left() + rectForName.width() + st::dialogsCheckLeft, rectForName.top() + st::dialogsCheckTop), *check); } - bool hasDraftIcon = !active; - if (hasDraftIcon) { - QString counter; - bool mutedCounter = false; - int unreadRight = w - st::dlgPaddingHor; - int unreadTop = texttop + st::dlgHistFont->ascent - st::dlgUnreadFont->ascent - st::dlgUnreadTop; - int unreadWidth = 0; - paintUnreadCount(p, counter, unreadRight, unreadTop, style::al_right, active, mutedCounter, &unreadWidth); - st::dialogsDraft.paint(p, QPoint(w - st::dlgPaddingHor - st::dlgUnreadHeight, unreadTop), w); - namewidth -= unreadWidth + st::dlgUnreadPaddingHor; - } - - p.setFont(st::dlgHistFont); - p.setPen(active ? st::dlgActiveColor : st::dlgSystemColor); + p.setFont(st::dialogsTextFont); + p.setPen(active ? st::dialogsTextFgActive : st::dialogsTextFgService); if (history->typing.isEmpty() && history->sendActions.isEmpty()) { if (history->cloudDraftTextCache.isEmpty()) { TextCustomTagsMap custom; custom.insert(QChar('c'), qMakePair(textcmdStartLink(1), textcmdStopLink())); QString msg = lng_message_with_from(lt_from, textRichPrepare(lang(lng_from_draft)), lt_message, textRichPrepare(draft->textWithTags.text)); - history->cloudDraftTextCache.setRichText(st::dlgHistFont, msg, _textDlgOptions, custom); + history->cloudDraftTextCache.setRichText(st::dialogsTextFont, msg, _textDlgOptions, custom); } - textstyleSet(&(active ? st::dlgActiveTextStyle : st::dlgTextStyle)); - p.setFont(st::dlgHistFont); - p.setPen(active ? st::dlgActiveColor : st::dlgTextColor); - history->cloudDraftTextCache.drawElided(p, nameleft, texttop, namewidth, st::dlgFont->height / st::dlgHistFont->height); + textstyleSet(&(active ? st::dialogsTextStyleActive : st::dialogsTextStyleDraft)); + p.setFont(st::dialogsTextFont); + p.setPen(active ? st::dialogsTextFgActive : st::dialogsTextFg); + history->cloudDraftTextCache.drawElided(p, nameleft, texttop, namewidth, 1); textstyleRestore(); } else { history->typingText.drawElided(p, nameleft, texttop, namewidth); } } else if (!item) { - p.setFont(st::dlgHistFont); - p.setPen(active ? st::dlgActiveColor : st::dlgSystemColor); + p.setFont(st::dialogsTextFont); + p.setPen(active ? st::dialogsTextFgActive : st::dialogsTextFgService); if (history->typing.isEmpty() && history->sendActions.isEmpty()) { - p.drawText(nameleft, texttop + st::dlgFont->ascent, lang(lng_empty_history)); + p.drawText(nameleft, texttop + st::msgNameFont->ascent, lang(lng_empty_history)); } else { history->typingText.drawElided(p, nameleft, texttop, namewidth); } @@ -134,8 +122,8 @@ void paintRow(Painter &p, History *history, HistoryItem *item, HistoryDraft *dra } else { check = active ? &st::dlgActiveSendImg : &st::dlgSendImg; } - rectForName.setWidth(rectForName.width() - check->pxWidth() - st::dlgCheckSkip); - p.drawSprite(QPoint(rectForName.left() + rectForName.width() + st::dlgCheckLeft, rectForName.top() + st::dlgCheckTop), *check); + rectForName.setWidth(rectForName.width() - check->pxWidth() - st::dialogsCheckSkip); + p.drawSprite(QPoint(rectForName.left() + rectForName.width() + st::dialogsCheckLeft, rectForName.top() + st::dialogsCheckTop), *check); } paintItemCallback(nameleft, namewidth, item); @@ -146,7 +134,7 @@ void paintRow(Painter &p, History *history, HistoryItem *item, HistoryDraft *dra p.drawSprite(rectForName.topLeft() + QPoint(qMin(history->peer->dialogName().maxWidth(), rectForName.width()), 0) + st::verifiedCheckPos, (active ? st::verifiedCheckInv : st::verifiedCheck)); } - p.setPen(active ? st::dlgActiveColor : st::dlgNameColor); + p.setPen(active ? st::dialogsTextFgActive : st::dialogsNameFg); history->peer->dialogName().drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); } @@ -154,7 +142,7 @@ class UnreadBadgeStyle : public StyleSheet { public: QImage circle; QPixmap left[4], right[4]; - style::color bg[4] = { st::dlgUnreadBG, st::dlgActiveUnreadBG, st::dlgUnreadMutedBG, st::dlgActiveUnreadMutedBG }; + style::color bg[4] = { st::dialogsUnreadBg, st::dialogsUnreadBgActive, st::dialogsUnreadBgMuted, st::dialogsUnreadBgMutedActive }; }; StyleSheetPointer unreadBadgeStyle; @@ -203,9 +191,9 @@ void paintUnreadBadge(Painter &p, const QRect &rect, bool active, bool muted) { } void paintUnreadCount(Painter &p, const QString &text, int x, int y, style::align align, bool active, bool muted, int *outUnreadWidth) { - int unreadWidth = st::dlgUnreadFont->width(text); - int unreadRectWidth = unreadWidth + 2 * st::dlgUnreadPaddingHor; - int unreadRectHeight = st::dlgUnreadHeight; + int unreadWidth = st::dialogsUnreadFont->width(text); + int unreadRectWidth = unreadWidth + 2 * st::dialogsUnreadPadding; + int unreadRectHeight = st::dialogsUnreadHeight; accumulate_max(unreadRectWidth, unreadRectHeight); int unreadRectLeft = x; @@ -221,9 +209,9 @@ void paintUnreadCount(Painter &p, const QString &text, int x, int y, style::alig paintUnreadBadge(p, QRect(unreadRectLeft, unreadRectTop, unreadRectWidth, unreadRectHeight), active, muted); - p.setFont(st::dlgUnreadFont); - p.setPen(active ? st::dlgActiveUnreadColor : st::dlgUnreadColor); - p.drawText(unreadRectLeft + (unreadRectWidth - unreadWidth) / 2, unreadRectTop + st::dlgUnreadTop + st::dlgUnreadFont->ascent, text); + p.setFont(st::dialogsUnreadFont); + p.setPen(active ? st::dialogsUnreadFgActive : st::dialogsUnreadFg); + p.drawText(unreadRectLeft + (unreadRectWidth - unreadWidth) / 2, unreadRectTop + st::dialogsUnreadTop + st::dialogsUnreadFont->ascent, text); } void RowPainter::paint(Painter &p, const Row *row, int w, bool active, bool selected, bool onlyBackground) { @@ -241,30 +229,20 @@ void RowPainter::paint(Painter &p, const Row *row, int w, bool active, bool sele } } int availableWidth = namewidth; - int texttop = st::dlgPaddingVer + st::dlgFont->height + st::dlgSep; - auto cloudDraft = history->cloudDraft(); - bool hasDraftIcon = active ? false : (cloudDraft && cloudDraft->date.isValid()); - if (unread || hasDraftIcon) { - QString counter; - bool mutedCounter = false; - bool showUnreadCounter = unread && (!hasDraftIcon || !history->mute()); - if (showUnreadCounter) { - counter = QString::number(unread); - mutedCounter = history->mute(); - } - int unreadRight = w - st::dlgPaddingHor; - int unreadTop = texttop + st::dlgHistFont->ascent - st::dlgUnreadFont->ascent - st::dlgUnreadTop; + int texttop = st::dialogsPadding.y() + st::msgNameFont->height + st::dialogsSkip; + if (unread) { + auto counter = QString::number(unread); + auto mutedCounter = history->mute(); + int unreadRight = w - st::dialogsPadding.x(); + int unreadTop = texttop + st::dialogsTextFont->ascent - st::dialogsUnreadFont->ascent - st::dialogsUnreadTop; int unreadWidth = 0; paintUnreadCount(p, counter, unreadRight, unreadTop, style::al_right, active, mutedCounter, &unreadWidth); - if (!showUnreadCounter) { - st::dialogsDraft.paint(p, QPoint(w - st::dlgPaddingHor - st::dlgUnreadHeight, unreadTop), w); - } - availableWidth -= unreadWidth + st::dlgUnreadPaddingHor; + availableWidth -= unreadWidth + st::dialogsUnreadPadding; } if (history->typing.isEmpty() && history->sendActions.isEmpty()) { - item->drawInDialog(p, QRect(nameleft, texttop, availableWidth, st::dlgFont->height), active, history->textCachedFor, history->lastItemTextCache); + item->drawInDialog(p, QRect(nameleft, texttop, availableWidth, st::dialogsTextFont->height), active, history->textCachedFor, history->lastItemTextCache); } else { - p.setPen(active ? st::dlgActiveColor : st::dlgSystemColor); + p.setPen(active ? st::dialogsTextFgActive : st::dialogsTextFgService); history->typingText.drawElided(p, nameleft, texttop, availableWidth); } }); @@ -274,13 +252,13 @@ void RowPainter::paint(Painter &p, const FakeRow *row, int w, bool active, bool auto item = row->item(); auto history = item->history(); paintRow(p, history, item, nullptr, w, active, selected, onlyBackground, [&p, row, active](int nameleft, int namewidth, HistoryItem *item) { - int lastWidth = namewidth, texttop = st::dlgPaddingVer + st::dlgFont->height + st::dlgSep; - item->drawInDialog(p, QRect(nameleft, texttop, lastWidth, st::dlgFont->height), active, row->_cacheFor, row->_cache); + int lastWidth = namewidth, texttop = st::dialogsPadding.y() + st::msgNameFont->height + st::dialogsSkip; + item->drawInDialog(p, QRect(nameleft, texttop, lastWidth, st::dialogsTextFont->height), active, row->_cacheFor, row->_cache); }); } void paintImportantSwitch(Painter &p, Mode current, int w, bool selected, bool onlyBackground) { - p.fillRect(0, 0, w, st::dlgImportantHeight, selected ? st::dlgHoverBG : st::white); + p.fillRect(0, 0, w, st::dialogsImportantBarHeight, selected ? st::dialogsBgOver : st::white); if (onlyBackground) { return; } @@ -288,15 +266,15 @@ void paintImportantSwitch(Painter &p, Mode current, int w, bool selected, bool o p.setFont(st::semiboldFont); p.setPen(st::black); - int unreadTop = (st::dlgImportantHeight - st::dlgUnreadHeight) / 2; + int unreadTop = (st::dialogsImportantBarHeight - st::dialogsUnreadHeight) / 2; bool mutedHidden = (current == Dialogs::Mode::Important); QString text = mutedHidden ? qsl("Show all chats") : qsl("Hide muted chats"); - int textBaseline = unreadTop + st::dlgUnreadTop + st::dlgUnreadFont->ascent; - p.drawText(st::dlgPaddingHor, textBaseline, text); + int textBaseline = unreadTop + st::dialogsUnreadTop + st::dialogsUnreadFont->ascent; + p.drawText(st::dialogsPadding.x(), textBaseline, text); if (mutedHidden) { if (int32 unread = App::histories().unreadMutedCount()) { - int unreadRight = w - st::dlgPaddingHor; + int unreadRight = w - st::dialogsPadding.x(); paintUnreadCount(p, QString::number(unread), unreadRight, unreadTop, style::al_right, false, true, nullptr); } } diff --git a/Telegram/SourceFiles/dialogs/dialogs_list.cpp b/Telegram/SourceFiles/dialogs/dialogs_list.cpp index 12591987a..e230f53ef 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_list.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_list.cpp @@ -22,6 +22,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "dialogs/dialogs_list.h" #include "dialogs/dialogs_layout.h" +#include "styles/style_dialogs.h" #include "mainwidget.h" namespace Dialogs { @@ -47,16 +48,16 @@ void List::adjustCurrent(int32 y, int32 h) const { } void List::paint(Painter &p, int32 w, int32 hFrom, int32 hTo, PeerData *act, PeerData *sel, bool onlyBackground) const { - adjustCurrent(hFrom, st::dlgHeight); + adjustCurrent(hFrom, st::dialogsRowHeight); Row *row = _current; - p.translate(0, row->_pos * st::dlgHeight); - while (row != _end && row->_pos * st::dlgHeight < hTo) { + p.translate(0, row->_pos * st::dialogsRowHeight); + while (row != _end && row->_pos * st::dialogsRowHeight < hTo) { bool active = (row->history()->peer == act) || (row->history()->peer->migrateTo() && row->history()->peer->migrateTo() == act); bool selected = (row->history()->peer == sel); Layout::RowPainter::paint(p, row, w, active, selected, onlyBackground); row = row->_next; - p.translate(0, st::dlgHeight); + p.translate(0, st::dialogsRowHeight); } } diff --git a/Telegram/SourceFiles/dialogs/dialogs_row.cpp b/Telegram/SourceFiles/dialogs/dialogs_row.cpp new file mode 100644 index 000000000..74de183a6 --- /dev/null +++ b/Telegram/SourceFiles/dialogs/dialogs_row.cpp @@ -0,0 +1,31 @@ +/* +This file is part of Telegram Desktop, +the official desktop version of Telegram messaging app, see https://telegram.org + +Telegram Desktop is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +It is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +In addition, as a special exception, the copyright holders give permission +to link the code of portions of this program with the OpenSSL library. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org +*/ +#include "stdafx.h" +#include "dialogs/dialogs_row.h" + +#include "styles/style_dialogs.h" + +namespace Dialogs { + +FakeRow::FakeRow(HistoryItem *item) : _item(item), _cache(st::dialogsTextWidthMin) { +} + +} // namespace Dialogs \ No newline at end of file diff --git a/Telegram/SourceFiles/dialogs/dialogs_row.h b/Telegram/SourceFiles/dialogs/dialogs_row.h index 45180f4ff..7327f094e 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_row.h +++ b/Telegram/SourceFiles/dialogs/dialogs_row.h @@ -59,8 +59,7 @@ private: class FakeRow { public: - FakeRow(HistoryItem *item) : _item(item) { - } + FakeRow(HistoryItem *item); HistoryItem *item() const { return _item; @@ -71,7 +70,7 @@ private: HistoryItem *_item; mutable const HistoryItem *_cacheFor = nullptr; - mutable Text _cache = Text{ int(st::dlgRichMinWidth) }; + mutable Text _cache; }; diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index 350f10dab..df2612fd3 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -23,6 +23,7 @@ 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 "data/drafts.h" #include "lang.h" #include "application.h" @@ -55,7 +56,7 @@ DialogsInner::DialogsInner(QWidget *parent, MainWidget *main) : SplittedWidget(p } int DialogsInner::dialogsOffset() const { - return importantDialogs ? st::dlgImportantHeight : 0; + return importantDialogs ? st::dialogsImportantBarHeight : 0; } int DialogsInner::filteredOffset() const { @@ -63,12 +64,12 @@ int DialogsInner::filteredOffset() const { } int DialogsInner::peopleOffset() const { - return filteredOffset() + (_filterResults.size() * st::dlgHeight) + st::searchedBarHeight; + return filteredOffset() + (_filterResults.size() * st::dialogsRowHeight) + st::searchedBarHeight; } int DialogsInner::searchedOffset() const { - int result = peopleOffset() + (_peopleResults.isEmpty() ? 0 : ((_peopleResults.size() * st::dlgHeight) + st::searchedBarHeight)); - if (_searchInPeer) result += st::dlgHeight; + int result = peopleOffset() + (_peopleResults.isEmpty() ? 0 : ((_peopleResults.size() * st::dialogsRowHeight) + st::searchedBarHeight)); + if (_searchInPeer) result += st::dialogsRowHeight; return result; } @@ -87,10 +88,10 @@ void DialogsInner::paintRegion(Painter &p, const QRegion ®ion, bool paintingO QRect dialogsClip = r; if (importantDialogs) { Dialogs::Layout::paintImportantSwitch(p, Global::DialogsMode(), fullWidth(), _importantSwitchSel, paintingOther); - dialogsClip.translate(0, -st::dlgImportantHeight); - p.translate(0, st::dlgImportantHeight); + dialogsClip.translate(0, -st::dialogsImportantBarHeight); + p.translate(0, st::dialogsImportantBarHeight); } - int32 otherStart = shownDialogs()->size() * st::dlgHeight; + int32 otherStart = shownDialogs()->size() * st::dialogsRowHeight; PeerData *active = App::main()->activePeer(), *selected = _menuPeer ? _menuPeer : (_sel ? _sel->history()->peer : 0); if (otherStart) { shownDialogs()->all().paint(p, fullWidth(), dialogsClip.top(), dialogsClip.top() + dialogsClip.height(), active, selected, paintingOther); @@ -109,7 +110,7 @@ void DialogsInner::paintRegion(Painter &p, const QRegion ®ion, bool paintingO int32 to = ceilclamp(r.y() + r.height(), st::mentionHeight, 0, _hashtagResults.size()); p.translate(0, from * st::mentionHeight); if (from < _hashtagResults.size()) { - int32 w = fullWidth(), htagwidth = w - st::dlgPaddingHor * 2; + int32 w = fullWidth(), htagwidth = w - st::dialogsPadding.x() * 2; p.setFont(st::mentionFont->f); p.setPen(st::black->p); @@ -135,11 +136,11 @@ void DialogsInner::paintRegion(Painter &p, const QRegion ®ion, bool paintingO p.setFont(st::mentionFont->f); if (!first.isEmpty()) { p.setPen((selected ? st::mentionFgOverActive : st::mentionFgActive)->p); - p.drawText(st::dlgPaddingHor, st::mentionTop + st::mentionFont->ascent, first); + p.drawText(st::dialogsPadding.x(), st::mentionTop + st::mentionFont->ascent, first); } if (!second.isEmpty()) { p.setPen((selected ? st::mentionFgOver : st::mentionFg)->p); - p.drawText(st::dlgPaddingHor + firstwidth, st::mentionTop + st::mentionFont->ascent, second); + p.drawText(st::dialogsPadding.x() + firstwidth, st::mentionTop + st::mentionFont->ascent, second); } } p.translate(0, st::mentionHeight); @@ -148,9 +149,9 @@ void DialogsInner::paintRegion(Painter &p, const QRegion ®ion, bool paintingO } if (!_filterResults.isEmpty()) { int32 skip = filteredOffset(); - int32 from = floorclamp(r.y() - skip, st::dlgHeight, 0, _filterResults.size()); - int32 to = ceilclamp(r.y() + r.height() - skip, st::dlgHeight, 0, _filterResults.size()); - p.translate(0, from * st::dlgHeight); + int32 from = floorclamp(r.y() - skip, st::dialogsRowHeight, 0, _filterResults.size()); + int32 to = ceilclamp(r.y() + r.height() - skip, st::dialogsRowHeight, 0, _filterResults.size()); + p.translate(0, from * st::dialogsRowHeight); if (from < _filterResults.size()) { int32 w = fullWidth(); PeerData *act = App::main()->activePeer(); @@ -159,7 +160,7 @@ void DialogsInner::paintRegion(Painter &p, const QRegion ®ion, bool paintingO bool active = ((_filterResults[from]->history()->peer == act) || (_filterResults[from]->history()->peer->migrateTo() && _filterResults[from]->history()->peer->migrateTo() == act)) && !actId; bool selected = (from == _filteredSel) || (_filterResults[from]->history()->peer == _menuPeer); Dialogs::Layout::RowPainter::paint(p, _filterResults[from], w, active, selected, paintingOther); - p.translate(0, st::dlgHeight); + p.translate(0, st::dialogsRowHeight); } } } @@ -174,9 +175,9 @@ void DialogsInner::paintRegion(Painter &p, const QRegion ®ion, bool paintingO p.translate(0, st::searchedBarHeight); int32 skip = peopleOffset(); - int32 from = floorclamp(r.y() - skip, st::dlgHeight, 0, _peopleResults.size()); - int32 to = ceilclamp(r.y() + r.height() - skip, st::dlgHeight, 0, _peopleResults.size()); - p.translate(0, from * st::dlgHeight); + int32 from = floorclamp(r.y() - skip, st::dialogsRowHeight, 0, _peopleResults.size()); + int32 to = ceilclamp(r.y() + r.height() - skip, st::dialogsRowHeight, 0, _peopleResults.size()); + p.translate(0, from * st::dialogsRowHeight); if (from < _peopleResults.size()) { int32 w = fullWidth(); PeerData *act = App::main()->activePeer(); @@ -185,14 +186,14 @@ void DialogsInner::paintRegion(Painter &p, const QRegion ®ion, bool paintingO bool active = ((_peopleResults[from] == act) || (_peopleResults[from]->migrateTo() && _peopleResults[from]->migrateTo() == act)) && !actId; bool selected = (from == _peopleSel); peopleResultPaint(_peopleResults[from], p, w, active, selected, paintingOther); - p.translate(0, st::dlgHeight); + p.translate(0, st::dialogsRowHeight); } } } if (_searchInPeer) { searchInPeerPaint(p, fullWidth(), paintingOther); - p.translate(0, st::dlgHeight); + p.translate(0, st::dialogsRowHeight); if (_state == FilteredState && _searchResults.isEmpty()) { p.fillRect(0, 0, fullWidth(), st::searchedBarHeight, st::searchedBarBG->b); if (!paintingOther) { @@ -215,9 +216,9 @@ void DialogsInner::paintRegion(Painter &p, const QRegion ®ion, bool paintingO p.translate(0, st::searchedBarHeight); int32 skip = searchedOffset(); - int32 from = floorclamp(r.y() - skip, st::dlgHeight, 0, _searchResults.size()); - int32 to = ceilclamp(r.y() + r.height() - skip, st::dlgHeight, 0, _searchResults.size()); - p.translate(0, from * st::dlgHeight); + int32 from = floorclamp(r.y() - skip, st::dialogsRowHeight, 0, _searchResults.size()); + int32 to = ceilclamp(r.y() + r.height() - skip, st::dialogsRowHeight, 0, _searchResults.size()); + p.translate(0, from * st::dialogsRowHeight); if (from < _searchResults.size()) { int32 w = fullWidth(); PeerData *act = App::main()->activePeer(); @@ -229,7 +230,7 @@ void DialogsInner::paintRegion(Painter &p, const QRegion ®ion, bool paintingO bool active = (history->peer == act && item->id == actId) || (history->peer->migrateTo() && history->peer->migrateTo() == act && item->id == -actId); bool selected = (from == _searchedSel); Dialogs::Layout::RowPainter::paint(p, result, w, active, selected, paintingOther); - p.translate(0, st::dlgHeight); + p.translate(0, st::dialogsRowHeight); } } } @@ -237,80 +238,80 @@ void DialogsInner::paintRegion(Painter &p, const QRegion ®ion, bool paintingO } void DialogsInner::peopleResultPaint(PeerData *peer, Painter &p, int32 w, bool active, bool selected, bool onlyBackground) const { - QRect fullRect(0, 0, w, st::dlgHeight); - p.fillRect(fullRect, active ? st::dlgActiveBG : (selected ? st::dlgHoverBG : st::dlgBG)); + QRect fullRect(0, 0, w, st::dialogsRowHeight); + p.fillRect(fullRect, active ? st::dialogsBgActive : (selected ? st::dialogsBgOver : st::dialogsBg)); if (onlyBackground) return; PeerData *userpicPeer = (peer->migrateTo() ? peer->migrateTo() : peer); - userpicPeer->paintUserpicLeft(p, st::dlgPhotoSize, st::dlgPaddingHor, st::dlgPaddingVer, fullWidth()); + userpicPeer->paintUserpicLeft(p, st::dialogsPhotoSize, st::dialogsPadding.x(), st::dialogsPadding.y(), fullWidth()); - int32 nameleft = st::dlgPaddingHor + st::dlgPhotoSize + st::dlgPhotoPadding; - int32 namewidth = w - nameleft - st::dlgPaddingHor; - QRect rectForName(nameleft, st::dlgPaddingVer + st::dlgNameTop, namewidth, st::msgNameFont->height); + int32 nameleft = st::dialogsPadding.x() + st::dialogsPhotoSize + st::dialogsPhotoPadding; + int32 namewidth = w - nameleft - st::dialogsPadding.x(); + QRect rectForName(nameleft, st::dialogsPadding.y() + st::dialogsNameTop, namewidth, st::msgNameFont->height); // draw chat icon if (peer->isChat() || peer->isMegagroup()) { - p.drawSprite(QPoint(rectForName.left() + st::dlgChatImgPos.x(), rectForName.top() + st::dlgChatImgPos.y()), (active ? st::dlgActiveChatImg : st::dlgChatImg)); - rectForName.setLeft(rectForName.left() + st::dlgImgSkip); + p.drawSprite(QPoint(rectForName.left() + st::dialogsChatImgPos.x(), rectForName.top() + st::dialogsChatImgPos.y()), (active ? st::dlgActiveChatImg : st::dlgChatImg)); + rectForName.setLeft(rectForName.left() + st::dialogsImgSkip); } else if (peer->isChannel()) { - p.drawSprite(QPoint(rectForName.left() + st::dlgChannelImgPos.x(), rectForName.top() + st::dlgChannelImgPos.y()), (active ? st::dlgActiveChannelImg : st::dlgChannelImg)); - rectForName.setLeft(rectForName.left() + st::dlgImgSkip); + p.drawSprite(QPoint(rectForName.left() + st::dialogsChannelImgPos.x(), rectForName.top() + st::dialogsChannelImgPos.y()), (active ? st::dlgActiveChannelImg : st::dlgChannelImg)); + rectForName.setLeft(rectForName.left() + st::dialogsImgSkip); } if (peer->isVerified()) { rectForName.setWidth(rectForName.width() - st::verifiedCheck.pxWidth() - st::verifiedCheckPos.x()); p.drawSprite(rectForName.topLeft() + QPoint(qMin(peer->dialogName().maxWidth(), rectForName.width()), 0) + st::verifiedCheckPos, (active ? st::verifiedCheckInv : st::verifiedCheck)); } - QRect tr(nameleft, st::dlgPaddingVer + st::dlgFont->height + st::dlgSep, namewidth, st::dlgFont->height); - p.setFont(st::dlgHistFont->f); + QRect tr(nameleft, st::dialogsPadding.y() + st::msgNameFont->height + st::dialogsSkip, namewidth, st::dialogsTextFont->height); + p.setFont(st::dialogsTextFont); QString username = peer->userName(); if (!active && username.toLower().startsWith(_peopleQuery)) { QString first = '@' + username.mid(0, _peopleQuery.size()), second = username.mid(_peopleQuery.size()); - int32 w = st::dlgHistFont->width(first); + int32 w = st::dialogsTextFont->width(first); if (w >= tr.width()) { - p.setPen(st::dlgSystemColor->p); - p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->elided(first, tr.width())); + p.setPen(st::dialogsTextFgService); + p.drawText(tr.left(), tr.top() + st::dialogsTextFont->ascent, st::dialogsTextFont->elided(first, tr.width())); } else { - p.setPen(st::dlgSystemColor->p); - p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, first); - p.setPen(st::dlgTextColor->p); - p.drawText(tr.left() + w, tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->elided(second, tr.width() - w)); + p.setPen(st::dialogsTextFgService); + p.drawText(tr.left(), tr.top() + st::dialogsTextFont->ascent, first); + p.setPen(st::dialogsTextFg); + p.drawText(tr.left() + w, tr.top() + st::dialogsTextFont->ascent, st::dialogsTextFont->elided(second, tr.width() - w)); } } else { - p.setPen((active ? st::dlgActiveColor : st::dlgSystemColor)->p); - p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->elided('@' + username, tr.width())); + p.setPen(active ? st::dialogsTextFgActive : st::dialogsTextFgService); + p.drawText(tr.left(), tr.top() + st::dialogsTextFont->ascent, st::dialogsTextFont->elided('@' + username, tr.width())); } - p.setPen((active ? st::dlgActiveColor : st::dlgNameColor)->p); + p.setPen(active ? st::dialogsTextFgActive : st::dialogsNameFg); peer->dialogName().drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); } void DialogsInner::searchInPeerPaint(Painter &p, int32 w, bool onlyBackground) const { - QRect fullRect(0, 0, w, st::dlgHeight); - p.fillRect(fullRect, st::dlgBG->b); + QRect fullRect(0, 0, w, st::dialogsRowHeight); + p.fillRect(fullRect, st::dialogsBg); if (onlyBackground) return; - _searchInPeer->paintUserpicLeft(p, st::dlgPhotoSize, st::dlgPaddingHor, st::dlgPaddingVer, fullWidth()); + _searchInPeer->paintUserpicLeft(p, st::dialogsPhotoSize, st::dialogsPadding.x(), st::dialogsPadding.y(), fullWidth()); - int32 nameleft = st::dlgPaddingHor + st::dlgPhotoSize + st::dlgPhotoPadding; - int32 namewidth = w - nameleft - st::dlgPaddingHor * 2 - st::btnCancelSearch.width; - QRect rectForName(nameleft, st::dlgPaddingVer + st::dlgNameTop, namewidth, st::msgNameFont->height); + int32 nameleft = st::dialogsPadding.x() + st::dialogsPhotoSize + st::dialogsPhotoPadding; + int32 namewidth = w - nameleft - st::dialogsPadding.x() * 2 - st::btnCancelSearch.width; + QRect rectForName(nameleft, st::dialogsPadding.y() + st::dialogsNameTop, namewidth, st::msgNameFont->height); // draw chat icon if (_searchInPeer->isChat() || _searchInPeer->isMegagroup()) { - p.drawSprite(QPoint(rectForName.left() + st::dlgChatImgPos.x(), rectForName.top() + st::dlgChatImgPos.y()), st::dlgChatImg); - rectForName.setLeft(rectForName.left() + st::dlgImgSkip); + p.drawSprite(QPoint(rectForName.left() + st::dialogsChatImgPos.x(), rectForName.top() + st::dialogsChatImgPos.y()), st::dlgChatImg); + rectForName.setLeft(rectForName.left() + st::dialogsImgSkip); } else if (_searchInPeer->isChannel()) { - p.drawSprite(QPoint(rectForName.left() + st::dlgChannelImgPos.x(), rectForName.top() + st::dlgChannelImgPos.y()), st::dlgChannelImg); - rectForName.setLeft(rectForName.left() + st::dlgImgSkip); + p.drawSprite(QPoint(rectForName.left() + st::dialogsChannelImgPos.x(), rectForName.top() + st::dialogsChannelImgPos.y()), st::dlgChannelImg); + rectForName.setLeft(rectForName.left() + st::dialogsImgSkip); } - QRect tr(nameleft, st::dlgPaddingVer + st::dlgFont->height + st::dlgSep, namewidth, st::dlgFont->height); - p.setFont(st::dlgHistFont->f); - p.setPen(st::dlgTextColor->p); - p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->elided(lang((_searchInPeer->isChannel() && !_searchInPeer->isMegagroup()) ? lng_dlg_search_channel : lng_dlg_search_chat), tr.width())); + QRect tr(nameleft, st::dialogsPadding.y() + st::msgNameFont->height + st::dialogsSkip, namewidth, st::dialogsTextFont->height); + p.setFont(st::dialogsTextFont); + p.setPen(st::dialogsTextFg); + p.drawText(tr.left(), tr.top() + st::dialogsTextFont->ascent, st::dialogsTextFont->elided(lang((_searchInPeer->isChannel() && !_searchInPeer->isMegagroup()) ? lng_dlg_search_channel : lng_dlg_search_chat), tr.width())); - p.setPen(st::dlgNameColor->p); + p.setPen(st::dialogsNameFg); _searchInPeer->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); } @@ -332,7 +333,7 @@ void DialogsInner::onUpdateSelected(bool force) { if (_state == DefaultState) { auto newImportantSwitchSel = (importantDialogs && mouseY >= 0 && mouseY < dialogsOffset()); mouseY -= dialogsOffset(); - auto newSel = newImportantSwitchSel ? nullptr : shownDialogs()->rowAtY(mouseY, st::dlgHeight); + auto newSel = newImportantSwitchSel ? nullptr : shownDialogs()->rowAtY(mouseY, st::dialogsRowHeight); if (newSel != _sel || newImportantSwitchSel != _importantSwitchSel) { updateSelectedRow(); _sel = newSel; @@ -357,7 +358,7 @@ void DialogsInner::onUpdateSelected(bool force) { } } if (!_filterResults.isEmpty()) { - int32 skip = filteredOffset(), newFilteredSel = (mouseY >= skip) ? ((mouseY - skip) / int32(st::dlgHeight)) : -1; + int32 skip = filteredOffset(), newFilteredSel = (mouseY >= skip) ? ((mouseY - skip) / int32(st::dialogsRowHeight)) : -1; if (newFilteredSel < 0 || newFilteredSel >= _filterResults.size()) { newFilteredSel = -1; } @@ -369,7 +370,7 @@ void DialogsInner::onUpdateSelected(bool force) { } } if (!_peopleResults.isEmpty()) { - int32 skip = peopleOffset(), newPeopleSel = (mouseY >= skip) ? ((mouseY - skip) / int32(st::dlgHeight)) : -1; + int32 skip = peopleOffset(), newPeopleSel = (mouseY >= skip) ? ((mouseY - skip) / int32(st::dialogsRowHeight)) : -1; if (newPeopleSel < 0 || newPeopleSel >= _peopleResults.size()) { newPeopleSel = -1; } @@ -381,7 +382,7 @@ void DialogsInner::onUpdateSelected(bool force) { } } if (_state == SearchedState && !_searchResults.isEmpty()) { - int32 skip = searchedOffset(), newSearchedSel = (mouseY >= skip) ? ((mouseY - skip) / int32(st::dlgHeight)) : -1; + int32 skip = searchedOffset(), newSearchedSel = (mouseY >= skip) ? ((mouseY - skip) / int32(st::dialogsRowHeight)) : -1; if (newSearchedSel < 0 || newSearchedSel >= _searchResults.size()) { newSearchedSel = -1; } @@ -406,7 +407,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::dlgPaddingHor - st::btnCancelSearch.width, (st::dlgHeight - st::btnCancelSearch.height) / 2); + _cancelSearchInPeer.move(width() - st::dialogsPadding.x() - st::btnCancelSearch.width, (st::dialogsRowHeight - st::btnCancelSearch.height) / 2); } void DialogsInner::onDialogRowReplaced(Dialogs::Row *oldRow, Dialogs::Row *newRow) { @@ -457,14 +458,14 @@ void DialogsInner::createDialog(History *history) { } } - int from = dialogsOffset() + changed.movedFrom * st::dlgHeight; - int to = dialogsOffset() + changed.movedTo * st::dlgHeight; + int from = dialogsOffset() + changed.movedFrom * st::dialogsRowHeight; + int to = dialogsOffset() + changed.movedTo * st::dialogsRowHeight; emit dialogMoved(from, to); if (creating) { refresh(); } else if (_state == DefaultState && changed.movedFrom != changed.movedTo) { - update(0, qMin(from, to), fullWidth(), qAbs(from - to) + st::dlgHeight); + update(0, qMin(from, to), fullWidth(), qAbs(from - to) + st::dialogsRowHeight); } } @@ -498,13 +499,13 @@ void DialogsInner::removeDialog(History *history) { void DialogsInner::dlgUpdated(Dialogs::Mode list, Dialogs::Row *row) { if (_state == DefaultState) { if (Global::DialogsMode() == list) { - update(0, dialogsOffset() + row->pos() * st::dlgHeight, fullWidth(), st::dlgHeight); + update(0, dialogsOffset() + row->pos() * st::dialogsRowHeight, fullWidth(), st::dialogsRowHeight); } } else if (_state == FilteredState || _state == SearchedState) { if (list == Dialogs::Mode::All) { for (int32 i = 0, l = _filterResults.size(); i < l; ++i) { if (_filterResults.at(i)->history() == row->history()) { - update(0, i * st::dlgHeight, fullWidth(), st::dlgHeight); + update(0, i * st::dialogsRowHeight, fullWidth(), st::dialogsRowHeight); break; } } @@ -515,13 +516,13 @@ void DialogsInner::dlgUpdated(Dialogs::Mode list, Dialogs::Row *row) { void DialogsInner::dlgUpdated(History *history, MsgId msgId) { if (_state == DefaultState) { if (auto row = shownDialogs()->getRow(history->peer->id)) { - update(0, dialogsOffset() + row->pos() * st::dlgHeight, fullWidth(), st::dlgHeight); + update(0, dialogsOffset() + row->pos() * st::dialogsRowHeight, fullWidth(), st::dialogsRowHeight); } } else if (_state == FilteredState || _state == SearchedState) { int32 cnt = 0, add = filteredOffset(); for (FilteredDialogs::const_iterator i = _filterResults.cbegin(), e = _filterResults.cend(); i != e; ++i) { if ((*i)->history() == history) { - update(0, add + cnt * st::dlgHeight, fullWidth(), st::dlgHeight); + update(0, add + cnt * st::dialogsRowHeight, fullWidth(), st::dialogsRowHeight); break; } ++cnt; @@ -530,7 +531,7 @@ void DialogsInner::dlgUpdated(History *history, MsgId msgId) { int32 cnt = 0, add = peopleOffset(); for (PeopleResults::const_iterator i = _peopleResults.cbegin(), e = _peopleResults.cend(); i != e; ++i) { if ((*i) == history->peer) { - update(0, add + cnt * st::dlgHeight, fullWidth(), st::dlgHeight); + update(0, add + cnt * st::dialogsRowHeight, fullWidth(), st::dialogsRowHeight); break; } ++cnt; @@ -540,7 +541,7 @@ void DialogsInner::dlgUpdated(History *history, MsgId msgId) { int32 cnt = 0, add = searchedOffset(); for (SearchResults::const_iterator i = _searchResults.cbegin(), e = _searchResults.cend(); i != e; ++i) { if ((*i)->item()->history() == history && (*i)->item()->id == msgId) { - update(0, add + cnt * st::dlgHeight, fullWidth(), st::dlgHeight); + update(0, add + cnt * st::dialogsRowHeight, fullWidth(), st::dialogsRowHeight); break; } ++cnt; @@ -560,30 +561,30 @@ void DialogsInner::updateSelectedRow(PeerData *peer) { if (peer) { if (History *h = App::historyLoaded(peer->id)) { if (h->inChatList(Global::DialogsMode())) { - update(0, dialogsOffset() + h->posInChatList(Global::DialogsMode()) * st::dlgHeight, fullWidth(), st::dlgHeight); + update(0, dialogsOffset() + h->posInChatList(Global::DialogsMode()) * st::dialogsRowHeight, fullWidth(), st::dialogsRowHeight); } } } else if (_sel) { - update(0, dialogsOffset() + _sel->pos() * st::dlgHeight, fullWidth(), st::dlgHeight); + update(0, dialogsOffset() + _sel->pos() * st::dialogsRowHeight, fullWidth(), st::dialogsRowHeight); } else if (_importantSwitchSel) { - update(0, 0, fullWidth(), st::dlgImportantHeight); + update(0, 0, fullWidth(), st::dialogsImportantBarHeight); } } else if (_state == FilteredState || _state == SearchedState) { if (peer) { for (int32 i = 0, l = _filterResults.size(); i != l; ++i) { if (_filterResults.at(i)->history()->peer == peer) { - update(0, filteredOffset() + i * st::dlgHeight, fullWidth(), st::dlgHeight); + update(0, filteredOffset() + i * st::dialogsRowHeight, fullWidth(), st::dialogsRowHeight); break; } } } else if (_hashtagSel >= 0) { update(0, _hashtagSel * st::mentionHeight, fullWidth(), st::mentionHeight); } else if (_filteredSel >= 0) { - update(0, filteredOffset() + _filteredSel * st::dlgHeight, fullWidth(), st::dlgHeight); + update(0, filteredOffset() + _filteredSel * st::dialogsRowHeight, fullWidth(), st::dialogsRowHeight); } else if (_peopleSel >= 0) { - update(0, peopleOffset() + _peopleSel * st::dlgHeight, fullWidth(), st::dlgHeight); + update(0, peopleOffset() + _peopleSel * st::dialogsRowHeight, fullWidth(), st::dialogsRowHeight); } else if (_searchedSel >= 0) { - update(0, searchedOffset() + _searchedSel * st::dlgHeight, fullWidth(), st::dlgHeight); + update(0, searchedOffset() + _searchedSel * st::dialogsRowHeight, fullWidth(), st::dialogsRowHeight); } } @@ -1156,14 +1157,14 @@ void DialogsInner::notify_historyMuteUpdated(History *history) { return; } - int from = dialogsOffset() + changed.movedFrom * st::dlgHeight; - int to = dialogsOffset() + changed.movedTo * st::dlgHeight; + int from = dialogsOffset() + changed.movedFrom * st::dialogsRowHeight; + int to = dialogsOffset() + changed.movedTo * st::dialogsRowHeight; emit dialogMoved(from, to); if (creating) { refresh(); } else if (_state == DefaultState && changed.movedFrom != changed.movedTo) { - update(0, qMin(from, to), fullWidth(), qAbs(from - to) + st::dlgHeight); + update(0, qMin(from, to), fullWidth(), qAbs(from - to) + st::dialogsRowHeight); } } } @@ -1179,15 +1180,15 @@ void DialogsInner::refresh(bool toTop) { if (!_addContactLnk.isHidden()) _addContactLnk.hide(); } } else { - h = dialogsOffset() + shownDialogs()->size() * st::dlgHeight; + h = dialogsOffset() + shownDialogs()->size() * st::dialogsRowHeight; if (!_addContactLnk.isHidden()) _addContactLnk.hide(); } } else { if (!_addContactLnk.isHidden()) _addContactLnk.hide(); if (_state == FilteredState) { - h = searchedOffset() + (_searchResults.count() * st::dlgHeight) + ((_searchResults.isEmpty() && !_searchInPeer) ? -st::searchedBarHeight : 0); + h = searchedOffset() + (_searchResults.count() * st::dialogsRowHeight) + ((_searchResults.isEmpty() && !_searchInPeer) ? -st::searchedBarHeight : 0); } else if (_state == SearchedState) { - h = searchedOffset() + (_searchResults.count() * st::dlgHeight); + h = searchedOffset() + (_searchResults.count() * st::dialogsRowHeight); } } setHeight(h); @@ -1295,8 +1296,8 @@ void DialogsInner::selectSkip(int32 direction) { } } if (_importantSwitchSel || _sel) { - int fromY = _importantSwitchSel ? 0 : (dialogsOffset() + _sel->pos() * st::dlgHeight); - emit mustScrollTo(fromY, fromY + st::dlgHeight); + int fromY = _importantSwitchSel ? 0 : (dialogsOffset() + _sel->pos() * st::dialogsRowHeight); + emit mustScrollTo(fromY, fromY + st::dialogsRowHeight); } } else if (_state == FilteredState || _state == SearchedState) { if (_hashtagResults.isEmpty() && _filterResults.isEmpty() && _peopleResults.isEmpty() && _searchResults.isEmpty()) return; @@ -1333,11 +1334,11 @@ void DialogsInner::selectSkip(int32 direction) { if (_hashtagSel >= 0 && _hashtagSel < _hashtagResults.size()) { emit mustScrollTo(_hashtagSel * st::mentionHeight, (_hashtagSel + 1) * st::mentionHeight); } else if (_filteredSel >= 0 && _filteredSel < _filterResults.size()) { - emit mustScrollTo(filteredOffset() + _filteredSel * st::dlgHeight, filteredOffset() + (_filteredSel + 1) * st::dlgHeight); + emit mustScrollTo(filteredOffset() + _filteredSel * st::dialogsRowHeight, filteredOffset() + (_filteredSel + 1) * st::dialogsRowHeight); } else if (_peopleSel >= 0 && _peopleSel < _peopleResults.size()) { - emit mustScrollTo(peopleOffset() + _peopleSel * st::dlgHeight + (_peopleSel ? 0 : -st::searchedBarHeight), peopleOffset() + (_peopleSel + 1) * st::dlgHeight); + emit mustScrollTo(peopleOffset() + _peopleSel * st::dialogsRowHeight + (_peopleSel ? 0 : -st::searchedBarHeight), peopleOffset() + (_peopleSel + 1) * st::dialogsRowHeight); } else { - emit mustScrollTo(searchedOffset() + _searchedSel * st::dlgHeight + (_searchedSel ? 0 : -st::searchedBarHeight), searchedOffset() + (_searchedSel + 1) * st::dlgHeight); + emit mustScrollTo(searchedOffset() + _searchedSel * st::dialogsRowHeight + (_searchedSel ? 0 : -st::searchedBarHeight), searchedOffset() + (_searchedSel + 1) * st::dialogsRowHeight); } } update(); @@ -1347,13 +1348,13 @@ void DialogsInner::scrollToPeer(const PeerId &peer, MsgId msgId) { int32 fromY = -1; if (_state == DefaultState) { if (auto row = shownDialogs()->getRow(peer)) { - fromY = dialogsOffset() + row->pos() * st::dlgHeight; + fromY = dialogsOffset() + row->pos() * st::dialogsRowHeight; } } else if (_state == FilteredState || _state == SearchedState) { if (msgId) { for (int32 i = 0, c = _searchResults.size(); i < c; ++i) { if (_searchResults[i]->item()->history()->peer->id == peer && _searchResults[i]->item()->id == msgId) { - fromY = searchedOffset() + i * st::dlgHeight; + fromY = searchedOffset() + i * st::dialogsRowHeight; break; } } @@ -1361,19 +1362,19 @@ void DialogsInner::scrollToPeer(const PeerId &peer, MsgId msgId) { if (fromY < 0) { for (int32 i = 0, c = _filterResults.size(); i < c; ++i) { if (_filterResults[i]->history()->peer->id == peer) { - fromY = filteredOffset() + (i * st::dlgHeight); + fromY = filteredOffset() + (i * st::dialogsRowHeight); break; } } } } if (fromY >= 0) { - emit mustScrollTo(fromY, fromY + st::dlgHeight); + emit mustScrollTo(fromY, fromY + st::dialogsRowHeight); } } void DialogsInner::selectSkipPage(int32 pixels, int32 direction) { - int toSkip = pixels / int(st::dlgHeight); + int toSkip = pixels / int(st::dialogsRowHeight); if (_state == DefaultState) { if (!_sel) { if (direction > 0 && !shownDialogs()->isEmpty()) { @@ -1397,8 +1398,8 @@ void DialogsInner::selectSkipPage(int32 pixels, int32 direction) { } } if (_importantSwitchSel || _sel) { - int fromY = (_importantSwitchSel ? 0 : (dialogsOffset() + _sel->pos() * st::dlgHeight)); - emit mustScrollTo(fromY, fromY + st::dlgHeight); + int fromY = (_importantSwitchSel ? 0 : (dialogsOffset() + _sel->pos() * st::dialogsRowHeight)); + emit mustScrollTo(fromY, fromY + st::dialogsRowHeight); } } else { return selectSkip(direction * toSkip); @@ -1412,10 +1413,10 @@ void DialogsInner::loadPeerPhotos(int32 yFrom) { int32 yTo = yFrom + parentWidget()->height() * 5; MTP::clearLoaderPriorities(); if (_state == DefaultState) { - int32 otherStart = shownDialogs()->size() * st::dlgHeight; + int32 otherStart = shownDialogs()->size() * st::dialogsRowHeight; if (yFrom < otherStart) { - for (auto i = shownDialogs()->cfind(yFrom, st::dlgHeight), end = shownDialogs()->cend(); i != end; ++i) { - if (((*i)->pos() * st::dlgHeight) >= yTo) { + for (auto i = shownDialogs()->cfind(yFrom, st::dialogsRowHeight), end = shownDialogs()->cend(); i != end; ++i) { + if (((*i)->pos() * st::dialogsRowHeight) >= yTo) { break; } (*i)->history()->peer->loadUserpic(); @@ -1426,10 +1427,10 @@ void DialogsInner::loadPeerPhotos(int32 yFrom) { } yTo -= otherStart; } else if (_state == FilteredState || _state == SearchedState) { - int32 from = (yFrom - filteredOffset()) / st::dlgHeight; + int32 from = (yFrom - filteredOffset()) / st::dialogsRowHeight; if (from < 0) from = 0; if (from < _filterResults.size()) { - int32 to = (yTo / int32(st::dlgHeight)) + 1, w = width(); + int32 to = (yTo / int32(st::dialogsRowHeight)) + 1, w = width(); if (to > _filterResults.size()) to = _filterResults.size(); for (; from < to; ++from) { @@ -1437,20 +1438,20 @@ void DialogsInner::loadPeerPhotos(int32 yFrom) { } } - from = (yFrom > filteredOffset() + st::searchedBarHeight ? ((yFrom - filteredOffset() - st::searchedBarHeight) / int32(st::dlgHeight)) : 0) - _filterResults.size(); + from = (yFrom > filteredOffset() + st::searchedBarHeight ? ((yFrom - filteredOffset() - st::searchedBarHeight) / int32(st::dialogsRowHeight)) : 0) - _filterResults.size(); if (from < 0) from = 0; if (from < _peopleResults.size()) { - int32 to = (yTo > filteredOffset() + st::searchedBarHeight ? ((yTo - filteredOffset() - st::searchedBarHeight) / int32(st::dlgHeight)) : 0) - _filterResults.size() + 1, w = width(); + int32 to = (yTo > filteredOffset() + st::searchedBarHeight ? ((yTo - filteredOffset() - st::searchedBarHeight) / int32(st::dialogsRowHeight)) : 0) - _filterResults.size() + 1, w = width(); if (to > _peopleResults.size()) to = _peopleResults.size(); for (; from < to; ++from) { _peopleResults[from]->loadUserpic(); } } - from = (yFrom > filteredOffset() + ((_peopleResults.isEmpty() ? 0 : st::searchedBarHeight) + st::searchedBarHeight) ? ((yFrom - filteredOffset() - (_peopleResults.isEmpty() ? 0 : st::searchedBarHeight) - st::searchedBarHeight) / int32(st::dlgHeight)) : 0) - _filterResults.size() - _peopleResults.size(); + from = (yFrom > filteredOffset() + ((_peopleResults.isEmpty() ? 0 : st::searchedBarHeight) + st::searchedBarHeight) ? ((yFrom - filteredOffset() - (_peopleResults.isEmpty() ? 0 : st::searchedBarHeight) - st::searchedBarHeight) / int32(st::dialogsRowHeight)) : 0) - _filterResults.size() - _peopleResults.size(); if (from < 0) from = 0; if (from < _searchResults.size()) { - int32 to = (yTo > filteredOffset() + (_peopleResults.isEmpty() ? 0 : st::searchedBarHeight) + st::searchedBarHeight ? ((yTo - filteredOffset() - (_peopleResults.isEmpty() ? 0 : st::searchedBarHeight) - st::searchedBarHeight) / int32(st::dlgHeight)) : 0) - _filterResults.size() - _peopleResults.size() + 1, w = width(); + int32 to = (yTo > filteredOffset() + (_peopleResults.isEmpty() ? 0 : st::searchedBarHeight) + st::searchedBarHeight ? ((yTo - filteredOffset() - (_peopleResults.isEmpty() ? 0 : st::searchedBarHeight) - st::searchedBarHeight) / int32(st::dialogsRowHeight)) : 0) - _filterResults.size() - _peopleResults.size() + 1, w = width(); if (to > _searchResults.size()) to = _searchResults.size(); for (; from < to; ++from) { @@ -1761,7 +1762,7 @@ DialogsWidget::DialogsWidget(MainWidget *parent) : TWidget(parent) , _newGroup(this, st::btnNewGroup) , _addContact(this, st::btnAddContact) , _cancelSearch(this, st::btnCancelSearch) -, _scroll(this, st::dlgScroll) +, _scroll(this, st::dialogsScroll) , _inner(&_scroll, parent) , _a_show(animation(this, &DialogsWidget::step_show)) , _searchInPeer(0) @@ -1800,15 +1801,15 @@ DialogsWidget::DialogsWidget(MainWidget *parent) : TWidget(parent) _scroll.show(); _filter.show(); - _filter.move(st::dlgPaddingHor, st::dlgFilterPadding); + _filter.move(st::dialogsPadding.x(), st::dialogsFilterPadding); _filter.setFocusPolicy(Qt::StrongFocus); _filter.customUpDown(true); _addContact.hide(); _newGroup.show(); _cancelSearch.hide(); - _newGroup.move(width() - _newGroup.width() - st::dlgPaddingHor, 0); - _addContact.move(width() - _addContact.width() - st::dlgPaddingHor, 0); - _cancelSearch.move(width() - _cancelSearch.width() - st::dlgPaddingHor, 0); + _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); } void DialogsWidget::activate() { @@ -2342,10 +2343,10 @@ void DialogsWidget::onListScroll() { _inner.loadPeerPhotos(_scroll.scrollTop()); if (_inner.state() == DialogsInner::SearchedState || (_inner.state() == DialogsInner::FilteredState && _searchInMigrated && _searchFull && !_searchFullMigrated)) { - if (_scroll.scrollTop() > (_inner.searchList().size() + _inner.filteredList().size() + _inner.peopleList().size()) * st::dlgHeight - PreloadHeightsCount * _scroll.height()) { + if (_scroll.scrollTop() > (_inner.searchList().size() + _inner.filteredList().size() + _inner.peopleList().size()) * st::dialogsRowHeight - PreloadHeightsCount * _scroll.height()) { onSearchMore(); } - } else if (_scroll.scrollTop() > _inner.dialogsList()->size() * st::dlgHeight - PreloadHeightsCount * _scroll.height()) { + } else if (_scroll.scrollTop() > _inner.dialogsList()->size() * st::dialogsRowHeight - PreloadHeightsCount * _scroll.height()) { loadDialogs(); } } @@ -2425,15 +2426,15 @@ void DialogsWidget::onCompleteHashtag(QString tag) { void DialogsWidget::resizeEvent(QResizeEvent *e) { int32 w = width(); - _filter.setGeometry(st::dlgPaddingHor, st::dlgFilterPadding, w - 2 * st::dlgPaddingHor, _filter.height()); - _newGroup.move(w - _newGroup.width() - st::dlgPaddingHor, _filter.y()); - _addContact.move(w - _addContact.width() - st::dlgPaddingHor, _filter.y()); - _cancelSearch.move(w - _cancelSearch.width() - st::dlgPaddingHor, _filter.y()); - _scroll.move(0, _filter.height() + 2 * st::dlgFilterPadding); + _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()); + _scroll.move(0, _filter.height() + 2 * st::dialogsFilterPadding); int32 addToY = App::main() ? App::main()->contentScrollAddToY() : 0; int32 newScrollY = _scroll.scrollTop() + addToY; - _scroll.resize(w, height() - _filter.y() - _filter.height() - st::dlgFilterPadding - st::dlgPaddingVer); + _scroll.resize(w, height() - _filter.y() - _filter.height() - st::dialogsFilterPadding - st::dialogsPadding.y()); if (addToY) { _scroll.scrollToY(newScrollY); } else { @@ -2583,6 +2584,6 @@ void DialogsWidget::onCancelSearchInPeer() { void DialogsWidget::onDialogMoved(int movedFrom, int movedTo) { int32 st = _scroll.scrollTop(); if (st > movedTo && st < movedFrom) { - _scroll.scrollToY(st + st::dlgHeight); + _scroll.scrollToY(st + st::dialogsRowHeight); } } diff --git a/Telegram/SourceFiles/facades.cpp b/Telegram/SourceFiles/facades.cpp index 5480af8d4..21ab5d2af 100644 --- a/Telegram/SourceFiles/facades.cpp +++ b/Telegram/SourceFiles/facades.cpp @@ -95,6 +95,8 @@ void activateBotCommand(const HistoryItem *msg, int row, int col) { auto getMessageBot = [msg]() -> UserData* { if (auto bot = msg->viaBot()) { return bot; + } else if (auto bot = msg->from()->asUser()) { + return bot; } else if (auto bot = msg->history()->peer->asUser()) { return bot; } diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index 5a8816cd7..5baf02f92 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -23,6 +23,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "core/click_handler_types.h" #include "dialogs/dialogs_indexed_list.h" +#include "styles/style_dialogs.h" #include "lang.h" #include "mainwidget.h" #include "application.h" @@ -73,7 +74,7 @@ TextParseOptions _instagramDescriptionOptions = { inline void _initTextOptions() { _historySrvOptions.dir = _textNameOptions.dir = _textDlgOptions.dir = cLangDir(); - _textDlgOptions.maxw = st::dlgMaxWidth * 2; + _textDlgOptions.maxw = st::dialogsWidthMax * 2; _webpageTitleOptions.maxw = st::msgMaxWidth - st::msgPadding.left() - st::msgPadding.right() - st::webPageLeft; _webpageTitleOptions.maxh = st::webPageTitleFont->height * 2; _webpageDescriptionOptions.maxw = st::msgMaxWidth - st::msgPadding.left() - st::msgPadding.right() - st::webPageLeft; @@ -129,6 +130,9 @@ void historyInit() { History::History(const PeerId &peerId) : peer(App::peer(peerId)) +, lastItemTextCache(st::dialogsTextWidthMin) +, typingText(st::dialogsTextWidthMin) +, cloudDraftTextCache(st::dialogsTextWidthMin) , _mute(isNotifyMuted(peer->notify)) { if (peer->isUser() && peer->asUser()->botInfo) { outboxReadBefore = INT_MAX; @@ -259,7 +263,7 @@ bool History::updateTyping(uint64 ms, bool force) { newTypingStr += qsl("..."); } if (typingStr != newTypingStr) { - typingText.setText(st::dlgHistFont, (typingStr = newTypingStr), _textNameOptions); + typingText.setText(st::dialogsTextFont, (typingStr = newTypingStr), _textNameOptions); } } if (!typingStr.isEmpty()) { @@ -7494,13 +7498,6 @@ HistoryTextState HistoryMessage::getState(int x, int y, HistoryStateRequest requ } trect.setTop(trect.top() + fwdheight); } - if (via && !displayFromName() && !displayForwardedFrom()) { - if (x >= trect.left() && y >= trect.top() && y < trect.top() + st::msgNameFont->height && x < trect.left() + via->_width) { - result.link = via->_lnk; - return result; - } - trect.setTop(trect.top() + st::msgNameFont->height); - } if (reply) { int32 h = st::msgReplyPadding.top() + st::msgReplyBarSize.height() + st::msgReplyPadding.bottom(); if (y >= trect.top() && y < trect.top() + h) { @@ -7511,6 +7508,13 @@ HistoryTextState HistoryMessage::getState(int x, int y, HistoryStateRequest requ } trect.setTop(trect.top() + h); } + if (via && !displayFromName() && !displayForwardedFrom()) { + if (x >= trect.left() && y >= trect.top() && y < trect.top() + st::msgNameFont->height && x < trect.left() + via->_width) { + result.link = via->_lnk; + return result; + } + trect.setTop(trect.top() + st::msgNameFont->height); + } bool inDate = false, mediaDisplayed = _media && _media->isDisplayed(); if (!mediaDisplayed || !_media->customInfoLayout()) { @@ -7568,16 +7572,16 @@ void HistoryMessage::drawInDialog(Painter &p, const QRect &r, bool act, const Hi TextCustomTagsMap custom; custom.insert(QChar('c'), qMakePair(textcmdStartLink(1), textcmdStopLink())); msg = lng_message_with_from(lt_from, textRichPrepare((author() == App::self()) ? lang(lng_from_you) : author()->shortName()), lt_message, textRichPrepare(msg)); - cache.setRichText(st::dlgHistFont, msg, _textDlgOptions, custom); + cache.setRichText(st::dialogsTextFont, msg, _textDlgOptions, custom); } else { - cache.setText(st::dlgHistFont, msg, _textDlgOptions); + cache.setText(st::dialogsTextFont, msg, _textDlgOptions); } } if (r.width()) { - textstyleSet(&(act ? st::dlgActiveTextStyle : st::dlgTextStyle)); - p.setFont(st::dlgHistFont->f); - p.setPen((act ? st::dlgActiveColor : (emptyText() ? st::dlgSystemColor : st::dlgTextColor))->p); - cache.drawElided(p, r.left(), r.top(), r.width(), r.height() / st::dlgHistFont->height); + textstyleSet(&(act ? st::dialogsTextStyleActive : st::dialogsTextStyle)); + p.setFont(st::dialogsTextFont); + p.setPen(act ? st::dialogsTextFgActive : (emptyText() ? st::dialogsTextFgService : st::dialogsTextFg)); + cache.drawElided(p, r.left(), r.top(), r.width(), r.height() / st::dialogsTextFont->height); textstyleRestore(); } } @@ -8087,11 +8091,11 @@ HistoryTextState HistoryService::getState(int x, int y, HistoryStateRequest requ void HistoryService::drawInDialog(Painter &p, const QRect &r, bool act, const HistoryItem *&cacheFor, Text &cache) const { if (cacheFor != this) { cacheFor = this; - cache.setText(st::dlgHistFont, inDialogsText(), _textDlgOptions); + cache.setText(st::dialogsTextFont, inDialogsText(), _textDlgOptions); } QRect tr(r); - p.setPen((act ? st::dlgActiveColor : st::dlgSystemColor)->p); - cache.drawElided(p, tr.left(), tr.top(), tr.width(), tr.height() / st::dlgHistFont->height); + p.setPen(act ? st::dialogsTextFgActive : st::dialogsTextFgService); + cache.drawElided(p, tr.left(), tr.top(), tr.width(), tr.height() / st::dialogsTextFont->height); } QString HistoryService::notificationText() const { diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index 8582334c7..0508473ad 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -458,14 +458,14 @@ public: mtpRequestId sendRequestId = 0; mutable const HistoryItem *textCachedFor = nullptr; // cache - mutable Text lastItemTextCache = Text{ int(st::dlgRichMinWidth) }; + mutable Text lastItemTextCache; typedef QMap TypingUsers; TypingUsers typing; typedef QMap SendActionUsers; SendActionUsers sendActions; QString typingStr; - Text typingText = Text{ int(st::dlgRichMinWidth) }; + Text typingText; uint32 typingDots; QMap mySendActions; @@ -504,7 +504,7 @@ public: void changeMsgId(MsgId oldId, MsgId newId); - Text cloudDraftTextCache = Text { int(st::dlgRichMinWidth) }; + Text cloudDraftTextCache; protected: diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index a423edf68..756007d45 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -22,6 +22,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "historywidget.h" #include "styles/style_history.h" +#include "styles/style_dialogs.h" #include "boxes/confirmbox.h" #include "boxes/photosendbox.h" #include "ui/filedialog.h" @@ -1552,6 +1553,15 @@ HistoryInner::~HistoryInner() { _dragAction = NoDrag; } +bool HistoryInner::focusNextPrevChild(bool next) { + if (_selected.isEmpty()) { + return focusNextPrevChild(next); + } else { + clearSelectedItems(); + return true; + } +} + void HistoryInner::adjustCurrent(int32 y) const { int32 htop = historyTop(), hdrawtop = historyDrawTop(), mtop = migratedTop(); _curHistory = 0; @@ -3036,13 +3046,15 @@ void HistoryWidget::applyInlineBotQuery(UserData *bot, const QString &query) { } void HistoryWidget::updateStickersByEmoji() { - int32 len = 0; - auto &text = _field.getTextWithTags().text; - if (EmojiPtr emoji = emojiFromText(text, &len)) { - if (text.size() > len) { - len = 0; - } else { - _fieldAutocomplete->showStickers(emoji); + int len = 0; + if (!_editMsgId) { + auto &text = _field.getTextWithTags().text; + if (auto emoji = emojiFromText(text, &len)) { + if (text.size() > len) { + len = 0; + } else { + _fieldAutocomplete->showStickers(emoji); + } } } if (!len) { @@ -3187,7 +3199,7 @@ void HistoryWidget::writeDrafts(HistoryDraft **localDraft, HistoryDraft **editDr } if (!_editMsgId) { - _saveCloudDraftTimer.start(SaveCloudDraftTimeout); + _saveCloudDraftTimer.start(SaveCloudDraftIdleTimeout); } } @@ -4906,7 +4918,10 @@ bool HistoryWidget::joinFail(const RPCError &error, mtpRequestId req) { if (error.type() == qstr("CHANNEL_PRIVATE") || error.type() == qstr("CHANNEL_PUBLIC_GROUP_NA") || error.type() == qstr("USER_BANNED_IN_CHANNEL")) { Ui::showLayer(new InformBox(lang((_peer && _peer->isMegagroup()) ? lng_group_not_accessible : lng_channel_not_accessible))); return true; + } else if (error.type() == qstr("CHANNELS_TOO_MUCH")) { + Ui::showLayer(new InformBox(lang(lng_join_channel_error))); } + return false; } @@ -5801,16 +5816,16 @@ void HistoryWidget::paintTopBar(Painter &p, float64 over, int32 decreaseWidth) { int32 increaseLeft = Adaptive::OneColumn() ? (st::topBarForwardPadding.right() - st::topBarForwardPadding.left()) : 0; decreaseWidth += increaseLeft; QRect rectForName(st::topBarForwardPadding.left() + increaseLeft, st::topBarForwardPadding.top(), width() - decreaseWidth - st::topBarForwardPadding.left() - st::topBarForwardPadding.right(), st::msgNameFont->height); - p.setFont(st::dlgHistFont->f); + p.setFont(st::dialogsTextFont); if (_history->typing.isEmpty() && _history->sendActions.isEmpty()) { p.setPen(st::titleStatusColor->p); - p.drawText(rectForName.x(), st::topBarHeight - st::topBarForwardPadding.bottom() - st::dlgHistFont->height + st::dlgHistFont->ascent, _titlePeerText); + p.drawText(rectForName.x(), st::topBarHeight - st::topBarForwardPadding.bottom() - st::dialogsTextFont->height + st::dialogsTextFont->ascent, _titlePeerText); } else { p.setPen(st::titleTypingColor->p); - _history->typingText.drawElided(p, rectForName.x(), st::topBarHeight - st::topBarForwardPadding.bottom() - st::dlgHistFont->height, rectForName.width()); + _history->typingText.drawElided(p, rectForName.x(), st::topBarHeight - st::topBarForwardPadding.bottom() - st::dialogsTextFont->height, rectForName.width()); } - p.setPen(st::dlgNameColor->p); + p.setPen(st::dialogsNameFg); _peer->dialogName().drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); if (Adaptive::OneColumn()) { @@ -5882,7 +5897,7 @@ void HistoryWidget::updateOnlineDisplay(int32 x, int32 w) { } if (_titlePeerText != text) { _titlePeerText = text; - _titlePeerTextWidth = st::dlgHistFont->width(_titlePeerText); + _titlePeerTextWidth = st::dialogsTextFont->width(_titlePeerText); if (App::main()) { App::main()->topBar()->update(); } diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index 490651c18..2847bf694 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -115,6 +115,9 @@ public: ~HistoryInner(); +protected: + bool focusNextPrevChild(bool next) override; + public slots: void onUpdateSelected(); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index a69a663af..aa1c15cff 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -21,7 +21,9 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "stdafx.h" #include "mainwidget.h" +#include "styles/style_dialogs.h" #include "ui/buttons/peer_avatar_button.h" +#include "ui/buttons/round_button.h" #include "window/section_memento.h" #include "window/section_widget.h" #include "window/top_bar_widget.h" @@ -56,6 +58,7 @@ StackItemSection::~StackItemSection() { MainWidget::MainWidget(MainWindow *window) : TWidget(window) , _a_show(animation(this, &MainWidget::step_show)) +, _dialogsWidth(st::dialogsWidthMin) , _sideShadow(this, st::shadowColor) , _dialogs(this) , _history(this) @@ -2526,8 +2529,8 @@ void MainWidget::showAll() { cSetPasswordRecovered(false); Ui::showLayer(new InformBox(lang(lng_signin_password_removed))); } - _sideShadow.show(); if (Adaptive::OneColumn()) { + _sideShadow.hide(); if (_hider) { _hider->hide(); if (!_forwardConfirm && _hider->wasOffered()) { @@ -2562,6 +2565,7 @@ void MainWidget::showAll() { _dialogs->hide(); } } else { + _sideShadow.show(); if (_hider) { _hider->show(); if (_forwardConfirm) { @@ -2593,6 +2597,14 @@ void MainWidget::showAll() { App::wnd()->checkHistoryActivation(); } +namespace { + +inline int chatsListWidth(int windowWidth) { + return snap((windowWidth * 5) / 14, st::dialogsWidthMin, st::dialogsWidthMax); +} + +} // namespace + void MainWidget::resizeEvent(QResizeEvent *e) { int32 tbh = _topBar->isHidden() ? 0 : st::topBarHeight; if (Adaptive::OneColumn()) { @@ -3451,9 +3463,12 @@ void MainWidget::inviteImportDone(const MTPUpdates &updates) { bool MainWidget::inviteImportFail(const RPCError &error) { if (MTP::isDefaultHandledError(error)) return false; - if (error.code() == 400) { + if (error.type() == qstr("CHANNELS_TOO_MUCH")) { + Ui::showLayer(new InformBox(lang(lng_join_channel_error))); + } else if (error.code() == 400) { Ui::showLayer(new InformBox(lang(error.type() == qstr("USERS_TOO_MUCH") ? lng_group_invite_no_room : lng_group_invite_bad_link))); } + return true; } @@ -3761,24 +3776,7 @@ void MainWidget::saveDraftToCloud() { auto localDraft = history->localDraft(); auto cloudDraft = history->cloudDraft(); if (!historyDraftsAreEqual(localDraft, cloudDraft)) { - if (cloudDraft && cloudDraft->saveRequestId) { - MTP::cancel(cloudDraft->saveRequestId); - } - cloudDraft = history->createCloudDraft(localDraft); - - MTPmessages_SaveDraft::Flags flags = 0; - auto &textWithTags = cloudDraft->textWithTags; - if (cloudDraft->previewCancelled) { - flags |= MTPmessages_SaveDraft::Flag::f_no_webpage; - } - if (cloudDraft->msgId) { - flags |= MTPmessages_SaveDraft::Flag::f_reply_to_msg_id; - } - if (!textWithTags.tags.isEmpty()) { - flags |= MTPmessages_SaveDraft::Flag::f_entities; - } - auto entities = linksToMTP(entitiesFromTextTags(textWithTags.tags), true); - cloudDraft->saveRequestId = MTP::send(MTPmessages_SaveDraft(MTP_flags(flags), MTP_int(cloudDraft->msgId), peer->input, MTP_string(textWithTags.text), entities), rpcDone(&MainWidget::saveCloudDraftDone, peer), rpcFail(&MainWidget::saveCloudDraftFail, peer)); + App::api()->saveDraftToCloudDelayed(history); } } } @@ -3787,30 +3785,6 @@ void MainWidget::applyCloudDraft(History *history) { _history->applyCloudDraft(history); } -void MainWidget::saveCloudDraftDone(PeerData *peer, const MTPBool &result, mtpRequestId requestId) { - if (auto history = App::historyLoaded(peer)) { - if (auto cloudDraft = history->cloudDraft()) { - if (cloudDraft->saveRequestId == requestId) { - cloudDraft->saveRequestId = 0; - history->updateChatListEntry(); - } - } - } -} - -bool MainWidget::saveCloudDraftFail(PeerData *peer, const RPCError &error, mtpRequestId requestId) { - if (MTP::isDefaultHandledError(error)) return false; - - if (auto history = App::historyLoaded(peer)) { - if (auto cloudDraft = history->cloudDraft()) { - if (cloudDraft->saveRequestId == requestId) { - history->clearCloudDraft(); - } - } - } - return true; -} - void MainWidget::checkIdleFinish() { if (this != App::main()) return; if (psIdleTime() < uint64(Global::OfflineIdleTimeout())) { diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index d611867c7..8348fd2e6 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -129,10 +129,6 @@ public: } }; -inline int chatsListWidth(int windowWidth) { - return snap((windowWidth * 5) / 14, st::dlgMinWidth, st::dlgMaxWidth); -} - enum SilentNotifiesStatus { SilentNotifiesDontChange, SilentNotifiesSetSilent, @@ -503,9 +499,6 @@ private: void messagesAffected(PeerData *peer, const MTPmessages_AffectedMessages &result); void overviewLoaded(History *history, const MTPmessages_Messages &result, mtpRequestId req); - void saveCloudDraftDone(PeerData *peer, const MTPBool &result, mtpRequestId requestId); - bool saveCloudDraftFail(PeerData *peer, const RPCError &error, mtpRequestId requestId); - Window::SectionSlideParams prepareShowAnimation(bool willHaveTopBarShadow); void showWideSectionAnimated(const Window::SectionMemento *memento, bool back); @@ -582,7 +575,7 @@ private: anim::ivalue a_coordUnder, a_coordOver; anim::fvalue a_shadow; - int _dialogsWidth = st::dlgMinWidth; + int _dialogsWidth; PlainShadow _sideShadow; diff --git a/Telegram/SourceFiles/mainwindow.cpp b/Telegram/SourceFiles/mainwindow.cpp index c50499a6f..3cc03d30f 100644 --- a/Telegram/SourceFiles/mainwindow.cpp +++ b/Telegram/SourceFiles/mainwindow.cpp @@ -21,6 +21,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "stdafx.h" #include "mainwindow.h" +#include "styles/style_dialogs.h" #include "zip.h" #include "lang.h" #include "shortcuts.h" @@ -182,48 +183,48 @@ void NotifyWindow::updateNotifyDisplay() { QRect rectForName(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyTextTop, itemWidth, st::msgNameFont->height); if (!App::passcoded() && cNotifyView() <= dbinvShowName) { if (history->peer->isChat() || history->peer->isMegagroup()) { - p.drawSprite(QPoint(rectForName.left() + st::dlgChatImgPos.x(), rectForName.top() + st::dlgChatImgPos.y()), st::dlgChatImg); - rectForName.setLeft(rectForName.left() + st::dlgImgSkip); + p.drawSprite(QPoint(rectForName.left() + st::dialogsChatImgPos.x(), rectForName.top() + st::dialogsChatImgPos.y()), st::dlgChatImg); + rectForName.setLeft(rectForName.left() + st::dialogsImgSkip); } else if (history->peer->isChannel()) { - p.drawSprite(QPoint(rectForName.left() + st::dlgChannelImgPos.x(), rectForName.top() + st::dlgChannelImgPos.y()), st::dlgChannelImg); - rectForName.setLeft(rectForName.left() + st::dlgImgSkip); + p.drawSprite(QPoint(rectForName.left() + st::dialogsChannelImgPos.x(), rectForName.top() + st::dialogsChannelImgPos.y()), st::dlgChannelImg); + rectForName.setLeft(rectForName.left() + st::dialogsImgSkip); } } QDateTime now(QDateTime::currentDateTime()), lastTime(item->date); QDate nowDate(now.date()), lastDate(lastTime.date()); QString dt = lastTime.toString(cTimeFormat()); - int32 dtWidth = st::dlgHistFont->width(dt); - rectForName.setWidth(rectForName.width() - dtWidth - st::dlgDateSkip); - p.setFont(st::dlgDateFont->f); - p.setPen(st::dlgDateColor->p); - p.drawText(rectForName.left() + rectForName.width() + st::dlgDateSkip, rectForName.top() + st::dlgHistFont->ascent, dt); + int32 dtWidth = st::dialogsTextFont->width(dt); + rectForName.setWidth(rectForName.width() - dtWidth - st::dialogsDateSkip); + p.setFont(st::dialogsDateFont); + p.setPen(st::dialogsDateFg); + p.drawText(rectForName.left() + rectForName.width() + st::dialogsDateSkip, rectForName.top() + st::dialogsTextFont->ascent, dt); if (!App::passcoded() && cNotifyView() <= dbinvShowPreview) { const HistoryItem *textCachedFor = 0; Text itemTextCache(itemWidth); - QRect r(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyItemTop + st::msgNameFont->height, itemWidth, 2 * st::dlgFont->height); + QRect r(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyItemTop + st::msgNameFont->height, itemWidth, 2 * st::dialogsTextFont->height); if (fwdCount < 2) { bool active = false; item->drawInDialog(p, r, active, textCachedFor, itemTextCache); } else { - p.setFont(st::dlgHistFont->f); + p.setFont(st::dialogsTextFont); if (item->hasFromName() && !item->isPost()) { - itemTextCache.setText(st::dlgHistFont, item->author()->name); - p.setPen(st::dlgSystemColor->p); - itemTextCache.drawElided(p, r.left(), r.top(), r.width(), st::dlgHistFont->height); - r.setTop(r.top() + st::dlgHistFont->height); + itemTextCache.setText(st::dialogsTextFont, item->author()->name); + p.setPen(st::dialogsTextFgService); + itemTextCache.drawElided(p, r.left(), r.top(), r.width(), st::dialogsTextFont->height); + r.setTop(r.top() + st::dialogsTextFont->height); } - p.setPen(st::dlgTextColor->p); - p.drawText(r.left(), r.top() + st::dlgHistFont->ascent, lng_forward_messages(lt_count, fwdCount)); + p.setPen(st::dialogsTextFg); + p.drawText(r.left(), r.top() + st::dialogsTextFont->ascent, lng_forward_messages(lt_count, fwdCount)); } } else { - static QString notifyText = st::dlgHistFont->elided(lang(lng_notification_preview), itemWidth); - p.setPen(st::dlgSystemColor->p); - p.drawText(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyItemTop + st::msgNameFont->height + st::dlgHistFont->ascent, notifyText); + static QString notifyText = st::dialogsTextFont->elided(lang(lng_notification_preview), itemWidth); + p.setPen(st::dialogsTextFgService); + p.drawText(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyItemTop + st::msgNameFont->height + st::dialogsTextFont->ascent, notifyText); } - p.setPen(st::dlgNameColor->p); + p.setPen(st::dialogsNameFg); if (!App::passcoded() && cNotifyView() <= dbinvShowName) { history->peer->dialogName().drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); } else { @@ -1282,9 +1283,8 @@ void MainWindow::toggleDisplayNotifyFromTray() { } void MainWindow::closeEvent(QCloseEvent *e) { - if (MTP::authedId() && !Sandbox::isSavingSession() && Ui::hideWindowNoQuit()) { - e->ignore(); - } else { + e->ignore(); + if (!MTP::authedId() || Sandbox::isSavingSession() || !Ui::hideWindowNoQuit()) { App::quit(); } } diff --git a/Telegram/SourceFiles/overview/overview.style b/Telegram/SourceFiles/overview/overview.style index f300e6989..ed8e546bc 100644 --- a/Telegram/SourceFiles/overview/overview.style +++ b/Telegram/SourceFiles/overview/overview.style @@ -63,6 +63,8 @@ linksBorder: 1px; linksBorderFg: #eaeaea; linksDateColor: #808080; linksDateMargin: margins(0px, 15px, 0px, 2px); +linksPhotoSize: 46px; +linksPhotoPadding: 12px; overviewLinksCheck: icon { { "overview_links_check_bg", overviewCheckBg }, { "overview_links_check", #fff, point(4px, 5px) }, diff --git a/Telegram/SourceFiles/overview/overview_layout.cpp b/Telegram/SourceFiles/overview/overview_layout.cpp index 42c69b4cc..64cb93cab 100644 --- a/Telegram/SourceFiles/overview/overview_layout.cpp +++ b/Telegram/SourceFiles/overview/overview_layout.cpp @@ -770,7 +770,7 @@ void Document::paint(Painter &p, const QRect &clip, TextSelection selection, con if (selected || context->selecting) { QRect check(rthumb.topLeft() + QPoint(rtl() ? 0 : (rthumb.width() - st::defaultCheckbox.diameter), rthumb.height() - st::defaultCheckbox.diameter), QSize(st::defaultCheckbox.diameter, st::defaultCheckbox.diameter)); p.fillRect(check, selected ? st::overviewFileChecked : st::overviewFileCheck); - p.drawSpriteCenter(check, st::defaultCheckbox.checkIcon); + st::defaultCheckbox.checkIcon.paint(p, QPoint(rthumb.width() - st::defaultCheckbox.diameter, rthumb.y() + rthumb.height() - st::defaultCheckbox.diameter), _width); } } } @@ -979,13 +979,13 @@ Link::Link(HistoryMedia *media, HistoryItem *parent) : ItemBase(parent) { tw = convertScale(_page->document->thumb->width()); th = convertScale(_page->document->thumb->height()); } - if (tw > st::dlgPhotoSize) { + if (tw > st::linksPhotoSize) { if (th > tw) { - th = th * st::dlgPhotoSize / tw; - tw = st::dlgPhotoSize; - } else if (th > st::dlgPhotoSize) { - tw = tw * st::dlgPhotoSize / th; - th = st::dlgPhotoSize; + th = th * st::linksPhotoSize / tw; + tw = st::linksPhotoSize; + } else if (th > st::linksPhotoSize) { + tw = tw * st::linksPhotoSize / th; + th = st::linksPhotoSize; } } _pixw = qMax(tw, 1); @@ -1020,15 +1020,15 @@ void Link::initDimensions() { _minh += st::semiboldFont->height; } if (!_text.isEmpty()) { - _minh += qMin(3 * st::normalFont->height, _text.countHeight(_maxw - st::dlgPhotoSize - st::dlgPhotoPadding)); + _minh += qMin(3 * st::normalFont->height, _text.countHeight(_maxw - st::linksPhotoSize - st::linksPhotoPadding)); } _minh += _links.size() * st::normalFont->height; - _minh = qMax(_minh, int32(st::dlgPhotoSize)) + st::linksMargin.top() + st::linksMargin.bottom() + st::linksBorder; + _minh = qMax(_minh, int32(st::linksPhotoSize)) + st::linksMargin.top() + st::linksMargin.bottom() + st::linksBorder; } int32 Link::resizeGetHeight(int32 width) { _width = qMin(width, _maxw); - int32 w = _width - st::dlgPhotoSize - st::dlgPhotoPadding; + int32 w = _width - st::linksPhotoSize - st::linksPhotoPadding; for (int32 i = 0, l = _links.size(); i < l; ++i) { _links.at(i).lnk->setFullDisplayed(w >= _links.at(i).width); } @@ -1038,54 +1038,54 @@ int32 Link::resizeGetHeight(int32 width) { _height += st::semiboldFont->height; } if (!_text.isEmpty()) { - _height += qMin(3 * st::normalFont->height, _text.countHeight(_width - st::dlgPhotoSize - st::dlgPhotoPadding)); + _height += qMin(3 * st::normalFont->height, _text.countHeight(_width - st::linksPhotoSize - st::linksPhotoPadding)); } _height += _links.size() * st::normalFont->height; - _height = qMax(_height, int32(st::dlgPhotoSize)) + st::linksMargin.top() + st::linksMargin.bottom() + st::linksBorder; + _height = qMax(_height, int32(st::linksPhotoSize)) + st::linksMargin.top() + st::linksMargin.bottom() + st::linksBorder; return _height; } void Link::paint(Painter &p, const QRect &clip, TextSelection selection, const PaintContext *context) const { - int32 left = st::dlgPhotoSize + st::dlgPhotoPadding, top = st::linksMargin.top() + st::linksBorder, w = _width - left; - if (clip.intersects(rtlrect(0, top, st::dlgPhotoSize, st::dlgPhotoSize, _width))) { + int32 left = st::linksPhotoSize + st::linksPhotoPadding, top = st::linksMargin.top() + st::linksBorder, w = _width - left; + if (clip.intersects(rtlrect(0, top, st::linksPhotoSize, st::linksPhotoSize, _width))) { if (_page && _page->photo) { QPixmap pix; if (_page->photo->medium->loaded()) { - pix = _page->photo->medium->pixSingle(_pixw, _pixh, st::dlgPhotoSize, st::dlgPhotoSize); + pix = _page->photo->medium->pixSingle(_pixw, _pixh, st::linksPhotoSize, st::linksPhotoSize); } else if (_page->photo->loaded()) { - pix = _page->photo->full->pixSingle(_pixw, _pixh, st::dlgPhotoSize, st::dlgPhotoSize); + pix = _page->photo->full->pixSingle(_pixw, _pixh, st::linksPhotoSize, st::linksPhotoSize); } else { - pix = _page->photo->thumb->pixSingle(_pixw, _pixh, st::dlgPhotoSize, st::dlgPhotoSize); + pix = _page->photo->thumb->pixSingle(_pixw, _pixh, st::linksPhotoSize, st::linksPhotoSize); } p.drawPixmapLeft(0, top, _width, pix); } else if (_page && _page->document && !_page->document->thumb->isNull()) { - p.drawPixmapLeft(0, top, _width, _page->document->thumb->pixSingle(_pixw, _pixh, st::dlgPhotoSize, st::dlgPhotoSize)); + p.drawPixmapLeft(0, top, _width, _page->document->thumb->pixSingle(_pixw, _pixh, st::linksPhotoSize, st::linksPhotoSize)); } else { int32 index = _letter.isEmpty() ? 0 : (_letter.at(0).unicode() % 4); switch (index) { - case 0: App::roundRect(p, rtlrect(0, top, st::dlgPhotoSize, st::dlgPhotoSize, _width), st::msgFileRedColor, DocRedCorners); break; - case 1: App::roundRect(p, rtlrect(0, top, st::dlgPhotoSize, st::dlgPhotoSize, _width), st::msgFileYellowColor, DocYellowCorners); break; - case 2: App::roundRect(p, rtlrect(0, top, st::dlgPhotoSize, st::dlgPhotoSize, _width), st::msgFileGreenColor, DocGreenCorners); break; - case 3: App::roundRect(p, rtlrect(0, top, st::dlgPhotoSize, st::dlgPhotoSize, _width), st::msgFileBlueColor, DocBlueCorners); break; + case 0: App::roundRect(p, rtlrect(0, top, st::linksPhotoSize, st::linksPhotoSize, _width), st::msgFileRedColor, DocRedCorners); break; + case 1: App::roundRect(p, rtlrect(0, top, st::linksPhotoSize, st::linksPhotoSize, _width), st::msgFileYellowColor, DocYellowCorners); break; + case 2: App::roundRect(p, rtlrect(0, top, st::linksPhotoSize, st::linksPhotoSize, _width), st::msgFileGreenColor, DocGreenCorners); break; + case 3: App::roundRect(p, rtlrect(0, top, st::linksPhotoSize, st::linksPhotoSize, _width), st::msgFileBlueColor, DocBlueCorners); break; } if (!_letter.isEmpty()) { p.setFont(st::linksLetterFont->f); p.setPen(st::white->p); - p.drawText(rtlrect(0, top, st::dlgPhotoSize, st::dlgPhotoSize, _width), _letter, style::al_center); + p.drawText(rtlrect(0, top, st::linksPhotoSize, st::linksPhotoSize, _width), _letter, style::al_center); } } if (selection == FullSelection) { - App::roundRect(p, rtlrect(0, top, st::dlgPhotoSize, st::dlgPhotoSize, _width), st::overviewPhotoSelectOverlay, PhotoSelectOverlayCorners); - st::overviewLinksChecked.paint(p, QPoint(st::dlgPhotoSize - st::overviewLinksChecked.width(), top + st::dlgPhotoSize - st::overviewLinksChecked.height()), _width); + App::roundRect(p, rtlrect(0, top, st::linksPhotoSize, st::linksPhotoSize, _width), st::overviewPhotoSelectOverlay, PhotoSelectOverlayCorners); + st::overviewLinksChecked.paint(p, QPoint(st::linksPhotoSize - st::overviewLinksChecked.width(), top + st::linksPhotoSize - st::overviewLinksChecked.height()), _width); } else if (context->selecting) { - st::overviewLinksCheck.paint(p, QPoint(st::dlgPhotoSize - st::overviewLinksCheck.width(), top + st::dlgPhotoSize - st::overviewLinksCheck.height()), _width); + st::overviewLinksCheck.paint(p, QPoint(st::linksPhotoSize - st::overviewLinksCheck.width(), top + st::linksPhotoSize - st::overviewLinksCheck.height()), _width); } } if (!_title.isEmpty() && _text.isEmpty() && _links.size() == 1) { - top += (st::dlgPhotoSize - st::semiboldFont->height - st::normalFont->height) / 2; + top += (st::linksPhotoSize - st::semiboldFont->height - st::normalFont->height) / 2; } else { top = st::linksTextTop; } @@ -1123,14 +1123,14 @@ void Link::paint(Painter &p, const QRect &clip, TextSelection selection, const P } void Link::getState(ClickHandlerPtr &link, HistoryCursorState &cursor, int x, int y) const { - int32 left = st::dlgPhotoSize + st::dlgPhotoPadding, top = st::linksMargin.top() + st::linksBorder, w = _width - left; - if (rtlrect(0, top, st::dlgPhotoSize, st::dlgPhotoSize, _width).contains(x, y)) { + int32 left = st::linksPhotoSize + st::linksPhotoPadding, top = st::linksMargin.top() + st::linksBorder, w = _width - left; + if (rtlrect(0, top, st::linksPhotoSize, st::linksPhotoSize, _width).contains(x, y)) { link = _photol; return; } if (!_title.isEmpty() && _text.isEmpty() && _links.size() == 1) { - top += (st::dlgPhotoSize - st::semiboldFont->height - st::normalFont->height) / 2; + top += (st::linksPhotoSize - st::semiboldFont->height - st::normalFont->height) / 2; } if (!_title.isEmpty()) { if (rtlrect(left, top, qMin(w, _titlew), st::semiboldFont->height, _width).contains(x, y)) { diff --git a/Telegram/SourceFiles/profile/profile.style b/Telegram/SourceFiles/profile/profile.style index 3b8b93ab1..8c3de42fc 100644 --- a/Telegram/SourceFiles/profile/profile.style +++ b/Telegram/SourceFiles/profile/profile.style @@ -24,29 +24,30 @@ using "basic_types.style"; profileBg: windowBg; profileTopBarHeight: topBarHeight; -profileTopBarBackIconFg: #51b3e0; +profileTopBarBackIconFg: #0290d7; profileTopBarBackIcon: icon { { "topbar_back_arrow", profileTopBarBackIconFg }, }; -profileTopBarBackIconPosition: point(15px, 19px); +profileTopBarBackIconPosition: point(15px, 20px); profileTopBarBackFont: font(14px); profileTopBarBackFg: #1485c2; profileTopBarBackPosition: point(32px, 17px); -profileFixedBarButton: flatButton(topBarButton) { +profileFixedBarButton: BoxButton(topBarButton) { } profileMarginTop: 13px; profilePhotoSize: 112px; profilePhotoLeftMin: 18px; -profilePhotoLeftMax: 45px; +profilePhotoLeftMax: 35px; profilePhotoDuration: 500; profileNameLeft: 26px; profileNameTop: 9px; profileNameLabel: flatLabel(labelDefFlat) { margin: margins(10px, 5px, 10px, 5px); - font: font(16px); + font: font(16px semibold); width: 160px; maxHeight: 24px; + textFg: #333333; } profileNameTextStyle: textStyle(defaultTextStyle) { } @@ -57,18 +58,18 @@ profileStatusFg: windowSubTextFg; profileStatusFgActive: windowActiveTextFg; profileMarginBottom: 30px; -profileActiveBg: #3fb0e4; profileButtonLeft: 27px; profileButtonTop: 88px; profileButtonSkip: 10px; profilePrimaryButton: BoxButton { textFg: #ffffff; textFgOver: #ffffff; - textBg: profileActiveBg; - textBgOver: profileActiveBg; + textBg: windowActiveBg; + textBgOver: windowActiveBg; width: -34px; height: 34px; + padding: margins(0px, 0px, 0px, 0px); textTop: 8px; @@ -76,13 +77,13 @@ profilePrimaryButton: BoxButton { duration: 200; } profileSecondaryButton: BoxButton(profilePrimaryButton) { - textFg: #189dda; - textFgOver: #189dda; + textFg: #2b99d5; + textFgOver: #2b99d5; textBg: #ffffff; textBgOver: #f2f7fa; } profileAddMemberIcon: icon { - { "profile_add_member", profileActiveBg, point(20px, 10px) }, + { "profile_add_member", windowActiveBg, point(20px, 10px) }, }; profileAddMemberButton: BoxButton(profileSecondaryButton) { width: 62px; @@ -90,7 +91,7 @@ profileAddMemberButton: BoxButton(profileSecondaryButton) { } profileDropAreaBg: profileBg; -profileDropAreaFg: profileActiveBg; +profileDropAreaFg: windowActiveBg; profileDropAreaPadding: margins(25px, 3px, 25px, 20px); profileDropAreaTitleFont: font(24px); profileDropAreaTitleTop: 30px; @@ -120,7 +121,7 @@ profileBlockMarginRight: 10px; profileBlockMarginBottom: 4px; profileBlockTitleHeight: 25px; profileBlockTitleFont: font(14px semibold); -profileBlockTitleFg: black; +profileBlockTitleFg: #333333; profileBlockTitlePosition: point(24px, 0px); profileBlockLabel: flatLabel(labelDefFlat) { textFg: windowSubTextFg; @@ -153,7 +154,7 @@ profileMemberStatusFg: windowSubTextFg; profileMemberStatusFgOver: windowSubTextFg; profileMemberStatusFgActive: windowActiveTextFg; profileMemberAdminIcon: icon { - { "profile_admin_star", profileActiveBg, point(4px, 2px) }, + { "profile_admin_star", #3babe7, point(4px, 2px) }, }; profileLimitReachedLabel: flatLabel(labelDefFlat) { width: 180px; @@ -167,3 +168,9 @@ profileReportReasonOther: InputArea(defaultInputArea) { textMargins: margins(1px, 6px, 1px, 4px); heightMax: 115px; } + +profileVerifiedCheckPosition: point(-3px, 7px); +profileVerifiedCheck: icon { + { "profile_verified_star", #4abcf1 }, + { "profile_verified_check", #ffffff, point(4px, 4px) } +}; diff --git a/Telegram/SourceFiles/profile/profile_cover.cpp b/Telegram/SourceFiles/profile/profile_cover.cpp index 974d2db72..a3928162a 100644 --- a/Telegram/SourceFiles/profile/profile_cover.cpp +++ b/Telegram/SourceFiles/profile/profile_cover.cpp @@ -129,9 +129,12 @@ void CoverWidget::refreshNameGeometry(int newWidth) { int infoLeft = _userpicButton->x() + _userpicButton->width(); int nameLeft = infoLeft + st::profileNameLeft - st::profileNameLabel.margin.left(); int nameTop = _userpicButton->y() + st::profileNameTop - st::profileNameLabel.margin.top(); - int nameWidth = newWidth - infoLeft - st::profileNameLeft - st::profileButtonSkip; + int nameWidth = newWidth - infoLeft - st::profileNameLeft; + if (_peer->isVerified()) { + nameWidth -= st::profileVerifiedCheckPosition.x() + st::profileVerifiedCheck.width(); + } int marginsAdd = st::profileNameLabel.margin.left() + st::profileNameLabel.margin.right(); - _name.resizeToWidth(qMin(nameWidth, _name.naturalWidth()) + marginsAdd); + _name.resizeToWidth(qMin(nameWidth - marginsAdd, _name.naturalWidth()) + marginsAdd); _name.moveToLeft(nameLeft, nameTop); } @@ -183,6 +186,10 @@ void CoverWidget::paintEvent(QPaintEvent *e) { p.setPen(_statusTextIsOnline ? st::profileStatusFgActive : st::profileStatusFg); p.drawTextLeft(_statusPosition.x(), _statusPosition.y(), width(), _statusText); + if (_peer->isVerified()) { + st::profileVerifiedCheck.paint(p, QPoint(_name.x() + _name.width(), _name.y()) + st::profileVerifiedCheckPosition, width()); + } + paintDivider(p); } @@ -407,6 +414,7 @@ void CoverWidget::clearButtons() { void CoverWidget::addButton(const QString &text, const char *slot, const style::BoxButton *replacementStyle) { auto &buttonStyle = _buttons.isEmpty() ? st::profilePrimaryButton : st::profileSecondaryButton; auto button = new Ui::RoundButton(this, text, buttonStyle); + button->setTextTransform(Ui::RoundButton::TextTransform::ToUpper); connect(button, SIGNAL(clicked()), this, slot); button->show(); diff --git a/Telegram/SourceFiles/profile/profile_fixed_bar.cpp b/Telegram/SourceFiles/profile/profile_fixed_bar.cpp index 8a1582f67..f7b9d9a7d 100644 --- a/Telegram/SourceFiles/profile/profile_fixed_bar.cpp +++ b/Telegram/SourceFiles/profile/profile_fixed_bar.cpp @@ -22,6 +22,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "profile/profile_fixed_bar.h" #include "styles/style_profile.h" +#include "ui/buttons/round_button.h" #include "lang.h" #include "mainwidget.h" #include "boxes/addcontactbox.h" @@ -165,7 +166,7 @@ void FixedBar::addRightAction(RightActionType type, const QString &text, const c } _rightActions[_currentAction].type = type; delete _rightActions[_currentAction].button; - _rightActions[_currentAction].button = new FlatButton(this, text, st::profileFixedBarButton); + _rightActions[_currentAction].button = new Ui::RoundButton(this, text, st::profileFixedBarButton); connect(_rightActions[_currentAction].button, SIGNAL(clicked()), this, slot); bool showButton = !_animatingMode && (type != RightActionType::ShareContact || !_hideShareContactButton); _rightActions[_currentAction].button->setVisible(showButton); diff --git a/Telegram/SourceFiles/profile/profile_fixed_bar.h b/Telegram/SourceFiles/profile/profile_fixed_bar.h index 0b6d131e0..de03c7e0d 100644 --- a/Telegram/SourceFiles/profile/profile_fixed_bar.h +++ b/Telegram/SourceFiles/profile/profile_fixed_bar.h @@ -26,6 +26,10 @@ namespace Notify { struct PeerUpdate; } // namespace Notify +namespace Ui { +class RoundButton; +} // namespace Ui + namespace Profile { class BackButton; @@ -96,7 +100,7 @@ private: int _currentAction = 0; struct RightAction { RightActionType type = RightActionType::None; - FlatButton *button = nullptr; + Ui::RoundButton *button = nullptr; }; QList _rightActions; diff --git a/Telegram/SourceFiles/profile/profile_members_widget.cpp b/Telegram/SourceFiles/profile/profile_members_widget.cpp index 78eddd68c..80d9d8f99 100644 --- a/Telegram/SourceFiles/profile/profile_members_widget.cpp +++ b/Telegram/SourceFiles/profile/profile_members_widget.cpp @@ -426,6 +426,9 @@ void MembersWidget::fillChatMembers(ChatData *chat) { } void MembersWidget::setMemberFlags(Member *member, ChatData *chat) { + auto isCreator = (chat->creator == peerToUser(member->user->id)); + auto isAdmin = chat->admins.contains(member->user); + member->isAdmin = isCreator || isAdmin; if (member->user->id == peerFromUser(MTP::authedId())) { member->canBeKicked = false; } else if (chat->amCreator() || (chat->amAdmin() && !member->isAdmin)) { @@ -433,7 +436,6 @@ void MembersWidget::setMemberFlags(Member *member, ChatData *chat) { } else { member->canBeKicked = chat->invitedByMe.contains(member->user); } - member->isAdmin = chat->admins.contains(member->user); } MembersWidget::Member *MembersWidget::addUser(ChannelData *megagroup, UserData *user) { @@ -490,6 +492,9 @@ bool MembersWidget::addUsersToEnd(ChannelData *megagroup) { } void MembersWidget::setMemberFlags(Member *member, ChannelData *megagroup) { + auto amCreatorOrAdmin = (peerFromUser(member->user->id) == MTP::authedId()) && (megagroup->amCreator() || megagroup->amEditor()); + auto isAdmin = megagroup->mgInfo->lastAdmins.contains(member->user); + member->isAdmin = amCreatorOrAdmin || isAdmin; if (member->user->isSelf()) { member->canBeKicked = false; } else if (megagroup->amCreator() || (megagroup->amEditor() && !member->isAdmin)) { @@ -497,7 +502,6 @@ void MembersWidget::setMemberFlags(Member *member, ChannelData *megagroup) { } else { member->canBeKicked = false; } - member->isAdmin = megagroup->mgInfo->lastAdmins.contains(member->user); } MembersWidget::Member *MembersWidget::getMember(UserData *user) { @@ -640,7 +644,7 @@ void ChannelMembersWidget::addButton(const QString &text, ChildWidgetsetText(text); } else { - (*button) = new Ui::LeftOutlineButton(this, text); + (*button) = new Ui::LeftOutlineButton(this, text, st::defaultLeftOutlineButton); (*button)->show(); connect(*button, SIGNAL(clicked()), this, slot); } diff --git a/Telegram/SourceFiles/profile/profile_settings_widget.cpp b/Telegram/SourceFiles/profile/profile_settings_widget.cpp index 706b3958a..3fe1c033e 100644 --- a/Telegram/SourceFiles/profile/profile_settings_widget.cpp +++ b/Telegram/SourceFiles/profile/profile_settings_widget.cpp @@ -127,7 +127,7 @@ void SettingsWidget::refreshManageAdminsButton() { }; _manageAdmins.destroy(); if (hasManageAdmins()) { - _manageAdmins = new Ui::LeftOutlineButton(this, lang(lng_profile_manage_admins)); + _manageAdmins = new Ui::LeftOutlineButton(this, lang(lng_profile_manage_admins), st::defaultLeftOutlineButton); _manageAdmins->show(); connect(_manageAdmins, SIGNAL(clicked()), this, SLOT(onManageAdmins())); } @@ -148,7 +148,7 @@ void SettingsWidget::refreshInviteLinkButton() { }; auto inviteLinkText = getInviteLinkText(); if (!inviteLinkText.isEmpty()) { - _inviteLink = new Ui::LeftOutlineButton(this, inviteLinkText); + _inviteLink = new Ui::LeftOutlineButton(this, inviteLinkText, st::defaultLeftOutlineButton); _inviteLink->show(); connect(_inviteLink, SIGNAL(clicked()), this, SLOT(onInviteLink())); } diff --git a/Telegram/SourceFiles/profile/profile_shared_media_widget.cpp b/Telegram/SourceFiles/profile/profile_shared_media_widget.cpp index f7263f22b..313aaad78 100644 --- a/Telegram/SourceFiles/profile/profile_shared_media_widget.cpp +++ b/Telegram/SourceFiles/profile/profile_shared_media_widget.cpp @@ -108,7 +108,7 @@ void SharedMediaWidget::refreshButton(MediaOverviewType type) { if (_mediaButtons[type]) { _mediaButtons[type]->setText(text); } else { - _mediaButtons[type] = new Ui::LeftOutlineButton(this, text); + _mediaButtons[type] = new Ui::LeftOutlineButton(this, text, st::defaultLeftOutlineButton); _mediaButtons[type]->show(); connect(_mediaButtons[type], SIGNAL(clicked()), this, SLOT(onMediaChosen())); } diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 72b5f21aa..a58b4715b 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -509,7 +509,9 @@ void PsMainWindow::psPlatformNotify(HistoryItem *item, int32 fwdCount) { QPixmap pix = (!App::passcoded() && cNotifyView() <= dbinvShowName) ? item->history()->peer->genUserpic(st::notifyMacPhotoSize) : QPixmap(); QString msg = (!App::passcoded() && cNotifyView() <= dbinvShowPreview) ? (fwdCount < 2 ? item->notificationText() : lng_forward_messages(lt_count, fwdCount)) : lang(lng_notification_preview); - _private.showNotify(item->history()->peer->id, item->id, pix, title, subtitle, msg, !App::passcoded() && (cNotifyView() <= dbinvShowPreview)); + bool withReply = !App::passcoded() && (cNotifyView() <= dbinvShowPreview) && item->history()->peer->canWrite(); + + _private.showNotify(item->history()->peer->id, item->id, pix, title, subtitle, msg, withReply); } bool PsMainWindow::eventFilter(QObject *obj, QEvent *evt) { diff --git a/Telegram/SourceFiles/ui/buttons/round_button.cpp b/Telegram/SourceFiles/ui/buttons/round_button.cpp index f0ab81ce4..758d7efb7 100644 --- a/Telegram/SourceFiles/ui/buttons/round_button.cpp +++ b/Telegram/SourceFiles/ui/buttons/round_button.cpp @@ -24,8 +24,8 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org namespace Ui { RoundButton::RoundButton(QWidget *parent, const QString &text, const style::BoxButton &st) : Button(parent) -, _text(text.toUpper()) -, _fullText(text.toUpper()) +, _text(text) +, _fullText(text) , _textWidth(st.font->width(_text)) , _st(st) , a_textBgOverOpacity(0) @@ -36,34 +36,62 @@ RoundButton::RoundButton(QWidget *parent, const QString &text, const style::BoxB setCursor(style::cur_pointer); } +void RoundButton::setTextTransform(TextTransform transform) { + _transform = transform; + updateText(); +} + void RoundButton::setText(const QString &text) { - _text = text; _fullText = text; + updateText(); +} + +void RoundButton::setFullWidth(int newFullWidth) { + _fullWidthOverride = newFullWidth; + resizeToText(); +} + +void RoundButton::updateText() { + if (_transform == TextTransform::ToUpper) { + _text = _fullText.toUpper(); + } else { + _text = _fullText; + } _textWidth = _st.font->width(_text); resizeToText(); } +int RoundButton::textWidth() const { + return _textWidth; +} + void RoundButton::resizeToText() { - if (_st.width <= 0) { - resize(_textWidth - _st.width, _st.height); + if (_fullWidthOverride < 0) { + resize(_textWidth - _fullWidthOverride, _st.height + _st.padding.top() + _st.padding.bottom()); + } else if (_st.width <= 0) { + resize(_textWidth - _st.width + _st.padding.left() + _st.padding.right(), _st.height + _st.padding.top() + _st.padding.bottom()); } else { if (_st.width < _textWidth + (_st.height - _st.font->height)) { _text = _st.font->elided(_fullText, qMax(_st.width - (_st.height - _st.font->height), 1)); _textWidth = _st.font->width(_text); } - resize(_st.width, _st.height); + resize(_st.width + _st.padding.left() + _st.padding.right(), _st.height + _st.padding.top() + _st.padding.bottom()); } } void RoundButton::paintEvent(QPaintEvent *e) { Painter p(this); - App::roundRect(p, rect(), _st.textBg); + auto rounded = rtlrect(rect().marginsRemoved(_st.padding), width()); + if (_fullWidthOverride < 0) { + rounded = QRect(-_fullWidthOverride / 4, rounded.top(), _textWidth - _fullWidthOverride / 2, rounded.height()); + } + App::roundRect(p, rounded, _st.textBg); float64 o = a_textBgOverOpacity.current(); if (o > 0) { p.setOpacity(o); - App::roundRect(p, rect(), _st.textBgOver); + App::roundRect(p, rounded, _st.textBgOver); p.setOpacity(1); } if (!_text.isEmpty()) { @@ -73,9 +101,13 @@ void RoundButton::paintEvent(QPaintEvent *e) { p.setPen(_st.textFg); } p.setFont(_st.font); - p.drawText((width() - _textWidth) / 2, _st.textTop + _st.font->ascent, _text); + int textLeft = _st.padding.left() + ((width() - _textWidth - _st.padding.left() - _st.padding.right()) / 2); + if (_fullWidthOverride < 0) { + textLeft = -_fullWidthOverride / 2; + } + p.drawTextLeft(textLeft, _st.padding.top() + _st.textTop, width(), _text); } - _st.icon.paint(p, QPoint(0, 0), width()); + _st.icon.paint(p, QPoint(_st.padding.left(), _st.padding.right()), width()); } void RoundButton::step_over(float64 ms, bool timer) { diff --git a/Telegram/SourceFiles/ui/buttons/round_button.h b/Telegram/SourceFiles/ui/buttons/round_button.h index aa3e1cfaa..b7c9d51a4 100644 --- a/Telegram/SourceFiles/ui/buttons/round_button.h +++ b/Telegram/SourceFiles/ui/buttons/round_button.h @@ -29,6 +29,15 @@ public: RoundButton(QWidget *parent, const QString &text, const style::BoxButton &st); void setText(const QString &text); + int textWidth() const; + + void setFullWidth(int newFullWidth); + + enum class TextTransform { + NoTransform, + ToUpper, + }; + void setTextTransform(TextTransform transform); protected: void paintEvent(QPaintEvent *e) override; @@ -38,10 +47,12 @@ protected: private: void step_over(float64 ms, bool timer); + void updateText(); void resizeToText(); QString _text, _fullText; int _textWidth; + int _fullWidthOverride = 0; const style::BoxButton &_st; @@ -49,6 +60,8 @@ private: anim::cvalue a_textFg; Animation _a_over; + TextTransform _transform = TextTransform::NoTransform; + }; } // namespace Ui diff --git a/Telegram/SourceFiles/ui/flatbutton.cpp b/Telegram/SourceFiles/ui/flatbutton.cpp index 691f6e9b5..8255e7159 100644 --- a/Telegram/SourceFiles/ui/flatbutton.cpp +++ b/Telegram/SourceFiles/ui/flatbutton.cpp @@ -24,7 +24,6 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org FlatButton::FlatButton(QWidget *parent, const QString &text, const style::flatButton &st) : Button(parent) , _text(text) , _st(st) -, _autoFontPadding(0) , a_bg(st.bgColor->c) , a_text(st.color->c) , _a_appearance(animation(this, &FlatButton::step_appearance)) @@ -63,35 +62,10 @@ void FlatButton::setWidth(int32 w) { resize(_st.width, height()); } -void FlatButton::setAutoFontSize(int32 padding, const QString &txt) { - _autoFontPadding = padding; - if (_autoFontPadding) { - _textForAutoSize = txt; - resizeEvent(0); - } else { - _textForAutoSize = QString(); - _autoFont = style::font(); - } - update(); -} - int32 FlatButton::textWidth() const { return _st.font->width(_text); } -void FlatButton::resizeEvent(QResizeEvent *e) { - if (_autoFontPadding) { - _autoFont = _st.font; - for (int32 s = _st.font->f.pixelSize(); s >= st::fsize; --s) { - _autoFont = style::font(s, _st.font->flags(), _st.font->family()); - if (2 * _autoFontPadding + _autoFont->width(_textForAutoSize) <= width()) { - break; - } - } - } - return Button::resizeEvent(e); -} - void FlatButton::step_appearance(float64 ms, bool timer) { float64 dt = ms / _st.duration; if (dt >= 1) { @@ -129,12 +103,11 @@ void FlatButton::paintEvent(QPaintEvent *e) { p.setOpacity(_opacity); p.fillRect(r, a_bg.current()); - p.setFont((_autoFont ? _autoFont : ((_state & StateOver) ? _st.overFont : _st.font))->f); + p.setFont((_state & StateOver) ? _st.overFont : _st.font); p.setRenderHint(QPainter::TextAntialiasing); p.setPen(a_text.current()); int32 top = (_state & StateOver) ? ((_state & StateDown) ? _st.downTextTop : _st.overTextTop) : _st.textTop; - if (_autoFont) top += (_st.font->height - _autoFont->height) / 2; r.setTop(top); p.drawText(r, _text, style::al_top); diff --git a/Telegram/SourceFiles/ui/flatbutton.h b/Telegram/SourceFiles/ui/flatbutton.h index b02bae140..3adbe5a1d 100644 --- a/Telegram/SourceFiles/ui/flatbutton.h +++ b/Telegram/SourceFiles/ui/flatbutton.h @@ -31,8 +31,6 @@ public: FlatButton(QWidget *parent, const QString &text, const style::flatButton &st); - void resizeEvent(QResizeEvent *e); - void step_appearance(float64 ms, bool timer); void paintEvent(QPaintEvent *e); void setOpacity(float64 o); @@ -40,7 +38,6 @@ public: void setText(const QString &text); void setWidth(int32 w); - void setAutoFontSize(int32 padding, const QString &txt); int32 textWidth() const; @@ -58,9 +55,6 @@ private: style::flatButton _st; - int32 _autoFontPadding; - style::font _autoFont; - anim::cvalue a_bg, a_text; Animation _a_appearance; diff --git a/Telegram/SourceFiles/ui/flatcheckbox.cpp b/Telegram/SourceFiles/ui/flatcheckbox.cpp index d45587077..d1d64ab1f 100644 --- a/Telegram/SourceFiles/ui/flatcheckbox.cpp +++ b/Telegram/SourceFiles/ui/flatcheckbox.cpp @@ -351,7 +351,7 @@ void Checkbox::paintEvent(QPaintEvent *e) { p.setRenderHint(QPainter::HighQualityAntialiasing, false); if (checked > 0) { - p.drawSpriteCenter(_checkRect, _st.checkIcon); + _st.checkIcon.paint(p, QPoint(0, 0), width()); } } if (_checkRect.contains(r)) return; diff --git a/Telegram/SourceFiles/window/top_bar_widget.cpp b/Telegram/SourceFiles/window/top_bar_widget.cpp index 2fbb27e5b..6c1772c79 100644 --- a/Telegram/SourceFiles/window/top_bar_widget.cpp +++ b/Telegram/SourceFiles/window/top_bar_widget.cpp @@ -27,6 +27,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org #include "shortcuts.h" #include "lang.h" #include "ui/buttons/peer_avatar_button.h" +#include "ui/buttons/round_button.h" #include "ui/flatbutton.h" namespace Window { @@ -37,19 +38,15 @@ TopBarWidget::TopBarWidget(MainWidget *w) : TWidget(w) , _selPeer(0) , _selCount(0) , _canDelete(false) -, _selStrLeft(-st::topBarButton.width / 2) +, _selStrLeft((-st::topBarClearButton.width + st::topBarClearButton.padding.left() + st::topBarClearButton.padding.right()) / 2) , _selStrWidth(0) , _animating(false) -, _clearSelection(this, lang(lng_selected_clear), st::topBarButton) +, _clearSelection(this, lang(lng_selected_clear), st::topBarClearButton) , _forward(this, lang(lng_selected_forward), st::topBarActionButton) , _delete(this, lang(lng_selected_delete), st::topBarActionButton) , _selectionButtonsWidth(_clearSelection->width() + _forward->width() + _delete->width()) , _forwardDeleteWidth(qMax(_forward->textWidth(), _delete->textWidth())) , _info(this, nullptr, st::infoButton) -, _edit(this, lang(lng_profile_edit_contact), st::topBarButton) -, _leaveGroup(this, lang(lng_profile_delete_and_exit), st::topBarButton) -, _addContact(this, lang(lng_profile_add_contact), st::topBarButton) -, _deleteContact(this, lang(lng_profile_delete_contact), st::topBarButton) , _mediaType(this, lang(lng_media_type), st::topBarButton) , _search(this, st::topBarSearch) { @@ -57,10 +54,6 @@ TopBarWidget::TopBarWidget(MainWidget *w) : TWidget(w) connect(_delete, SIGNAL(clicked()), this, SLOT(onDeleteSelection())); connect(_clearSelection, SIGNAL(clicked()), this, SLOT(onClearSelection())); connect(_info, SIGNAL(clicked()), this, SLOT(onInfoClicked())); - connect(_addContact, SIGNAL(clicked()), this, SLOT(onAddContact())); - connect(_deleteContact, SIGNAL(clicked()), this, SLOT(onDeleteContact())); - connect(_edit, SIGNAL(clicked()), this, SLOT(onEdit())); - connect(_leaveGroup, SIGNAL(clicked()), this, SLOT(onDeleteAndExit())); connect(_search, SIGNAL(clicked()), this, SLOT(onSearch())); setCursor(style::cur_pointer); @@ -84,65 +77,6 @@ void TopBarWidget::onInfoClicked() { if (p) Ui::showPeerProfile(p); } -void TopBarWidget::onAddContact() { - PeerData *p = nullptr;// App::main() ? App::main()->profilePeer() : 0; - UserData *u = p ? p->asUser() : 0; - if (u) Ui::showLayer(new AddContactBox(u->firstName, u->lastName, u->phone().isEmpty() ? App::phoneFromSharedContact(peerToUser(u->id)) : u->phone())); -} - -void TopBarWidget::onEdit() { - PeerData *p = nullptr;// App::main() ? App::main()->profilePeer() : 0; - if (p) { - if (p->isChannel()) { - Ui::showLayer(new EditChannelBox(p->asChannel())); - } else if (p->isChat()) { - Ui::showLayer(new EditNameTitleBox(p)); - } else if (p->isUser()) { - Ui::showLayer(new AddContactBox(p->asUser())); - } - } -} - -void TopBarWidget::onDeleteContact() { - PeerData *p = nullptr;// App::main() ? App::main()->profilePeer() : 0; - UserData *u = p ? p->asUser() : 0; - if (u) { - ConfirmBox *box = new ConfirmBox(lng_sure_delete_contact(lt_contact, p->name), lang(lng_box_delete)); - connect(box, SIGNAL(confirmed()), this, SLOT(onDeleteContactSure())); - Ui::showLayer(box); - } -} - -void TopBarWidget::onDeleteContactSure() { - PeerData *p = nullptr;// App::main() ? App::main()->profilePeer() : 0; - UserData *u = p ? p->asUser() : 0; - if (u) { - Ui::showChatsList(); - Ui::hideLayer(); - MTP::send(MTPcontacts_DeleteContact(u->inputUser), App::main()->rpcDone(&MainWidget::deletedContact, u)); - } -} - -void TopBarWidget::onDeleteAndExit() { - PeerData *p = nullptr;// App::main() ? App::main()->profilePeer() : 0; - ChatData *c = p ? p->asChat() : 0; - if (c) { - ConfirmBox *box = new ConfirmBox(lng_sure_delete_and_exit(lt_group, p->name), lang(lng_box_leave), st::attentionBoxButton); - connect(box, SIGNAL(confirmed()), this, SLOT(onDeleteAndExitSure())); - Ui::showLayer(box); - } -} - -void TopBarWidget::onDeleteAndExitSure() { - PeerData *p = nullptr;// App::main() ? App::main()->profilePeer() : 0; - ChatData *c = p ? p->asChat() : 0; - if (c) { - Ui::showChatsList(); - Ui::hideLayer(); - MTP::send(MTPmessages_DeleteChatUser(c->inputChat, App::self()->inputUser), App::main()->rpcDone(&MainWidget::deleteHistoryAfterLeave, p), App::main()->rpcFail(&MainWidget::leaveChatFailed, p)); - } -} - void TopBarWidget::onSearch() { Shortcuts::launch(qsl("search")); } @@ -197,7 +131,7 @@ void TopBarWidget::paintEvent(QPaintEvent *e) { } else { p.setFont(st::linkFont); p.setPen(st::btnDefLink.color); - p.drawText(_selStrLeft, st::topBarButton.textTop + st::linkFont->ascent, _selStr); + p.drawText(_selStrLeft, st::topBarClearButton.padding.top() + st::topBarClearButton.textTop + st::linkFont->ascent, _selStr); } } @@ -211,8 +145,10 @@ void TopBarWidget::mousePressEvent(QMouseEvent *e) { void TopBarWidget::resizeEvent(QResizeEvent *e) { int32 r = width(); if (!_forward->isHidden() || !_delete->isHidden()) { - int32 fullW = r - (_selectionButtonsWidth + (_selStrWidth - st::topBarButton.width) + st::topBarActionSkip); - int32 selectedClearWidth = st::topBarButton.width, forwardDeleteWidth = st::topBarActionButton.width - _forwardDeleteWidth, skip = st::topBarActionSkip; + int fullW = r - (_selectionButtonsWidth + (_selStrWidth - st::topBarClearButton.width + st::topBarClearButton.padding.left() + st::topBarClearButton.padding.right()) + st::topBarActionSkip); + int selectedClearWidth = st::topBarClearButton.width - st::topBarClearButton.padding.left() - st::topBarClearButton.padding.right(); + int forwardDeleteWidth = st::topBarActionButton.width - _forwardDeleteWidth; + int skip = st::topBarActionSkip; while (fullW < 0) { int fit = 0; if (selectedClearWidth < -2 * (st::topBarMinPadding + 1)) { @@ -245,7 +181,7 @@ void TopBarWidget::resizeEvent(QResizeEvent *e) { } if (fullW >= 0 || fit >= 3) break; } - _clearSelection->setWidth(selectedClearWidth); + _clearSelection->setFullWidth(selectedClearWidth); _forward->setWidth(_forwardDeleteWidth + forwardDeleteWidth); _delete->setWidth(_forwardDeleteWidth + forwardDeleteWidth); _selStrLeft = -selectedClearWidth / 2; @@ -262,20 +198,12 @@ void TopBarWidget::resizeEvent(QResizeEvent *e) { _clearSelection->move(r -= _clearSelection->width(), 0); } if (!_info->isHidden()) _info->move(r -= _info->width(), 0); - if (!_deleteContact->isHidden()) _deleteContact->move(r -= _deleteContact->width(), 0); - if (!_leaveGroup->isHidden()) _leaveGroup->move(r -= _leaveGroup->width(), 0); - if (!_edit->isHidden()) _edit->move(r -= _edit->width(), 0); - if (!_addContact->isHidden()) _addContact->move(r -= _addContact->width(), 0); if (!_mediaType->isHidden()) _mediaType->move(r -= _mediaType->width(), 0); _search->move(width() - (_info->isHidden() ? st::topBarForwardPadding.right() : _info->width()) - _search->width(), 0); } void TopBarWidget::startAnim() { _info->hide(); - _edit->hide(); - _leaveGroup->hide(); - _addContact->hide(); - _deleteContact->hide(); _clearSelection->hide(); _delete->hide(); _forward->hide(); @@ -295,74 +223,37 @@ void TopBarWidget::showAll() { resizeEvent(0); return; } - PeerData *p = nullptr/*App::main() ? App::main()->profilePeer() : 0*/, *h = App::main() ? App::main()->historyPeer() : 0, *o = App::main() ? App::main()->overviewPeer() : 0; - if (p && (p->isChat() || (p->isUser() && (p->asUser()->contact >= 0 || !App::phoneFromSharedContact(peerToUser(p->id)).isEmpty())))) { - if (p->isChat()) { - if (p->asChat()->canEdit()) { - _edit->show(); - } else { - _edit->hide(); - } - _leaveGroup->show(); - _addContact->hide(); - _deleteContact->hide(); - } else if (p->asUser()->contact > 0) { - _edit->show(); - _leaveGroup->hide(); - _addContact->hide(); - _deleteContact->show(); + PeerData *h = App::main() ? App::main()->historyPeer() : 0, *o = App::main() ? App::main()->overviewPeer() : 0; + if (_selCount) { + _clearSelection->show(); + if (_canDelete) { + _delete->show(); } else { - _edit->hide(); - _leaveGroup->hide(); - _addContact->show(); - _deleteContact->hide(); + _delete->hide(); } + _forward->show(); + _mediaType->hide(); + } else { _clearSelection->hide(); - _info->hide(); _delete->hide(); _forward->hide(); - _mediaType->hide(); - _search->hide(); - } else { - if (p && p->isChannel() && (p->asChannel()->amCreator() || (p->isMegagroup() && p->asChannel()->amEditor()))) { - _edit->show(); + if (App::main() && App::main()->mediaTypeSwitch()) { + _mediaType->show(); } else { - _edit->hide(); - } - _leaveGroup->hide(); - _addContact->hide(); - _deleteContact->hide(); - if (!p && _selCount) { - _clearSelection->show(); - if (_canDelete) { - _delete->show(); - } else { - _delete->hide(); - } - _forward->show(); _mediaType->hide(); - } else { - _clearSelection->hide(); - _delete->hide(); - _forward->hide(); - if (App::main() && App::main()->mediaTypeSwitch()) { - _mediaType->show(); - } else { - _mediaType->hide(); - } } - if (h && !o && !p && _clearSelection->isHidden()) { - if (Adaptive::OneColumn()) { - _info->setPeer(h); - _info->show(); - } else { - _info->hide(); - } - _search->show(); + } + if (h && !o && _clearSelection->isHidden()) { + if (Adaptive::OneColumn()) { + _info->setPeer(h); + _info->show(); } else { - _search->hide(); _info->hide(); } + _search->show(); + } else { + _search->hide(); + _info->hide(); } resizeEvent(nullptr); } @@ -382,7 +273,7 @@ void TopBarWidget::updateAdaptiveLayout() { showAll(); } -FlatButton *TopBarWidget::mediaTypeButton() { +Ui::RoundButton *TopBarWidget::mediaTypeButton() { return _mediaType; } diff --git a/Telegram/SourceFiles/window/top_bar_widget.h b/Telegram/SourceFiles/window/top_bar_widget.h index ae428cf0d..0f0d140bf 100644 --- a/Telegram/SourceFiles/window/top_bar_widget.h +++ b/Telegram/SourceFiles/window/top_bar_widget.h @@ -24,6 +24,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org namespace Ui { class PeerAvatarButton; +class RoundButton; } // namespace Ui class FlatButton; class IconedButton; @@ -34,7 +35,6 @@ class TopBarWidget : public TWidget { Q_OBJECT public: - TopBarWidget(MainWidget *w); void enterEvent(QEvent *e) override; @@ -54,28 +54,19 @@ public: void updateAdaptiveLayout(); - FlatButton *mediaTypeButton(); + Ui::RoundButton *mediaTypeButton(); public slots: - void onForwardSelection(); void onDeleteSelection(); void onClearSelection(); void onInfoClicked(); - void onAddContact(); - void onEdit(); - void onDeleteContact(); - void onDeleteContactSure(); - void onDeleteAndExit(); - void onDeleteAndExitSure(); void onSearch(); signals: - void clicked(); private: - MainWidget *main(); anim::fvalue a_over; Animation _a_appearance; @@ -88,13 +79,12 @@ private: bool _animating; - ChildWidget _clearSelection; + ChildWidget _clearSelection; ChildWidget _forward, _delete; int _selectionButtonsWidth, _forwardDeleteWidth; ChildWidget _info; - ChildWidget _edit, _leaveGroup, _addContact, _deleteContact; - ChildWidget _mediaType; + ChildWidget _mediaType; ChildWidget _search; diff --git a/Telegram/Telegram.vcxproj b/Telegram/Telegram.vcxproj index 2f688472f..fbf0865c5 100644 --- a/Telegram/Telegram.vcxproj +++ b/Telegram/Telegram.vcxproj @@ -1231,6 +1231,7 @@ + diff --git a/Telegram/Telegram.vcxproj.filters b/Telegram/Telegram.vcxproj.filters index bb084e686..933b3e4b0 100644 --- a/Telegram/Telegram.vcxproj.filters +++ b/Telegram/Telegram.vcxproj.filters @@ -1296,6 +1296,9 @@ GeneratedFiles\Release + + SourceFiles\dialogs +