From e3e774176ee3f4a2e9f742402c5c7fce5a706779 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 3 Oct 2015 13:09:09 +0300 Subject: [PATCH] new flat boxes started --- Telegram/Resources/lang.strings | 61 ++++---- Telegram/Resources/style.txt | 61 ++++++-- Telegram/Resources/style_classes.txt | 15 ++ Telegram/SourceFiles/app.cpp | 74 +++++++--- Telegram/SourceFiles/app.h | 7 +- Telegram/SourceFiles/art/sprite.png | Bin 177827 -> 178684 bytes Telegram/SourceFiles/art/sprite_200x.png | Bin 238261 -> 239881 bytes Telegram/SourceFiles/boxes/aboutbox.cpp | 4 +- Telegram/SourceFiles/boxes/abstractbox.cpp | 14 +- Telegram/SourceFiles/boxes/abstractbox.h | 6 +- Telegram/SourceFiles/boxes/addcontactbox.cpp | 20 +-- Telegram/SourceFiles/boxes/autolockbox.cpp | 4 +- Telegram/SourceFiles/boxes/confirmbox.cpp | 91 +++++------- Telegram/SourceFiles/boxes/confirmbox.h | 21 ++- Telegram/SourceFiles/boxes/connectionbox.cpp | 4 +- Telegram/SourceFiles/boxes/contactsbox.cpp | 36 +++-- Telegram/SourceFiles/boxes/contactsbox.h | 2 +- .../SourceFiles/boxes/downloadpathbox.cpp | 4 +- Telegram/SourceFiles/boxes/languagebox.cpp | 20 +-- Telegram/SourceFiles/boxes/passcodebox.cpp | 45 +++--- Telegram/SourceFiles/boxes/passcodebox.h | 2 +- Telegram/SourceFiles/boxes/photocropbox.cpp | 6 +- Telegram/SourceFiles/boxes/photosendbox.cpp | 16 +- Telegram/SourceFiles/boxes/sessionsbox.cpp | 52 +++---- Telegram/SourceFiles/boxes/stickersetbox.cpp | 10 +- Telegram/SourceFiles/boxes/usernamebox.cpp | 12 +- Telegram/SourceFiles/dialogswidget.cpp | 24 +-- Telegram/SourceFiles/dialogswidget.h | 4 +- Telegram/SourceFiles/dropdown.cpp | 30 ++-- Telegram/SourceFiles/dropdown.h | 2 - Telegram/SourceFiles/gui/countryinput.cpp | 8 +- Telegram/SourceFiles/gui/flatbutton.cpp | 83 ++++++++++- Telegram/SourceFiles/gui/flatbutton.h | 27 ++++ Telegram/SourceFiles/gui/flatcheckbox.cpp | 2 +- Telegram/SourceFiles/gui/flatinput.cpp | 8 +- Telegram/SourceFiles/gui/flattextarea.cpp | 4 +- Telegram/SourceFiles/gui/phoneinput.cpp | 2 +- Telegram/SourceFiles/gui/style_core.cpp | 4 +- Telegram/SourceFiles/gui/style_core.h | 13 +- Telegram/SourceFiles/gui/text.cpp | 4 +- Telegram/SourceFiles/history.cpp | 99 +++++++------ Telegram/SourceFiles/historywidget.cpp | 139 ++++++++++-------- Telegram/SourceFiles/historywidget.h | 10 +- Telegram/SourceFiles/intro/intropwdcheck.cpp | 8 +- Telegram/SourceFiles/intro/introsteps.cpp | 2 +- Telegram/SourceFiles/layerwidget.h | 2 +- Telegram/SourceFiles/mainwidget.cpp | 56 ++++--- Telegram/SourceFiles/mainwidget.h | 4 +- Telegram/SourceFiles/mediaview.cpp | 88 ++--------- Telegram/SourceFiles/mtproto/generate.py | 51 +++---- Telegram/SourceFiles/mtproto/mtpCoreTypes.h | 8 +- Telegram/SourceFiles/mtproto/mtpScheme.cpp | 50 +++---- Telegram/SourceFiles/overviewwidget.cpp | 8 +- Telegram/SourceFiles/overviewwidget.h | 2 +- Telegram/SourceFiles/playerwidget.cpp | 4 +- Telegram/SourceFiles/profilewidget.cpp | 20 +-- Telegram/SourceFiles/pspecific_mac.cpp | 2 +- Telegram/SourceFiles/settingswidget.cpp | 50 +++---- Telegram/SourceFiles/structs.cpp | 2 +- Telegram/SourceFiles/sysbuttons.cpp | 4 +- Telegram/SourceFiles/window.cpp | 17 ++- Telegram/SourceFiles/window.h | 2 +- 62 files changed, 785 insertions(+), 645 deletions(-) diff --git a/Telegram/Resources/lang.strings b/Telegram/Resources/lang.strings index ddccd8bc2..00030fa49 100644 --- a/Telegram/Resources/lang.strings +++ b/Telegram/Resources/lang.strings @@ -62,6 +62,9 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_month_day" = "{month} {day}"; "lng_month_day_year" = "{month} {day}, {year}"; +"lng_box_ok" = "OK"; +"lng_box_cancel" = "CANCEL"; + "lng_cancel" = "Cancel"; "lng_continue" = "Continue"; "lng_close" = "Close"; @@ -152,8 +155,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_signin_no_email_forgot" = "Since you haven't provided a recovery\ne-mail when setting up your password, your remaining options are either to remember your password or to reset your account."; "lng_signin_cant_email_forgot" = "If you can't restore access to the e-mail, your remaining options are either to remember your password or to reset your account."; "lng_signin_reset_account" = "Reset your account"; -"lng_sigin_sure_reset" = "Warning!\n\nYou will lose all your chats and messages,\nalong with any media and files you shared!\n\nDo you want to reset your account?"; -"lng_sigin_reset" = "Reset"; +"lng_signin_sure_reset" = "Warning!\n\nYou will lose all your chats and messages,\nalong with any media and files you shared!\n\nDo you want to reset your account?"; +"lng_signin_reset" = "RESET"; "lng_signup_title" = "Information and photo"; "lng_signup_desc" = "Please enter your name and\nupload a photo."; @@ -248,7 +251,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_download_path_choose" = "Choose download path"; "lng_sure_clear_downloads" = "Do you want to remove all downloaded files from temp folder? It is done automatically on logout or program uninstall."; "lng_download_path_failed" = "File download could not be started. It could happen because of a bad download location.\n\nYou can change download path in Settings."; -"lng_download_path_settings" = "Go to Settings"; +"lng_download_path_settings" = "SETTINGS"; "lng_download_finish_failed" = "File download could not be finished.\n\nWould you like to try again?"; "lng_download_path_clearing" = "Clearing.."; "lng_download_path_cleared" = "Cleared!"; @@ -305,7 +308,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_cloud_password_bad_email" = "Incorrect e-mail, please try other."; "lng_cloud_password_about" = "This password will be required when you log in on a new device in addition to the pin code."; "lng_cloud_password_about_recover" = "Warning! Are you sure you don't want to\nadd a password recovery e-mail?\n\nIf you forget your password, you will\nlose access to your Telegram account."; -"lng_cloud_password_almost" = "A confirmation link was sent\nto the e-mail you provided.\n\nTwo-step verification will be enabled\nas soon as you follow that link."; +"lng_cloud_password_skip_email" = "SKIP E-MAIL"; +"lng_cloud_password_almost" = "A confirmation link was sent to the e-mail you provided. Two-step verification will be enabled as soon as you follow that link."; "lng_cloud_password_was_set" = "Two-step verification enabled."; "lng_cloud_password_updated" = "Your cloud password was updated."; "lng_cloud_password_removed" = "Two-step verification was disabled."; @@ -332,19 +336,20 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_settings_reset" = "Terminate all other sessions"; "lng_settings_reset_sure" = "Are you sure you want to terminate\nall other sessions?"; "lng_settings_reset_one_sure" = "Do you want to terminate this session?"; -"lng_settings_reset_button" = "Terminate"; +"lng_settings_reset_button" = "TERMINATE"; "lng_settings_reset_done" = "Other sessions terminated"; "lng_settings_ask_question" = "Ask a Question"; "lng_settings_ask_sure" = "Please note that Telegram Support is done by volunteers. We try to respond as quickly as possible, but it may take a while.\n\nPlease take a look at the Telegram FAQ: it has important troubleshooting tips and answers to most questions."; -"lng_settings_faq_button" = "Go to FAQ"; -"lng_settings_ask_ok" = "Ask"; +"lng_settings_faq_button" = "GO TO FAQ"; +"lng_settings_ask_ok" = "ASK"; "lng_settings_faq" = "Telegram FAQ"; "lng_settings_logout" = "Log Out"; "lng_sure_logout" = "Are you sure you want to log out?"; +"lng_box_logout" = "LOG OUT"; -"lng_settings_need_restart" = "You need to restart for applying\nsome of the new settings. Restart now?"; -"lng_settings_restart_now" = "Restart"; -"lng_settings_restart_later" = "Later"; +"lng_settings_need_restart" = "You need to restart for applying some of the new settings. Restart now?"; +"lng_settings_restart_now" = "RESTART"; +"lng_settings_restart_later" = "LATER"; "lng_sessions_header" = "Current session"; "lng_sessions_other_header" = "Active sessions"; @@ -416,12 +421,12 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_participant_filter" = "Search"; "lng_participant_invite" = "Invite"; -"lng_participant_invite_sorry" = "Sorry, you can only add the first\n{count} members to a channel personally.\n\nFrom now on, people will need\nto join via your invite link."; +"lng_participant_invite_sorry" = "Sorry, you can only add the first {count:_not_used|# member|# members} to a channel personally.\n\nFrom now on, people will need to join via your invite link."; "lng_create_group_back" = "Back"; "lng_create_group_next" = "Next"; "lng_create_group_create" = "Create"; "lng_create_group_title" = "New Group"; -"lng_create_group_about" = "Groups are ideal for smaller communities, they can have up to {count} members"; +"lng_create_group_about" = "Groups are ideal for smaller communities, they can have up to {count:_not_used|# member|# members}"; "lng_create_channel_title" = "New Channel"; "lng_create_channel_about" = "Channels are a tool for broadcasting your messages to unlimited audiences"; "lng_create_public_channel_title" = "Public Channel"; @@ -451,8 +456,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_sure_delete_history" = "Are you sure, you want to delete all message history with {contact}?\n\nThis action cannot be undone."; "lng_sure_delete_group_history" = "Are you sure, you want to delete all message history in «{group}»?\n\nThis action cannot be undone."; "lng_sure_delete_and_exit" = "Are you sure, you want to delete all message history and leave «{group}»?\n\nThis action cannot be undone."; -"lng_sure_leave_channel" = "Are you sure, you want\nto leave this channel?"; -"lng_sure_delete_channel" = "Are you sure, you want\nto delete this channel?\n\nAll members will be removed\nand all messages will be lost."; +"lng_sure_leave_channel" = "Are you sure, you want to leave\nthis channel?"; +"lng_sure_delete_channel" = "Are you sure, you want to delete this channel? All members will be removed and all messages will be lost."; "lng_message_empty" = "Empty Message"; "lng_media_unsupported" = "Media Unsupported"; @@ -478,13 +483,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_channel_hide_comments" = "Hide comments"; "lng_channel_not_accessible" = "Sorry, this channel is not accessible."; -"lng_channels_too_much_public_existing" = "Sorry, you have created\ntoo many public channels already.\n\nPlease delete one first."; -"lng_channels_too_much_public" = "Sorry, you have created\ntoo many public channels.\n\nYou can either create a private channel\nor delete one of your public channels first."; +"lng_channels_too_much_public_existing" = "Sorry, you have created too many public channels already. Please delete one first."; +"lng_channels_too_much_public" = "Sorry, you have created too many public channels.\n\nYou can either create a private channel\nor delete one of your public channels first."; -"lng_group_invite_bad_link" = "This invite link is broken\nor has expired."; +"lng_group_invite_bad_link" = "This invite link is broken or has expired."; "lng_group_invite_want_join" = "Do you want to join the group «{title}»?"; "lng_group_invite_want_join_channel" = "Do you want to join the channel «{title}»?"; -"lng_group_invite_join" = "Join"; +"lng_group_invite_join" = "JOIN"; "lng_group_invite_link" = "Invite link:"; "lng_group_invite_create" = "Create an invite link"; @@ -492,7 +497,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_group_invite_create_new" = "Revoke invite link"; "lng_group_invite_about_new" = "Your previous link will be deactivated\nand we'll generate a new invite link for you."; "lng_group_invite_copied" = "Invite link copied to clipboard."; -"lng_group_invite_no_room" = "Unable to join this group because there are\ntoo many members in it already."; +"lng_group_invite_no_room" = "Unable to join this group because there are too many members in it already."; "lng_channel_public_link_copied" = "Link copied to clipboard."; @@ -528,6 +533,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_switch_stickers" = "Stickers"; "lng_switch_emoji" = "Emoji"; +"lng_box_remove" = "REMOVE"; + "lng_custom_stickers" = "Custom stickers"; "lng_stickers_remove_pack" = "Remove «{sticker_pack}»?"; "lng_stickers_add_pack" = "Add {count:_not_used_|# Sticker|# Stickers}"; @@ -547,10 +554,10 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_report_spam" = "Report Spam"; "lng_report_spam_hide" = "Hide"; "lng_report_spam_thanks" = "Thank you for your report!"; -"lng_report_spam_sure" = "Are you sure you want\nto report spam from this user?"; -"lng_report_spam_sure_group" = "Are you sure you want\nto report spam in this group?"; -"lng_report_spam_sure_channel" = "Are you sure you want\nto report spam in this channel?"; -"lng_report_spam_ok" = "Report"; +"lng_report_spam_sure" = "Are you sure you want to report spam from this user?"; +"lng_report_spam_sure_group" = "Are you sure you want to report spam in this group?"; +"lng_report_spam_sure_channel" = "Are you sure you want to report spam in this channel?"; +"lng_report_spam_ok" = "REPORT"; "lng_cant_send_to_not_contact" = "Sorry, you can only send messages to\nmutual contacts at the moment. {more_info}"; "lng_cant_invite_not_contact" = "Sorry, you can only add mutual contacts\nto groups at the moment. {more_info}"; "lng_cant_invite_not_contact_channel" = "Sorry, you can only add mutual contacts\nto channels at the moment. {more_info}"; @@ -572,7 +579,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_channel_unmute" = "Unmute"; "lng_open_this_link" = "Open this link?"; -"lng_open_link" = "Open"; +"lng_open_link" = "OPEN"; "lng_bot_start" = "Start"; "lng_bot_choose_group" = "Choose Group"; @@ -662,8 +669,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_forward_share_contact" = "Share contact to {recipient}?"; "lng_forward_send_file_confirm" = "Send «{name}» to {recipient}?"; "lng_forward_send_files_confirm" = "Send selected files to {recipient}?"; -"lng_forward" = "Forward"; -"lng_forward_send" = "Send"; +"lng_forward_send" = "SEND"; "lng_forward_messages" = "{count:_not_used_|Forwarded message|# forwarded messages}"; "lng_forwarding_from" = "{user} and {count:_not_used_|# other|# others}"; "lng_forwarding_from_two" = "{user} and {second_user}"; @@ -701,7 +707,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org "lng_selected_cancel_sure_this" = "Do you want to cancel this upload?"; "lng_selected_delete_sure_this" = "Do you want to delete this message?"; "lng_selected_delete_sure" = "Do you want to delete {count:_not_used_|# message|# messages}?"; -"lng_selected_delete_confirm" = "Delete"; +"lng_box_delete" = "DELETE"; +"lng_box_leave" = "LEAVE"; "lng_about_version" = "Version {version}"; "lng_about_text" = "Official free messaging app based on [a href=\"https://core.telegram.org/mtproto\"]MTProto[/a] and\n[a href=\"https://core.telegram.org/api\"]Telegram API[/a] for speed and security\n\nThis software is licensed under [a href=\"https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE\"]GNU GPL[/a] version 3,\nsource code is available on [a href=\"https://github.com/telegramdesktop/tdesktop\"]GitHub[/a]."; diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 0bb12fa88..427f1fffc 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -91,6 +91,40 @@ dialogsSearchField: InputField(defaultInputField) { width: 240px; height: 34px; } + +boxWidth: 320px; +boxWideWidth: 364px; +boxPadding: margins(26px, 30px, 26px, 16px); +boxMaxListHeight: 600px; +boxFontSize: 13px; +boxTextFont: font(boxFontSize); +boxTitleFont: font(boxFontSize semibold); +boxButtonFont: font(boxFontSize semibold); +boxTitleHeight: 54px; +defaultBoxButton: BoxButton { + textFg: #2f9fea; + textFgOver: #2f9fea; + textBg: white; + textBgOver: #edf7ff; + + width: -24px; + height: 36px; + + textTop: 9px; + + font: boxButtonFont; + duration: 200; +} +cancelBoxButton: BoxButton(defaultBoxButton) { + textFg: #aeaeae; +} +attentionBoxButton: BoxButton(defaultBoxButton) { + textFg: #ea4b2f; + textFgOver: #ea4b2f; + textBgOver: #fff0ed; +} +boxButtonPadding: margins(12px, 16px, 22px, 16px); + titleBG: #6389a8; titleColor: #0f8dcc;//rgb(20, 136, 210); titleHeight: 39px; @@ -936,6 +970,9 @@ defaultTextStyle: textStyle { selectOverlay: msgSelectOverlay; lineHeight: 0px; } +boxTextStyle: textStyle(defaultTextStyle) { + lineHeight: 22px; +} serviceTextStyle: textStyle(defaultTextStyle) { lnkFlags: msgServiceFont; lnkOverFlags: font(fsize semibold underline); @@ -1207,18 +1244,14 @@ layerHideDuration: 200; layerPadding: margins(10px, 10px, 10px, 10px); boxFont: font(16px); -boxPadding: margins(18px, 18px, 18px, 18px); boxVerticalMargin: 10px; -boxWidth: 364px; -boxMaxListHeight: 600px; - boxBG: white; boxGrayTitle: #777; -boxTitlePos: point(20px, 15px); -boxTitleFont: font(17px); -boxTitleHeight: 52px; +old_boxTitlePos: point(20px, 15px); +old_boxTitleFont: font(17px); +old_boxTitleHeight: 52px; confirmMaxHeight: 320px; confirmCompressedSkip: 10px; @@ -1229,6 +1262,9 @@ inpAddContact: flatInput(inpDefGray) { textMrg: margins(10px, 5px, 10px, 5px); font: font(15px); } +contactUserIcon: sprite(120px, 90px, 18px, 18px); +contactPhoneIcon: sprite(138px, 90px, 18px, 18px); +contactAddIcon: sprite(307px, 248px, 22px, 16px); btnNewGroup: iconedButton(btnDefIconed) { icon: sprite(189px, 118px, 18px, 17px); @@ -1280,7 +1316,6 @@ notifyHeight: 80px; notifyDeltaX: 6px; notifyDeltaY: 7px; -cropBoxWidth: 364px; cropPointSize: 10px; cropMinSize: 20px; @@ -1331,10 +1366,11 @@ btnShareContact: flatButton(btnDefNext, btnDefBig) { overFont: font(17px); } profileMinBtnPadding: 10px; +inviteCheckIcon: sprite(187px, 61px, 18px, 14px); +inviteCheckActiveIcon: sprite(187px, 75px, 18px, 14px); membersPadding: margins(0px, 10px, 0px, 10px); -forwardWidth: 364px; forwardMargins: margins(30px, 10px, 30px, 10px); forwardFont: font(16px); forwardBg: rgba(0, 0, 0, 76); @@ -1431,7 +1467,7 @@ newGroupName: flatInput(inpDefGray) { newGroupLink: flatInput(inpDefFlat) { width: 340px; height: 42px; - font: font(15px); + font: boxTextFont; textMrg: margins(12px, 4px, 12px, 4px); bgColor: transparent; bgActive: transparent; @@ -1559,7 +1595,7 @@ aboutCloseButton: flatButton(contactsClose) { downTextTop: 16px; } btnInfoClose: flatButton(aboutCloseButton) { - width: boxWidth; + width: boxWideWidth; } emojiTextFont: font(16px); @@ -1839,7 +1875,6 @@ stickerIconPadding: 5px; stickerIconOpacity: 0.7; stickerIconSel: 2px; stickerIconSelColor: #58b2ed; -stickerIconRecent: sprite(342px, 50px, 21px, 22px); stickerIconLeft: sprite(342px, 72px, 40px, 1px); stickerIconRight: sprite(342px, 73px, 40px, 1px); stickerIconMove: 400; @@ -2114,7 +2149,7 @@ sessionsHeight: 440px; sessionHeight: 70px; sessionPadding: margins(20px, 10px, 20px, 0); sessionsCloseButton: flatButton(aboutCloseButton) { - width: boxWidth; + width: boxWideWidth; } sessionNameFont: msgNameFont; sessionActiveFont: msgDateFont; diff --git a/Telegram/Resources/style_classes.txt b/Telegram/Resources/style_classes.txt index c5e24ba34..ca8281e74 100644 --- a/Telegram/Resources/style_classes.txt +++ b/Telegram/Resources/style_classes.txt @@ -268,6 +268,21 @@ botKeyboardButton { downTextTop: number; } +BoxButton { + textFg: color; + textFgOver: color; + textBg: color; // rect of textBg with rounded rect of textBgOver upon it + textBgOver: color; + + width: number; + height: number; + + textTop: number; + + font: font; + duration: number; +} + InputField { textFg: color; textMargins: margins; diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index f66d8d2af..86a0ec74d 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -93,7 +93,15 @@ namespace { QPixmap *sprite = 0, *emojis = 0, *emojisLarge = 0; - QPixmap *corners[RoundCornersCount][4] = { { 0 } }; + struct CornersPixmaps { + CornersPixmaps() { + memset(p, 0, sizeof(p)); + } + QPixmap *p[4]; + }; + CornersPixmaps corners[RoundCornersCount]; + typedef QMap CornersMap; + CornersMap cornersMap; QImage *cornersMask[4] = { 0 }; typedef QMap EmojisMap; @@ -1887,9 +1895,11 @@ namespace App { cors[1] = rect.copy(r * 2, 0, r, r); cors[2] = rect.copy(0, r * 2, r, r + (shadow ? s : 0)); cors[3] = rect.copy(r * 2, r * 2, r, r + (shadow ? s : 0)); - for (int i = 0; i < 4; ++i) { - ::corners[index][i] = new QPixmap(QPixmap::fromImage(cors[i], Qt::ColorOnly)); - ::corners[index][i]->setDevicePixelRatio(cRetinaFactor()); + if (index != NoneCorners) { + for (int i = 0; i < 4; ++i) { + ::corners[index].p[i] = new QPixmap(QPixmap::fromImage(cors[i], Qt::ColorOnly)); + ::corners[index].p[i]->setDevicePixelRatio(cRetinaFactor()); + } } } @@ -1916,7 +1926,7 @@ namespace App { } QImage mask[4]; - prepareCorners(MaskCorners, st::msgRadius, st::white, 0, mask); + prepareCorners(NoneCorners, st::msgRadius, st::white, 0, mask); for (int i = 0; i < 4; ++i) { ::cornersMask[i] = new QImage(mask[i].convertToFormat(QImage::Format_ARGB32_Premultiplied)); ::cornersMask[i]->setDevicePixelRatio(cRetinaFactor()); @@ -1968,10 +1978,16 @@ namespace App { ::emojisLarge = 0; for (int32 j = 0; j < 4; ++j) { for (int32 i = 0; i < RoundCornersCount; ++i) { - delete ::corners[i][j]; ::corners[i][j] = 0; + delete ::corners[i].p[j]; ::corners[i].p[j] = 0; } delete ::cornersMask[j]; ::cornersMask[j] = 0; } + for (CornersMap::const_iterator i = ::cornersMap.cbegin(), e = ::cornersMap.cend(); i != e; ++i) { + for (int32 j = 0; j < 4; ++j) { + delete i->p[j]; + } + } + ::cornersMap.clear(); mainEmojisMap.clear(); otherEmojisMap.clear(); @@ -2394,13 +2410,8 @@ namespace App { QImage **cornersMask() { return ::cornersMask; } - QPixmap **corners(RoundCorners index) { - return ::corners[index]; - } - - void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg, RoundCorners index, const style::color *sh) { - QPixmap **c = ::corners[index]; - int32 cw = c[0]->width() / cIntRetinaFactor(), ch = c[0]->height() / cIntRetinaFactor(); + void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg, const CornersPixmaps &c, const style::color *sh) { + int32 cw = c.p[0]->width() / cIntRetinaFactor(), ch = c.p[0]->height() / cIntRetinaFactor(); if (w < 2 * cw || h < 2 * ch) return; if (w > 2 * cw) { p.fillRect(QRect(x + cw, y, w - 2 * cw, ch), bg->b); @@ -2410,20 +2421,41 @@ namespace App { if (h > 2 * ch) { p.fillRect(QRect(x, y + ch, w, h - 2 * ch), bg->b); } - p.drawPixmap(QPoint(x, y), *c[0]); - p.drawPixmap(QPoint(x + w - cw, y), *c[1]); - p.drawPixmap(QPoint(x, y + h - ch), *c[2]); - p.drawPixmap(QPoint(x + w - cw, y + h - ch), *c[3]); + p.drawPixmap(QPoint(x, y), *c.p[0]); + p.drawPixmap(QPoint(x + w - cw, y), *c.p[1]); + p.drawPixmap(QPoint(x, y + h - ch), *c.p[2]); + p.drawPixmap(QPoint(x + w - cw, y + h - ch), *c.p[3]); + } + + void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg, RoundCorners index, const style::color *sh) { + roundRect(p, x, y, w, h, bg, ::corners[index], sh); } void roundShadow(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &sh, RoundCorners index) { - QPixmap **c = App::corners(index); - int32 cw = c[0]->width() / cIntRetinaFactor(), ch = c[0]->height() / cIntRetinaFactor(); + const CornersPixmaps &c = ::corners[index]; + int32 cw = c.p[0]->width() / cIntRetinaFactor(), ch = c.p[0]->height() / cIntRetinaFactor(); p.fillRect(x + cw, y + h, w - 2 * cw, st::msgShadow, sh->b); p.fillRect(x, y + h - ch, cw, st::msgShadow, sh->b); p.fillRect(x + w - cw, y + h - ch, cw, st::msgShadow, sh->b); - p.drawPixmap(x, y + h - ch + st::msgShadow, *c[2]); - p.drawPixmap(x + w - cw, y + h - ch + st::msgShadow, *c[3]); + p.drawPixmap(x, y + h - ch + st::msgShadow, *c.p[2]); + p.drawPixmap(x + w - cw, y + h - ch + st::msgShadow, *c.p[3]); + } + + void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg) { + uint32 colorKey = ((uint32(bg->c.alpha()) & 0xFF) << 24) | ((uint32(bg->c.red()) & 0xFF) << 16) | ((uint32(bg->c.green()) & 0xFF) << 8) | ((uint32(bg->c.blue()) & 0xFF) << 24); + CornersMap::const_iterator i = cornersMap.find(colorKey); + if (i == cornersMap.cend()) { + QImage images[4]; + prepareCorners(NoneCorners, st::msgRadius, bg, 0, images); + + CornersPixmaps pixmaps; + for (int j = 0; j < 4; ++j) { + pixmaps.p[j] = new QPixmap(QPixmap::fromImage(images[j], Qt::ColorOnly)); + pixmaps.p[j]->setDevicePixelRatio(cRetinaFactor()); + } + i = cornersMap.insert(colorKey, pixmaps); + } + roundRect(p, x, y, w, h, bg, i.value(), 0); } void initBackground(int32 id, const QImage &p, bool nowrite) { diff --git a/Telegram/SourceFiles/app.h b/Telegram/SourceFiles/app.h index 97fc159a9..f01cbf1c4 100644 --- a/Telegram/SourceFiles/app.h +++ b/Telegram/SourceFiles/app.h @@ -44,7 +44,7 @@ struct ReplyMarkup { }; enum RoundCorners { - MaskCorners = 0x00, // for images + NoneCorners = 0x00, // for images BlackCorners, ServiceCorners, ServiceSelectedCorners, @@ -260,7 +260,6 @@ namespace App { void openLocalUrl(const QString &url); QImage **cornersMask(); - QPixmap **corners(RoundCorners index); void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg, RoundCorners index, const style::color *sh = 0); inline void roundRect(Painter &p, const QRect &rect, const style::color &bg, RoundCorners index, const style::color *sh = 0) { return roundRect(p, rect.x(), rect.y(), rect.width(), rect.height(), bg, index, sh); @@ -269,6 +268,10 @@ namespace App { inline void roundShadow(Painter &p, const QRect &rect, const style::color &sh, RoundCorners index) { return roundShadow(p, rect.x(), rect.y(), rect.width(), rect.height(), sh, index); } + void roundRect(Painter &p, int32 x, int32 y, int32 w, int32 h, const style::color &bg); + inline void roundRect(Painter &p, const QRect &rect, const style::color &bg) { + return roundRect(p, rect.x(), rect.y(), rect.width(), rect.height(), bg); + } void initBackground(int32 id = DefaultChatBackground, const QImage &p = QImage(), bool nowrite = false); diff --git a/Telegram/SourceFiles/art/sprite.png b/Telegram/SourceFiles/art/sprite.png index db3f756b2b40d40e9078a9dac3b961fe7c31d1f9..59ccef9780c59b5d384a3519e4a86e5fabc46f6d 100644 GIT binary patch delta 57027 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

?s3EYS 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 delta 56353 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

{$`da@@}v#03;T6zo` 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�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⋙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

Y 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 R_hJMd7G?)b^NgLt{sUDA-9Z2V diff --git a/Telegram/SourceFiles/boxes/aboutbox.cpp b/Telegram/SourceFiles/boxes/aboutbox.cpp index 685131f9e..a9eca9428 100644 --- a/Telegram/SourceFiles/boxes/aboutbox.cpp +++ b/Telegram/SourceFiles/boxes/aboutbox.cpp @@ -32,8 +32,8 @@ _text(this, lang(lng_about_text), st::aboutLabel, st::aboutTextStyle) { _version.move(0, st::aboutVersionTop); _text.move(0, st::aboutTextTop); - _headerWidth = st::aboutHeaderFont->m.width(qsl("Telegram ")); - _subheaderWidth = st::aboutSubheaderFont->m.width(qsl("Desktop")); + _headerWidth = st::aboutHeaderFont->width(qsl("Telegram ")); + _subheaderWidth = st::aboutSubheaderFont->width(qsl("Desktop")); _done.move(0, height() - _done.height()); diff --git a/Telegram/SourceFiles/boxes/abstractbox.cpp b/Telegram/SourceFiles/boxes/abstractbox.cpp index ef0e69c5e..e18f9faef 100644 --- a/Telegram/SourceFiles/boxes/abstractbox.cpp +++ b/Telegram/SourceFiles/boxes/abstractbox.cpp @@ -24,8 +24,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "mainwidget.h" #include "window.h" -AbstractBox::AbstractBox() : _maxHeight(0), _hiding(false), a_opacity(0, 1) { - resize(st::boxWidth, 0); +AbstractBox::AbstractBox(int32 w) : _maxHeight(0), _hiding(false), a_opacity(0, 1) { + resize(w, 0); } void AbstractBox::prepare() { @@ -65,20 +65,20 @@ bool AbstractBox::paint(QPainter &p) { void AbstractBox::paintTitle(Painter &p, const QString &title, bool withShadow) { if (withShadow) { // paint shadow - p.fillRect(0, st::boxTitleHeight, width(), st::scrollDef.topsh, st::scrollDef.shColor->b); + p.fillRect(0, st::old_boxTitleHeight, width(), st::scrollDef.topsh, st::scrollDef.shColor->b); } // paint box title - p.setFont(st::boxTitleFont->f); + p.setFont(st::old_boxTitleFont->f); p.setPen(st::black->p); - p.drawTextLeft(st::boxTitlePos.x(), st::boxTitlePos.y(), width(), title); + p.drawTextLeft(st::old_boxTitlePos.x(), st::old_boxTitlePos.y(), width(), title); } void AbstractBox::paintGrayTitle(QPainter &p, const QString &title) { // draw box title p.setFont(st::boxFont->f); p.setPen(st::boxGrayTitle->p); - p.drawText(QRect(st::boxTitlePos.x(), st::boxTitlePos.y(), width() - 2 * st::boxTitlePos.x(), st::boxFont->height), title, style::al_top); + p.drawText(QRect(st::old_boxTitlePos.x(), st::old_boxTitlePos.y(), width() - 2 * st::old_boxTitlePos.x(), st::boxFont->height), title, style::al_top); } void AbstractBox::paintEvent(QPaintEvent *e) { @@ -134,7 +134,7 @@ void AbstractBox::startHide() { } ScrollableBox::ScrollableBox(const style::flatScroll &scroll) : AbstractBox(), -_scroll(this, scroll), _innerPtr(0), _topSkip(st::boxTitleHeight), _bottomSkip(0) { +_scroll(this, scroll), _innerPtr(0), _topSkip(st::old_boxTitleHeight), _bottomSkip(0) { } void ScrollableBox::resizeEvent(QResizeEvent *e) { diff --git a/Telegram/SourceFiles/boxes/abstractbox.h b/Telegram/SourceFiles/boxes/abstractbox.h index b50f2a133..3f03916cc 100644 --- a/Telegram/SourceFiles/boxes/abstractbox.h +++ b/Telegram/SourceFiles/boxes/abstractbox.h @@ -24,7 +24,7 @@ class AbstractBox : public LayeredWidget { public: - AbstractBox(); + AbstractBox(int32 w = st::boxWideWidth); void parentResized(); void animStep(float64 ms); void keyPressEvent(QKeyEvent *e); @@ -73,7 +73,7 @@ public: protected: - void init(QWidget *inner, int32 bottomSkip = 0, int32 topSkip = st::boxTitleHeight); + void init(QWidget *inner, int32 bottomSkip = 0, int32 topSkip = st::old_boxTitleHeight); virtual void hideAll(); virtual void showAll(); @@ -92,4 +92,4 @@ public: ItemListBox(const style::flatScroll &scroll); -}; \ No newline at end of file +}; diff --git a/Telegram/SourceFiles/boxes/addcontactbox.cpp b/Telegram/SourceFiles/boxes/addcontactbox.cpp index c467a6412..758b08458 100644 --- a/Telegram/SourceFiles/boxes/addcontactbox.cpp +++ b/Telegram/SourceFiles/boxes/addcontactbox.cpp @@ -63,15 +63,15 @@ void AddContactBox::initBox() { if (_peer) { if (_peer->isUser()) { _boxTitle = lang(_peer == App::self() ? lng_edit_self_title : lng_edit_contact_title); - setMaxHeight(st::boxTitleHeight + st::addContactPadding.top() + 2 * _firstInput.height() + 1 * st::addContactDelta + st::addContactPadding.bottom() + _addButton.height()); + setMaxHeight(st::old_boxTitleHeight + st::addContactPadding.top() + 2 * _firstInput.height() + 1 * st::addContactDelta + st::addContactPadding.bottom() + _addButton.height()); } else if (_peer->isChat()) { _boxTitle = lang(lng_edit_group_title); - setMaxHeight(st::boxTitleHeight + st::addContactPadding.top() + 1 * _firstInput.height() + st::addContactPadding.bottom() + _addButton.height()); + setMaxHeight(st::old_boxTitleHeight + st::addContactPadding.top() + 1 * _firstInput.height() + st::addContactPadding.bottom() + _addButton.height()); } } else { bool readyToAdd = !_phoneInput.text().isEmpty() && (!_firstInput.text().isEmpty() || !_lastInput.text().isEmpty()); _boxTitle = lang(readyToAdd ? lng_confirm_contact_data : lng_enter_contact_data); - setMaxHeight(st::boxTitleHeight + st::addContactPadding.top() + 3 * _firstInput.height() + 2 * st::addContactDelta + st::addContactPadding.bottom() + _addButton.height()); + setMaxHeight(st::old_boxTitleHeight + st::addContactPadding.top() + 3 * _firstInput.height() + 2 * st::addContactDelta + st::addContactPadding.bottom() + _addButton.height()); } _retryButton.hide(); @@ -169,7 +169,7 @@ void AddContactBox::paintEvent(QPaintEvent *e) { } else { // draw box text p.setPen(st::black->p); - p.setFont(st::boxTitleFont->f); + p.setFont(st::old_boxTitleFont->f); int32 h = size().height() - st::boxPadding.top() * 2 - _retryButton.height() - st::boxPadding.bottom(); p.drawText(QRect(st::boxPadding.left(), st::boxPadding.top(), width() - st::boxPadding.left() - st::boxPadding.right(), h), lng_contact_not_joined(lt_name, _sentName), style::al_topleft); } @@ -183,11 +183,11 @@ void AddContactBox::paintEvent(QPaintEvent *e) { void AddContactBox::resizeEvent(QResizeEvent *e) { if (_invertOrder) { - _lastInput.setGeometry(st::addContactPadding.left(), st::boxTitleHeight + st::addContactPadding.top(), width() - st::addContactPadding.left() - st::addContactPadding.right(), _lastInput.height()); + _lastInput.setGeometry(st::addContactPadding.left(), st::old_boxTitleHeight + st::addContactPadding.top(), width() - st::addContactPadding.left() - st::addContactPadding.right(), _lastInput.height()); _firstInput.setGeometry(st::addContactPadding.left(), _lastInput.y() + _lastInput.height() + st::addContactDelta, _lastInput.width(), _lastInput.height()); _phoneInput.setGeometry(st::addContactPadding.left(), _firstInput.y() + _firstInput.height() + st::addContactDelta, _lastInput.width(), _lastInput.height()); } else { - _firstInput.setGeometry(st::addContactPadding.left(), st::boxTitleHeight + st::addContactPadding.top(), width() - st::addContactPadding.left() - st::addContactPadding.right(), _firstInput.height()); + _firstInput.setGeometry(st::addContactPadding.left(), st::old_boxTitleHeight + st::addContactPadding.top(), width() - st::addContactPadding.left() - st::addContactPadding.right(), _firstInput.height()); _lastInput.setGeometry(st::addContactPadding.left(), _firstInput.y() + _firstInput.height() + st::addContactDelta, _firstInput.width(), _firstInput.height()); _phoneInput.setGeometry(st::addContactPadding.left(), _lastInput.y() + _lastInput.height() + st::addContactDelta, _lastInput.width(), _lastInput.height()); } @@ -309,7 +309,7 @@ void AddContactBox::onImportDone(const MTPcontacts_ImportedContacts &res) { _lastInput.hide(); _phoneInput.hide(); _retryButton.show(); - int32 theight = st::boxTitleFont->m.boundingRect(0, 0, width() - st::boxPadding.left() - st::boxPadding.right(), 1, Qt::TextWordWrap, lng_contact_not_joined(lt_name, _sentName)).height(); + int32 theight = st::old_boxTitleFont->m.boundingRect(0, 0, width() - st::boxPadding.left() - st::boxPadding.right(), 1, Qt::TextWordWrap, lng_contact_not_joined(lt_name, _sentName)).height(); int32 h = st::boxPadding.top() * 2 + theight + _retryButton.height() + st::boxPadding.bottom(); setMaxHeight(h); update(); @@ -342,7 +342,7 @@ void AddContactBox::onRetry() { _phoneInput.setDisabled(false); _retryButton.hide(); _firstInput.setFocus(); - setMaxHeight(st::boxTitleHeight + st::addContactPadding.top() + 3 * _firstInput.height() + 2 * st::addContactDelta + st::addContactPadding.bottom() + _addButton.height()); + setMaxHeight(st::old_boxTitleHeight + st::addContactPadding.top() + 3 * _firstInput.height() + 2 * st::addContactDelta + st::addContactPadding.bottom() + _addButton.height()); update(); } @@ -473,7 +473,7 @@ QRect EditChannelBox::descriptionRect() const { } void EditChannelBox::updateMaxHeight() { - int32 h = st::boxTitleHeight + st::newGroupPadding.top() + _title.height(); + int32 h = st::old_boxTitleHeight + st::newGroupPadding.top() + _title.height(); h += st::newGroupDescriptionSkip + st::newGroupDescriptionPadding.top() + _description.height() + st::newGroupDescriptionPadding.bottom(); h += st::newGroupPublicLinkSkip + _publicLink.height(); h += st::newGroupPadding.bottom() + _saveButton.height(); @@ -497,7 +497,7 @@ bool EditChannelBox::eventFilter(QObject *obj, QEvent *e) { void EditChannelBox::resizeEvent(QResizeEvent *e) { _title.resize(width() - st::newGroupPadding.left() - st::newGroupPadding.right(), _title.height()); - _title.moveToLeft(st::newGroupPadding.left(), st::boxTitleHeight + st::newGroupPadding.top(), width()); + _title.moveToLeft(st::newGroupPadding.left(), st::old_boxTitleHeight + st::newGroupPadding.top(), width()); _description.moveToLeft(st::newGroupPadding.left() + st::newGroupDescriptionPadding.left(), _title.y() + _title.height() + st::newGroupDescriptionSkip + st::newGroupDescriptionPadding.top(), width()); diff --git a/Telegram/SourceFiles/boxes/autolockbox.cpp b/Telegram/SourceFiles/boxes/autolockbox.cpp index ec6ad7c5c..d73131e90 100644 --- a/Telegram/SourceFiles/boxes/autolockbox.cpp +++ b/Telegram/SourceFiles/boxes/autolockbox.cpp @@ -32,9 +32,9 @@ _done(this, lang(lng_about_done), st::langsCloseButton) { int32 opts[] = { 60, 300, 3600, 18000 }, cnt = sizeof(opts) / sizeof(opts[0]); - resizeMaxHeight(st::langsWidth, st::boxTitleHeight + st::langsPadding.top() + st::langsPadding.bottom() + cnt * (st::langPadding.top() + st::rbDefFlat.height + st::langPadding.bottom()) + _done.height()); + resizeMaxHeight(st::langsWidth, st::old_boxTitleHeight + st::langsPadding.top() + st::langsPadding.bottom() + cnt * (st::langPadding.top() + st::rbDefFlat.height + st::langPadding.bottom()) + _done.height()); - int32 y = st::boxTitleHeight + st::langsPadding.top(); + int32 y = st::old_boxTitleHeight + st::langsPadding.top(); _options.reserve(cnt); for (int32 i = 0; i < cnt; ++i) { int32 v = opts[i]; diff --git a/Telegram/SourceFiles/boxes/confirmbox.cpp b/Telegram/SourceFiles/boxes/confirmbox.cpp index 407b09929..1d97c13d3 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.cpp +++ b/Telegram/SourceFiles/boxes/confirmbox.cpp @@ -31,42 +31,38 @@ TextParseOptions _confirmBoxTextOptions = { Qt::LayoutDirectionAuto, // dir }; -ConfirmBox::ConfirmBox(const QString &text, const QString &doneText, const QString &cancelText, const style::flatButton &doneStyle, const style::flatButton &cancelStyle) : _infoMsg(false), -_confirm(this, doneText.isEmpty() ? lang(lng_continue) : doneText, doneStyle), -_cancel(this, cancelText.isEmpty() ? lang(lng_cancel) : cancelText, cancelStyle), -_close(this, QString(), st::btnInfoClose), -_text(100) { +ConfirmBox::ConfirmBox(const QString &text, const QString &doneText, const style::BoxButton &doneStyle, const QString &cancelText, const style::BoxButton &cancelStyle) : AbstractBox(st::boxWidth), +_informative(false), +_text(100), +_confirm(this, doneText.isEmpty() ? lang(lng_box_ok) : doneText, doneStyle), +_cancel(this, cancelText.isEmpty() ? lang(lng_box_cancel) : cancelText, cancelStyle) { init(text); } -ConfirmBox::ConfirmBox(const QString &text, bool noDone, const QString &cancelText) : _infoMsg(true), -_confirm(this, QString(), st::btnSelectDone), -_cancel(this, QString(), st::btnSelectCancel), -_close(this, cancelText.isEmpty() ? lang(lng_close) : cancelText, st::btnInfoClose), -_text(100) { +ConfirmBox::ConfirmBox(const QString &text, const QString &doneText, const style::BoxButton &doneStyle, bool informative) : AbstractBox(st::boxWidth), +_informative(true), +_text(100), +_confirm(this, doneText.isEmpty() ? lang(lng_box_ok) : doneText, doneStyle), +_cancel(this, QString(), st::cancelBoxButton) { init(text); } void ConfirmBox::init(const QString &text) { - _text.setText(st::boxFont, text, (_infoMsg ? _confirmBoxTextOptions : _textPlainOptions)); + _text.setText(st::boxTextFont, text, _informative ? _confirmBoxTextOptions : _textPlainOptions); - _textWidth = st::boxWidth + 10 - st::boxPadding.left() - st::boxPadding.right(); - _textHeight = qMin(_text.countHeight(_textWidth), 16 * st::boxFont->height); - setMaxHeight(st::boxPadding.top() + _textHeight + st::boxPadding.bottom() + (_infoMsg ? _close.height() : _confirm.height())); + textstyleSet(&st::boxTextStyle); + _textWidth = st::boxWidth - st::boxPadding.left() - st::boxPadding.right(); + _textHeight = qMin(_text.countHeight(_textWidth), 16 * int(st::boxTextStyle.lineHeight)); + setMaxHeight(st::boxPadding.top() + _textHeight + st::boxPadding.bottom() + st::boxButtonPadding.top() + _confirm.height() + st::boxButtonPadding.bottom()); + textstyleRestore(); - if (_infoMsg) { - _confirm.hide(); + connect(&_confirm, SIGNAL(clicked()), this, SIGNAL(confirmed())); + connect(&_cancel, SIGNAL(clicked()), this, SLOT(onCancel())); + if (_informative) { _cancel.hide(); - - connect(&_close, SIGNAL(clicked()), this, SLOT(onCancel())); - - setMouseTracking(_text.hasLinks()); - } else { - _close.hide(); - - connect(&_confirm, SIGNAL(clicked()), this, SIGNAL(confirmed())); - connect(&_cancel, SIGNAL(clicked()), this, SLOT(onCancel())); + connect(this, SIGNAL(confirmed()), this, SLOT(onCancel())); } + setMouseTracking(_text.hasLinks()); prepare(); } @@ -121,7 +117,9 @@ void ConfirmBox::updateLink() { void ConfirmBox::updateHover() { QPoint m(mapFromGlobal(_lastMousePos)); bool wasMy = (_myLink == textlnkOver()); + textstyleSet(&st::boxTextStyle); _myLink = _text.link(m.x() - st::boxPadding.left(), m.y() - st::boxPadding.top(), _textWidth, (_text.maxWidth() < width()) ? style::al_center : style::al_left); + textstyleRestore(); if (_myLink != textlnkOver()) { if (wasMy || _myLink || rect().contains(m)) { textlnkOver(_myLink); @@ -138,12 +136,11 @@ void ConfirmBox::closePressed() { void ConfirmBox::hideAll() { _confirm.hide(); _cancel.hide(); - _close.hide(); } void ConfirmBox::showAll() { - if (_infoMsg) { - _close.show(); + if (_informative) { + _confirm.show(); } else { _confirm.show(); _cancel.show(); @@ -162,27 +159,16 @@ void ConfirmBox::paintEvent(QPaintEvent *e) { QPainter p(this); if (paint(p)) return; - if (!_infoMsg) { - // paint shadows - p.fillRect(0, height() - st::btnSelectCancel.height - st::scrollDef.bottomsh, width(), st::scrollDef.bottomsh, st::scrollDef.shColor->b); - - // paint button sep - p.fillRect(st::btnSelectCancel.width, height() - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); - } - // draw box title / text - p.setFont(st::boxFont->f); p.setPen(st::black->p); - _text.drawElided(p, st::boxPadding.left(), st::boxPadding.top(), _textWidth, 16, (_text.maxWidth() < width()) ? style::al_center : style::al_left); + textstyleSet(&st::boxTextStyle); + _text.drawElided(p, st::boxPadding.left(), st::boxPadding.top(), _textWidth, 16, style::al_left); + textstyleRestore(); } void ConfirmBox::resizeEvent(QResizeEvent *e) { - if (_infoMsg) { - _close.move(0, st::boxPadding.top() + _textHeight + st::boxPadding.bottom()); - } else { - _confirm.move(width() - _confirm.width(), st::boxPadding.top() + _textHeight + st::boxPadding.bottom()); - _cancel.move(0, st::boxPadding.top() + _textHeight + st::boxPadding.bottom()); - } + _confirm.moveToRight(st::boxButtonPadding.right(), height() - st::boxButtonPadding.bottom() - _confirm.height(), width()); + _cancel.moveToRight(st::boxButtonPadding.right() + _confirm.width() + st::boxButtonPadding.left(), _confirm.y(), width()); } ConfirmLinkBox::ConfirmLinkBox(const QString &url) : ConfirmBox(lang(lng_open_this_link) + qsl("\n\n") + url, lang(lng_open_link)), _url(url) { @@ -198,16 +184,16 @@ void ConfirmLinkBox::onOpenLink() { App::wnd()->hideLayer(); } -MaxInviteBox::MaxInviteBox(const QString &link) : -_close(this, lang(lng_close), st::btnInfoClose), -_text(st::boxFont, lng_participant_invite_sorry(lt_count, QString::number(cMaxGroupCount())), _confirmBoxTextOptions), +MaxInviteBox::MaxInviteBox(const QString &link) : AbstractBox(st::boxWidth), +_close(this, lang(lng_box_ok), st::defaultBoxButton), +_text(st::boxTextFont, lng_participant_invite_sorry(lt_count, cMaxGroupCount()), _confirmBoxTextOptions, st::boxWidth - st::boxPadding.left() - st::boxPadding.right()), _link(link), _linkOver(false), a_goodOpacity(0, 0), a_good(animFunc(this, &MaxInviteBox::goodAnimStep)) { setMouseTracking(true); - _textWidth = st::boxWidth + 10 - st::boxPadding.left() - st::boxPadding.right(); - _textHeight = qMin(_text.countHeight(_textWidth), 16 * st::boxFont->height); - setMaxHeight(st::boxPadding.top() + _textHeight + st::newGroupLinkPadding.top() + st::newGroupLink.height + st::newGroupLinkPadding.bottom() + _close.height()); + _textWidth = st::boxWidth - st::boxPadding.left() - st::boxPadding.right(); + _textHeight = qMin(_text.countHeight(_textWidth), 16 * int(st::boxTextStyle.lineHeight)); + setMaxHeight(st::boxPadding.top() + _textHeight + st::newGroupLinkPadding.top() + st::newGroupLink.height + st::newGroupLinkPadding.bottom() + _close.height() + st::boxButtonPadding.bottom()); connect(&_close, SIGNAL(clicked()), this, SLOT(onClose())); @@ -269,9 +255,8 @@ void MaxInviteBox::paintEvent(QPaintEvent *e) { if (paint(p)) return; // draw box title / text - p.setFont(st::boxFont->f); p.setPen(st::black->p); - _text.drawElided(p, st::boxPadding.left(), st::boxPadding.top(), _textWidth, 16, (_text.maxWidth() < width()) ? style::al_center : style::al_left); + _text.drawElided(p, st::boxPadding.left(), st::boxPadding.top(), _textWidth, 16, style::al_left); QTextOption option(style::al_left); option.setWrapMode(QTextOption::WrapAnywhere); @@ -288,6 +273,6 @@ void MaxInviteBox::paintEvent(QPaintEvent *e) { } void MaxInviteBox::resizeEvent(QResizeEvent *e) { - _close.move(0, height() - _close.height()); + _close.moveToRight(st::boxButtonPadding.right(), height() - st::boxButtonPadding.bottom() - _close.height(), width()); _invitationLink = QRect(st::newGroupPadding.left(), st::boxPadding.top() + _textHeight + st::newGroupLinkPadding.top() + (st::newGroupLink.height / 2) - st::newGroupLinkFont->height, width() - st::newGroupPadding.left() - st::newGroupPadding.right(), 2 * st::newGroupLinkFont->height); } diff --git a/Telegram/SourceFiles/boxes/confirmbox.h b/Telegram/SourceFiles/boxes/confirmbox.h index c6f1e7b5e..1b56babf5 100644 --- a/Telegram/SourceFiles/boxes/confirmbox.h +++ b/Telegram/SourceFiles/boxes/confirmbox.h @@ -19,13 +19,13 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "abstractbox.h" +class InformBox; class ConfirmBox : public AbstractBox { Q_OBJECT public: - ConfirmBox(const QString &text, const QString &doneText = QString(), const QString &cancelText = QString(), const style::flatButton &doneStyle = st::btnSelectDone, const style::flatButton &cancelStyle = st::btnSelectCancel); - ConfirmBox(const QString &text, bool noDone, const QString &cancelText = QString()); + ConfirmBox(const QString &text, const QString &doneText = QString(), const style::BoxButton &doneStyle = st::defaultBoxButton, const QString &cancelText = QString(), const style::BoxButton &cancelStyle = st::cancelBoxButton); void keyPressEvent(QKeyEvent *e); void paintEvent(QPaintEvent *e); void resizeEvent(QResizeEvent *e); @@ -53,12 +53,13 @@ protected: private: + ConfirmBox(const QString &text, const QString &doneText, const style::BoxButton &doneStyle, bool informative); + friend class InformBox; + void init(const QString &text); - bool _infoMsg; + bool _informative; - FlatButton _confirm, _cancel; - BottomButton _close; Text _text; int32 _textWidth, _textHeight; @@ -66,6 +67,14 @@ private: QPoint _lastMousePos; TextLinkPtr _myLink; + + BoxButton _confirm, _cancel; +}; + +class InformBox : public ConfirmBox { +public: + InformBox(const QString &text, const QString &doneText = QString(), const style::BoxButton &doneStyle = st::defaultBoxButton) : ConfirmBox(text, doneText, doneStyle, true) { + } }; class ConfirmLinkBox : public ConfirmBox { @@ -108,7 +117,7 @@ private: void updateSelected(const QPoint &cursorGlobalPosition); bool goodAnimStep(float64 ms); - BottomButton _close; + BoxButton _close; Text _text; int32 _textWidth, _textHeight; diff --git a/Telegram/SourceFiles/boxes/connectionbox.cpp b/Telegram/SourceFiles/boxes/connectionbox.cpp index fca3a99e3..73690f8f3 100644 --- a/Telegram/SourceFiles/boxes/connectionbox.cpp +++ b/Telegram/SourceFiles/boxes/connectionbox.cpp @@ -69,7 +69,7 @@ void ConnectionBox::showAll() { _tcpProxyRadio.show(); _tryIPv6.show(); - int32 h = st::boxTitleHeight + st::connectionSkip + _autoRadio.height() + st::connectionSkip + _httpProxyRadio.height() + st::connectionSkip + _tcpProxyRadio.height() + st::connectionSkip + st::lineWidth + st::connectionSkip + _tryIPv6.height() + st::connectionSkip; + int32 h = st::old_boxTitleHeight + st::connectionSkip + _autoRadio.height() + st::connectionSkip + _httpProxyRadio.height() + st::connectionSkip + _tcpProxyRadio.height() + st::connectionSkip + st::lineWidth + st::connectionSkip + _tryIPv6.height() + st::connectionSkip; if (_httpProxyRadio.checked() || _tcpProxyRadio.checked()) { h += 2 * st::boxPadding.top() + 2 * _hostInput.height(); _hostInput.show(); @@ -113,7 +113,7 @@ void ConnectionBox::paintEvent(QPaintEvent *e) { } void ConnectionBox::resizeEvent(QResizeEvent *e) { - _autoRadio.move(st::boxPadding.left(), st::boxTitleHeight + st::connectionSkip); + _autoRadio.move(st::boxPadding.left(), st::old_boxTitleHeight + st::connectionSkip); _httpProxyRadio.move(st::boxPadding.left(), _autoRadio.y() + _autoRadio.height() + st::connectionSkip); int32 inputy = 0; diff --git a/Telegram/SourceFiles/boxes/contactsbox.cpp b/Telegram/SourceFiles/boxes/contactsbox.cpp index 7978ebd01..0e8aacce8 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.cpp +++ b/Telegram/SourceFiles/boxes/contactsbox.cpp @@ -322,15 +322,15 @@ void ContactsInner::paintDialog(Painter &p, PeerData *peer, ContactData *data, b if (uname && !data->inchat && !data->check && !_lastQuery.isEmpty() && peer->userName().startsWith(_lastQuery, Qt::CaseInsensitive)) { int32 availw = width() - (left + st::profileListPhotoSize + st::profileListPadding.width() * 2); QString first = '@' + peer->userName().mid(0, _lastQuery.size()), second = peer->userName().mid(_lastQuery.size()); - int32 w = st::profileSubFont->m.width(first); + int32 w = st::profileSubFont->width(first); if (w >= availw || second.isEmpty()) { p.setPen(st::profileOnlineColor->p); - p.drawText(left + st::profileListPhotoSize + st::profileListPadding.width(), st::profileListPadding.height() + st::profileListPhotoSize - st::profileListStatusBottom, st::profileSubFont->m.elidedText(first, Qt::ElideRight, availw)); + p.drawText(left + st::profileListPhotoSize + st::profileListPadding.width(), st::profileListPadding.height() + st::profileListPhotoSize - st::profileListStatusBottom, st::profileSubFont->elided(first, availw)); } else { p.setPen(st::profileOnlineColor->p); p.drawText(left + st::profileListPhotoSize + st::profileListPadding.width(), st::profileListPadding.height() + st::profileListPhotoSize - st::profileListStatusBottom, first); p.setPen(st::profileOfflineColor->p); - p.drawText(left + st::profileListPhotoSize + st::profileListPadding.width() + w, st::profileListPadding.height() + st::profileListPhotoSize - st::profileListStatusBottom, st::profileSubFont->m.elidedText(second, Qt::ElideRight, availw - w)); + p.drawText(left + st::profileListPhotoSize + st::profileListPadding.width() + w, st::profileListPadding.height() + st::profileListPhotoSize - st::profileListStatusBottom, st::profileSubFont->elided(second, availw - w)); } } else { if (data->inchat || data->check) { @@ -1300,7 +1300,7 @@ void ContactsBox::paintEvent(QPaintEvent *e) { if (!addingAdmin) { p.setPen(st::newGroupLimitFg); - p.drawTextLeft(st::boxTitlePos.x() + st::boxTitleFont->m.width(title) + st::addContactDelta, st::boxTitlePos.y(), width(), QString("%1 / %2").arg(_inner.selectedCount()).arg(cMaxGroupCount())); + p.drawTextLeft(st::old_boxTitlePos.x() + st::old_boxTitleFont->width(title) + st::addContactDelta, st::old_boxTitlePos.y(), width(), QString("%1 / %2").arg(_inner.selectedCount()).arg(cMaxGroupCount())); // paint button sep p.fillRect(st::btnSelectCancel.width, size().height() - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); @@ -1421,7 +1421,7 @@ bool ContactsBox::creationFail(const RPCError &error) { _filter.notaBene(); return true; } else if (error.type() == "PEER_FLOOD") { - App::wnd()->replaceLayer(new ConfirmBox(lng_cant_invite_not_contact(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))))); + App::wnd()->replaceLayer(new InformBox(lng_cant_invite_not_contact(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))))); return true; } return false; @@ -1430,7 +1430,7 @@ bool ContactsBox::creationFail(const RPCError &error) { MembersInner::MembersInner(ChannelData *channel, MembersFilter filter) : _channel(channel), _filter(filter), _kickText(lang(lng_profile_kick)), _time(0), -_kickWidth(st::normalFont->m.width(_kickText)), +_kickWidth(st::normalFont->width(_kickText)), _sel(-1), _kickSel(-1), _kickDown(-1), @@ -1667,6 +1667,7 @@ QMap MembersInner::already() const { } void MembersInner::clearSel() { + updateSelectedRow(); _sel = _kickSel = _kickDown = -1; _lastMousePos = QCursor::pos(); updateSel(); @@ -1938,8 +1939,7 @@ void MembersBox::onAdd() { } ContactsBox *box = new ContactsBox(_inner.channel(), _inner.filter(), _inner.already()); if (_inner.filter() == MembersFilterRecent) { - App::wnd()->hideLayer(true); - App::wnd()->showLayer(box, true); + App::wnd()->showLayer(box); } else { _addBox = box; connect(_addBox, SIGNAL(adminAdded()), this, SLOT(onAdminAdded())); @@ -1971,6 +1971,7 @@ void MembersBox::showAll() { } void MembersBox::showDone() { + _inner.clearSel(); setFocus(); } @@ -1978,7 +1979,7 @@ NewGroupBox::NewGroupBox() : AbstractBox(), _group(this, qsl("group_type"), 0, lang(lng_create_group_title), true), _channel(this, qsl("group_type"), 1, lang(lng_create_channel_title)), _aboutGroupWidth(width() - st::newGroupPadding.left() - st::newGroupPadding.right() - st::rbDefFlat.textLeft), -_aboutGroup(st::normalFont, lng_create_group_about(lt_count, QString::number(cMaxGroupCount())), _defaultOptions, _aboutGroupWidth), +_aboutGroup(st::normalFont, lng_create_group_about(lt_count, cMaxGroupCount()), _defaultOptions, _aboutGroupWidth), _aboutChannel(st::normalFont, lang(lng_create_channel_about), _defaultOptions, _aboutGroupWidth), _next(this, lang(lng_create_group_next), st::btnSelectDone), _cancel(this, lang(lng_cancel), st::btnSelectCancel) { @@ -2304,7 +2305,7 @@ bool GroupInfoBox::creationFail(const RPCError &error) { _name.notaBene(); return true; } else if (error.type() == "PEER_FLOOD") { - App::wnd()->replaceLayer(new ConfirmBox(lng_cant_invite_not_contact_channel(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))))); + App::wnd()->replaceLayer(new InformBox(lng_cant_invite_not_contact_channel(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))))); return true; } return false; @@ -2315,8 +2316,7 @@ void GroupInfoBox::exportDone(const MTPExportedChatInvite &result) { if (result.type() == mtpc_chatInviteExported) { _createdChannel->invitationUrl = qs(result.c_chatInviteExported().vlink); } - App::wnd()->hideLayer(true); - App::wnd()->showLayer(new SetupChannelBox(_createdChannel), true); + App::wnd()->showLayer(new SetupChannelBox(_createdChannel)); } void GroupInfoBox::onDescriptionResized() { @@ -2395,7 +2395,7 @@ a_goodOpacity(0, 0), a_good(animFunc(this, &SetupChannelBox::goodAnimStep)) { _checkRequestId = MTP::send(MTPchannels_CheckUsername(_channel->inputChannel, MTP_string("preston")), RPCDoneHandlerPtr(), rpcFail(&SetupChannelBox::onFirstCheckFail)); - _link.setTextMargin(style::margins(st::newGroupLink.textMrg.left() + st::newGroupLink.font->m.width(_linkPlaceholder), st::newGroupLink.textMrg.top(), st::newGroupLink.textMrg.right(), st::newGroupLink.textMrg.bottom())); + _link.setTextMargin(style::margins(st::newGroupLink.textMrg.left() + st::newGroupLink.font->width(_linkPlaceholder), st::newGroupLink.textMrg.top(), st::newGroupLink.textMrg.right(), st::newGroupLink.textMrg.bottom())); _aboutPublicHeight = _aboutPublic.countHeight(_aboutPublicWidth); setMaxHeight(st::newGroupPadding.top() + _public.height() + _aboutPublicHeight + st::newGroupSkip + _private.height() + _aboutPrivate.countHeight(_aboutPublicWidth)/* + st::newGroupSkip + _comments.height() + _aboutComments.countHeight(_aboutPublicWidth)*/ + st::newGroupPadding.bottom() + st::newGroupLinkPadding.top() + _link.height() + st::newGroupLinkPadding.bottom() + _save.height()); @@ -2569,7 +2569,7 @@ bool SetupChannelBox::goodAnimStep(float64 ms) { void SetupChannelBox::closePressed() { if (!_existing) { - App::wnd()->showLayer(new ContactsBox(_channel), true); + App::wnd()->showLayer(new ContactsBox(_channel)); } } @@ -2654,7 +2654,7 @@ void SetupChannelBox::onPrivacyChange() { if (_public.checked()) { if (_tooMuchUsernames) { _private.setChecked(true); - App::wnd()->replaceLayer(new ConfirmBox(lang(lng_channels_too_much_public), true)); + App::wnd()->replaceLayer(new InformBox(lang(lng_channels_too_much_public))); return; } _link.show(); @@ -2715,8 +2715,7 @@ bool SetupChannelBox::onCheckFail(const RPCError &error) { QString err(error.type()); if (err == "CHANNELS_ADMIN_PUBLIC_TOO_MUCH") { if (_existing) { - App::wnd()->hideLayer(true); - App::wnd()->showLayer(new ConfirmBox(lang(lng_channels_too_much_public_existing), true), true); + App::wnd()->showLayer(new InformBox(lang(lng_channels_too_much_public_existing))); } else { _tooMuchUsernames = true; _private.setChecked(true); @@ -2744,8 +2743,7 @@ bool SetupChannelBox::onFirstCheckFail(const RPCError &error) { QString err(error.type()); if (err == "CHANNELS_ADMIN_PUBLIC_TOO_MUCH") { if (_existing) { - App::wnd()->hideLayer(true); - App::wnd()->showLayer(new ConfirmBox(lang(lng_channels_too_much_public_existing), true), true); + App::wnd()->showLayer(new InformBox(lang(lng_channels_too_much_public_existing))); } else { _tooMuchUsernames = true; _private.setChecked(true); diff --git a/Telegram/SourceFiles/boxes/contactsbox.h b/Telegram/SourceFiles/boxes/contactsbox.h index 45e872bb8..c50827440 100644 --- a/Telegram/SourceFiles/boxes/contactsbox.h +++ b/Telegram/SourceFiles/boxes/contactsbox.h @@ -274,6 +274,7 @@ public: bool isLoaded() const { return !_loading; } + void clearSel(); QMap already() const; @@ -298,7 +299,6 @@ public slots: private: void updateSelectedRow(); - void clearSel(); MemberData *data(int32 index); void membersReceived(const MTPchannels_ChannelParticipants &result, mtpRequestId req); diff --git a/Telegram/SourceFiles/boxes/downloadpathbox.cpp b/Telegram/SourceFiles/boxes/downloadpathbox.cpp index eaff7eedd..9191b3535 100644 --- a/Telegram/SourceFiles/boxes/downloadpathbox.cpp +++ b/Telegram/SourceFiles/boxes/downloadpathbox.cpp @@ -70,7 +70,7 @@ void DownloadPathBox::showAll() { _saveButton.show(); _cancelButton.show(); - int32 h = st::boxTitleHeight + st::downloadSkip + _defaultRadio.height() + st::downloadSkip + _tempRadio.height() + st::downloadSkip + _dirRadio.height(); + int32 h = st::old_boxTitleHeight + st::downloadSkip + _defaultRadio.height() + st::downloadSkip + _tempRadio.height() + st::downloadSkip + _dirRadio.height(); if (_dirRadio.checked()) h += st::boxPadding.top() + _dirInput.height(); h += st::downloadSkip + _saveButton.height(); @@ -91,7 +91,7 @@ void DownloadPathBox::paintEvent(QPaintEvent *e) { } void DownloadPathBox::resizeEvent(QResizeEvent *e) { - _defaultRadio.move(st::boxPadding.left(), st::boxTitleHeight + st::downloadSkip); + _defaultRadio.move(st::boxPadding.left(), st::old_boxTitleHeight + st::downloadSkip); _tempRadio.move(st::boxPadding.left(), _defaultRadio.y() + _defaultRadio.height() + st::downloadSkip); _dirRadio.move(st::boxPadding.left(), _tempRadio.y() + _tempRadio.height() + st::downloadSkip); int32 inputy = _dirRadio.y() + _dirRadio.height() + st::boxPadding.top(); diff --git a/Telegram/SourceFiles/boxes/languagebox.cpp b/Telegram/SourceFiles/boxes/languagebox.cpp index 45e2b5fae..40648c0f4 100644 --- a/Telegram/SourceFiles/boxes/languagebox.cpp +++ b/Telegram/SourceFiles/boxes/languagebox.cpp @@ -32,7 +32,7 @@ _done(this, lang(lng_about_done), st::langsCloseButton) { bool haveTestLang = (cLang() == languageTest); - int32 y = st::boxTitleHeight + st::langsPadding.top(); + int32 y = st::old_boxTitleHeight + st::langsPadding.top(); _langs.reserve(languageCount + (haveTestLang ? 1 : 0)); if (haveTestLang) { _langs.push_back(new FlatRadiobutton(this, qsl("lang"), languageTest, qsl("Custom Lang"), (cLang() == languageTest), st::langButton)); @@ -54,7 +54,7 @@ _done(this, lang(lng_about_done), st::langsCloseButton) { connect(_langs.back(), SIGNAL(changed()), this, SLOT(onChange())); } - resizeMaxHeight(st::langsWidth, st::boxTitleHeight + st::langsPadding.top() + st::langsPadding.bottom() + (languageCount + (haveTestLang ? 1 : 0)) * (st::langPadding.top() + st::rbDefFlat.height + st::langPadding.bottom()) + _done.height()); + resizeMaxHeight(st::langsWidth, st::old_boxTitleHeight + st::langsPadding.top() + st::langsPadding.bottom() + (languageCount + (haveTestLang ? 1 : 0)) * (st::langPadding.top() + st::rbDefFlat.height + st::langPadding.bottom()) + _done.height()); connect(&_done, SIGNAL(clicked()), this, SLOT(onClose())); @@ -80,16 +80,16 @@ void LanguageBox::mousePressEvent(QMouseEvent *e) { for (int32 i = 1; i < languageCount; ++i) { LangLoaderPlain loader(qsl(":/langs/lang_") + LanguageCodes[i] + qsl(".strings"), LangLoaderRequest(lngkeys_cnt)); if (!loader.errors().isEmpty()) { - App::wnd()->showLayer(new ConfirmBox(qsl("Lang \"") + LanguageCodes[i] + qsl("\" error :(\n\nError: ") + loader.errors(), true, lang(lng_close))); + App::wnd()->showLayer(new InformBox(qsl("Lang \"") + LanguageCodes[i] + qsl("\" error :(\n\nError: ") + loader.errors())); return; } else if (!loader.warnings().isEmpty()) { QString warn = loader.warnings(); if (warn.size() > 256) warn = warn.mid(0, 254) + qsl(".."); - App::wnd()->showLayer(new ConfirmBox(qsl("Lang \"") + LanguageCodes[i] + qsl("\" warnings :(\n\nWarnings: ") + warn, true, lang(lng_close))); + App::wnd()->showLayer(new InformBox(qsl("Lang \"") + LanguageCodes[i] + qsl("\" warnings :(\n\nWarnings: ") + warn)); return; } } - App::wnd()->showLayer(new ConfirmBox(qsl("Everything seems great in all %1 languages!").arg(languageCount - 1), true, lang(lng_close))); + App::wnd()->showLayer(new InformBox(qsl("Everything seems great in all %1 languages!").arg(languageCount - 1))); } } @@ -112,16 +112,16 @@ void LanguageBox::onChange() { if (_langs[i]->checked() && langId != cLang()) { LangLoaderResult result; if (langId > 0) { - LangLoaderPlain loader(qsl(":/langs/lang_") + LanguageCodes[langId] + qsl(".strings"), LangLoaderRequest(lng_sure_save_language, lng_cancel, lng_continue)); + LangLoaderPlain loader(qsl(":/langs/lang_") + LanguageCodes[langId] + qsl(".strings"), LangLoaderRequest(lng_sure_save_language, lng_box_cancel, lng_box_ok)); result = loader.found(); } else if (langId == languageTest) { - LangLoaderPlain loader(cLangFile(), LangLoaderRequest(lng_sure_save_language, lng_cancel, lng_continue)); + LangLoaderPlain loader(cLangFile(), LangLoaderRequest(lng_sure_save_language, lng_box_cancel, lng_box_ok)); result = loader.found(); } QString text = result.value(lng_sure_save_language, langOriginal(lng_sure_save_language)), - save = result.value(lng_continue, langOriginal(lng_continue)), - cancel = result.value(lng_cancel, langOriginal(lng_cancel)); - ConfirmBox *box = new ConfirmBox(text, save, cancel); + save = result.value(lng_box_ok, langOriginal(lng_box_ok)), + cancel = result.value(lng_box_cancel, langOriginal(lng_box_cancel)); + ConfirmBox *box = new ConfirmBox(text, save, st::defaultBoxButton, cancel); connect(box, SIGNAL(confirmed()), this, SLOT(onSave())); connect(box, SIGNAL(closed()), this, SLOT(onRestore())); App::wnd()->replaceLayer(box); diff --git a/Telegram/SourceFiles/boxes/passcodebox.cpp b/Telegram/SourceFiles/boxes/passcodebox.cpp index 0dad83ccc..0d8e92036 100644 --- a/Telegram/SourceFiles/boxes/passcodebox.cpp +++ b/Telegram/SourceFiles/boxes/passcodebox.cpp @@ -25,8 +25,8 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "localstorage.h" PasscodeBox::PasscodeBox(bool turningOff) : _replacedBy(0), _turningOff(turningOff), _cloudPwd(false), -_setRequest(0), _hasRecovery(false), _aboutHeight(0), -_about(st::boxWidth - st::addContactPadding.left() - st::addContactPadding.right()), +_setRequest(0), _hasRecovery(false), _skipEmailWarning(false), _aboutHeight(0), +_about(st::boxWideWidth - st::addContactPadding.left() - st::addContactPadding.right()), _saveButton(this, lang(_turningOff ? lng_passcode_remove_button : lng_settings_save), st::btnSelectDone), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel), _oldPasscode(this, st::inpAddContact, lang(lng_passcode_enter_old)), @@ -40,8 +40,8 @@ _recover(this, lang(lng_signin_recover)) { } PasscodeBox::PasscodeBox(const QByteArray &newSalt, const QByteArray &curSalt, bool hasRecovery, const QString &hint, bool turningOff) : _replacedBy(0), _turningOff(turningOff), _cloudPwd(true), -_setRequest(0), _newSalt(newSalt), _curSalt(curSalt), _hasRecovery(hasRecovery), _hint(hint), _aboutHeight(0), -_about(st::boxWidth - st::addContactPadding.left() - st::addContactPadding.right()), +_setRequest(0), _newSalt(newSalt), _curSalt(curSalt), _hasRecovery(hasRecovery), _skipEmailWarning(false), _hint(hint), _aboutHeight(0), +_about(st::boxWideWidth - st::addContactPadding.left() - st::addContactPadding.right()), _saveButton(this, lang(_turningOff ? lng_passcode_remove_button : lng_settings_save), st::btnSelectDone), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel), _oldPasscode(this, st::inpAddContact, lang(lng_cloud_password_enter_old)), @@ -57,24 +57,24 @@ _recover(this, lang(lng_signin_recover)) { void PasscodeBox::init() { _about.setRichText(st::usernameFont, lang(_cloudPwd ? lng_cloud_password_about : lng_passcode_about)); if (!_hint.isEmpty()) _hintText.setText(st::usernameFont, lng_signin_hint(lt_password_hint, _hint)); - _aboutHeight = _about.countHeight(st::boxWidth - st::addContactPadding.left() - st::addContactPadding.right()); + _aboutHeight = _about.countHeight(st::boxWideWidth - st::addContactPadding.left() - st::addContactPadding.right()); _oldPasscode.setEchoMode(QLineEdit::Password); _newPasscode.setEchoMode(QLineEdit::Password); _reenterPasscode.setEchoMode(QLineEdit::Password); if (_turningOff) { _oldPasscode.show(); _boxTitle = lang(_cloudPwd ? lng_cloud_password_remove : lng_passcode_remove); - setMaxHeight(st::boxTitleHeight + st::addContactPadding.top() + 1 * _oldPasscode.height() + st::usernameSkip + _aboutHeight + (_hasRecovery ? ((st::usernameSkip + _recover.height()) / 2) : 0) + st::addContactPadding.bottom() + _saveButton.height()); + setMaxHeight(st::old_boxTitleHeight + st::addContactPadding.top() + 1 * _oldPasscode.height() + st::usernameSkip + _aboutHeight + (_hasRecovery ? ((st::usernameSkip + _recover.height()) / 2) : 0) + st::addContactPadding.bottom() + _saveButton.height()); } else { bool has = _cloudPwd ? (!_curSalt.isEmpty()) : cHasPasscode(); if (has) { _oldPasscode.show(); _boxTitle = lang(_cloudPwd ? lng_cloud_password_change : lng_passcode_change); - setMaxHeight(st::boxTitleHeight + st::addContactPadding.top() + 3 * _oldPasscode.height() + st::usernameSkip * 2 + 1 * st::addContactDelta + (_cloudPwd ? _passwordHint.height() + st::addContactDelta : 0) + _aboutHeight + (_hasRecovery ? ((st::usernameSkip + _recover.height()) / 2) : 0) + st::addContactPadding.bottom() + _saveButton.height()); + setMaxHeight(st::old_boxTitleHeight + st::addContactPadding.top() + 3 * _oldPasscode.height() + st::usernameSkip * 2 + 1 * st::addContactDelta + (_cloudPwd ? _passwordHint.height() + st::addContactDelta : 0) + _aboutHeight + (_hasRecovery ? ((st::usernameSkip + _recover.height()) / 2) : 0) + st::addContactPadding.bottom() + _saveButton.height()); } else { _oldPasscode.hide(); _boxTitle = lang(_cloudPwd ? lng_cloud_password_create : lng_passcode_create); - setMaxHeight(st::boxTitleHeight + st::addContactPadding.top() + 2 * _oldPasscode.height() + st::usernameSkip + 1 * st::addContactDelta + (_cloudPwd ? _passwordHint.height() + st::addContactDelta : 0) + _aboutHeight + (_cloudPwd ? st::addContactDelta + _recoverEmail.height() + st::usernameSkip : st::addContactPadding.bottom()) + _saveButton.height()); + setMaxHeight(st::old_boxTitleHeight + st::addContactPadding.top() + 2 * _oldPasscode.height() + st::usernameSkip + 1 * st::addContactDelta + (_cloudPwd ? _passwordHint.height() + st::addContactDelta : 0) + _aboutHeight + (_cloudPwd ? st::addContactDelta + _recoverEmail.height() + st::usernameSkip : st::addContactPadding.bottom()) + _saveButton.height()); } } @@ -220,7 +220,7 @@ void PasscodeBox::paintEvent(QPaintEvent *e) { void PasscodeBox::resizeEvent(QResizeEvent *e) { bool has = _cloudPwd ? (!_curSalt.isEmpty()) : cHasPasscode(); - _oldPasscode.setGeometry(st::addContactPadding.left(), st::boxTitleHeight + st::addContactPadding.top(), width() - st::addContactPadding.left() - st::addContactPadding.right(), _oldPasscode.height()); + _oldPasscode.setGeometry(st::addContactPadding.left(), st::old_boxTitleHeight + st::addContactPadding.top(), width() - st::addContactPadding.left() - st::addContactPadding.right(), _oldPasscode.height()); _newPasscode.setGeometry(st::addContactPadding.left(), _oldPasscode.y() + ((_turningOff || has) ? (_oldPasscode.height() + st::usernameSkip) : 0), _oldPasscode.width(), _oldPasscode.height()); _reenterPasscode.setGeometry(st::addContactPadding.left(), _newPasscode.y() + _newPasscode.height() + st::addContactDelta, _newPasscode.width(), _newPasscode.height()); _passwordHint.setGeometry(st::addContactPadding.left(), _reenterPasscode.y() + _reenterPasscode.height() + st::usernameSkip, _reenterPasscode.width(), _reenterPasscode.height()); @@ -241,18 +241,21 @@ void PasscodeBox::resizeEvent(QResizeEvent *e) { } void PasscodeBox::showDone() { - if (_oldPasscode.isHidden()) { + if (_skipEmailWarning && !_recoverEmail.isHidden()) { + _recoverEmail.setFocus(); + } else if (_oldPasscode.isHidden()) { _newPasscode.setFocus(); } else { _oldPasscode.setFocus(); } + _skipEmailWarning = false; } void PasscodeBox::setPasswordDone(const MTPBool &result) { _setRequest = 0; emit reloadPassword(); - ConfirmBox *box = new ConfirmBox(lang(_reenterPasscode.isHidden() ? lng_cloud_password_removed : (_oldPasscode.isHidden() ? lng_cloud_password_was_set : lng_cloud_password_updated)), true, lang(lng_about_done)); - App::wnd()->showLayer(box, true); + ConfirmBox *box = new InformBox(lang(_reenterPasscode.isHidden() ? lng_cloud_password_removed : (_oldPasscode.isHidden() ? lng_cloud_password_was_set : lng_cloud_password_updated))); + App::wnd()->showLayer(box); } bool PasscodeBox::setPasswordFail(const RPCError &error) { @@ -280,8 +283,7 @@ bool PasscodeBox::setPasswordFail(const RPCError &error) { _recoverEmail.notaBene(); update(); } else if (err == "EMAIL_UNCONFIRMED") { - ConfirmBox *box = new ConfirmBox(lang(lng_cloud_password_almost), true, lang(lng_about_done)); - App::wnd()->showLayer(box, true); + App::wnd()->showLayer(new InformBox(lang(lng_cloud_password_almost))); emit reloadPassword(); } else if (error.type().startsWith(qsl("FLOOD_WAIT_"))) { if (_oldPasscode.isHidden()) return false; @@ -349,7 +351,8 @@ void PasscodeBox::onSave(bool force) { return; } if (!_recoverEmail.isHidden() && email.isEmpty() && !force) { - _replacedBy = new ConfirmBox(lang(lng_cloud_password_about_recover)); + _skipEmailWarning = true; + _replacedBy = new ConfirmBox(lang(lng_cloud_password_about_recover), lang(lng_cloud_password_skip_email), st::attentionBoxButton); connect(_replacedBy, SIGNAL(confirmed()), this, SLOT(onForceNoMail())); connect(_replacedBy, SIGNAL(destroyed(QObject*)), this, SLOT(onBoxDestroyed(QObject*))); App::wnd()->replaceLayer(_replacedBy); @@ -459,11 +462,11 @@ bool PasscodeBox::recoverStartFail(const RPCError &error) { } RecoverBox::RecoverBox(const QString &pattern) : -_submitRequest(0), _pattern(st::usernameFont->m.elidedText(lng_signin_recover_hint(lt_recover_email, pattern), Qt::ElideRight, st::boxWidth - st::addContactPadding.left() - st::addContactPadding.right())), +_submitRequest(0), _pattern(st::usernameFont->elided(lng_signin_recover_hint(lt_recover_email, pattern), st::boxWideWidth - st::addContactPadding.left() - st::addContactPadding.right())), _saveButton(this, lang(lng_passcode_submit), st::btnSelectDone), _cancelButton(this, lang(lng_cancel), st::btnSelectCancel), _recoverCode(this, st::inpAddContact, lang(lng_signin_code)) { - setMaxHeight(st::boxTitleHeight + st::addContactPadding.top() + st::usernameSkip + _recoverCode.height() + st::usernameSkip + st::addContactPadding.bottom() + _saveButton.height()); + setMaxHeight(st::old_boxTitleHeight + st::addContactPadding.top() + st::usernameSkip + _recoverCode.height() + st::usernameSkip + st::addContactPadding.bottom() + _saveButton.height()); connect(&_saveButton, SIGNAL(clicked()), this, SLOT(onSubmit())); connect(&_cancelButton, SIGNAL(clicked()), this, SLOT(onClose())); @@ -521,7 +524,7 @@ void RecoverBox::paintEvent(QPaintEvent *e) { } void RecoverBox::resizeEvent(QResizeEvent *e) { - _recoverCode.setGeometry(st::addContactPadding.left(), st::boxTitleHeight + st::addContactPadding.top() + st::usernameSkip, width() - st::addContactPadding.left() - st::addContactPadding.right(), _recoverCode.height()); + _recoverCode.setGeometry(st::addContactPadding.left(), st::old_boxTitleHeight + st::addContactPadding.top() + st::usernameSkip, width() - st::addContactPadding.left() - st::addContactPadding.right(), _recoverCode.height()); int32 buttonTop = height() - _cancelButton.height(); _cancelButton.move(0, buttonTop); @@ -553,8 +556,7 @@ void RecoverBox::codeSubmitDone(bool recover, const MTPauth_Authorization &resul _submitRequest = 0; emit reloadPassword(); - ConfirmBox *box = new ConfirmBox(lang(lng_cloud_password_removed), true, lang(lng_about_done)); - App::wnd()->showLayer(box, true); + App::wnd()->showLayer(new InformBox(lang(lng_cloud_password_removed))); } bool RecoverBox::codeSubmitFail(const RPCError &error) { @@ -563,8 +565,7 @@ bool RecoverBox::codeSubmitFail(const RPCError &error) { const QString &err = error.type(); if (err == "PASSWORD_EMPTY") { emit reloadPassword(); - ConfirmBox *box = new ConfirmBox(lang(lng_cloud_password_removed), true, lang(lng_about_done)); - App::wnd()->showLayer(box, true); + App::wnd()->showLayer(new InformBox(lang(lng_cloud_password_removed))); return true; } else if (err == "PASSWORD_RECOVERY_NA") { onClose(); diff --git a/Telegram/SourceFiles/boxes/passcodebox.h b/Telegram/SourceFiles/boxes/passcodebox.h index efc167c7f..516728adf 100644 --- a/Telegram/SourceFiles/boxes/passcodebox.h +++ b/Telegram/SourceFiles/boxes/passcodebox.h @@ -69,7 +69,7 @@ private: mtpRequestId _setRequest; QByteArray _newSalt, _curSalt; - bool _hasRecovery; + bool _hasRecovery, _skipEmailWarning; QString _hint; int32 _aboutHeight; diff --git a/Telegram/SourceFiles/boxes/photocropbox.cpp b/Telegram/SourceFiles/boxes/photocropbox.cpp index c3f15771b..804bc5a64 100644 --- a/Telegram/SourceFiles/boxes/photocropbox.cpp +++ b/Telegram/SourceFiles/boxes/photocropbox.cpp @@ -43,7 +43,7 @@ PhotoCropBox::PhotoCropBox(const QImage &img, const PeerId &peer, bool upload) : connect(this, SIGNAL(ready(const QImage &)), this, SLOT(onReady(const QImage &))); } - int32 s = st::cropBoxWidth - st::boxPadding.left() - st::boxPadding.right(); + int32 s = st::boxWideWidth - st::boxPadding.left() - st::boxPadding.right(); _thumb = QPixmap::fromImage(img.scaled(s, s, Qt::KeepAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly); _thumbw = _thumb.width(); _thumbh = _thumb.height(); @@ -55,11 +55,11 @@ PhotoCropBox::PhotoCropBox(const QImage &img, const PeerId &peer, bool upload) : _cropx = (_thumbw - _cropw) / 2; _cropy = (_thumbh - _cropw) / 2; - _thumbx = (st::cropBoxWidth - _thumbw) / 2; + _thumbx = (st::boxWideWidth - _thumbw) / 2; _thumby = st::boxPadding.top() * 2 + st::boxFont->height; setMouseTracking(true); - resizeMaxHeight(st::cropBoxWidth, _thumbh + st::boxPadding.top() + st::boxFont->height + st::boxPadding.top() + st::boxPadding.bottom() + _sendButton.height()); + resizeMaxHeight(st::boxWideWidth, _thumbh + st::boxPadding.top() + st::boxFont->height + st::boxPadding.top() + st::boxPadding.bottom() + _sendButton.height()); } void PhotoCropBox::mousePressEvent(QMouseEvent *e) { diff --git a/Telegram/SourceFiles/boxes/photosendbox.cpp b/Telegram/SourceFiles/boxes/photosendbox.cpp index 7b4010c95..4389add89 100644 --- a/Telegram/SourceFiles/boxes/photosendbox.cpp +++ b/Telegram/SourceFiles/boxes/photosendbox.cpp @@ -59,7 +59,7 @@ PhotoSendBox::PhotoSendBox(const ReadyLocalMedia &img) : _img(new ReadyLocalMedi _thumbw = 10; } } - resizeMaxHeight(st::boxWidth, _thumbh + st::boxPadding.top() + st::boxFont->height + st::boxPadding.bottom() + st::boxPadding.bottom() + _compressed.height() + _sendButton.height()); + resizeMaxHeight(st::boxWideWidth, _thumbh + st::boxPadding.top() + st::boxFont->height + st::boxPadding.bottom() + st::boxPadding.bottom() + _compressed.height() + _sendButton.height()); _thumb = QPixmap::fromImage(_thumb.toImage().scaled(_thumbw * cIntRetinaFactor(), _thumbh * cIntRetinaFactor(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation), Qt::ColorOnly); _thumb.setDevicePixelRatio(cRetinaFactor()); @@ -84,12 +84,12 @@ PhotoSendBox::PhotoSendBox(const ReadyLocalMedia &img) : _img(new ReadyLocalMedi _thumb = QPixmap::fromImage(_thumb.toImage().scaledToWidth(_thumbw * cIntRetinaFactor(), Qt::SmoothTransformation), Qt::ColorOnly); _thumb.setDevicePixelRatio(cRetinaFactor()); } - resizeMaxHeight(st::boxWidth, st::boxPadding.top() + st::boxFont->height + st::boxPadding.bottom() + st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom() + st::boxPadding.bottom() + _sendButton.height()); + resizeMaxHeight(st::boxWideWidth, st::boxPadding.top() + st::boxFont->height + st::boxPadding.bottom() + st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom() + st::boxPadding.bottom() + _sendButton.height()); _name = _img->filename; - _namew = st::mediaFont->m.width(_name); + _namew = st::mediaFont->width(_name); _size = formatSizeText(_img->filesize); - _textw = qMax(_namew, st::mediaFont->m.width(_size)); + _textw = qMax(_namew, st::mediaFont->width(_size)); } prepare(); } @@ -106,11 +106,11 @@ _phone(phone), _fname(fname), _lname(lname), _replyTo(replyTo) { _compressed.hide(); _name = lng_full_name(lt_first_name, _fname, lt_last_name, _lname); - _namew = st::mediaFont->m.width(_name); + _namew = st::mediaFont->width(_name); _size = _phone; - _textw = qMax(_namew, st::mediaFont->m.width(_size)); + _textw = qMax(_namew, st::mediaFont->width(_size)); - resizeMaxHeight(st::boxWidth, st::boxPadding.top() + st::boxFont->height + st::boxPadding.bottom() + st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom() + st::boxPadding.bottom() + _sendButton.height()); + resizeMaxHeight(st::boxWideWidth, st::boxPadding.top() + st::boxFont->height + st::boxPadding.bottom() + st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom() + st::boxPadding.bottom() + _sendButton.height()); prepare(); } @@ -161,7 +161,7 @@ void PhotoSendBox::paintEvent(QPaintEvent *e) { p.setFont(st::mediaFont->f); p.setPen(st::black->c); if (twidth < _namew) { - p.drawText(x + tleft, y + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->m.elidedText(_name, Qt::ElideRight, twidth)); + p.drawText(x + tleft, y + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->elided(_name, twidth)); } else { p.drawText(x + tleft, y + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, _name); } diff --git a/Telegram/SourceFiles/boxes/sessionsbox.cpp b/Telegram/SourceFiles/boxes/sessionsbox.cpp index 2cf7fe6b1..2a1844d5d 100644 --- a/Telegram/SourceFiles/boxes/sessionsbox.cpp +++ b/Telegram/SourceFiles/boxes/sessionsbox.cpp @@ -69,7 +69,7 @@ void SessionsInner::onTerminate() { _terminating = i.key(); if (_terminateBox) _terminateBox->deleteLater(); - _terminateBox = new ConfirmBox(lang(lng_settings_reset_one_sure), lang(lng_settings_reset_button)); + _terminateBox = new ConfirmBox(lang(lng_settings_reset_one_sure), lang(lng_settings_reset_button), st::attentionBoxButton); connect(_terminateBox, SIGNAL(confirmed()), this, SLOT(onTerminateSure())); connect(_terminateBox, SIGNAL(destroyed(QObject*)), this, SLOT(onNoTerminateBox(QObject*))); App::wnd()->replaceLayer(_terminateBox); @@ -161,7 +161,7 @@ _terminateAll(this, lang(lng_sessions_terminate_all)), _terminateBox(0), _shortP connect(App::wnd(), SIGNAL(newAuthorization()), this, SLOT(onNewAuthorization())); connect(&_shortPollTimer, SIGNAL(timeout()), this, SLOT(onShortPollAuthorizations())); - init(&_inner, _done.height(), st::boxTitleHeight + st::sessionHeight + st::boxTitleHeight); + init(&_inner, _done.height(), st::old_boxTitleHeight + st::sessionHeight + st::old_boxTitleHeight); _inner.resize(width(), st::noContactsHeight); prepare(); @@ -173,7 +173,7 @@ _terminateAll(this, lang(lng_sessions_terminate_all)), _terminateBox(0), _shortP void SessionsBox::resizeEvent(QResizeEvent *e) { ScrollableBox::resizeEvent(e); _done.move(0, height() - _done.height()); - _terminateAll.moveToRight(st::sessionPadding.left(), st::boxTitleHeight + st::sessionHeight + st::boxTitlePos.y() + st::boxTitleFont->ascent - st::linkFont->ascent, width()); + _terminateAll.moveToRight(st::sessionPadding.left(), st::old_boxTitleHeight + st::sessionHeight + st::old_boxTitlePos.y() + st::old_boxTitleFont->ascent - st::linkFont->ascent, width()); } void SessionsBox::hideAll() { @@ -202,7 +202,7 @@ void SessionsBox::paintEvent(QPaintEvent *e) { if (paint(p)) return; paintTitle(p, lang(lng_sessions_header), true); - p.translate(0, st::boxTitleHeight); + p.translate(0, st::old_boxTitleHeight); if (_loading) { p.setFont(st::noContactsFont->f); @@ -231,10 +231,10 @@ void SessionsBox::paintEvent(QPaintEvent *e) { p.setFont(st::sessionInfoFont->f); p.setPen(st::sessionInfoColor->p); - p.drawText(QRect(st::sessionPadding.left(), st::boxTitleHeight + st::boxTitlePos.y(), width() - st::sessionPadding.left() - st::sessionPadding.right(), _scroll.height()), lang(lng_sessions_other_desc), style::al_topleft); + p.drawText(QRect(st::sessionPadding.left(), st::old_boxTitleHeight + st::old_boxTitlePos.y(), width() - st::sessionPadding.left() - st::sessionPadding.right(), _scroll.height()), lang(lng_sessions_other_desc), style::al_topleft); // paint shadow - p.fillRect(0, height() - st::sessionsCloseButton.height - st::scrollDef.bottomsh - st::sessionHeight - st::boxTitleHeight, width(), st::scrollDef.bottomsh, st::scrollDef.shColor->b); + p.fillRect(0, height() - st::sessionsCloseButton.height - st::scrollDef.bottomsh - st::sessionHeight - st::old_boxTitleHeight, width(), st::scrollDef.bottomsh, st::scrollDef.shColor->b); } else { paintTitle(p, lang(lng_sessions_other_header), false); } @@ -245,7 +245,7 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) { _loading = false; _shortPollRequest = 0; - int32 availCurrent = st::boxWidth - st::sessionPadding.left() - st::sessionTerminateSkip; + int32 availCurrent = st::boxWideWidth - st::sessionPadding.left() - st::sessionTerminateSkip; int32 availOther = availCurrent - st::sessionTerminate.iconPos.x();// -st::sessionTerminate.width - st::sessionTerminateSkip; _list.clear(); @@ -282,7 +282,7 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) { } data.name = appName; if (!appVer.isEmpty()) data.name += ' ' + appVer; - data.nameWidth = st::sessionNameFont->m.width(data.name); + data.nameWidth = st::sessionNameFont->width(data.name); QString country = qs(d.vcountry), platform = qs(d.vplatform); //CountriesByISO2::const_iterator j = countries.constFind(country); @@ -297,18 +297,18 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) { data.active = QString(); data.activeWidth = 0; if (data.nameWidth > availCurrent) { - data.name = st::sessionNameFont->m.elidedText(data.name, Qt::ElideRight, availCurrent); - data.nameWidth = st::sessionNameFont->m.width(data.name); + data.name = st::sessionNameFont->elided(data.name, availCurrent); + data.nameWidth = st::sessionNameFont->width(data.name); } - data.infoWidth = st::sessionInfoFont->m.width(data.info); + data.infoWidth = st::sessionInfoFont->width(data.info); if (data.infoWidth > availCurrent) { - data.info = st::sessionInfoFont->m.elidedText(data.info, Qt::ElideRight, availCurrent); - data.infoWidth = st::sessionInfoFont->m.width(data.info); + data.info = st::sessionInfoFont->elided(data.info, availCurrent); + data.infoWidth = st::sessionInfoFont->width(data.info); } - data.ipWidth = st::sessionInfoFont->m.width(data.ip); + data.ipWidth = st::sessionInfoFont->width(data.ip); if (data.ipWidth > availCurrent) { - data.ip = st::sessionInfoFont->m.elidedText(data.ip, Qt::ElideRight, availCurrent); - data.ipWidth = st::sessionInfoFont->m.width(data.ip); + data.ip = st::sessionInfoFont->elided(data.ip, availCurrent); + data.ipWidth = st::sessionInfoFont->width(data.ip); } _current = data; } else { @@ -322,21 +322,21 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) { } else { data.active = lastDate.toString(qsl("d.MM.yy")); } - data.activeWidth = st::sessionActiveFont->m.width(data.active); + data.activeWidth = st::sessionActiveFont->width(data.active); int32 availForName = availOther - st::sessionPadding.right() - data.activeWidth; if (data.nameWidth > availForName) { - data.name = st::sessionNameFont->m.elidedText(data.name, Qt::ElideRight, availForName); - data.nameWidth = st::sessionNameFont->m.width(data.name); + data.name = st::sessionNameFont->elided(data.name, availForName); + data.nameWidth = st::sessionNameFont->width(data.name); } - data.infoWidth = st::sessionInfoFont->m.width(data.info); + data.infoWidth = st::sessionInfoFont->width(data.info); if (data.infoWidth > availOther) { - data.info = st::sessionInfoFont->m.elidedText(data.info, Qt::ElideRight, availOther); - data.infoWidth = st::sessionInfoFont->m.width(data.info); + data.info = st::sessionInfoFont->elided(data.info, availOther); + data.infoWidth = st::sessionInfoFont->width(data.info); } - data.ipWidth = st::sessionInfoFont->m.width(data.ip); + data.ipWidth = st::sessionInfoFont->width(data.ip); if (data.ipWidth > availOther) { - data.ip = st::sessionInfoFont->m.elidedText(data.ip, Qt::ElideRight, availOther); - data.ipWidth = st::sessionInfoFont->m.width(data.ip); + data.ip = st::sessionInfoFont->elided(data.ip, availOther); + data.ipWidth = st::sessionInfoFont->width(data.ip); } _list.push_back(data); @@ -359,7 +359,7 @@ void SessionsBox::gotAuthorizations(const MTPaccount_Authorizations &result) { void SessionsBox::onTerminateAll() { if (_terminateBox) _terminateBox->deleteLater(); - _terminateBox = new ConfirmBox(lang(lng_settings_reset_sure), lang(lng_settings_reset_button)); + _terminateBox = new ConfirmBox(lang(lng_settings_reset_sure), lang(lng_settings_reset_button), st::attentionBoxButton); connect(_terminateBox, SIGNAL(confirmed()), this, SLOT(onTerminateAllSure())); connect(_terminateBox, SIGNAL(destroyed(QObject*)), this, SLOT(onNoTerminateBox(QObject*))); App::wnd()->replaceLayer(_terminateBox); diff --git a/Telegram/SourceFiles/boxes/stickersetbox.cpp b/Telegram/SourceFiles/boxes/stickersetbox.cpp index 5c05b7471..5a0350ff7 100644 --- a/Telegram/SourceFiles/boxes/stickersetbox.cpp +++ b/Telegram/SourceFiles/boxes/stickersetbox.cpp @@ -58,7 +58,7 @@ void StickerSetInner::gotSet(const MTPmessages_StickerSet &set) { if (d.vset.type() == mtpc_stickerSet) { const MTPDstickerSet &s(d.vset.c_stickerSet()); _setTitle = qs(s.vtitle); - _title = st::boxTitleFont->m.elidedText(_setTitle, Qt::ElideRight, width() - st::btnStickersClose.width - st::boxTitlePos.x()); + _title = st::old_boxTitleFont->elided(_setTitle, width() - st::btnStickersClose.width - st::old_boxTitlePos.x()); _setShortName = qs(s.vshort_name); _setId = s.vid.v; _setAccess = s.vaccess_hash.v; @@ -69,7 +69,7 @@ void StickerSetInner::gotSet(const MTPmessages_StickerSet &set) { } if (_pack.isEmpty()) { - App::wnd()->showLayer(new ConfirmBox(lang(lng_stickers_not_found), true), true); + App::wnd()->showLayer(new InformBox(lang(lng_stickers_not_found))); } else { int32 rows = _pack.size() / StickerPanPerRow + ((_pack.size() % StickerPanPerRow) ? 1 : 0); resize(st::stickersPadding + StickerPanPerRow * st::stickersSize.width(), rows * st::stickersSize.height() + st::stickersAddOrShare); @@ -87,7 +87,7 @@ bool StickerSetInner::failedSet(const RPCError &error) { _loaded = true; - App::wnd()->showLayer(new ConfirmBox(lang(lng_stickers_not_found), true), true); + App::wnd()->showLayer(new InformBox(lang(lng_stickers_not_found))); return true; } @@ -134,7 +134,7 @@ void StickerSetInner::installDone(const MTPBool &result) { bool StickerSetInner::installFailed(const RPCError &error) { if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; - App::wnd()->showLayer(new ConfirmBox(lang(lng_stickers_not_found), true), true); + App::wnd()->showLayer(new InformBox(lang(lng_stickers_not_found))); return true; } @@ -261,7 +261,7 @@ void StickerSetBox::onAddStickers() { void StickerSetBox::onShareStickers() { QString url = qsl("https://telegram.me/addstickers/") + _inner.shortName(); QApplication::clipboard()->setText(url); - App::wnd()->showLayer(new ConfirmBox(lang(lng_stickers_copied), true), true); + App::wnd()->showLayer(new InformBox(lang(lng_stickers_copied))); } void StickerSetBox::onUpdateButtons() { diff --git a/Telegram/SourceFiles/boxes/usernamebox.cpp b/Telegram/SourceFiles/boxes/usernamebox.cpp index 3e7815b39..2ecded476 100644 --- a/Telegram/SourceFiles/boxes/usernamebox.cpp +++ b/Telegram/SourceFiles/boxes/usernamebox.cpp @@ -27,14 +27,14 @@ UsernameBox::UsernameBox() : _saveButton(this, lang(lng_settings_save), st::usernameDone), _cancelButton(this, lang(lng_cancel), st::usernameCancel), _usernameInput(this, st::inpAddContact, qsl("@username"), App::self()->username), -_saveRequest(0), _checkRequest(0), _about(st::usernameWidth - 2 * st::boxTitlePos.x()) { +_saveRequest(0), _checkRequest(0), _about(st::usernameWidth - 2 * st::old_boxTitlePos.x()) { _about.setRichText(st::usernameFont, lang(lng_username_about)); _goodText = App::self()->username.isEmpty() ? QString() : lang(lng_username_available); initBox(); } void UsernameBox::initBox() { - resizeMaxHeight(st::usernameWidth, st::boxTitleHeight + st::addContactPadding.top() + _usernameInput.height() + st::addContactPadding.bottom() + _about.countHeight(st::usernameWidth - 2 * st::boxTitlePos.x()) + st::usernameSkip + _saveButton.height()); + resizeMaxHeight(st::usernameWidth, st::old_boxTitleHeight + st::addContactPadding.top() + _usernameInput.height() + st::addContactPadding.bottom() + _about.countHeight(st::usernameWidth - 2 * st::old_boxTitlePos.x()) + st::usernameSkip + _saveButton.height()); connect(&_saveButton, SIGNAL(clicked()), this, SLOT(onSave())); connect(&_cancelButton, SIGNAL(clicked()), this, SLOT(onClose())); @@ -85,20 +85,20 @@ void UsernameBox::paintEvent(QPaintEvent *e) { if (!_errorText.isEmpty()) { p.setPen(st::setErrColor->p); p.setFont(st::setErrFont->f); - int32 w = st::setErrFont->m.width(_errorText); + int32 w = st::setErrFont->width(_errorText); p.drawText((width() - w) / 2, _usernameInput.y() + _usernameInput.height() + ((st::usernameSkip - st::setErrFont->height) / 2) + st::setErrFont->ascent, _errorText); } else if (!_goodText.isEmpty()) { p.setPen(st::setGoodColor->p); p.setFont(st::setErrFont->f); - int32 w = st::setErrFont->m.width(_goodText); + int32 w = st::setErrFont->width(_goodText); p.drawText((width() - w) / 2, _usernameInput.y() + _usernameInput.height() + ((st::usernameSkip - st::setErrFont->height) / 2) + st::setErrFont->ascent, _goodText); } p.setPen(st::usernameColor->p); - _about.draw(p, st::boxTitlePos.x(), _usernameInput.y() + _usernameInput.height() + st::usernameSkip, width() - 2 * st::boxTitlePos.x()); + _about.draw(p, st::old_boxTitlePos.x(), _usernameInput.y() + _usernameInput.height() + st::usernameSkip, width() - 2 * st::old_boxTitlePos.x()); } void UsernameBox::resizeEvent(QResizeEvent *e) { - _usernameInput.setGeometry(st::addContactPadding.left(), st::boxTitleHeight + st::addContactPadding.top(), width() - st::addContactPadding.left() - st::addContactPadding.right(), _usernameInput.height()); + _usernameInput.setGeometry(st::addContactPadding.left(), st::old_boxTitleHeight + st::addContactPadding.top(), width() - st::addContactPadding.left() - st::addContactPadding.right(), _usernameInput.height()); int32 buttonTop = height() - _cancelButton.height(); _cancelButton.move(0, buttonTop); diff --git a/Telegram/SourceFiles/dialogswidget.cpp b/Telegram/SourceFiles/dialogswidget.cpp index 7bfe73c9b..04b16b533 100644 --- a/Telegram/SourceFiles/dialogswidget.cpp +++ b/Telegram/SourceFiles/dialogswidget.cpp @@ -115,13 +115,13 @@ void DialogsInner::paintRegion(Painter &p, const QRegion ®ion, bool paintingO } QString first = (_hashtagFilter.size() < 2) ? QString() : ('#' + hashtagResults.at(from).mid(0, _hashtagFilter.size() - 1)), second = (_hashtagFilter.size() < 2) ? ('#' + hashtagResults.at(from)) : hashtagResults.at(from).mid(_hashtagFilter.size() - 1); - int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second); + int32 firstwidth = st::mentionFont->width(first), secondwidth = st::mentionFont->width(second); if (htagwidth < firstwidth + secondwidth) { if (htagwidth < firstwidth + st::mentionFont->elidew) { - first = st::mentionFont->m.elidedText(first + second, Qt::ElideRight, htagwidth); + first = st::mentionFont->elided(first + second, htagwidth); second = QString(); } else { - second = st::mentionFont->m.elidedText(second, Qt::ElideRight, htagwidth - firstwidth); + second = st::mentionFont->elided(second, htagwidth - firstwidth); } } @@ -251,19 +251,19 @@ void DialogsInner::peopleResultPaint(PeerData *peer, Painter &p, int32 w, bool a QString username = peer->userName(); if (!act && username.toLower().startsWith(peopleQuery)) { QString first = '@' + username.mid(0, peopleQuery.size()), second = username.mid(peopleQuery.size()); - int32 w = st::dlgHistFont->m.width(first); + int32 w = st::dlgHistFont->width(first); if (w >= tr.width()) { p.setPen(st::dlgSystemColor->p); - p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->m.elidedText(first, Qt::ElideRight, tr.width())); + p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->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->m.elidedText(second, Qt::ElideRight, tr.width() - w)); + p.drawText(tr.left() + w, tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->elided(second, tr.width() - w)); } } else { p.setPen((act ? st::dlgActiveColor : st::dlgSystemColor)->p); - p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->m.elidedText('@' + username, Qt::ElideRight, tr.width())); + p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->elided('@' + username, tr.width())); } p.setPen((act ? st::dlgActiveColor : st::dlgNameColor)->p); @@ -293,7 +293,7 @@ void DialogsInner::searchInPeerPaint(Painter &p, int32 w, bool onlyBackground) c 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->m.elidedText(lang(lng_dlg_search_chat), Qt::ElideRight, tr.width())); + p.drawText(tr.left(), tr.top() + st::dlgHistFont->ascent, st::dlgHistFont->elided(lang(lng_dlg_search_chat), tr.width())); p.setPen(st::dlgNameColor->p); _searchInPeer->nameText.drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); @@ -484,7 +484,7 @@ void DialogsInner::dlgUpdated(DialogRow *row) { } } -void DialogsInner::dlgUpdated(History *history) { +void DialogsInner::dlgUpdated(History *history, MsgId msgId) { if (_state == DefaultState) { DialogRow *row = 0; DialogsList::RowByPeer::iterator i = dialogs.list.rowByPeer.find(history->peer->id); @@ -518,7 +518,7 @@ void DialogsInner::dlgUpdated(History *history) { if (!searchResults.isEmpty()) { int32 cnt = 0, add = searchedOffset(); for (SearchResults::const_iterator i = searchResults.cbegin(), e = searchResults.cend(); i != e; ++i) { - if ((*i)->_item->history() == history) { + if ((*i)->_item->history() == history && (*i)->_item->id == msgId) { update(0, add + cnt * st::dlgHeight, fullWidth(), st::dlgHeight); break; } @@ -1558,8 +1558,8 @@ void DialogsWidget::dlgUpdated(DialogRow *row) { _inner.dlgUpdated(row); } -void DialogsWidget::dlgUpdated(History *row) { - _inner.dlgUpdated(row); +void DialogsWidget::dlgUpdated(History *row, MsgId msgId) { + _inner.dlgUpdated(row, msgId); } void DialogsWidget::dialogsToUp() { diff --git a/Telegram/SourceFiles/dialogswidget.h b/Telegram/SourceFiles/dialogswidget.h index 5f55958af..321f3a898 100644 --- a/Telegram/SourceFiles/dialogswidget.h +++ b/Telegram/SourceFiles/dialogswidget.h @@ -57,7 +57,7 @@ public: void createDialog(History *history); void moveDialogToTop(const History::DialogLinks &links); void dlgUpdated(DialogRow *row); - void dlgUpdated(History *row); + void dlgUpdated(History *row, MsgId msgId); void removePeer(PeerData *peer); void removeContact(UserData *user); @@ -200,7 +200,7 @@ public: void loadDialogs(); void createDialog(History *history); void dlgUpdated(DialogRow *row); - void dlgUpdated(History *row); + void dlgUpdated(History *row, MsgId msgId); void dialogsToUp(); diff --git a/Telegram/SourceFiles/dropdown.cpp b/Telegram/SourceFiles/dropdown.cpp index de572f584..87d6a0034 100644 --- a/Telegram/SourceFiles/dropdown.cpp +++ b/Telegram/SourceFiles/dropdown.cpp @@ -1772,9 +1772,9 @@ void EmojiPanel::updateText() { } } else { QString switchText = lang((_setId != NoneStickerSetId) ? lng_switch_emoji : lng_switch_stickers); - availw -= st::emojiSwitchSkip + st::emojiPanHeaderFont->m.width(switchText); + availw -= st::emojiSwitchSkip + st::emojiPanHeaderFont->width(switchText); } - _text = st::emojiPanHeaderFont->m.elidedText(_fullText, Qt::ElideRight, availw); + _text = st::emojiPanHeaderFont->elided(_fullText, availw); update(); } @@ -1805,7 +1805,7 @@ void EmojiPanel::paintEvent(QPaintEvent *e) { EmojiSwitchButton::EmojiSwitchButton(QWidget *parent, bool toStickers) : Button(parent), _toStickers(toStickers), _text(lang(_toStickers ? lng_switch_stickers : lng_switch_emoji)), -_textWidth(st::emojiPanHeaderFont->m.width(_text)) { +_textWidth(st::emojiPanHeaderFont->width(_text)) { int32 w = st::emojiSwitchSkip + _textWidth + (st::emojiSwitchSkip - st::emojiSwitchImgSkip); setCursor(style::cur_pointer); resize(w, st::emojiPanHeader); @@ -2613,7 +2613,7 @@ void EmojiPan::onRemoveSet(quint64 setId) { StickerSets::const_iterator it = cStickerSets().constFind(setId); if (it != cStickerSets().cend() && !(it->flags & MTPDstickerSet_flag_official)) { _removingSetId = it->id; - ConfirmBox *box = new ConfirmBox(lng_stickers_remove_pack(lt_sticker_pack, it->title)); + ConfirmBox *box = new ConfirmBox(lng_stickers_remove_pack(lt_sticker_pack, it->title), lang(lng_box_remove)); connect(box, SIGNAL(confirmed()), this, SLOT(onRemoveSetSure())); connect(box, SIGNAL(destroyed(QObject*)), this, SLOT(onDelayedHide())); App::wnd()->showLayer(box); @@ -2662,7 +2662,7 @@ MentionsInner::MentionsInner(MentionsDropdown *parent, MentionRows *rows, Hashta void MentionsInner::paintEvent(QPaintEvent *e) { QPainter p(this); - int32 atwidth = st::mentionFont->m.width('@'), hashwidth = st::mentionFont->m.width('#'); + int32 atwidth = st::mentionFont->width('@'), hashwidth = st::mentionFont->width('#'); int32 mentionleft = 2 * st::mentionPadding.left() + st::mentionPhotoSize; int32 mentionwidth = width() - mentionleft - 2 * st::mentionPadding.right(); int32 htagleft = st::btnAttachPhoto.width + st::taMsgField.textMrg.left() - st::dlgShadow, htagwidth = width() - st::mentionPadding.right() - htagleft - st::mentionScroll.width; @@ -2683,19 +2683,19 @@ void MentionsInner::paintEvent(QPaintEvent *e) { if (!_rows->isEmpty()) { UserData *user = _rows->at(i); QString first = (_parent->filter().size() < 2) ? QString() : ('@' + user->username.mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('@' + user->username) : user->username.mid(_parent->filter().size() - 1); - int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second), unamewidth = firstwidth + secondwidth, namewidth = user->nameText.maxWidth(); + int32 firstwidth = st::mentionFont->width(first), secondwidth = st::mentionFont->width(second), unamewidth = firstwidth + secondwidth, namewidth = user->nameText.maxWidth(); if (mentionwidth < unamewidth + namewidth) { namewidth = (mentionwidth * namewidth) / (namewidth + unamewidth); unamewidth = mentionwidth - namewidth; if (firstwidth < unamewidth + st::mentionFont->elidew) { if (firstwidth < unamewidth) { - first = st::mentionFont->m.elidedText(first, Qt::ElideRight, unamewidth); + first = st::mentionFont->elided(first, unamewidth); } else if (!second.isEmpty()) { - first = st::mentionFont->m.elidedText(first + second, Qt::ElideRight, unamewidth); + first = st::mentionFont->elided(first + second, unamewidth); second = QString(); } } else { - second = st::mentionFont->m.elidedText(second, Qt::ElideRight, unamewidth - firstwidth); + second = st::mentionFont->elided(second, unamewidth - firstwidth); } } user->photo->load(); @@ -2712,13 +2712,13 @@ void MentionsInner::paintEvent(QPaintEvent *e) { } else if (!_hrows->isEmpty()) { QString hrow = _hrows->at(i); QString first = (_parent->filter().size() < 2) ? QString() : ('#' + hrow.mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('#' + hrow) : hrow.mid(_parent->filter().size() - 1); - int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second); + int32 firstwidth = st::mentionFont->width(first), secondwidth = st::mentionFont->width(second); if (htagwidth < firstwidth + secondwidth) { if (htagwidth < firstwidth + st::mentionFont->elidew) { - first = st::mentionFont->m.elidedText(first + second, Qt::ElideRight, htagwidth); + first = st::mentionFont->elided(first + second, htagwidth); second = QString(); } else { - second = st::mentionFont->m.elidedText(second, Qt::ElideRight, htagwidth - firstwidth); + second = st::mentionFont->elided(second, htagwidth - firstwidth); } } @@ -2747,13 +2747,13 @@ void MentionsInner::paintEvent(QPaintEvent *e) { int32 addleft = 0, widthleft = mentionwidth; QString first = (_parent->filter().size() < 2) ? QString() : ('/' + toHighlight.mid(0, _parent->filter().size() - 1)), second = (_parent->filter().size() < 2) ? ('/' + toHighlight) : toHighlight.mid(_parent->filter().size() - 1); - int32 firstwidth = st::mentionFont->m.width(first), secondwidth = st::mentionFont->m.width(second); + int32 firstwidth = st::mentionFont->width(first), secondwidth = st::mentionFont->width(second); if (widthleft < firstwidth + secondwidth) { if (widthleft < firstwidth + st::mentionFont->elidew) { - first = st::mentionFont->m.elidedText(first + second, Qt::ElideRight, widthleft); + first = st::mentionFont->elided(first + second, widthleft); second = QString(); } else { - second = st::mentionFont->m.elidedText(second, Qt::ElideRight, widthleft - firstwidth); + second = st::mentionFont->elided(second, widthleft - firstwidth); } } p.setFont(st::mentionFont->f); diff --git a/Telegram/SourceFiles/dropdown.h b/Telegram/SourceFiles/dropdown.h index e79ec8e0a..1f7de652a 100644 --- a/Telegram/SourceFiles/dropdown.h +++ b/Telegram/SourceFiles/dropdown.h @@ -431,8 +431,6 @@ private: }; class EmojiSwitchButton : public Button { - Q_OBJECT - public: EmojiSwitchButton(QWidget *parent, bool toStickers); // otherwise toEmoji diff --git a/Telegram/SourceFiles/gui/countryinput.cpp b/Telegram/SourceFiles/gui/countryinput.cpp index ec85de36e..a53d41041 100644 --- a/Telegram/SourceFiles/gui/countryinput.cpp +++ b/Telegram/SourceFiles/gui/countryinput.cpp @@ -199,7 +199,7 @@ void CountryInput::onFinishCountry() { } void CountryInput::setText(const QString &newText) { - _text = _st.font->m.elidedText(newText, Qt::ElideRight, width() - _st.textMrg.left() - _st.textMrg.right()); + _text = _st.font->elided(newText, width() - _st.textMrg.left() - _st.textMrg.right()); } CountryInput::~CountryInput() { @@ -315,7 +315,7 @@ void CountryList::paintEvent(QPaintEvent *e) { } p.setFont(_st.font->f); p.setPen(_st.color->p); - p.drawText(textRect, _st.font->m.elidedText(QString::fromUtf8((*countriesNow)[i]->name), Qt::ElideRight, width() - 2 * _st.margin - _st.codeWidth), QTextOption(style::al_left)); + p.drawText(textRect, _st.font->elided(QString::fromUtf8((*countriesNow)[i]->name), width() - 2 * _st.margin - _st.codeWidth), QTextOption(style::al_left)); p.setFont(_st.codeFont->f); p.setPen(_st.codeColor->p); p.drawText(textRect, QString("+") + (*countriesNow)[i]->code, QTextOption(style::al_right)); @@ -495,8 +495,8 @@ void CountrySelect::paintEvent(QPaintEvent *e) { // draw box title / text p.setPen(st::black->p); - p.setFont(st::boxTitleFont->f); - p.drawText(_innerLeft + st::boxTitlePos.x(), _innerTop + st::boxTitlePos.y() + st::boxTitleFont->ascent, lang(lng_country_select)); + p.setFont(st::old_boxTitleFont->f); + p.drawText(_innerLeft + st::old_boxTitlePos.x(), _innerTop + st::old_boxTitlePos.y() + st::old_boxTitleFont->ascent, lang(lng_country_select)); } } } diff --git a/Telegram/SourceFiles/gui/flatbutton.cpp b/Telegram/SourceFiles/gui/flatbutton.cpp index ac36eb12c..cfb058093 100644 --- a/Telegram/SourceFiles/gui/flatbutton.cpp +++ b/Telegram/SourceFiles/gui/flatbutton.cpp @@ -69,7 +69,7 @@ void FlatButton::setAutoFontSize(int32 padding, const QString &txt) { } int32 FlatButton::textWidth() const { - return _st.font->m.width(_text); + return _st.font->width(_text); } void FlatButton::resizeEvent(QResizeEvent *e) { @@ -77,7 +77,7 @@ void FlatButton::resizeEvent(QResizeEvent *e) { _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->m.width(_textForAutoSize) <= width()) { + if (2 * _autoFontPadding + _autoFont->width(_textForAutoSize) <= width()) { break; } } @@ -149,7 +149,7 @@ void BottomButton::paintEvent(QPaintEvent *e) { LinkButton::LinkButton(QWidget *parent, const QString &text, const style::linkButton &st) : Button(parent), _text(text), _st(st) { connect(this, SIGNAL(stateChanged(int, ButtonStateChangeSource)), this, SLOT(onStateChange(int, ButtonStateChangeSource))); - resize(_st.font->m.width(_text), _st.font->height); + resize(_st.font->width(_text), _st.font->height); setCursor(style::cur_pointer); } @@ -162,7 +162,7 @@ void LinkButton::paintEvent(QPaintEvent *e) { void LinkButton::setText(const QString &text) { _text = text; - resize(_st.font->m.width(_text), _st.font->height); + resize(_st.font->width(_text), _st.font->height); update(); } @@ -177,9 +177,9 @@ IconedButton::IconedButton(QWidget *parent, const style::iconedButton &st, const _text(text), _st(st), _width(_st.width), a_opacity(_st.opacity), a_bg(_st.bgColor->c), _opacity(1) { if (_width < 0) { - _width = _st.font->m.width(text) - _width; + _width = _st.font->width(text) - _width; } else if (!_width) { - _width = _st.font->m.width(text) + _st.height - _st.font->height; + _width = _st.font->width(text) + _st.height - _st.font->height; } connect(this, SIGNAL(stateChanged(int, ButtonStateChangeSource)), this, SLOT(onStateChange(int, ButtonStateChangeSource))); resize(_width, _st.height); @@ -195,9 +195,9 @@ void IconedButton::setText(const QString &text) { if (_text != text) { _text = text; if (_st.width < 0) { - _width = _st.font->m.width(text) - _st.width; + _width = _st.font->width(text) - _st.width; } else if (!_st.width) { - _width = _st.font->m.width(text) + _st.height - _st.font->height; + _width = _st.font->width(text) + _st.height - _st.font->height; } resize(_width, _st.height); update(); @@ -291,3 +291,70 @@ void MaskedButton::paintEvent(QPaintEvent *e) { p.drawPixmap(t, App::sprite(), i); } } + +BoxButton::BoxButton(QWidget *parent, const QString &text, const style::BoxButton &st) : Button(parent), +_text(text), _fullText(text), _textWidth(st.font->width(text)), +_st(st), +a_textBgOverOpacity(0), a_textFg(st.textFg->c), _a_over(animFunc(this, &BoxButton::animStep_over)) { + if (_st.width <= 0) { + resize(_textWidth - _st.width, _st.height); + } 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); + } + + connect(this, SIGNAL(stateChanged(int, ButtonStateChangeSource)), this, SLOT(onStateChange(int, ButtonStateChangeSource))); + + setCursor(style::cur_pointer); + + setAttribute(Qt::WA_OpaquePaintEvent); +} + +void BoxButton::paintEvent(QPaintEvent *e) { + Painter p(this); + + p.fillRect(rect(), _st.textBg->b); + + float64 o = a_textBgOverOpacity.current(); + if (o > 0) { + p.setOpacity(o); + App::roundRect(p, rect(), _st.textBgOver); + p.setOpacity(1); + p.setPen(a_textFg.current()); + } else { + p.setPen(_st.textFg); + } + p.setFont(_st.font); + p.drawText((width() - _textWidth) / 2, _st.textTop + _st.font->ascent, _text); +} + +bool BoxButton::animStep_over(float64 ms) { + float64 dt = ms / _st.duration; + bool res = true; + if (dt >= 1) { + a_textFg.finish(); + a_textBgOverOpacity.finish(); + res = false; + } else { + a_textFg.update(dt, anim::linear); + a_textBgOverOpacity.update(dt, anim::linear); + } + update(); + return res; +} + +void BoxButton::onStateChange(int oldState, ButtonStateChangeSource source) { + float64 textBgOverOpacity = (_state & StateOver) ? 1 : 0; + style::color textFg = (_state & StateOver) ? (_st.textFgOver) : _st.textFg; + + a_textBgOverOpacity.start(textBgOverOpacity); + a_textFg.start(textFg->c); + if (source == ButtonByUser || source == ButtonByPress) { + _a_over.stop(); + a_textBgOverOpacity.finish(); + a_textFg.finish(); + update(); + } else { + _a_over.start(); + } +} diff --git a/Telegram/SourceFiles/gui/flatbutton.h b/Telegram/SourceFiles/gui/flatbutton.h index 98779f4d4..de0b1b152 100644 --- a/Telegram/SourceFiles/gui/flatbutton.h +++ b/Telegram/SourceFiles/gui/flatbutton.h @@ -136,3 +136,30 @@ public: void paintEvent(QPaintEvent *e); }; + +class BoxButton : public Button { + Q_OBJECT + +public: + + BoxButton(QWidget *parent, const QString &text, const style::BoxButton &st); + + void paintEvent(QPaintEvent *e); + + bool animStep_over(float64 ms); + +public slots: + + void onStateChange(int oldState, ButtonStateChangeSource source); + +private: + + QString _text, _fullText; + int32 _textWidth; + + const style::BoxButton &_st; + + anim::fvalue a_textBgOverOpacity; + anim::cvalue a_textFg; + Animation _a_over; +}; diff --git a/Telegram/SourceFiles/gui/flatcheckbox.cpp b/Telegram/SourceFiles/gui/flatcheckbox.cpp index 9fbecbea9..9ea4601bd 100644 --- a/Telegram/SourceFiles/gui/flatcheckbox.cpp +++ b/Telegram/SourceFiles/gui/flatcheckbox.cpp @@ -27,7 +27,7 @@ FlatCheckbox::FlatCheckbox(QWidget *parent, const QString &text, bool checked, c connect(this, SIGNAL(stateChanged(int, ButtonStateChangeSource)), this, SLOT(onStateChange(int, ButtonStateChangeSource))); setCursor(_st.cursor); int32 w = _st.width, h = _st.height; - if (w <= 0) w = _st.textLeft + _st.font->m.width(_text) + 2; + if (w <= 0) w = _st.textLeft + _st.font->width(_text) + 2; if (h <= 0) h = qMax(_st.font->height, _st.imageRect.pxHeight()); resize(QSize(w, h)); } diff --git a/Telegram/SourceFiles/gui/flatinput.cpp b/Telegram/SourceFiles/gui/flatinput.cpp index 8a3a364c9..fd0ea5a00 100644 --- a/Telegram/SourceFiles/gui/flatinput.cpp +++ b/Telegram/SourceFiles/gui/flatinput.cpp @@ -191,8 +191,8 @@ void FlatInput::focusOutEvent(QFocusEvent *e) { void FlatInput::resizeEvent(QResizeEvent *e) { int32 availw = width() - _st.textMrg.left() - _st.textMrg.right() - _st.phPos.x() - 1; - if (_st.font->m.width(_fullph) > availw) { - _ph = _st.font->m.elidedText(_fullph, Qt::ElideRight, availw); + if (_st.font->width(_fullph) > availw) { + _ph = _st.font->elided(_fullph, availw); } else { _ph = _fullph; } @@ -455,7 +455,7 @@ _replacingEmojis(false) { _inner.setFont(_st->font->f); _inner.setAlignment(cRtl() ? Qt::AlignRight : Qt::AlignLeft); - _placeholder = _st->font->m.elidedText(_placeholderFull, Qt::ElideRight, width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 1); + _placeholder = _st->font->elided(_placeholderFull, width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 1); QPalette p(palette()); p.setColor(QPalette::Text, _st->textFg->c); @@ -1057,7 +1057,7 @@ void InputField::InputFieldInner::paintEvent(QPaintEvent *e) { } void InputField::resizeEvent(QResizeEvent *e) { - _placeholder = _st->font->m.elidedText(_placeholderFull, Qt::ElideRight, width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 1); + _placeholder = _st->font->elided(_placeholderFull, width() - _st->textMargins.left() - _st->textMargins.right() - _st->placeholderMargins.left() - _st->placeholderMargins.right() - 1); _inner.setGeometry(rect().marginsRemoved(_st->textMargins)); TWidget::resizeEvent(e); } diff --git a/Telegram/SourceFiles/gui/flattextarea.cpp b/Telegram/SourceFiles/gui/flattextarea.cpp index 0f0a215e5..de3512409 100644 --- a/Telegram/SourceFiles/gui/flattextarea.cpp +++ b/Telegram/SourceFiles/gui/flattextarea.cpp @@ -806,7 +806,7 @@ const QString &FlatTextarea::getLastText() const { void FlatTextarea::setPlaceholder(const QString &ph) { _ph = ph; - _phelided = _st.font->m.elidedText(_ph, Qt::ElideRight, width() - _st.textMrg.left() - _st.textMrg.right() - _st.phPos.x() - 1); + _phelided = _st.font->elided(_ph, width() - _st.textMrg.left() - _st.textMrg.right() - _st.phPos.x() - 1); if (_phVisible) update(); } @@ -893,7 +893,7 @@ void FlatTextarea::keyPressEvent(QKeyEvent *e) { } void FlatTextarea::resizeEvent(QResizeEvent *e) { - _phelided = _st.font->m.elidedText(_ph, Qt::ElideRight, width() - _st.textMrg.left() - _st.textMrg.right() - _st.phPos.x() - 1); + _phelided = _st.font->elided(_ph, width() - _st.textMrg.left() - _st.textMrg.right() - _st.phPos.x() - 1); QTextEdit::resizeEvent(e); checkContentHeight(); } diff --git a/Telegram/SourceFiles/gui/phoneinput.cpp b/Telegram/SourceFiles/gui/phoneinput.cpp index f49a5d26e..1b92f01c1 100644 --- a/Telegram/SourceFiles/gui/phoneinput.cpp +++ b/Telegram/SourceFiles/gui/phoneinput.cpp @@ -35,7 +35,7 @@ void PhoneInput::paintEvent(QPaintEvent *e) { if (!ph.isEmpty()) { p.setClipRect(rect()); QRect phRect(placeholderRect()); - int tw = phFont()->m.width(t); + int tw = phFont()->width(t); if (tw < phRect.width()) { phRect.setLeft(phRect.left() + tw); phPrepare(p); diff --git a/Telegram/SourceFiles/gui/style_core.cpp b/Telegram/SourceFiles/gui/style_core.cpp index 11ad9bf1c..354314c86 100644 --- a/Telegram/SourceFiles/gui/style_core.cpp +++ b/Telegram/SourceFiles/gui/style_core.cpp @@ -41,8 +41,8 @@ namespace style { height = m.height(); ascent = m.ascent(); descent = m.descent(); - spacew = m.width(QLatin1Char(' ')); - elidew = m.width(QLatin1Char('.')) * 3; + spacew = width(QLatin1Char(' ')); + elidew = width(QLatin1Char('.')) * 3; } Font FontData::bold(bool set) const { diff --git a/Telegram/SourceFiles/gui/style_core.h b/Telegram/SourceFiles/gui/style_core.h index 4421091f7..7256cc6c8 100644 --- a/Telegram/SourceFiles/gui/style_core.h +++ b/Telegram/SourceFiles/gui/style_core.h @@ -104,8 +104,17 @@ namespace style { class FontData { public: - int32 width(const QString &str, int32 from, int32 to) { - return m.width(str.mid(from, to)); + int32 width(const QString &str) const { + return m.width(str); + } + int32 width(const QString &str, int32 from, int32 to) const { + return width(str.mid(from, to)); + } + int32 width(QChar ch) const { + return m.width(ch); + } + QString elided(const QString &str, int32 width, Qt::TextElideMode mode = Qt::ElideRight) const { + return m.elidedText(str, mode, width); } Font bold(bool set = true) const; diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index 55b27fad0..f428fb6b6 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -330,7 +330,7 @@ public: } else { QUrl url(original), good(url.isValid() ? url.toEncoded() : ""); QString readable = good.isValid() ? good.toDisplayString() : original; - result = _t->_font->m.elidedText(readable, Qt::ElideRight, st::linkCropLimit); + result = _t->_font->elided(readable, st::linkCropLimit); fullDisplayed = (result == readable) ? 1 : 0; } } @@ -1569,7 +1569,7 @@ public: line.length = lineLength; eShapeLine(line); - int32 elideWidth = _f->m.width(_Elide); + int32 elideWidth = _f->width(_Elide); _wLeft = _w - elideWidth - _elideRemoveFromEnd; int firstItem = engine.findItem(line.from), lastItem = engine.findItem(line.from + line.length - 1); diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index c021b224c..dbc3cce8b 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -190,7 +190,7 @@ void DialogRow::paint(Painter &p, int32 w, bool act, bool sel, bool onlyBackgrou } else { dt = lastDate.toString(qsl("d.MM.yy")); } - int32 dtWidth = st::dlgDateFont->m.width(dt); + int32 dtWidth = st::dlgDateFont->width(dt); rectForName.setWidth(rectForName.width() - dtWidth - st::dlgDateSkip); p.setFont(st::dlgDateFont->f); p.setPen((act ? st::dlgActiveDateColor : st::dlgDateColor)->p); @@ -216,7 +216,7 @@ void DialogRow::paint(Painter &p, int32 w, bool act, bool sel, bool onlyBackgrou int32 lastWidth = namewidth, unread = history->unreadCount; if (unread) { QString unreadStr = QString::number(unread); - int32 unreadWidth = st::dlgUnreadFont->m.width(unreadStr); + int32 unreadWidth = st::dlgUnreadFont->width(unreadStr); int32 unreadRectWidth = unreadWidth + 2 * st::dlgUnreadPaddingHor; int32 unreadRectHeight = st::dlgUnreadFont->height + 2 * st::dlgUnreadPaddingVer; int32 unreadRectLeft = w - st::dlgPaddingHor - unreadRectWidth; @@ -274,7 +274,7 @@ void FakeDialogRow::paint(Painter &p, int32 w, bool act, bool sel, bool onlyBack } else { dt = lastDate.toString(qsl("d.MM.yy")); } - int32 dtWidth = st::dlgDateFont->m.width(dt); + int32 dtWidth = st::dlgDateFont->width(dt); rectForName.setWidth(rectForName.width() - dtWidth - st::dlgDateSkip); p.setFont(st::dlgDateFont->f); p.setPen((act ? st::dlgActiveDateColor : st::dlgDateColor)->p); @@ -395,6 +395,12 @@ bool History::updateTyping(uint64 ms, uint32 dots, bool force) { changed = true; } } + if (changed && App::main()) { + if (!dialogs.isEmpty()) App::main()->dlgUpdated(dialogs[0]); + if (App::main()->historyPeer() == peer) { + App::main()->topBar()->update(); + } + } return changed; } @@ -1291,10 +1297,7 @@ bool Histories::animStep(float64) { uint64 ms = getms(true); for (TypingHistories::iterator i = typing.begin(), e = typing.end(); i != e;) { uint32 typingFrame = (ms - i.value()) / 150; - if (i.key()->updateTyping(ms, typingFrame)) { - App::main()->dlgUpdated(i.key()); - App::main()->topBar()->update(); - } + i.key()->updateTyping(ms, typingFrame); if (i.key()->typing.isEmpty() && i.key()->sendActions.isEmpty()) { i = typing.erase(i); } else { @@ -1712,23 +1715,19 @@ HistoryItem *History::addNewItem(HistoryBlock *to, bool newBlock, HistoryItem *a } void History::unregTyping(UserData *from) { - bool update = false; uint64 updateAtMs = 0; TypingUsers::iterator i = typing.find(from); if (i != typing.end()) { updateAtMs = getms(true); i.value() = updateAtMs; - update = true; } SendActionUsers::iterator j = sendActions.find(from); if (j != sendActions.end()) { if (!updateAtMs) updateAtMs = getms(true); j.value().until = updateAtMs; - update = true; } if (updateAtMs) { updateTyping(updateAtMs, 0, true); - App::main()->topBar()->update(); } } @@ -2129,9 +2128,8 @@ MsgId History::inboxRead(MsgId upTo) { if (!upTo) upTo = msgIdForRead(); inboxReadBefore = qMax(inboxReadBefore, upTo + 1); - if (!dialogs.isEmpty()) { - if (App::main()) App::main()->dlgUpdated(dialogs[0]); - } + if (!dialogs.isEmpty() && App::main()) App::main()->dlgUpdated(dialogs[0]); + showFrom = 0; App::wnd()->notifyClear(this); clearNotifications(); @@ -2192,7 +2190,7 @@ void History::setUnreadCount(int32 newUnreadCount, bool psUpdate) { App::histories().unreadMuted += newMute ? unreadCount : (-unreadCount); mute = newMute; if (App::wnd()) App::wnd()->updateCounter(); - if (App::main()) App::main()->dlgUpdated(this); + if (!dialogs.isEmpty() && App::main()) App::main()->dlgUpdated(dialogs[0]); } } @@ -2709,6 +2707,11 @@ void HistoryItem::destroy() { if (history()->lastMsg == this) { history()->fixLastMessage(wasAtBottom); } + if (history()->lastKeyboardId == id) { + history()->lastKeyboardId = 0; + history()->lastKeyboardFrom = 0; + if (App::main()) App::main()->updateBotKeyboard(); + } HistoryMedia *m = getMedia(true); MediaOverviewType t = m ? mediaToOverviewType(m->type()) : OverviewCount; if (t != OverviewCount) { @@ -3170,9 +3173,9 @@ HistoryVideo::HistoryVideo(const MTPDvideo &video, const QString &caption, Histo _size = formatDurationAndSizeText(data->duration, data->size); if (!_openWithWidth) { - _downloadWidth = st::mediaSaveButton.font->m.width(lang(lng_media_download)); - _openWithWidth = st::mediaSaveButton.font->m.width(lang(lng_media_open_with)); - _cancelWidth = st::mediaSaveButton.font->m.width(lang(lng_media_cancel)); + _downloadWidth = st::mediaSaveButton.font->width(lang(lng_media_download)); + _openWithWidth = st::mediaSaveButton.font->width(lang(lng_media_open_with)); + _cancelWidth = st::mediaSaveButton.font->width(lang(lng_media_cancel)); _buttonWidth = (st::mediaSaveButton.width > 0) ? st::mediaSaveButton.width : ((_downloadWidth > _openWithWidth ? (_downloadWidth > _cancelWidth ? _downloadWidth : _cancelWidth) : _openWithWidth) - st::mediaSaveButton.width); } @@ -3479,7 +3482,7 @@ void HistoryVideo::draw(Painter &p, const HistoryItem *parent, bool selected, in int32 texty = skipy + st::mediaPadding.top() + st::mediaThumbSize - st::mediaDetailsShift - st::mediaFont->height; p.drawText(tleft, texty + st::mediaFont->ascent, statusText); if (parent->isMediaUnread()) { - int32 w = st::mediaFont->m.width(statusText); + int32 w = st::mediaFont->width(statusText); if (w + st::mediaUnreadSkip + st::mediaUnreadSize <= twidth) { p.setRenderHint(QPainter::HighQualityAntialiasing, true); p.setPen(Qt::NoPen); @@ -3551,9 +3554,9 @@ HistoryAudio::HistoryAudio(const MTPDaudio &audio) : HistoryMedia() _size = formatDurationAndSizeText(data->duration, data->size); if (!_openWithWidth) { - _downloadWidth = st::mediaSaveButton.font->m.width(lang(lng_media_download)); - _openWithWidth = st::mediaSaveButton.font->m.width(lang(lng_media_open_with)); - _cancelWidth = st::mediaSaveButton.font->m.width(lang(lng_media_cancel)); + _downloadWidth = st::mediaSaveButton.font->width(lang(lng_media_download)); + _openWithWidth = st::mediaSaveButton.font->width(lang(lng_media_open_with)); + _cancelWidth = st::mediaSaveButton.font->width(lang(lng_media_cancel)); _buttonWidth = (st::mediaSaveButton.width > 0) ? st::mediaSaveButton.width : ((_downloadWidth > _openWithWidth ? (_downloadWidth > _cancelWidth ? _downloadWidth : _cancelWidth) : _openWithWidth) - st::mediaSaveButton.width); } } @@ -3712,7 +3715,7 @@ void HistoryAudio::draw(Painter &p, const HistoryItem *parent, bool selected, in int32 texty = skipy + st::mediaPadding.top() + st::mediaThumbSize - st::mediaDetailsShift - st::mediaFont->height; p.drawText(tleft, texty + st::mediaFont->ascent, statusText); if (parent->isMediaUnread()) { - int32 w = st::mediaFont->m.width(statusText); + int32 w = st::mediaFont->width(statusText); if (w + st::mediaUnreadSkip + st::mediaUnreadSize <= twidth) { p.setRenderHint(QPainter::HighQualityAntialiasing, true); p.setPen(Qt::NoPen); @@ -3849,15 +3852,15 @@ HistoryDocument::HistoryDocument(DocumentData *document) : HistoryMedia() , _dldDone(0) , _uplDone(0) { - _namew = st::mediaFont->m.width(_name.isEmpty() ? qsl("Document") : _name); + _namew = st::mediaFont->width(_name.isEmpty() ? qsl("Document") : _name); _size = document->song() ? formatDurationAndSizeText(document->song()->duration, data->size) : formatSizeText(data->size); _height = _minh = st::mediaPadding.top() + st::mediaThumbSize + st::mediaPadding.bottom(); if (!_openWithWidth) { - _downloadWidth = st::mediaSaveButton.font->m.width(lang(lng_media_download)); - _openWithWidth = st::mediaSaveButton.font->m.width(lang(lng_media_open_with)); - _cancelWidth = st::mediaSaveButton.font->m.width(lang(lng_media_cancel)); + _downloadWidth = st::mediaSaveButton.font->width(lang(lng_media_download)); + _openWithWidth = st::mediaSaveButton.font->width(lang(lng_media_open_with)); + _cancelWidth = st::mediaSaveButton.font->width(lang(lng_media_cancel)); _buttonWidth = (st::mediaSaveButton.width > 0) ? st::mediaSaveButton.width : ((_downloadWidth > _openWithWidth ? (_downloadWidth > _cancelWidth ? _downloadWidth : _cancelWidth) : _openWithWidth) - st::mediaSaveButton.width); } @@ -4073,7 +4076,7 @@ void HistoryDocument::draw(Painter &p, const HistoryItem *parent, bool selected, p.setFont(st::mediaFont->f); p.setPen(st::black->c); if (twidth < _namew) { - p.drawText(tleft, skipy + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->m.elidedText(_name, Qt::ElideRight, twidth)); + p.drawText(tleft, skipy + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->elided(_name, twidth)); } else { p.drawText(tleft, skipy + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, _name); } @@ -4185,7 +4188,7 @@ void HistoryDocument::drawInPlaylist(Painter &p, const HistoryItem *parent, bool p.setFont(st::mediaFont->f); p.setPen(st::black->c); if (twidth < _namew) { - p.drawText(tleft, st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->m.elidedText(_name, Qt::ElideRight, twidth)); + p.drawText(tleft, st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->elided(_name, twidth)); } else { p.drawText(tleft, st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, _name); } @@ -4513,7 +4516,7 @@ HistoryContact::HistoryContact(int32 userId, const QString &first, const QString _maxw = st::mediaMaxWidth; name.setText(st::mediaFont, lng_full_name(lt_first_name, first, lt_last_name, last).trimmed(), _textNameOptions); - phonew = st::mediaFont->m.width(phone); + phonew = st::mediaFont->width(phone); if (contact) { contact->photo->load(); @@ -4530,7 +4533,7 @@ HistoryContact::HistoryContact(int32 userId, const QString &fullname, const QStr _maxw = st::mediaMaxWidth; name.setText(st::mediaFont, fullname.trimmed(), _textNameOptions); - phonew = st::mediaFont->m.width(phone); + phonew = st::mediaFont->width(phone); if (contact) { contact->photo->load(); @@ -4685,7 +4688,7 @@ void HistoryContact::draw(Painter &p, const HistoryItem *parent, bool selected, p.setFont(st::mediaFont->f); p.setPen(st::black->c); if (twidth < phonew) { - p.drawText(tleft, skipy + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->m.elidedText(phone, Qt::ElideRight, twidth)); + p.drawText(tleft, skipy + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->elided(phone, twidth)); } else { p.drawText(tleft, skipy + st::mediaPadding.top() + st::mediaNameTop + st::mediaFont->ascent, phone); } @@ -4734,7 +4737,7 @@ HistoryWebPage::HistoryWebPage(WebPageData *data) : HistoryMedia() void HistoryWebPage::initDimensions(const HistoryItem *parent) { if (data->pendingTill) { _maxw = _minh = _height = 0; - //_maxw = st::webPageLeft + st::linkFont->m.width(lang((data->pendingTill < 0) ? lng_attach_failed : lng_profile_loading)); + //_maxw = st::webPageLeft + st::linkFont->width(lang((data->pendingTill < 0) ? lng_attach_failed : lng_profile_loading)); //_minh = st::replyHeight; //_height = _minh; return; @@ -4796,7 +4799,7 @@ void HistoryWebPage::initDimensions(const HistoryItem *parent) { } _docName = documentName(data->doc); _docSize = data->doc->song() ? formatDurationAndSizeText(data->doc->song()->duration, data->doc->size) : formatSizeText(data->doc->size); - _docNameWidth = st::mediaFont->m.width(_docName.isEmpty() ? qsl("Document") : _docName); + _docNameWidth = st::mediaFont->width(_docName.isEmpty() ? qsl("Document") : _docName); if (parent == animated.msg) { _maxw = st::webPageLeft + (animated.w / cIntRetinaFactor()) + parent->skipBlockWidth(); @@ -4812,7 +4815,7 @@ void HistoryWebPage::initDimensions(const HistoryItem *parent) { } if (!data->siteName.isEmpty()) { - _siteNameWidth = st::webPageTitleFont->m.width(data->siteName); + _siteNameWidth = st::webPageTitleFont->width(data->siteName); if (_asArticle) { _maxw = qMax(_maxw, int32(st::webPageLeft + _siteNameWidth + st::webPagePhotoDelta + st::webPagePhotoSize)); } else { @@ -4854,7 +4857,7 @@ void HistoryWebPage::initDimensions(const HistoryItem *parent) { } if (data->type == WebPageVideo && data->duration) { _duration = formatDurationText(data->duration); - _durationWidth = st::msgDateFont->m.width(_duration); + _durationWidth = st::msgDateFont->width(_duration); } _height = _minh; } @@ -4924,7 +4927,7 @@ void HistoryWebPage::draw(Painter &p, const HistoryItem *parent, bool selected, } p.setFont(st::webPageTitleFont->f); p.setPen(semibold->p); - p.drawText(0, st::webPageTitleFont->ascent, (availw >= _siteNameWidth) ? data->siteName : st::webPageTitleFont->m.elidedText(data->siteName, Qt::ElideRight, availw)); + p.drawText(0, st::webPageTitleFont->ascent, (availw >= _siteNameWidth) ? data->siteName : st::webPageTitleFont->elided(data->siteName, availw)); p.translate(0, st::webPageTitleFont->height); --articleLines; } @@ -5103,7 +5106,7 @@ void HistoryWebPage::draw(Painter &p, const HistoryItem *parent, bool selected, p.setFont(st::mediaFont->f); p.setPen(st::black->c); if (twidth < _docNameWidth) { - p.drawText(tleft, st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->m.elidedText(_docName, Qt::ElideRight, twidth)); + p.drawText(tleft, st::mediaNameTop + st::mediaFont->ascent, st::mediaFont->elided(_docName, twidth)); } else { p.drawText(tleft, st::mediaNameTop + st::mediaFont->ascent, _docName); } @@ -5876,12 +5879,12 @@ void HistoryImageLink::draw(Painter &p, const HistoryItem *parent, bool selected p.setPen(st::msgDateImgColor->p); int32 titleWidth = width - 2 * st::msgDateImgPadding.x(); if (!data->duration.isEmpty()) { - int32 durationWidth = st::msgDateFont->m.width(data->duration); + int32 durationWidth = st::msgDateFont->width(data->duration); p.drawText(skipx + width - st::msgDateImgPadding.x() - durationWidth, skipy + st::msgDateImgPadding.y() + st::msgDateFont->ascent, data->duration); titleWidth -= durationWidth + st::msgDateImgPadding.x(); } if (!data->title.isEmpty()) { - p.drawText(skipx + st::msgDateImgPadding.x(), skipy + st::msgDateImgPadding.y() + st::msgDateFont->ascent, st::msgDateFont->m.elidedText(data->title, Qt::ElideRight, titleWidth)); + p.drawText(skipx + st::msgDateImgPadding.x(), skipy + st::msgDateImgPadding.y() + st::msgDateFont->ascent, st::msgDateFont->elided(data->title, titleWidth)); } } } @@ -6103,10 +6106,10 @@ QString formatViewsCount(int32 views) { void HistoryMessage::initTime() { _timeText = date.toString(cTimeFormat()); - _timeWidth = st::msgDateFont->m.width(_timeText); + _timeWidth = st::msgDateFont->width(_timeText); _viewsText = (_views >= 0) ? formatViewsCount(_views) : QString(); - _viewsWidth = _viewsText.isEmpty() ? 0 : st::msgDateFont->m.width(_viewsText); + _viewsWidth = _viewsText.isEmpty() ? 0 : st::msgDateFont->width(_viewsText); } void HistoryMessage::initMedia(const MTPMessageMedia *media, QString ¤tText) { @@ -6377,7 +6380,7 @@ void HistoryMessage::setViewsCount(int32 count) { int32 was = _viewsWidth; _views = count; _viewsText = (_views >= 0) ? formatViewsCount(_views) : QString(); - _viewsWidth = _viewsText.isEmpty() ? 0 : st::msgDateFont->m.width(_viewsText); + _viewsWidth = _viewsText.isEmpty() ? 0 : st::msgDateFont->width(_viewsText); if (was == _viewsWidth) { if (App::main()) App::main()->msgUpdated(history()->peer->id, this); } else { @@ -6738,7 +6741,7 @@ HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, const , fwdDate(::date(msg.vfwd_date)) , fwdFrom(App::peer(peerFromMTP(msg.vfwd_from_id))) , fwdFromVersion(fwdFrom->nameVersion) -, fromWidth(st::msgServiceFont->m.width(lang(lng_forwarded_from)) + st::msgServiceFont->spacew) +, fromWidth(st::msgServiceFont->width(lang(lng_forwarded_from)) + st::msgServiceFont->spacew) { fwdNameUpdated(); } @@ -6747,7 +6750,7 @@ HistoryForwarded::HistoryForwarded(History *history, HistoryBlock *block, MsgId , fwdDate(msg->dateForwarded()) , fwdFrom(msg->fromForwarded()) , fwdFromVersion(fwdFrom->nameVersion) -, fromWidth(st::msgServiceFont->m.width(lang(lng_forwarded_from)) + st::msgServiceFont->spacew) +, fromWidth(st::msgServiceFont->width(lang(lng_forwarded_from)) + st::msgServiceFont->spacew) { fwdNameUpdated(); } @@ -6793,7 +6796,7 @@ void HistoryForwarded::drawForwardedFrom(Painter &p, int32 x, int32 y, int32 w, p.setFont(serviceName->f); fwdFromName.drawElided(p, x + fromWidth, y, w - fromWidth); } else { - p.drawText(x, y + serviceFont->ascent, serviceFont->m.elidedText(lang(lng_forwarded_from), Qt::ElideRight, w)); + p.drawText(x, y + serviceFont->ascent, serviceFont->elided(lang(lng_forwarded_from), w)); } } @@ -6986,7 +6989,7 @@ QString HistoryReply::selectedText(uint32 selection) const { void HistoryReply::initDimensions() { if (!replyToMsg) { - _maxReplyWidth = st::msgReplyBarSkip + st::msgDateFont->m.width(lang(replyToMsgId ? lng_profile_loading : lng_deleted_message)) + st::msgPadding.left() + st::msgPadding.right(); + _maxReplyWidth = st::msgReplyBarSkip + st::msgDateFont->width(lang(replyToMsgId ? lng_profile_loading : lng_deleted_message)) + st::msgPadding.left() + st::msgPadding.right(); } HistoryMessage::initDimensions(); if (replyToMsg) { @@ -7117,7 +7120,7 @@ void HistoryReply::drawReplyTo(Painter &p, int32 x, int32 y, int32 w, bool selec } else { p.setPen(date->p); } - p.drawText(x + st::msgReplyBarSkip, y + st::msgReplyPadding.top() + (st::msgReplyBarSize.height() - st::msgDateFont->height) / 2 + st::msgDateFont->ascent, st::msgDateFont->m.elidedText(lang(replyToMsgId ? lng_profile_loading : lng_deleted_message), Qt::ElideRight, w - st::msgReplyBarSkip)); + p.drawText(x + st::msgReplyBarSkip, y + st::msgReplyPadding.top() + (st::msgReplyBarSize.height() - st::msgDateFont->height) / 2 + st::msgDateFont->ascent, st::msgDateFont->elided(lang(replyToMsgId ? lng_profile_loading : lng_deleted_message), w - st::msgReplyBarSkip)); } } } diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index f516c3231..3b65aa854 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -1104,7 +1104,7 @@ int32 HistoryInner::recountHeight(HistoryItem *resizedItem) { int32 tw = scrollArea->width() - st::msgMargin.left() - st::msgMargin.right(); if (tw > st::msgMaxWidth) tw = st::msgMaxWidth; tw -= st::msgPadding.left() + st::msgPadding.right(); - int32 mw = qMax(botInfo->text.maxWidth(), st::msgNameFont->m.width(lang(lng_bot_description))); + int32 mw = qMax(botInfo->text.maxWidth(), st::msgNameFont->width(lang(lng_bot_description))); if (tw > mw) tw = mw; botDescWidth = tw; @@ -1138,7 +1138,7 @@ void HistoryInner::updateBotInfo(bool recount) { int32 tw = scrollArea->width() - st::msgMargin.left() - st::msgMargin.right(); if (tw > st::msgMaxWidth) tw = st::msgMaxWidth; tw -= st::msgPadding.left() + st::msgPadding.right(); - int32 mw = qMax(botInfo->text.maxWidth(), st::msgNameFont->m.width(lang(lng_bot_description))); + int32 mw = qMax(botInfo->text.maxWidth(), st::msgNameFont->width(lang(lng_bot_description))); if (tw > mw) tw = mw; botDescWidth = tw; @@ -1837,7 +1837,8 @@ void BotKeyboard::mouseReleaseEvent(QMouseEvent *e) { updateSelected(); if (_sel == down && down >= 0) { int row = (down / MatrixRowShift), col = down % MatrixRowShift; - App::sendBotCommand(_btns.at(row).at(col).cmd, _wasForMsgId.msg); + QString cmd(_btns.at(row).at(col).cmd); + App::sendBotCommand(cmd, _wasForMsgId.msg); } } @@ -2032,11 +2033,10 @@ HistoryHider::HistoryHider(MainWidget *parent, bool forwardSelected) : QWidget(p , _sharedContact(0) , _forwardSelected(forwardSelected) , _sendPath(false) -, forwardButton(this, lang(lng_forward), st::btnSelectDone) -, cancelButton(this, lang(lng_cancel), st::btnSelectCancel) +, _send(this, lang(lng_forward_send), st::defaultBoxButton) +, _cancel(this, lang(lng_box_cancel), st::cancelBoxButton) , offered(0) -, aOpacity(0, 1) -, aOpacityFunc(anim::easeOutCirc) +, a_opacity(0, 1) , hiding(false) , _forwardRequest(0) , toTextWidth(0) @@ -2049,11 +2049,10 @@ HistoryHider::HistoryHider(MainWidget *parent, UserData *sharedContact) : QWidge , _sharedContact(sharedContact) , _forwardSelected(false) , _sendPath(false) -, forwardButton(this, lang(lng_forward_send), st::btnSelectDone) -, cancelButton(this, lang(lng_cancel), st::btnSelectCancel) +, _send(this, lang(lng_forward_send), st::defaultBoxButton) +, _cancel(this, lang(lng_box_cancel), st::cancelBoxButton) , offered(0) -, aOpacity(0, 1) -, aOpacityFunc(anim::easeOutCirc) +, a_opacity(0, 1) , hiding(false) , _forwardRequest(0) , toTextWidth(0) @@ -2066,11 +2065,10 @@ HistoryHider::HistoryHider(MainWidget *parent) : QWidget(parent) , _sharedContact(0) , _forwardSelected(false) , _sendPath(true) -, forwardButton(this, lang(lng_forward_send), st::btnSelectDone) -, cancelButton(this, lang(lng_cancel), st::btnSelectCancel) +, _send(this, lang(lng_forward_send), st::defaultBoxButton) +, _cancel(this, lang(lng_box_cancel), st::cancelBoxButton) , offered(0) -, aOpacity(0, 1) -, aOpacityFunc(anim::easeOutCirc) +, a_opacity(0, 1) , hiding(false) , _forwardRequest(0) , toTextWidth(0) @@ -2080,11 +2078,11 @@ HistoryHider::HistoryHider(MainWidget *parent) : QWidget(parent) } void HistoryHider::init() { - connect(&forwardButton, SIGNAL(clicked()), this, SLOT(forward())); - connect(&cancelButton, SIGNAL(clicked()), this, SLOT(startHide())); + connect(&_send, SIGNAL(clicked()), this, SLOT(forward())); + connect(&_cancel, SIGNAL(clicked()), this, SLOT(startHide())); connect(App::wnd()->getTitle(), SIGNAL(hiderClicked()), this, SLOT(startHide())); - _chooseWidth = st::forwardFont->m.width(lang(lng_forward_choose)); + _chooseWidth = st::forwardFont->width(lang(lng_forward_choose)); resizeEvent(0); anim::start(this); @@ -2094,17 +2092,15 @@ bool HistoryHider::animStep(float64 ms) { float64 dt = ms / 200; bool res = true; if (dt >= 1) { - aOpacity.finish(); + a_opacity.finish(); if (hiding) { QTimer::singleShot(0, this, SLOT(deleteLater())); } res = false; } else { - aOpacity.update(dt, aOpacityFunc); + a_opacity.update(dt, anim::linear); } - App::wnd()->getTitle()->setHideLevel(aOpacity.current()); - forwardButton.setOpacity(aOpacity.current()); - cancelButton.setOpacity(aOpacity.current()); + App::wnd()->getTitle()->setHideLevel(a_opacity.current()); update(); return res; } @@ -2116,9 +2112,9 @@ bool HistoryHider::withConfirm() const { void HistoryHider::paintEvent(QPaintEvent *e) { Painter p(this); if (!hiding || !cacheForAnim.isNull() || !offered) { - p.setOpacity(aOpacity.current() * st::layerAlpha); - p.fillRect(0, st::titleShadow, width(), height() - st::titleShadow, st::layerBG->b); - p.setOpacity(aOpacity.current()); + p.setOpacity(a_opacity.current() * st::layerAlpha); + p.fillRect(rect(), st::layerBG->b); + p.setOpacity(a_opacity.current()); } if (cacheForAnim.isNull() || !offered) { p.setFont(st::forwardFont->f); @@ -2128,14 +2124,8 @@ void HistoryHider::paintEvent(QPaintEvent *e) { // fill bg p.fillRect(box, st::boxBG->b); - // paint shadows - p.fillRect(box.x(), box.y() + box.height() - st::btnSelectCancel.height - st::scrollDef.bottomsh, box.width(), st::scrollDef.bottomsh, st::scrollDef.shColor->b); - - // paint button sep - p.fillRect(box.x() + st::btnSelectCancel.width, box.y() + box.height() - st::btnSelectCancel.height, st::lineWidth, st::btnSelectCancel.height, st::btnSelectSep->b); - p.setPen(st::black->p); - toText.drawElided(p, box.left() + (box.width() - toTextWidth) / 2, box.top() + st::boxPadding.top(), toTextWidth + 1); + toText.drawElided(p, box.left() + st::boxPadding.left(), box.top() + st::boxPadding.top(), toTextWidth + 2); } else { int32 w = st::forwardMargins.left() + _chooseWidth + st::forwardMargins.right(), h = st::forwardMargins.top() + st::forwardFont->height + st::forwardMargins.bottom(); App::roundRect(p, (width() - w) / 2, (height() - h) / 2, w, h, st::forwardBg, ForwardCorners); @@ -2179,7 +2169,9 @@ void HistoryHider::startHide() { if (cWideMode()) { if (offered) cacheForAnim = myGrab(this, box); if (_forwardRequest) MTP::cancel(_forwardRequest); - aOpacity.start(0); + a_opacity.start(0); + _send.hide(); + _cancel.hide(); anim::start(this); } else { QTimer::singleShot(0, this, SLOT(deleteLater())); @@ -2209,24 +2201,27 @@ MainWidget *HistoryHider::parent() { } void HistoryHider::resizeEvent(QResizeEvent *e) { - int32 w = st::forwardWidth, h = st::boxPadding.top() + st::forwardFont->height + st::boxPadding.bottom(); + int32 w = st::boxWidth, h = st::boxPadding.top() + st::boxPadding.bottom(); if (offered) { - forwardButton.show(); - cancelButton.show(); - h += forwardButton.height() + st::scrollDef.bottomsh; + if (!hiding) { + _send.show(); + _cancel.show(); + } + h += st::boxTextFont->height + st::boxButtonPadding.top() + _send.height() + st::boxButtonPadding.bottom(); } else { - forwardButton.hide(); - cancelButton.hide(); + h += st::forwardFont->height; + _send.hide(); + _cancel.hide(); } box = QRect((width() - w) / 2, (height() - h) / 2, w, h); - cancelButton.move(box.x(), box.y() + h - cancelButton.height()); - forwardButton.move(box.x() + box.width() - forwardButton.width(), cancelButton.y()); + _send.moveToRight(width() - (box.x() + box.width()) + st::boxButtonPadding.right(), box.y() + h - st::boxButtonPadding.bottom() - _send.height(), width()); + _cancel.moveToRight(width() - (box.x() + box.width()) + st::boxButtonPadding.right() + _send.width() + st::boxButtonPadding.left(), _send.y(), width()); } bool HistoryHider::offerPeer(PeerId peer) { if (!peer) { offered = 0; - toText.setText(st::boxFont, QString()); + toText.setText(st::boxTextFont, QString()); toTextWidth = 0; resizeEvent(0); return false; @@ -2255,7 +2250,7 @@ bool HistoryHider::offerPeer(PeerId peer) { return false; } - toText.setText(st::boxFont, phrase, _textNameOptions); + toText.setText(st::boxTextFont, phrase, _textNameOptions); toTextWidth = toText.maxWidth(); if (toTextWidth > box.width() - st::boxPadding.left() - st::boxPadding.right()) { toTextWidth = box.width() - st::boxPadding.left() - st::boxPadding.right(); @@ -2342,7 +2337,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : TWidget(parent) , _recording(false), _inRecord(false), _inField(false), _inReply(false) , a_recordingLevel(0, 0), _recordingSamples(0) , a_recordOver(0, 0), a_recordDown(0, 0), a_recordCancel(st::recordCancel->c, st::recordCancel->c) -, _recordCancelWidth(st::recordFont->m.width(lang(lng_record_cancel))) +, _recordCancelWidth(st::recordFont->width(lang(lng_record_cancel))) , _kbShown(false) , _kbWasHidden(false) , _kbReplyTo(0) @@ -2842,7 +2837,7 @@ void HistoryWidget::fastShowAtEnd(History *h) { clearAllLoadRequests(); - _showAtMsgId = ShowAtTheEndMsgId; + setMsgId(ShowAtUnreadMsgId); _histInited = false; if (h->isReadyFor(_showAtMsgId, _fixedInScrollMsgId, _fixedInScrollMsgTop)) { @@ -2854,6 +2849,9 @@ void HistoryWidget::fastShowAtEnd(History *h) { } void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { + MsgId wasMsgId = _showAtMsgId; + History *wasHistory = _history; + if (_history) { if (_peer->id == peerId) { _history->lastWidth = 0; @@ -2881,7 +2879,9 @@ void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { historyLoaded(); } - emit peerShown(_peer); + App::main()->dlgUpdated(wasHistory, wasMsgId); + emit historyShown(_history, _showAtMsgId); + App::main()->topBar()->update(); update(); return; @@ -2915,8 +2915,6 @@ void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { if (_history->unreadBar) { _history->unreadBar->destroy(); } - - App::main()->dlgUpdated(_history); _history = 0; } @@ -2994,9 +2992,6 @@ void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { firstLoadMessages(); doneShow(); } - if (_history) { - App::main()->dlgUpdated(_history); - } App::main()->peerUpdated(_peer); @@ -3038,7 +3033,9 @@ void HistoryWidget::showPeerHistory(const PeerId &peerId, MsgId showAtMsgId) { if (App::wnd()) App::wnd()->setInnerFocus(); - emit peerShown(_peer); + App::main()->dlgUpdated(wasHistory, wasMsgId); + emit historyShown(_history, _showAtMsgId); + App::main()->topBar()->update(); update(); } @@ -3422,7 +3419,7 @@ bool HistoryWidget::messagesFailed(const RPCError &error, mtpRequestId requestId if (error.type() == qstr("CHANNEL_PRIVATE")) { App::main()->showDialogs(); - App::wnd()->showLayer(new ConfirmBox(lang(lng_channel_not_accessible), true)); + App::wnd()->showLayer(new InformBox(lang(lng_channel_not_accessible))); return true; } @@ -3541,7 +3538,8 @@ void HistoryWidget::messagesReceived(PeerData *peer, const MTPmessages_Messages calcNextReplyReturn(); } - _showAtMsgId = _delayedShowAtMsgId; + setMsgId(_delayedShowAtMsgId); + _histInited = false; if (_history->isChannel() && wasOnlyImportant != _history->asChannelHistory()->onlyImportant()) { @@ -3877,7 +3875,7 @@ bool HistoryWidget::joinFail(const RPCError &error, mtpRequestId req) { if (_unblockRequest == req) _unblockRequest = 0; if (error.type() == qstr("CHANNEL_PRIVATE")) { - App::wnd()->showLayer(new ConfirmBox(lang(lng_channel_not_accessible), true)); + App::wnd()->showLayer(new InformBox(lang(lng_channel_not_accessible))); return true; } return false; @@ -3943,10 +3941,23 @@ void HistoryWidget::onSendPaths(const PeerId &peer) { uploadMedias(cSendPaths(), ToPrepareDocument); } +History *HistoryWidget::history() const { + return _history; +} + PeerData *HistoryWidget::peer() const { return _peer; } +void HistoryWidget::setMsgId(MsgId showAtMsgId) { // sometimes _showAtMsgId is set directly + if (_showAtMsgId != showAtMsgId) { + MsgId wasMsgId = _showAtMsgId; + _showAtMsgId = showAtMsgId; + App::main()->dlgUpdated(_history, wasMsgId); + emit historyShown(_history, _showAtMsgId); + } +} + MsgId HistoryWidget::msgId() const { return _showAtMsgId; } @@ -4637,7 +4648,7 @@ void HistoryWidget::updateOnlineDisplay(int32 x, int32 w) { } if (_titlePeerText != text) { _titlePeerText = text; - _titlePeerTextWidth = st::dlgHistFont->m.width(_titlePeerText); + _titlePeerTextWidth = st::dlgHistFont->width(_titlePeerText); if (App::main()) { App::main()->topBar()->update(); } @@ -5078,7 +5089,7 @@ void HistoryWidget::onAudioFailed(const FullMsgId &newId) { } void HistoryWidget::onReportSpamClicked() { - ConfirmBox *box = new ConfirmBox(lang(_peer->isUser() ? lng_report_spam_sure : (_peer->isChat() ? lng_report_spam_sure_group : lng_report_spam_sure_channel)), lang(lng_report_spam_ok)); + ConfirmBox *box = new ConfirmBox(lang(_peer->isUser() ? lng_report_spam_sure : (_peer->isChat() ? lng_report_spam_sure_group : lng_report_spam_sure_channel)), lang(lng_report_spam_ok), st::attentionBoxButton); connect(box, SIGNAL(confirmed()), this, SLOT(onReportSpamSure())); App::wnd()->showLayer(box); _clearPeer = _peer; @@ -5323,7 +5334,7 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, } else if (initial && _showAtMsgId > 0) { HistoryItem *item = App::histItemById(_channel, _showAtMsgId); if (!item || item->detached()) { - _showAtMsgId = 0; + setMsgId(0); _histInited = false; return updateListSize(addToY, initial); } else { @@ -5354,7 +5365,7 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, if (item) { toY = qMax(firstItemY + item->y + item->block()->y - _fixedInScrollMsgTop, 0); } else { - _showAtMsgId = ShowAtUnreadMsgId; + setMsgId(ShowAtUnreadMsgId); _fixedInScrollMsgId = 0; _fixedInScrollMsgTop = 0; _histInited = false; @@ -5370,7 +5381,7 @@ void HistoryWidget::updateListSize(int32 addToY, bool initial, bool loadedDown, if (toY < _scroll.scrollTopMax() + st::unreadBarHeight) { _history->addUnreadBar(); if (_history->unreadBar) { - _showAtMsgId = ShowAtUnreadMsgId; + setMsgId(ShowAtUnreadMsgId); _histInited = false; return updateListSize(0, true); } @@ -6131,7 +6142,7 @@ void HistoryWidget::drawField(Painter &p) { } else { p.setFont(st::msgDateFont->f); p.setPen(st::msgInDateColor->p); - p.drawText(replyLeft, backy + st::msgReplyPadding.top() + (st::msgReplyBarSize.height() - st::msgDateFont->height) / 2 + st::msgDateFont->ascent, st::msgDateFont->m.elidedText(lang(lng_profile_loading), Qt::ElideRight, width() - replyLeft - _replyForwardPreviewCancel.width() - st::msgReplyPadding.right())); + p.drawText(replyLeft, backy + st::msgReplyPadding.top() + (st::msgReplyBarSize.height() - st::msgDateFont->height) / 2 + st::msgDateFont->ascent, st::msgDateFont->elided(lang(lng_profile_loading), width() - replyLeft - _replyForwardPreviewCancel.width() - st::msgReplyPadding.right())); } } } else if (from && text) { @@ -6204,7 +6215,7 @@ void HistoryWidget::drawRecording(Painter &p) { p.setPen(st::black->p); p.drawText(_attachPhoto.x() + _attachEmoji.width(), _attachPhoto.y() + st::recordTextTop + st::recordFont->ascent, duration); - int32 left = _attachPhoto.x() + _attachEmoji.width() + st::recordFont->m.width(duration) + ((_send.width() - st::btnRecordAudio.pxWidth()) / 2); + int32 left = _attachPhoto.x() + _attachEmoji.width() + st::recordFont->width(duration) + ((_send.width() - st::btnRecordAudio.pxWidth()) / 2); int32 right = width() - _send.width(); p.setPen(a_recordCancel.current()); @@ -6271,7 +6282,7 @@ void HistoryWidget::paintEvent(QPaintEvent *e) { } } else { style::font font(st::msgServiceFont); - int32 w = font->m.width(lang(lng_willbe_history)) + st::msgPadding.left() + st::msgPadding.right(), h = font->height + st::msgServicePadding.top() + st::msgServicePadding.bottom() + 2; + int32 w = font->width(lang(lng_willbe_history)) + st::msgPadding.left() + st::msgPadding.right(), h = font->height + st::msgServicePadding.top() + st::msgServicePadding.bottom() + 2; QRect tr((width() - w) / 2, (height() - _field.height() - 2 * st::sendPadding - h) / 2, w, h); App::roundRect(p, tr, App::msgServiceBg(), ServiceCorners); diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index f5b4c583f..4d8251f3e 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -351,11 +351,9 @@ private: UserData *_sharedContact; bool _forwardSelected, _sendPath; - FlatButton forwardButton; - FlatButton cancelButton; + BoxButton _send, _cancel; PeerData *offered; - anim::fvalue aOpacity; - anim::transition aOpacityFunc; + anim::fvalue a_opacity; QRect box; bool hiding; @@ -456,7 +454,9 @@ public: void shareContact(const PeerId &peer, const QString &phone, const QString &fname, const QString &lname, MsgId replyTo, int32 userId = 0); + History *history() const; PeerData *peer() const; + void setMsgId(MsgId showAtMsgId); MsgId msgId() const; HistoryItem *atTopImportantMsg(int32 &bottomUnderScrollTop) const; @@ -541,7 +541,7 @@ public: signals: void cancelled(); - void peerShown(PeerData *); + void historyShown(History *history, MsgId atMsgId); public slots: diff --git a/Telegram/SourceFiles/intro/intropwdcheck.cpp b/Telegram/SourceFiles/intro/intropwdcheck.cpp index 4dc59c8b6..94ebb890c 100644 --- a/Telegram/SourceFiles/intro/intropwdcheck.cpp +++ b/Telegram/SourceFiles/intro/intropwdcheck.cpp @@ -249,7 +249,7 @@ bool IntroPwdCheck::codeSubmitFail(const RPCError &error) { } void IntroPwdCheck::recoverStarted(const MTPauth_PasswordRecovery &result) { - _emailPattern = st::introFont->m.elidedText(lng_signin_recover_hint(lt_recover_email, qs(result.c_auth_passwordRecovery().vemail_pattern)), Qt::ElideRight, textRect.width()); + _emailPattern = st::introFont->elided(lng_signin_recover_hint(lt_recover_email, qs(result.c_auth_passwordRecovery().vemail_pattern)), textRect.width()); update(); } @@ -283,14 +283,14 @@ void IntroPwdCheck::onToRecover() { } update(); } else { - ConfirmBox *box = new ConfirmBox(lang(lng_signin_no_email_forgot), true); + ConfirmBox *box = new InformBox(lang(lng_signin_no_email_forgot)); App::wnd()->showLayer(box); connect(box, SIGNAL(destroyed(QObject*)), this, SLOT(onToReset())); } } void IntroPwdCheck::onToPassword() { - ConfirmBox *box = new ConfirmBox(lang(lng_signin_no_email_forgot), true); + ConfirmBox *box = new InformBox(lang(lng_signin_cant_email_forgot)); App::wnd()->showLayer(box); connect(box, SIGNAL(destroyed(QObject*)), this, SLOT(onToReset())); } @@ -312,7 +312,7 @@ void IntroPwdCheck::onToReset() { void IntroPwdCheck::onReset() { if (sentRequest) return; - ConfirmBox *box = new ConfirmBox(lang(lng_sigin_sure_reset), lang(lng_sigin_reset), QString(), st::btnRedDone); + ConfirmBox *box = new ConfirmBox(lang(lng_signin_sure_reset), lang(lng_signin_reset), st::attentionBoxButton); connect(box, SIGNAL(confirmed()), this, SLOT(onResetSure())); App::wnd()->showLayer(box); } diff --git a/Telegram/SourceFiles/intro/introsteps.cpp b/Telegram/SourceFiles/intro/introsteps.cpp index 6b87c08f6..ce7a7f61d 100644 --- a/Telegram/SourceFiles/intro/introsteps.cpp +++ b/Telegram/SourceFiles/intro/introsteps.cpp @@ -49,7 +49,7 @@ _next(this, lang(lng_start_msgs), st::btnIntroNext) { _changeLang.show(); } - _headerWidth = st::introHeaderFont->m.width(qsl("Telegram Desktop")); + _headerWidth = st::introHeaderFont->width(qsl("Telegram Desktop")); setGeometry(parent->innerRect()); diff --git a/Telegram/SourceFiles/layerwidget.h b/Telegram/SourceFiles/layerwidget.h index bf23ac43e..74a3a51dc 100644 --- a/Telegram/SourceFiles/layerwidget.h +++ b/Telegram/SourceFiles/layerwidget.h @@ -19,7 +19,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org #include "gui/boxshadow.h" -class LayeredWidget : public QWidget { +class LayeredWidget : public TWidget { Q_OBJECT public: diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index ff123dfa1..e5db85d19 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -96,7 +96,7 @@ void TopBarWidget::onDeleteContact() { PeerData *p = 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)); + ConfirmBox *box = new ConfirmBox(lng_sure_delete_contact(lt_contact, p->name), lang(lng_box_delete)); connect(box, SIGNAL(confirmed()), this, SLOT(onDeleteContactSure())); App::wnd()->showLayer(box); } @@ -116,7 +116,7 @@ void TopBarWidget::onDeleteAndExit() { PeerData *p = 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)); + 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())); App::wnd()->showLayer(box); } @@ -359,7 +359,7 @@ void TopBarWidget::showSelected(uint32 selCount, bool canDelete) { _selCount = selCount; _canDelete = canDelete; _selStr = (_selCount > 0) ? lng_selected_count(lt_count, _selCount) : QString(); - _selStrWidth = st::btnDefLink.font->m.width(_selStr); + _selStrWidth = st::btnDefLink.font->width(_selStr); setCursor((!p && _selCount) ? style::cur_default : style::cur_pointer); showAll(); } @@ -400,7 +400,7 @@ _failDifferenceTimeout(1), _lastUpdateTime(0), _handlingChannelDifference(false) connect(_api, SIGNAL(fullPeerUpdated(PeerData*)), this, SLOT(onFullPeerUpdated(PeerData*))); connect(this, SIGNAL(peerUpdated(PeerData*)), &history, SLOT(peerUpdated(PeerData*))); connect(&_topBar, SIGNAL(clicked()), this, SLOT(onTopBarClick())); - connect(&history, SIGNAL(peerShown(PeerData*)), this, SLOT(onPeerShown(PeerData*))); + connect(&history, SIGNAL(historyShown(History*,MsgId)), this, SLOT(onHistoryShown(History*,MsgId))); connect(&updateNotifySettingTimer, SIGNAL(timeout()), this, SLOT(onUpdateNotifySettings())); connect(this, SIGNAL(showPeerAsync(quint64,qint32)), this, SLOT(showPeerHistory(quint64,qint32)), Qt::QueuedConnection); if (audioPlayer()) { @@ -444,7 +444,7 @@ _failDifferenceTimeout(1), _lastUpdateTime(0), _handlingChannelDifference(false) bool MainWidget::onForward(const PeerId &peer, ForwardWhatMessages what) { PeerData *p = App::peer(peer); if (!peer || (p->isChannel() && !p->asChannel()->canPublish() && p->asChannel()->isBroadcast()) || (p->isChat() && (p->asChat()->haveLeft || p->asChat()->isForbidden)) || (p->isUser() && p->asUser()->access == UserNoAccess)) { - App::wnd()->showLayer(new ConfirmBox(lang(lng_forward_cant), true)); + App::wnd()->showLayer(new InformBox(lang(lng_forward_cant))); return false; } history.cancelReply(); @@ -655,7 +655,7 @@ void MainWidget::noHider(HistoryHider *destroyed) { _forwardConfirm->startHide(); _forwardConfirm = 0; } - onPeerShown(history.peer()); + onHistoryShown(history.history(), history.msgId()); if (profile || overview || (history.peer() && history.peer()->id)) { dialogs.enableShadow(false); QPixmap animCache = myGrab(this, QRect(0, _playerHeight + st::topBarHeight, _dialogsWidth, height() - _playerHeight - st::topBarHeight)), @@ -700,7 +700,7 @@ void MainWidget::hiderLayer(HistoryHider *h) { dialogs.enableShadow(); _topBar.enableShadow(); - onPeerShown(0); + onHistoryShown(0, 0); if (overview) { overview->hide(); } else if (profile) { @@ -721,7 +721,7 @@ void MainWidget::forwardLayer(int32 forwardSelected) { void MainWidget::deleteLayer(int32 selectedCount) { QString str((selectedCount < 0) ? lang(selectedCount < -1 ? lng_selected_cancel_sure_this : lng_selected_delete_sure_this) : lng_selected_delete_sure(lt_count, selectedCount)); - ConfirmBox *box = new ConfirmBox((selectedCount < 0) ? str : str.arg(selectedCount), lang(lng_selected_delete_confirm)); + ConfirmBox *box = new ConfirmBox((selectedCount < 0) ? str : str.arg(selectedCount), lang(lng_box_delete)); if (selectedCount < 0) { connect(box, SIGNAL(confirmed()), overview ? overview : static_cast(&history), SLOT(onDeleteContextSure())); } else { @@ -741,7 +741,7 @@ bool MainWidget::selectingPeer(bool withConfirm) { void MainWidget::offerPeer(PeerId peer) { App::wnd()->hideLayer(); if (_hider->offerPeer(peer) && !cWideMode()) { - _forwardConfirm = new ConfirmBox(_hider->offeredText(), lang(lng_forward)); + _forwardConfirm = new ConfirmBox(_hider->offeredText(), lang(lng_forward_send)); connect(_forwardConfirm, SIGNAL(confirmed()), _hider, SLOT(forward())); connect(_forwardConfirm, SIGNAL(cancelled()), this, SLOT(onForwardCancel())); connect(_forwardConfirm, SIGNAL(destroyed(QObject*)), this, SLOT(onForwardCancel(QObject*))); @@ -879,7 +879,7 @@ bool MainWidget::addParticipantFail(UserData *user, const RPCError &error) { } else if (error.type() == "PEER_FLOOD") { text = lng_cant_invite_not_contact(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))); } - App::wnd()->showLayer(new ConfirmBox(text, true)); + App::wnd()->showLayer(new InformBox(text)); return false; } @@ -893,7 +893,7 @@ bool MainWidget::addParticipantsFail(const RPCError &error) { } else if (error.type() == "PEER_FLOOD") { text = lng_cant_invite_not_contact(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))); } - App::wnd()->showLayer(new ConfirmBox(text, true)); + App::wnd()->showLayer(new InformBox(text)); return false; } @@ -1015,7 +1015,7 @@ bool MainWidget::sendMessageFail(const RPCError &error) { if (mtpIsFlood(error)) return false; if (error.type() == qsl("PEER_FLOOD")) { - App::wnd()->showLayer(new ConfirmBox(lng_cant_send_to_not_contact(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))), true)); + App::wnd()->showLayer(new InformBox(lng_cant_send_to_not_contact(lt_more_info, textcmdLink(qsl("https://telegram.org/faq?_hash=can-39t-send-messages-to-non-contacts"), lang(lng_cant_more_info))))); return true; } return false; @@ -2631,11 +2631,13 @@ QRect MainWidget::historyRect() const { } void MainWidget::dlgUpdated(DialogRow *row) { + if (!row) return; dialogs.dlgUpdated(row); } -void MainWidget::dlgUpdated(History *row) { - dialogs.dlgUpdated(row); +void MainWidget::dlgUpdated(History *row, MsgId msgId) { + if (!row) return; + dialogs.dlgUpdated(row, msgId); } void MainWidget::windowShown() { @@ -2757,7 +2759,7 @@ void MainWidget::hideAll() { void MainWidget::showAll() { if (cPasswordRecovered()) { cSetPasswordRecovered(false); - App::wnd()->showLayer(new ConfirmBox(lang(lng_signin_password_removed), true, lang(lng_continue))); + App::wnd()->showLayer(new InformBox(lang(lng_signin_password_removed))); } if (cWideMode()) { if (_hider) { @@ -2783,7 +2785,7 @@ void MainWidget::showAll() { if (_hider) { _hider->hide(); if (!_forwardConfirm && _hider->wasOffered()) { - _forwardConfirm = new ConfirmBox(_hider->offeredText(), lang(lng_forward)); + _forwardConfirm = new ConfirmBox(_hider->offeredText(), lang(lng_forward_send)); connect(_forwardConfirm, SIGNAL(confirmed()), _hider, SLOT(forward())); connect(_forwardConfirm, SIGNAL(cancelled()), this, SLOT(onForwardCancel())); App::wnd()->showLayer(_forwardConfirm, true); @@ -2922,8 +2924,8 @@ void MainWidget::onTopBarClick() { } } -void MainWidget::onPeerShown(PeerData *peer) { - if ((cWideMode() || !selectingPeer()) && (profile || overview || (peer && peer->id))) { +void MainWidget::onHistoryShown(History *history, MsgId atMsgId) { + if ((cWideMode() || !selectingPeer()) && (profile || overview || history)) { _topBar.show(); } else { _topBar.hide(); @@ -2932,6 +2934,7 @@ void MainWidget::onPeerShown(PeerData *peer) { if (animating()) { _topBar.hide(); } + dlgUpdated(history, atMsgId); } void MainWidget::searchInPeer(PeerData *peer) { @@ -3609,7 +3612,7 @@ bool MainWidget::usernameResolveFail(QString name, const RPCError &error) { if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; if (error.code() == 400) { - App::wnd()->showLayer(new ConfirmBox(lng_username_not_found(lt_user, name), true)); + App::wnd()->showLayer(new InformBox(lng_username_not_found(lt_user, name))); } return true; } @@ -3646,7 +3649,7 @@ bool MainWidget::inviteCheckFail(const RPCError &error) { if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; if (error.code() == 400) { - App::wnd()->showLayer(new ConfirmBox(lang(lng_group_invite_bad_link), true)); + App::wnd()->showLayer(new InformBox(lang(lng_group_invite_bad_link))); } return true; } @@ -3684,7 +3687,7 @@ bool MainWidget::inviteImportFail(const RPCError &error) { if (error.type().startsWith(qsl("FLOOD_WAIT_"))) return false; if (error.code() == 400) { - App::wnd()->showLayer(new ConfirmBox(lang(error.type() == qsl("USERS_TOO_MUCH") ? lng_group_invite_no_room : lng_group_invite_bad_link), true), App::wnd()->layerShown()); + App::wnd()->showLayer(new InformBox(lang(error.type() == qsl("USERS_TOO_MUCH") ? lng_group_invite_no_room : lng_group_invite_bad_link))); } return true; } @@ -4281,7 +4284,14 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { // update before applying skipped PeerId id = peerFromMTP(d.vpeer); App::feedOutboxRead(id, d.vmax_id.v); - if (history.peer() && history.peer()->id == id) history.update(); + if (history.peer() && history.peer()->id == id) { + history.update(); + } + if (History *h = App::historyLoaded(id)) { + if (h->lastMsg->out() && h->lastMsg->id <= d.vmax_id.v) { + dlgUpdated(h, h->lastMsg->id); + } + } ptsApplySkippedUpdates(); } break; @@ -4494,7 +4504,7 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { case mtpc_updateServiceNotification: { const MTPDupdateServiceNotification &d(update.c_updateServiceNotification()); if (d.vpopup.v) { - App::wnd()->showLayer(new ConfirmBox(qs(d.vmessage), true)); + App::wnd()->showLayer(new InformBox(qs(d.vmessage))); App::wnd()->serviceNotification(qs(d.vmessage), d.vmedia); } else { App::wnd()->serviceNotification(qs(d.vmessage), d.vmedia); diff --git a/Telegram/SourceFiles/mainwidget.h b/Telegram/SourceFiles/mainwidget.h index b9a44d4ec..31c44242d 100644 --- a/Telegram/SourceFiles/mainwidget.h +++ b/Telegram/SourceFiles/mainwidget.h @@ -219,7 +219,7 @@ public: void createDialog(History *history); void dlgUpdated(DialogRow *row); - void dlgUpdated(History *row); + void dlgUpdated(History *row, MsgId msgId); void windowShown(); @@ -443,7 +443,7 @@ public slots: void showPeerHistory(quint64 peer, qint32 msgId, bool back = false); void onTopBarClick(); - void onPeerShown(PeerData *peer); + void onHistoryShown(History *history, MsgId atMsgId); void searchInPeer(PeerData *peer); diff --git a/Telegram/SourceFiles/mediaview.cpp b/Telegram/SourceFiles/mediaview.cpp index 087f8c1e2..4b23af4a5 100644 --- a/Telegram/SourceFiles/mediaview.cpp +++ b/Telegram/SourceFiles/mediaview.cpp @@ -229,11 +229,11 @@ void MediaView::updateDocSize() { } else { _docSize = formatSizeText(_doc->size); } - _docSizeWidth = st::mvFont->m.width(_docSize); + _docSizeWidth = st::mvFont->width(_docSize); int32 maxw = st::mvDocSize.width() - st::mvDocBlue.pxWidth() - st::mvDocPadding * 3; if (_docSizeWidth > maxw) { - _docSize = st::mvFont->m.elidedText(_docSize, Qt::ElideRight, maxw); - _docSizeWidth = st::mvFont->m.width(_docSize); + _docSize = st::mvFont->elided(_docSize, maxw); + _docSizeWidth = st::mvFont->width(_docSize); } } @@ -292,10 +292,10 @@ void MediaView::updateControls() { if (_from) { _fromName.setText(st::mvFont, _from->name); _nameNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, qMin(_fromName.maxWidth(), width() / 3), st::mvFont->height); - _dateNav = myrtlrect(st::mvTextLeft + _nameNav.width() + st::mvTextSkip, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height); + _dateNav = myrtlrect(st::mvTextLeft + _nameNav.width() + st::mvTextSkip, height() - st::mvTextTop, st::mvFont->width(_dateText), st::mvFont->height); } else { _nameNav = QRect(); - _dateNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, st::mvFont->m.width(_dateText), st::mvFont->height); + _dateNav = myrtlrect(st::mvTextLeft, height() - st::mvTextTop, st::mvFont->width(_dateText), st::mvFont->height); } updateHeader(); if (_photo || (_history && _overview == OverviewPhotos)) { @@ -912,18 +912,18 @@ void MediaView::displayDocument(DocumentData *doc, HistoryItem *item) { // empty _docName = (!_doc || _doc->name.isEmpty()) ? lang(_doc ? (_doc->type == StickerDocument ? lng_in_dlg_sticker : lng_mediaview_doc_image) : lng_message_empty) : _doc->name; int32 lastDot = _docName.lastIndexOf('.'); _docExt = _doc ? ((lastDot < 0 || lastDot + 2 > _docName.size()) ? _docName : _docName.mid(lastDot + 1)) : QString(); - _docNameWidth = st::mvDocNameFont->m.width(_docName); + _docNameWidth = st::mvDocNameFont->width(_docName); if (_docNameWidth > maxw) { - _docName = st::mvDocNameFont->m.elidedText(_docName, Qt::ElideMiddle, maxw); - _docNameWidth = st::mvDocNameFont->m.width(_docName); + _docName = st::mvDocNameFont->elided(_docName, maxw, Qt::ElideMiddle); + _docNameWidth = st::mvDocNameFont->width(_docName); } int32 extmaxw = (st::mvDocBlue.pxWidth() - st::mvDocExtPadding * 2); - _docExtWidth = st::mvDocExtFont->m.width(_docExt); + _docExtWidth = st::mvDocExtFont->width(_docExt); if (_docExtWidth > extmaxw) { - _docExt = st::mvDocNameFont->m.elidedText(_docExt, Qt::ElideMiddle, extmaxw); - _docExtWidth = st::mvDocNameFont->m.width(_docExt); + _docExt = st::mvDocNameFont->elided(_docExt, extmaxw, Qt::ElideMiddle); + _docExtWidth = st::mvDocNameFont->width(_docExt); } _docRadialFirst = _docRadialLast = _docRadialStart = 0; @@ -1953,75 +1953,13 @@ void MediaView::updateHeader() { } } _headerHasLink = (_overview != OverviewCount) && _history; - int32 hwidth = st::mvThickFont->m.width(_headerText); + int32 hwidth = st::mvThickFont->width(_headerText); if (hwidth > width() / 3) { hwidth = width() / 3; - _headerText = st::mvThickFont->m.elidedText(_headerText, Qt::ElideMiddle, hwidth); + _headerText = st::mvThickFont->elided(_headerText, hwidth, Qt::ElideMiddle); } _headerNav = myrtlrect(st::mvTextLeft, height() - st::mvHeaderTop, hwidth, st::mvThickFont->height); } -// -//void MediaView::updatePolaroid() { -// if (_doc) { -// _polaroidIn = _polaroidOut = QRect(0, 0, _avail.width(), _avail.height() - st::medviewBottomBar); -// int32 minus1 = width() - _delete.x(), minus2 = _overview.x() + st::medviewHeaderFont->m.width(_header) - st::medviewOverview.width; -// if (minus2 > minus1) minus1 = minus2; -// -// int32 dateWidth = st::medviewDateFont->m.width(_dateText), maxWidth = width() - 2 * minus1; -// if (_from) { -// int32 nameWidth = _fromName.maxWidth(); -// if (maxWidth < dateWidth) { -// maxWidth = dateWidth; -// } -// if (nameWidth > maxWidth) { -// nameWidth = maxWidth; -// } -// _nameNav = QRect((_avail.width() - nameWidth) / 2, _avail.y() + _avail.height() - ((st::medviewPolaroid.bottom() + st::medviewBottomBar) / 2) + st::medviewNameTop, nameWidth, st::medviewNameFont->height); -// _dateNav = QRect((_avail.width() - dateWidth) / 2, _avail.y() + _avail.height() - ((st::medviewPolaroid.bottom() + st::medviewBottomBar) / 2) + st::medviewDateTop, dateWidth, st::medviewDateFont->height); -// } else { -// _nameNav = QRect(_avail.x() - 1, _avail.y() - 1, 0, 0); -// _dateNav = QRect((_avail.width() - dateWidth) / 2, _avail.y() + _avail.height() - ((st::medviewPolaroid.bottom() + st::medviewBottomBar) / 2) + ((st::medviewNameTop + st::medviewDateTop) / 2), dateWidth, st::medviewDateFont->height); -// } -// } else { -// int32 pminw = qMin(st::medviewPolaroidMin.width(), int(_avail.width() - 2 * st::medviewNavBarWidth)); -// -// int32 pl = _x - st::medviewPolaroid.left(), plw = st::medviewPolaroid.left(); -// if (pl < st::medviewNavBarWidth) pl = st::medviewNavBarWidth; -// int32 pr = _x + _w + st::medviewPolaroid.right(), prw = st::medviewPolaroid.right(); -// if (pr > _avail.width() - st::medviewNavBarWidth) pr = _avail.width() - st::medviewNavBarWidth; -// -// if (_w + st::medviewPolaroid.left() + st::medviewPolaroid.right() < pminw) { -// pl = (_avail.width() - pminw) / 2; -// plw = _x - pl; -// pr = pl + pminw; -// prw = pr - (_x + _w); -// } -// -// int32 pminh = qMin(st::medviewPolaroidMin.height(), int(_avail.height() - st::medviewBottomBar)); -// -// int32 pt = _y - st::medviewPolaroid.top(), pth = st::medviewPolaroid.top(); -// if (pt < 0) pt = 0; -// int32 pb = _y + _h + st::medviewPolaroid.bottom(), pbh = st::medviewPolaroid.bottom(); -// if (pb > _avail.height() - st::medviewBottomBar) pb = _avail.height() - st::medviewBottomBar; -// -// if (_h + st::medviewPolaroid.top() + st::medviewPolaroid.bottom() < pminh) { -// pt = (_avail.height() - st::medviewBottomBar - pminh) / 2; -// pth = _y - pt; -// pb = pt + pminh; -// pbh = pb - (_y + _h); -// } -// -// _polaroidOut = QRect(pl, pt, pr - pl, pb - pt); -// _polaroidIn = QRect(pl + plw, pt + pth, pr - pl - prw - plw, pb - pt - pbh - pth); -// -// int32 nameWidth = _fromName.maxWidth(), maxWidth = _polaroidOut.width() - st::medviewPolaroid.left() - st::medviewPolaroid.right(), dateWidth = st::medviewDateFont->m.width(_dateText); -// if (nameWidth > maxWidth) { -// nameWidth = maxWidth; -// } -// _nameNav = QRect(_polaroidIn.x() + ((_polaroidIn.width() - nameWidth) / 2), _polaroidOut.y() + _polaroidOut.height() - st::medviewPolaroid.bottom() + st::medviewNameTop, nameWidth, st::medviewNameFont->height); -// _dateNav = QRect(_polaroidIn.x() + ((_polaroidIn.width() - dateWidth) / 2), _polaroidOut.y() + _polaroidOut.height() - st::medviewPolaroid.bottom() + st::medviewDateTop, dateWidth, st::medviewDateFont->height); -// } -//} QColor MediaView::overColor(const QColor &a, float64 ca, const QColor &b, float64 cb) { QColor res; diff --git a/Telegram/SourceFiles/mtproto/generate.py b/Telegram/SourceFiles/mtproto/generate.py index 2cf1f3b32..66909baa1 100644 --- a/Telegram/SourceFiles/mtproto/generate.py +++ b/Telegram/SourceFiles/mtproto/generate.py @@ -728,36 +728,29 @@ textSerializeFull += '\ttypes.reserve(20); vtypes.reserve(20); stages.reserve(20 textSerializeFull += '\ttypes.push_back(mtpTypeId(cons)); vtypes.push_back(mtpTypeId(vcons)); stages.push_back(0); flags.push_back(0);\n\n'; textSerializeFull += '\tconst mtpPrime *start = from;\n'; textSerializeFull += '\tmtpTypeId type = cons, vtype = vcons;\n'; -textSerializeFull += '\tint32 stage = 0, flag = 0;\n'; -textSerializeFull += '\ttry {\n'; -textSerializeFull += '\t\twhile (!types.isEmpty()) {\n'; -textSerializeFull += '\t\t\ttype = types.back();\n'; -textSerializeFull += '\t\t\tvtype = vtypes.back();\n'; -textSerializeFull += '\t\t\tstage = stages.back();\n'; -textSerializeFull += '\t\t\tflag = flags.back();\n'; -textSerializeFull += '\t\t\tif (!type) {\n'; -textSerializeFull += '\t\t\t\tif (from >= end) {\n'; -textSerializeFull += '\t\t\t\t\tthrow Exception("from >= end");\n'; -textSerializeFull += '\t\t\t\t} else if (stage) {\n'; -textSerializeFull += '\t\t\t\t\tthrow Exception("unknown type on stage > 0");\n'; -textSerializeFull += '\t\t\t\t}\n'; -textSerializeFull += '\t\t\t\ttypes.back() = type = *from;\n'; -textSerializeFull += '\t\t\t\tstart = ++from;\n'; -textSerializeFull += '\t\t\t}\n\n'; -textSerializeFull += '\t\t\tint32 lev = level + types.size() - 1;\n'; -textSerializeFull += '\t\t\tTextSerializers::const_iterator it = _serializers.constFind(type);\n'; -textSerializeFull += '\t\t\tif (it != _serializers.cend()) {\n'; -textSerializeFull += '\t\t\t\t(*it.value())(to, stage, lev, types, vtypes, stages, flags, start, end, flag);\n'; -textSerializeFull += '\t\t\t} else {\n'; -textSerializeFull += '\t\t\t\tmtpTextSerializeCore(to, from, end, type, lev, vtype);\n'; -textSerializeFull += '\t\t\t\ttypes.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back();\n'; -textSerializeFull += '\t\t\t\t}\n'; +textSerializeFull += '\tint32 stage = 0, flag = 0;\n\n'; +textSerializeFull += '\twhile (!types.isEmpty()) {\n'; +textSerializeFull += '\t\ttype = types.back();\n'; +textSerializeFull += '\t\tvtype = vtypes.back();\n'; +textSerializeFull += '\t\tstage = stages.back();\n'; +textSerializeFull += '\t\tflag = flags.back();\n'; +textSerializeFull += '\t\tif (!type) {\n'; +textSerializeFull += '\t\t\tif (from >= end) {\n'; +textSerializeFull += '\t\t\t\tthrow Exception("from >= end");\n'; +textSerializeFull += '\t\t\t} else if (stage) {\n'; +textSerializeFull += '\t\t\t\tthrow Exception("unknown type on stage > 0");\n'; +textSerializeFull += '\t\t\t}\n'; +textSerializeFull += '\t\t\ttypes.back() = type = *from;\n'; +textSerializeFull += '\t\t\tstart = ++from;\n'; +textSerializeFull += '\t\t}\n\n'; +textSerializeFull += '\t\tint32 lev = level + types.size() - 1;\n'; +textSerializeFull += '\t\tTextSerializers::const_iterator it = _serializers.constFind(type);\n'; +textSerializeFull += '\t\tif (it != _serializers.cend()) {\n'; +textSerializeFull += '\t\t\t(*it.value())(to, stage, lev, types, vtypes, stages, flags, start, end, flag);\n'; +textSerializeFull += '\t\t} else {\n'; +textSerializeFull += '\t\t\tmtpTextSerializeCore(to, from, end, type, lev, vtype);\n'; +textSerializeFull += '\t\t\ttypes.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back();\n'; textSerializeFull += '\t\t}\n'; -textSerializeFull += '\t} catch (Exception &e) {\n'; -textSerializeFull += '\t\tto.add("[ERROR] ");\n'; -textSerializeFull += '\t\tto.add("(").add(e.what()).add("), cons: 0x").add(mtpWrapNumber(type, 16));\n'; -textSerializeFull += '\t\tif (vtype) to.add(", vcons: 0x").add(mtpWrapNumber(vtype));\n'; -textSerializeFull += '\t\tto.add(", ").add(mb(start, (end - start) * sizeof(mtpPrime)).str());\n'; textSerializeFull += '\t}\n'; textSerializeFull += '}\n'; diff --git a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h index 71f87f590..90ea87a46 100644 --- a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h +++ b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h @@ -206,7 +206,7 @@ typedef QMap mtpResponseMap; class mtpErrorUnexpected : public Exception { public: - mtpErrorUnexpected(mtpTypeId typeId, const QString &type) : Exception(QString("MTP Unexpected type id %1 read in %2").arg(typeId).arg(type), false) { // maybe api changed?.. + mtpErrorUnexpected(mtpTypeId typeId, const QString &type) : Exception(QString("MTP Unexpected type id #%1 read in %2").arg(uint32(typeId), 0, 16).arg(type), false) { // maybe api changed?.. } }; @@ -1005,7 +1005,11 @@ void mtpTextSerializeCore(MTPStringLogger &to, const mtpPrime *&from, const mtpP inline QString mtpTextSerialize(const mtpPrime *&from, const mtpPrime *end) { MTPStringLogger to; - mtpTextSerializeType(to, from, end, mtpc_core_message); + try { + mtpTextSerializeType(to, from, end, mtpc_core_message); + } catch (Exception &e) { + to.add("[ERROR] (").add(e.what()).add(")"); + } return QString::fromUtf8(to.p, to.size); } diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.cpp b/Telegram/SourceFiles/mtproto/mtpScheme.cpp index eaad1d8a7..00f44522e 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.cpp +++ b/Telegram/SourceFiles/mtproto/mtpScheme.cpp @@ -7467,36 +7467,30 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP const mtpPrime *start = from; mtpTypeId type = cons, vtype = vcons; int32 stage = 0, flag = 0; - try { - while (!types.isEmpty()) { - type = types.back(); - vtype = vtypes.back(); - stage = stages.back(); - flag = flags.back(); - if (!type) { - if (from >= end) { - throw Exception("from >= end"); - } else if (stage) { - throw Exception("unknown type on stage > 0"); - } - types.back() = type = *from; - start = ++from; - } - int32 lev = level + types.size() - 1; - TextSerializers::const_iterator it = _serializers.constFind(type); - if (it != _serializers.cend()) { - (*it.value())(to, stage, lev, types, vtypes, stages, flags, start, end, flag); - } else { - mtpTextSerializeCore(to, from, end, type, lev, vtype); - types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); - } + while (!types.isEmpty()) { + type = types.back(); + vtype = vtypes.back(); + stage = stages.back(); + flag = flags.back(); + if (!type) { + if (from >= end) { + throw Exception("from >= end"); + } else if (stage) { + throw Exception("unknown type on stage > 0"); + } + types.back() = type = *from; + start = ++from; + } + + int32 lev = level + types.size() - 1; + TextSerializers::const_iterator it = _serializers.constFind(type); + if (it != _serializers.cend()) { + (*it.value())(to, stage, lev, types, vtypes, stages, flags, start, end, flag); + } else { + mtpTextSerializeCore(to, from, end, type, lev, vtype); + types.pop_back(); vtypes.pop_back(); stages.pop_back(); flags.pop_back(); } - } catch (Exception &e) { - to.add("[ERROR] "); - to.add("(").add(e.what()).add("), cons: 0x").add(mtpWrapNumber(type, 16)); - if (vtype) to.add(", vcons: 0x").add(mtpWrapNumber(vtype)); - to.add(", ").add(mb(start, (end - start) * sizeof(mtpPrime)).str()); } } diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index 2525ae8d3..b90f41bd4 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -116,7 +116,7 @@ OverviewInner::CachedLink::CachedLink(HistoryItem *item) : titleWidth(0), page(0 } } } - titleWidth = st::webPageTitleFont->m.width(title); + titleWidth = st::webPageTitleFont->width(title); } int32 OverviewInner::CachedLink::countHeight(int32 w) { @@ -1187,7 +1187,7 @@ void OverviewInner::paintEvent(QPaintEvent *e) { p.setPen(st::black->p); p.setFont(st::webPageTitleFont->f); if (!lnk->title.isEmpty()) { - p.drawText(left, top + st::webPageTitleFont->ascent, (_linksWidth - left < lnk->titleWidth) ? st::webPageTitleFont->m.elidedText(lnk->title, Qt::ElideRight, _linksWidth - left) : lnk->title); + p.drawText(left, top + st::webPageTitleFont->ascent, (_linksWidth - left < lnk->titleWidth) ? st::webPageTitleFont->elided(lnk->title, _linksWidth - left) : lnk->title); top += st::webPageTitleFont->height; } p.setFont(st::msgFont->f); @@ -1200,7 +1200,7 @@ void OverviewInner::paintEvent(QPaintEvent *e) { for (int32 j = 0, c = lnk->urls.size(); j < c; ++j) { bool sel = (_mousedItem == _items[i].msgid && j + 1 == _lnkOverIndex); if (sel) p.setFont(st::msgFont->underline()->f); - p.drawText(left, top + st::msgFont->ascent, (_linksWidth - left < lnk->urls[j].width) ? st::msgFont->m.elidedText(lnk->urls[j].text, Qt::ElideRight, _linksWidth - left) : lnk->urls[j].text); + p.drawText(left, top + st::msgFont->ascent, (_linksWidth - left < lnk->urls[j].width) ? st::msgFont->elided(lnk->urls[j].text, _linksWidth - left) : lnk->urls[j].text); if (sel) p.setFont(st::msgFont->f); top += st::msgFont->height; } @@ -1257,7 +1257,7 @@ void OverviewInner::paintEvent(QPaintEvent *e) { int32 left = st::msgServiceMargin.left(), width = _width - st::msgServiceMargin.left() - st::msgServiceMargin.left(), height = st::msgServiceFont->height + st::msgServicePadding.top() + st::msgServicePadding.bottom(); if (width < 1) return; - int32 strwidth = st::msgServiceFont->m.width(str) + st::msgServicePadding.left() + st::msgServicePadding.right(); + int32 strwidth = st::msgServiceFont->width(str) + st::msgServicePadding.left() + st::msgServicePadding.right(); QRect trect(QRect(left, st::msgServiceMargin.top(), width, height).marginsAdded(-st::msgServicePadding)); left += (width - strwidth) / 2; diff --git a/Telegram/SourceFiles/overviewwidget.h b/Telegram/SourceFiles/overviewwidget.h index 7a7926e9d..5047a65e2 100644 --- a/Telegram/SourceFiles/overviewwidget.h +++ b/Telegram/SourceFiles/overviewwidget.h @@ -154,7 +154,7 @@ private: struct Link { Link() : width(0) { } - Link(const QString &url, const QString &text) : url(url), text(text), width(st::msgFont->m.width(text)) { + Link(const QString &url, const QString &text) : url(url), text(text), width(st::msgFont->width(text)) { } QString url, text; int32 width; diff --git a/Telegram/SourceFiles/playerwidget.cpp b/Telegram/SourceFiles/playerwidget.cpp index 273e44454..cbe30ec22 100644 --- a/Telegram/SourceFiles/playerwidget.cpp +++ b/Telegram/SourceFiles/playerwidget.cpp @@ -201,7 +201,7 @@ void PlayerWidget::updateDownTime() { QString time = formatDurationText(qRound(_downDuration * _downProgress) / _downFrequency); if (time != _time) { _time = time; - _timeWidth = st::linkFont->m.width(_time); + _timeWidth = st::linkFont->width(_time); rtlupdate(_infoRect); } } @@ -583,7 +583,7 @@ void PlayerWidget::updateState(SongMsgId playing, AudioPlayerState playingState, if (time != _time || showPause != _showPause) { if (_time != time) { _time = time; - _timeWidth = st::linkFont->m.width(_time); + _timeWidth = st::linkFont->width(_time); } _showPause = showPause; if (duration != _duration || position != _position || loaded != _loaded) { diff --git a/Telegram/SourceFiles/profilewidget.cpp b/Telegram/SourceFiles/profilewidget.cpp index 5970be2a0..df035b73b 100644 --- a/Telegram/SourceFiles/profilewidget.cpp +++ b/Telegram/SourceFiles/profilewidget.cpp @@ -75,7 +75,7 @@ ProfileInner::ProfileInner(ProfileWidget *profile, ScrollArea *scroll, const Pee // participants _pHeight(st::profileListPhotoSize + st::profileListPadding.height() * 2), - _kickWidth(st::linkFont->m.width(lang(lng_profile_kick))), + _kickWidth(st::linkFont->width(lang(lng_profile_kick))), _selectedRow(-1), _lastPreload(0), _contactId(0), _kickOver(0), _kickDown(0), _kickConfirm(0), @@ -276,7 +276,7 @@ void ProfileInner::onUpdatePhoto() { void ProfileInner::onClearHistory() { if (_peerChannel) return; - ConfirmBox *box = new ConfirmBox(_peer->isUser() ? lng_sure_delete_history(lt_contact, _peer->name) : lng_sure_delete_group_history(lt_group, _peer->name)); + ConfirmBox *box = new ConfirmBox(_peer->isUser() ? lng_sure_delete_history(lt_contact, _peer->name) : lng_sure_delete_group_history(lt_group, _peer->name), lang(lng_box_delete), st::attentionBoxButton); connect(box, SIGNAL(confirmed()), this, SLOT(onClearHistorySure())); App::wnd()->showLayer(box); } @@ -287,7 +287,7 @@ void ProfileInner::onClearHistorySure() { } void ProfileInner::onDeleteConversation() { - ConfirmBox *box = new ConfirmBox(_peer->isUser() ? lng_sure_delete_history(lt_contact, _peer->name) : (_peer->isChat() ? lng_sure_delete_and_exit(lt_group, _peer->name) : lang(lng_sure_leave_channel))); + ConfirmBox *box = new ConfirmBox(_peer->isUser() ? lng_sure_delete_history(lt_contact, _peer->name) : (_peer->isChat() ? lng_sure_delete_and_exit(lt_group, _peer->name) : lang(lng_sure_leave_channel)), lang(_peer->isUser() ? lng_box_delete : lng_box_leave), _peer->isChannel() ? st::defaultBoxButton : st::attentionBoxButton); connect(box, SIGNAL(confirmed()), this, SLOT(onDeleteConversationSure())); App::wnd()->showLayer(box); } @@ -308,7 +308,7 @@ void ProfileInner::onDeleteConversationSure() { void ProfileInner::onDeleteChannel() { if (!_peerChannel) return; - ConfirmBox *box = new ConfirmBox(lang(lng_sure_delete_channel), lang(lng_selected_delete_confirm), QString(), st::btnRedDone); + ConfirmBox *box = new ConfirmBox(lang(lng_sure_delete_channel), lang(lng_box_delete), st::attentionBoxButton); connect(box, SIGNAL(confirmed()), this, SLOT(onDeleteChannelSure())); App::wnd()->showLayer(box); } @@ -398,7 +398,7 @@ void ProfileInner::onInvitationLink() { if (!_peerChat && !_peerChannel) return; QApplication::clipboard()->setText(_peerChat ? _peerChat->invitationUrl : (_peerChannel ? _peerChannel->invitationUrl : QString())); - App::wnd()->showLayer(new ConfirmBox(lang(lng_group_invite_copied), true)); + App::wnd()->showLayer(new InformBox(lang(lng_group_invite_copied))); } void ProfileInner::onPublicLink() { @@ -406,7 +406,7 @@ void ProfileInner::onPublicLink() { if (_peerChannel->isPublic()) { QApplication::clipboard()->setText(qsl("https://telegram.me/") + _peerChannel->username); - App::wnd()->showLayer(new ConfirmBox(lang(lng_channel_public_link_copied), true)); + App::wnd()->showLayer(new InformBox(lang(lng_channel_public_link_copied))); } else { App::wnd()->showLayer(new SetupChannelBox(_peerChannel, true)); } @@ -716,7 +716,7 @@ void ProfileInner::paintEvent(QPaintEvent *e) { top += st::profileButtonTop; if (_peerChat && _peerChat->isForbidden) { - int32 w = st::btnShareContact.font->m.width(lang(lng_profile_chat_unaccessible)); + int32 w = st::btnShareContact.font->width(lang(lng_profile_chat_unaccessible)); p.setFont(st::btnShareContact.font->f); p.setPen(st::profileOfflineColor->p); p.drawText(_left + (_width - w) / 2, top + st::btnShareContact.textTop + st::btnShareContact.font->ascent, lang(lng_profile_chat_unaccessible)); @@ -952,7 +952,7 @@ void ProfileInner::mouseReleaseEvent(QMouseEvent *e) { updateSelected(); if (_kickDown && _kickDown == _kickOver) { _kickConfirm = _kickOver; - ConfirmBox *box = new ConfirmBox(lng_profile_sure_kick(lt_user, _kickOver->firstName)); + ConfirmBox *box = new ConfirmBox(lng_profile_sure_kick(lt_user, _kickOver->firstName), lang(lng_box_remove)); connect(box, SIGNAL(confirmed()), this, SLOT(onKickConfirm())); App::wnd()->showLayer(box); } @@ -1142,10 +1142,10 @@ void ProfileInner::resizeEvent(QResizeEvent *e) { top += st::profileHeaderSkip; // invite link stuff - int32 _inviteLinkTextWidth(st::linkFont->m.width(lang(lng_group_invite_link)) + st::linkFont->spacew); + int32 _inviteLinkTextWidth(st::linkFont->width(lang(lng_group_invite_link)) + st::linkFont->spacew); if (_amCreator && (!_peerChannel || !_peerChannel->isPublic())) { if (!_invitationText.isEmpty()) { - _invitationLink.setText(st::linkFont->m.elidedText(_invitationText, Qt::ElideRight, _width - _inviteLinkTextWidth)); + _invitationLink.setText(st::linkFont->elided(_invitationText, _width - _inviteLinkTextWidth)); } if ((_peerChat && !_peerChat->invitationUrl.isEmpty()) || (_peerChannel && !_peerChannel->invitationUrl.isEmpty())) { _invitationLink.move(_left + _inviteLinkTextWidth, top); diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 0c7a40eb4..1b7a92230 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -157,7 +157,7 @@ void _placeCounter(QImage &img, int size, int count, style::color bg, style::col fontSize = 16; } style::font f(fontSize); - int32 w = f->m.width(cnt), d, r; + int32 w = f->width(cnt), d, r; if (size == 22) { d = (cntSize < 2) ? 3 : 2; r = (cntSize < 2) ? 6 : 5; diff --git a/Telegram/SourceFiles/settingswidget.cpp b/Telegram/SourceFiles/settingswidget.cpp index e96490a3a..815528f62 100644 --- a/Telegram/SourceFiles/settingswidget.cpp +++ b/Telegram/SourceFiles/settingswidget.cpp @@ -144,10 +144,10 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), _dpiAutoScale(this, lng_settings_scale_auto(lt_cur, scaleLabel(cScreenScale())), (cConfigScale() == dbisAuto)), _dpiSlider(this, st::dpiSlider, dbisScaleCount - 1, cEvalScale(cConfigScale()) - 1), - _dpiWidth1(st::dpiFont1->m.width(scaleLabel(dbisOne))), - _dpiWidth2(st::dpiFont2->m.width(scaleLabel(dbisOneAndQuarter))), - _dpiWidth3(st::dpiFont3->m.width(scaleLabel(dbisOneAndHalf))), - _dpiWidth4(st::dpiFont4->m.width(scaleLabel(dbisTwo))), + _dpiWidth1(st::dpiFont1->width(scaleLabel(dbisOne))), + _dpiWidth2(st::dpiFont2->width(scaleLabel(dbisOneAndQuarter))), + _dpiWidth3(st::dpiFont3->width(scaleLabel(dbisOneAndHalf))), + _dpiWidth4(st::dpiFont4->width(scaleLabel(dbisTwo))), // chat options _replaceEmojis(this, lang(lng_settings_replace_emojis), cReplaceEmojis()), @@ -157,12 +157,12 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), _ctrlEnterSend(this, qsl("send_key"), 1, lang((cPlatform() == dbipMac) ? lng_settings_send_cmdenter : lng_settings_send_ctrlenter), cCtrlEnter()), _dontAskDownloadPath(this, lang(lng_download_path_dont_ask), !cAskDownloadPath()), - _downloadPathWidth(st::linkFont->m.width(lang(lng_download_path_label)) + st::linkFont->spacew), - _downloadPathEdit(this, cDownloadPath().isEmpty() ? lang(lng_download_path_default) : ((cDownloadPath() == qsl("tmp")) ? lang(lng_download_path_temp) : st::linkFont->m.elidedText(QDir::toNativeSeparators(cDownloadPath()), Qt::ElideRight, st::setWidth - st::setVersionLeft - _downloadPathWidth))), + _downloadPathWidth(st::linkFont->width(lang(lng_download_path_label)) + st::linkFont->spacew), + _downloadPathEdit(this, cDownloadPath().isEmpty() ? lang(lng_download_path_default) : ((cDownloadPath() == qsl("tmp")) ? lang(lng_download_path_temp) : st::linkFont->elided(QDir::toNativeSeparators(cDownloadPath()), st::setWidth - st::setVersionLeft - _downloadPathWidth))), _downloadPathClear(this, lang(lng_download_path_clear)), - _tempDirClearingWidth(st::linkFont->m.width(lang(lng_download_path_clearing))), - _tempDirClearedWidth(st::linkFont->m.width(lang(lng_download_path_cleared))), - _tempDirClearFailedWidth(st::linkFont->m.width(lang(lng_download_path_clear_failed))), + _tempDirClearingWidth(st::linkFont->width(lang(lng_download_path_clearing))), + _tempDirClearedWidth(st::linkFont->width(lang(lng_download_path_cleared))), + _tempDirClearFailedWidth(st::linkFont->width(lang(lng_download_path_clear_failed))), // chat background _backFromGallery(this, lang(lng_settings_bg_from_gallery)), @@ -173,22 +173,22 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), // local storage _localStorageClear(this, lang(lng_local_storage_clear)), _localStorageHeight(1), - _storageClearingWidth(st::linkFont->m.width(lang(lng_local_storage_clearing))), - _storageClearedWidth(st::linkFont->m.width(lang(lng_local_storage_cleared))), - _storageClearFailedWidth(st::linkFont->m.width(lang(lng_local_storage_clear_failed))), + _storageClearingWidth(st::linkFont->width(lang(lng_local_storage_clearing))), + _storageClearedWidth(st::linkFont->width(lang(lng_local_storage_cleared))), + _storageClearFailedWidth(st::linkFont->width(lang(lng_local_storage_clear_failed))), // advanced _passcodeEdit(this, lang(cHasPasscode() ? lng_passcode_change : lng_passcode_turn_on)), _passcodeTurnOff(this, lang(lng_passcode_turn_off)), _autoLock(this, (cAutoLock() % 3600) ? lng_passcode_autolock_minutes(lt_count, cAutoLock() / 60) : lng_passcode_autolock_hours(lt_count, cAutoLock() / 3600)), _autoLockText(lang(psIdleSupported() ? lng_passcode_autolock_away : lng_passcode_autolock_inactive) + ' '), - _autoLockWidth(st::linkFont->m.width(_autoLockText)), + _autoLockWidth(st::linkFont->width(_autoLockText)), _passwordEdit(this, lang(lng_cloud_password_set)), _passwordTurnOff(this, lang(lng_passcode_turn_off)), _hasPasswordRecovery(false), _connectionType(this, lang(lng_connection_auto_connecting)), _connectionTypeText(lang(lng_connection_type) + ' '), - _connectionTypeWidth(st::linkFont->m.width(_connectionTypeText)), + _connectionTypeWidth(st::linkFont->width(_connectionTypeText)), _showSessions(this, lang(lng_settings_show_sessions)), _askQuestion(this, lang(lng_settings_ask_question)), _telegramFAQ(this, lang(lng_settings_faq)), @@ -248,9 +248,9 @@ SettingsInner::SettingsInner(SettingsWidget *parent) : QWidget(parent), connect(&_dpiSlider, SIGNAL(changed(int32)), this, SLOT(onScaleChange())); _curVersionText = lng_settings_current_version(lt_version, QString::fromWCharArray(AppVersionStr) + (cDevVersion() ? " dev" : "")) + ' '; - _curVersionWidth = st::linkFont->m.width(_curVersionText); + _curVersionWidth = st::linkFont->width(_curVersionText); _newVersionText = lang(lng_settings_update_ready) + ' '; - _newVersionWidth = st::linkFont->m.width(_newVersionText); + _newVersionWidth = st::linkFont->width(_newVersionText); #ifndef TDESKTOP_DISABLE_AUTOUPDATE connect(App::app(), SIGNAL(updateChecking()), this, SLOT(onUpdateChecking())); @@ -921,7 +921,7 @@ void SettingsInner::gotPassword(const MTPaccount_Password &result) { if (!pattern.isEmpty()) _waitingConfirm = lng_cloud_password_waiting(lt_email, pattern); } break; } - _waitingConfirm = st::linkFont->m.elidedText(_waitingConfirm, Qt::ElideRight, st::setWidth - _passwordTurnOff.width()); + _waitingConfirm = st::linkFont->elided(_waitingConfirm, st::setWidth - _passwordTurnOff.width()); _passwordEdit.setText(lang(_curPasswordSalt.isEmpty() ? lng_cloud_password_set : lng_cloud_password_edit)); showAll(); update(); @@ -1175,7 +1175,7 @@ void SettingsInner::onShowSessions() { void SettingsInner::onAskQuestion() { if (!App::self()) return; - ConfirmBox *box = new ConfirmBox(lang(lng_settings_ask_sure), lang(lng_settings_ask_ok), lang(lng_settings_faq_button)); + ConfirmBox *box = new ConfirmBox(lang(lng_settings_ask_sure), lang(lng_settings_ask_ok), st::defaultBoxButton, lang(lng_settings_faq_button)); connect(box, SIGNAL(confirmed()), this, SLOT(onAskQuestionSure())); connect(box, SIGNAL(cancelPressed()), this, SLOT(onTelegramFAQ())); App::wnd()->showLayer(box); @@ -1204,17 +1204,17 @@ void SettingsInner::chooseCustomLang() { QByteArray arr; if (filedialogGetOpenFile(file, arr, qsl("Choose language .strings file"), qsl("Language files (*.strings)"))) { _testlang = QFileInfo(file).absoluteFilePath(); - LangLoaderPlain loader(_testlang, LangLoaderRequest(lng_sure_save_language, lng_cancel, lng_continue)); + LangLoaderPlain loader(_testlang, LangLoaderRequest(lng_sure_save_language, lng_box_cancel, lng_box_ok)); if (loader.errors().isEmpty()) { LangLoaderResult result = loader.found(); QString text = result.value(lng_sure_save_language, langOriginal(lng_sure_save_language)), - save = result.value(lng_continue, langOriginal(lng_continue)), - cancel = result.value(lng_cancel, langOriginal(lng_cancel)); - ConfirmBox *box = new ConfirmBox(text, save, cancel); + save = result.value(lng_box_ok, langOriginal(lng_box_ok)), + cancel = result.value(lng_box_cancel, langOriginal(lng_box_cancel)); + ConfirmBox *box = new ConfirmBox(text, save, st::defaultBoxButton, cancel); connect(box, SIGNAL(confirmed()), this, SLOT(onSaveTestLang())); App::wnd()->showLayer(box); } else { - App::wnd()->showLayer(new ConfirmBox("Custom lang failed :(\n\nError: " + loader.errors(), true, lang(lng_close))); + App::wnd()->showLayer(new InformBox("Custom lang failed :(\n\nError: " + loader.errors())); } } } @@ -1438,7 +1438,7 @@ void SettingsInner::setScale(DBIScale newScale) { _dpiSlider.setSelected(newScale - 1); } if (cEvalScale(cConfigScale()) != cEvalScale(cRealScale())) { - ConfirmBox *box = new ConfirmBox(lang(lng_settings_need_restart), lang(lng_settings_restart_now), lang(lng_settings_restart_later)); + ConfirmBox *box = new ConfirmBox(lang(lng_settings_need_restart), lang(lng_settings_restart_now), st::defaultBoxButton, lang(lng_settings_restart_later)); connect(box, SIGNAL(confirmed()), this, SLOT(onRestartNow())); App::wnd()->showLayer(box); } @@ -1626,7 +1626,7 @@ void SettingsInner::onDownloadPathEdited() { } else if (cDownloadPath() == qsl("tmp")) { path = lang(lng_download_path_temp); } else { - path = st::linkFont->m.elidedText(QDir::toNativeSeparators(cDownloadPath()), Qt::ElideRight, st::setWidth - st::setVersionLeft - _downloadPathWidth); + path = st::linkFont->elided(QDir::toNativeSeparators(cDownloadPath()), st::setWidth - st::setVersionLeft - _downloadPathWidth); } _downloadPathEdit.setText(path); showAll(); diff --git a/Telegram/SourceFiles/structs.cpp b/Telegram/SourceFiles/structs.cpp index 7bb04408d..7be6904b8 100644 --- a/Telegram/SourceFiles/structs.cpp +++ b/Telegram/SourceFiles/structs.cpp @@ -960,7 +960,7 @@ void PeerLink::onClick(Qt::MouseButton button) const { if (button == Qt::LeftButton && App::main()) { if (peer() && peer()->isChannel() && App::main()->historyPeer() != peer()) { if (!peer()->asChannel()->isPublic() && !peer()->asChannel()->amIn()) { - App::wnd()->showLayer(new ConfirmBox(lang(lng_channel_not_accessible), true)); + App::wnd()->showLayer(new InformBox(lang(lng_channel_not_accessible))); } else { App::main()->showPeerHistory(peer()->id, ShowAtUnreadMsgId); } diff --git a/Telegram/SourceFiles/sysbuttons.cpp b/Telegram/SourceFiles/sysbuttons.cpp index 039dbb883..5609f7b54 100644 --- a/Telegram/SourceFiles/sysbuttons.cpp +++ b/Telegram/SourceFiles/sysbuttons.cpp @@ -27,7 +27,7 @@ Copyright (c) 2014 John Preston, https://desktop.telegram.org SysBtn::SysBtn(QWidget *parent, const style::sysButton &st, const QString &text) : Button(parent), _st(st), a_color(_st.color->c), _overLevel(0), _text(text) { - int32 w = _st.size.width() + (_text.isEmpty() ? 0 : ((_st.size.width() - _st.img.pxWidth()) / 2 + st::titleTextButton.font->m.width(_text))); + int32 w = _st.size.width() + (_text.isEmpty() ? 0 : ((_st.size.width() - _st.img.pxWidth()) / 2 + st::titleTextButton.font->width(_text))); resize(w, _st.size.height()); setCursor(style::cur_default); connect(this, SIGNAL(stateChanged(int, ButtonStateChangeSource)), this, SLOT(onStateChange(int, ButtonStateChangeSource))); @@ -35,7 +35,7 @@ _st(st), a_color(_st.color->c), _overLevel(0), _text(text) { void SysBtn::setText(const QString &text) { _text = text; - int32 w = _st.size.width() + (_text.isEmpty() ? 0 : ((_st.size.width() - _st.img.pxWidth()) / 2 + st::titleTextButton.font->m.width(_text))); + int32 w = _st.size.width() + (_text.isEmpty() ? 0 : ((_st.size.width() - _st.img.pxWidth()) / 2 + st::titleTextButton.font->width(_text))); resize(w, _st.size.height()); } diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index b5db91a42..ebec9fe92 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -42,7 +42,7 @@ ConnectingWidget::ConnectingWidget(QWidget *parent, const QString &text, const Q void ConnectingWidget::set(const QString &text, const QString &reconnect) { _text = text; - _textWidth = st::linkFont->m.width(_text) + st::linkFont->spacew; + _textWidth = st::linkFont->width(_text) + st::linkFont->spacew; int32 _reconnectWidth = 0; if (reconnect.isEmpty()) { _reconnect.hide(); @@ -187,7 +187,7 @@ void NotifyWindow::updateNotifyDisplay() { QDateTime now(QDateTime::currentDateTime()), lastTime(item->date); QDate nowDate(now.date()), lastDate(lastTime.date()); QString dt = lastTime.toString(cTimeFormat()); - int32 dtWidth = st::dlgHistFont->m.width(dt); + int32 dtWidth = st::dlgHistFont->width(dt); rectForName.setWidth(rectForName.width() - dtWidth - st::dlgDateSkip); p.setFont(st::dlgDateFont->f); p.setPen(st::dlgDateColor->p); @@ -212,7 +212,7 @@ void NotifyWindow::updateNotifyDisplay() { p.drawText(r.left(), r.top() + st::dlgHistFont->ascent, lng_forward_messages(lt_count, fwdCount)); } } else { - static QString notifyText = st::dlgHistFont->m.elidedText(lang(lng_notification_preview), Qt::ElideRight, itemWidth); + 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); } @@ -222,7 +222,7 @@ void NotifyWindow::updateNotifyDisplay() { history->peer->dialogName().drawElided(p, rectForName.left(), rectForName.top(), rectForName.width()); } else { p.setFont(st::msgNameFont->f); - static QString notifyTitle = st::msgNameFont->m.elidedText(qsl("Telegram Desktop"), Qt::ElideRight, rectForName.width()); + static QString notifyTitle = st::msgNameFont->elided(qsl("Telegram Desktop"), rectForName.width()); p.drawText(rectForName.left(), rectForName.top() + st::msgNameFont->ascent, notifyTitle); } } @@ -770,7 +770,8 @@ void Window::showDocument(DocumentData *doc, HistoryItem *item) { _mediaView->setFocus(); } -void Window::showLayer(LayeredWidget *w, bool fast) { +void Window::showLayer(LayeredWidget *w, bool forceFast) { + bool fast = forceFast || layerShown(); hideLayer(true); layerBG = new BackgroundWidget(this, w); if (fast) { @@ -1059,7 +1060,7 @@ void Window::onShowNewChannel() { void Window::onLogout() { if (isHidden()) showFromTray(); - ConfirmBox *box = new ConfirmBox(lang(lng_sure_logout)); + ConfirmBox *box = new ConfirmBox(lang(lng_sure_logout), lang(lng_box_logout), st::attentionBoxButton); connect(box, SIGNAL(confirmed()), this, SLOT(onLogoutSure())); App::wnd()->showLayer(box); } @@ -1638,7 +1639,7 @@ void Window::placeSmallCounter(QImage &img, int size, int count, style::color bg fontSize = (cntSize < 2) ? 22 : 22; } style::font f(fontSize); - int32 w = f->m.width(cnt), d, r; + int32 w = f->width(cnt), d, r; if (size == 16) { d = (cntSize < 2) ? 2 : 1; r = (cntSize < 2) ? 4 : 3; @@ -1687,7 +1688,7 @@ QImage Window::iconWithCounter(int size, int count, style::color bg, bool smallI fontSize = (cntSize < 2) ? 22 : ((cntSize < 3) ? 20 : 16); } style::font f(fontSize); - int32 w = f->m.width(cnt), d, r; + int32 w = f->width(cnt), d, r; if (size == 16) { d = (cntSize < 2) ? 5 : ((cntSize < 3) ? 2 : 1); r = (cntSize < 2) ? 8 : ((cntSize < 3) ? 7 : 3); diff --git a/Telegram/SourceFiles/window.h b/Telegram/SourceFiles/window.h index be20c0b4b..66cb67901 100644 --- a/Telegram/SourceFiles/window.h +++ b/Telegram/SourceFiles/window.h @@ -178,7 +178,7 @@ public: void showPhoto(PhotoData *photo, HistoryItem *item); void showPhoto(PhotoData *photo, PeerData *item); void showDocument(DocumentData *doc, HistoryItem *item); - void showLayer(LayeredWidget *w, bool fast = false); + void showLayer(LayeredWidget *w, bool forceFast = false); void replaceLayer(LayeredWidget *w); void hideLayer(bool fast = false); bool hideInnerLayer();