Mixed channel access hash to the game score encrypted data.
Added new lang strings for playing game send actions (not done yet). Also moved alot of icons from sprite to separate b&w files.
|
@ -1,33 +0,0 @@
|
|||
/*
|
||||
This file is part of Telegram Desktop,
|
||||
the official desktop version of Telegram messaging app, see https://telegram.org
|
||||
|
||||
Telegram Desktop is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
It is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
In addition, as a special exception, the copyright holders give permission
|
||||
to link the code of portions of this program with the OpenSSL library.
|
||||
|
||||
Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
|
||||
Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
||||
*/
|
||||
|
||||
// Legacy styles
|
||||
using "basic_types.style";
|
||||
using "basic.style";
|
||||
|
||||
using "boxes/boxes.style";
|
||||
using "dialogs/dialogs.style";
|
||||
using "history/history.style";
|
||||
using "overview/overview.style";
|
||||
using "profile/profile.style";
|
||||
using "settings/settings.style";
|
||||
using "media/view/mediaview.style";
|
||||
using "ui/widgets/widgets.style";
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 108 KiB |
|
@ -248,9 +248,7 @@ defaultCheckbox: Checkbox {
|
|||
textPosition: point(32px, 2px);
|
||||
diameter: 22px;
|
||||
thickness: 2px;
|
||||
checkIcon: icon {
|
||||
{ "default_checkbox_check", #ffffff, point(4px, 7px) }
|
||||
};
|
||||
checkIcon: icon {{ "default_checkbox_check", #ffffff, point(4px, 7px) }};
|
||||
|
||||
font: normalFont;
|
||||
duration: 120;
|
||||
|
@ -395,7 +393,7 @@ boxSearchCancel: iconedButton {
|
|||
height: 48px;
|
||||
}
|
||||
|
||||
titleBG: #6389a8;
|
||||
titleBg: #6389a8;
|
||||
titleColor: #0f8dcc;//rgb(20, 136, 210);
|
||||
titleHeight: 39px;
|
||||
titleIconPos: point(7px, 7px);
|
||||
|
@ -443,47 +441,29 @@ btnDefIconed: iconedButton {
|
|||
sysBtnDelta: 6px;
|
||||
sysUpd: sysButton {
|
||||
size: size(31px, 39px);
|
||||
img: sprite(184px, 1px, 19px, 19px);
|
||||
icon: icon {{ "title_button_update", titleBg }};
|
||||
color: #c4d8e9;
|
||||
overColor: white;
|
||||
duration: 150;
|
||||
}
|
||||
updateBlinkDuration: 500;
|
||||
sysMin: sysButton(sysUpd) {
|
||||
img: sprite(207px, 1px, 19px, 19px);
|
||||
icon: icon {{ "title_button_minimize", titleBg }};
|
||||
}
|
||||
sysMax: sysButton(sysUpd) {
|
||||
img: sprite(230px, 1px, 19px, 19px);
|
||||
icon: icon {{ "title_button_maximize", titleBg }};
|
||||
}
|
||||
sysRes: sysButton(sysUpd) {
|
||||
img: sprite(253px, 1px, 19px, 19px);
|
||||
icon: icon {{ "title_button_restore", titleBg }};
|
||||
}
|
||||
sysCls: sysButton(sysUpd) {
|
||||
img: sprite(276px, 1px, 19px, 19px);
|
||||
icon: icon {{ "title_button_close", titleBg }};
|
||||
}
|
||||
sysLock: sysButton(sysUpd) {
|
||||
img: sprite(184px, 22px, 19px, 19px);
|
||||
icon: icon {{ "title_button_lock", titleBg }};
|
||||
}
|
||||
sysUnlock: sysButton(sysUpd) {
|
||||
img: sprite(207px, 22px, 19px, 19px);
|
||||
}
|
||||
titleBackButton: iconedButton(btnDefIconed) {
|
||||
icon: sprite(9px, 104px, 13px, 20px);
|
||||
iconPos: point(5px, 9px);
|
||||
downIcon: sprite(9px, 104px, 13px, 20px);
|
||||
downIconPos: point(5px, 10px);
|
||||
|
||||
bgColor: #c4d8e9;
|
||||
overBgColor: #fff;
|
||||
|
||||
width: -30px;
|
||||
height: 39px;
|
||||
|
||||
opacity: 1.;
|
||||
cursor: cursor(default);
|
||||
|
||||
textPos: point(23px, 10px);
|
||||
downTextPos: point(23px, 11px);
|
||||
icon: icon {{ "title_button_unlock", titleBg }};
|
||||
}
|
||||
|
||||
btnWhiteHover: #f5f5f5;
|
||||
|
@ -809,18 +789,6 @@ noContactsHeight: 100px;
|
|||
noContactsFont: font(fsize);
|
||||
noContactsColor: #777;
|
||||
|
||||
dlgDblCheckImg: sprite(302px, 23px, 17px, 11px);
|
||||
dlgCheckImg: sprite(320px, 23px, 17px, 11px);
|
||||
dlgActiveDblCheckImg: sprite(302px, 36px, 17px, 11px);
|
||||
dlgActiveCheckImg: sprite(320px, 36px, 17px, 11px);
|
||||
dlgSendImg: sprite(122px, 25px, 17px, 11px);
|
||||
dlgActiveSendImg: sprite(142px, 25px, 17px, 11px);
|
||||
|
||||
dlgChatImg: sprite(104px, 26px, 16px, 11px);
|
||||
dlgActiveChatImg: sprite(104px, 37px, 16px, 11px);
|
||||
dlgChannelImg: sprite(105px, 1px, 12px, 11px);
|
||||
dlgActiveChannelImg: sprite(105px, 14px, 12px, 11px);
|
||||
|
||||
dlgFilter: flatInput(inpDefGray) {
|
||||
font: font(fsize);
|
||||
bgColor: #f2f2f2;
|
||||
|
@ -952,9 +920,7 @@ msgReplyPadding: margins(6px, 6px, 11px, 6px);
|
|||
msgReplyBarPos: point(1px, 0px);
|
||||
msgReplyBarSize: size(2px, 36px);
|
||||
msgReplyBarSkip: 10px;
|
||||
msgOutReplyBarColor: #5dc452;
|
||||
msgInReplyBarColor: #2fa9e2;
|
||||
msgOutReplyBarSelColor: #4da79f;
|
||||
msgInReplyBarSelColor: #2fa9e2;
|
||||
|
||||
msgBotKbDuration: 200;
|
||||
|
@ -988,28 +954,7 @@ msgPtr: 8px;
|
|||
msgBG: ":/gui/art/bg.jpg";
|
||||
msgBG0: ":/gui/art/bg0.png";
|
||||
|
||||
msgCheckPos: point(3px, 1px);
|
||||
msgSendingImg: sprite(260px, 20px, 20px, 20px);
|
||||
msgCheckImg: sprite(320px, 0px, 20px, 20px);
|
||||
msgDblCheckImg: sprite(300px, 0px, 20px, 20px);
|
||||
msgSelectCheckImg: sprite(162px, 0px, 20px, 20px);
|
||||
msgSelectDblCheckImg: sprite(142px, 0px, 20px, 20px);
|
||||
msgViewsPos: point(0px, -4px);
|
||||
msgViewsImg: sprite(104px, 48px, 16px, 11px);
|
||||
msgSelectViewsImg: sprite(104px, 70px, 16px, 11px);
|
||||
msgOutViewsImg: sprite(104px, 81px, 16px, 11px);
|
||||
msgSelectOutViewsImg: sprite(104px, 92px, 16px, 11px);
|
||||
msgSendingViewsImg: sprite(104px, 103px, 16px, 11px);
|
||||
msgSendingOutViewsImg: sprite(104px, 125px, 16px, 11px);
|
||||
msgInvSendingImg: sprite(320px, 65px, 20px, 20px);
|
||||
msgInvCheckImg: sprite(280px, 20px, 20px, 20px);
|
||||
msgInvDblCheckImg: sprite(300px, 65px, 20px, 20px);
|
||||
msgInvViewsImg: sprite(104px, 59px, 16px, 11px);
|
||||
msgInvSendingViewsImg: sprite(104px, 114px, 16px, 11px);
|
||||
|
||||
msgDateSpace: 12px;
|
||||
msgDateCheckSpace: 4px;
|
||||
msgDateViewsSpace: 11px;
|
||||
msgDateDelta: point(2px, 5px);
|
||||
|
||||
msgDateImgDelta: 4px;
|
||||
|
@ -1169,79 +1114,6 @@ msgFileOutBg: #78c67f;
|
|||
msgFileOutBgOver: #6bc272;
|
||||
msgFileOutBgSelected: #5fb389;
|
||||
|
||||
msgFileOutImage: icon {
|
||||
{ "msg_file_image", msgOutBg },
|
||||
};
|
||||
msgFileOutImageSelected: icon {
|
||||
{ "msg_file_image", msgOutBgSelected },
|
||||
};
|
||||
msgFileInImage: icon {
|
||||
{ "msg_file_image", msgInBg },
|
||||
};
|
||||
msgFileInImageSelected: icon {
|
||||
{ "msg_file_image", msgInBgSelected },
|
||||
};
|
||||
msgFileOutDocument: icon {
|
||||
{ "msg_file_document", msgOutBg },
|
||||
};
|
||||
msgFileOutDocumentSelected: icon {
|
||||
{ "msg_file_document", msgOutBgSelected },
|
||||
};
|
||||
msgFileInDocument: icon {
|
||||
{ "msg_file_document", msgInBg },
|
||||
};
|
||||
msgFileInDocumentSelected: icon {
|
||||
{ "msg_file_document", msgInBgSelected },
|
||||
};
|
||||
msgFileOutDownload: icon {
|
||||
{ "msg_file_download", msgOutBg },
|
||||
};
|
||||
msgFileOutDownloadSelected: icon {
|
||||
{ "msg_file_download", msgOutBgSelected },
|
||||
};
|
||||
msgFileInDownload: icon {
|
||||
{ "msg_file_download", msgInBg },
|
||||
};
|
||||
msgFileInDownloadSelected: icon {
|
||||
{ "msg_file_download", msgInBgSelected },
|
||||
};
|
||||
msgFileOutCancel: icon {
|
||||
{ "msg_file_cancel", msgOutBg },
|
||||
};
|
||||
msgFileOutCancelSelected: icon {
|
||||
{ "msg_file_cancel", msgOutBgSelected },
|
||||
};
|
||||
msgFileInCancel: icon {
|
||||
{ "msg_file_cancel", msgInBg },
|
||||
};
|
||||
msgFileInCancelSelected: icon {
|
||||
{ "msg_file_cancel", msgInBgSelected },
|
||||
};
|
||||
msgFileOutPause: icon {
|
||||
{ "msg_file_pause", msgOutBg },
|
||||
};
|
||||
msgFileOutPauseSelected: icon {
|
||||
{ "msg_file_pause", msgOutBgSelected },
|
||||
};
|
||||
msgFileInPause: icon {
|
||||
{ "msg_file_pause", msgInBg },
|
||||
};
|
||||
msgFileInPauseSelected: icon {
|
||||
{ "msg_file_pause", msgInBgSelected },
|
||||
};
|
||||
msgFileOutPlay: icon {
|
||||
{ "msg_file_play", msgOutBg },
|
||||
};
|
||||
msgFileOutPlaySelected: icon {
|
||||
{ "msg_file_play", msgOutBgSelected },
|
||||
};
|
||||
msgFileInPlay: icon {
|
||||
{ "msg_file_play", msgInBg },
|
||||
};
|
||||
msgFileInPlaySelected: icon {
|
||||
{ "msg_file_play", msgInBgSelected },
|
||||
};
|
||||
|
||||
msgFileRed: sprite(0px, 425px, 20px, 20px);
|
||||
msgFileYellow: sprite(20px, 425px, 20px, 20px);
|
||||
msgFileGreen: sprite(40px, 425px, 20px, 20px);
|
||||
|
@ -1673,9 +1545,7 @@ dropdownDef: dropdown {
|
|||
width: 0px;
|
||||
}
|
||||
|
||||
defaultInnerDropdownShadow: icon {
|
||||
{ "dropdown_shadow", windowShadowFg },
|
||||
};
|
||||
defaultInnerDropdownShadow: icon {{ "dropdown_shadow", windowShadowFg }};
|
||||
defaultInnerDropdown: InnerDropdown {
|
||||
padding: margins(10px, 10px, 10px, 10px);
|
||||
shadow: defaultInnerDropdownShadow;
|
||||
|
@ -1909,10 +1779,6 @@ stickerPreviewDuration: 150;
|
|||
stickerPreviewBg: #FFFFFFB0;
|
||||
stickerPreviewMin: 0.1;
|
||||
|
||||
verifiedCheck: sprite(285px, 221px, 14px, 14px);
|
||||
verifiedCheckInv: sprite(299px, 221px, 14px, 14px);
|
||||
verifiedCheckPos: point(4px, 2px);
|
||||
|
||||
botKbDuration: 200;
|
||||
botKbBg: #edf1f5;
|
||||
botKbOverBg: #d8e2ec;
|
||||
|
@ -2059,9 +1925,7 @@ mvCaptionRadius: 2px;
|
|||
mvCaptionBg: #11111180;
|
||||
mvCaptionFont: font(fsize);
|
||||
|
||||
medviewSaveMsgCheck: icon {
|
||||
{ "mediaview_save_check", #ffffff }
|
||||
};
|
||||
medviewSaveMsgCheck: icon {{ "mediaview_save_check", #ffffff }};
|
||||
medviewSaveMsgFont: font(16px);
|
||||
medviewSaveMsgPadding: margins(55px, 19px, 29px, 20px);
|
||||
medviewSaveMsgCheckPos: point(23px, 21px);
|
||||
|
|
|
@ -40,7 +40,7 @@ linkButton {
|
|||
|
||||
sysButton {
|
||||
size: size;
|
||||
img: sprite;
|
||||
icon: icon;
|
||||
color: color;
|
||||
overColor: color;
|
||||
duration: int;
|
||||
|
|
BIN
Telegram/Resources/icons/dialogs_channel.png
Normal file
After Width: | Height: | Size: 253 B |
BIN
Telegram/Resources/icons/dialogs_channel@2x.png
Normal file
After Width: | Height: | Size: 433 B |
BIN
Telegram/Resources/icons/dialogs_chat.png
Normal file
After Width: | Height: | Size: 335 B |
BIN
Telegram/Resources/icons/dialogs_chat@2x.png
Normal file
After Width: | Height: | Size: 602 B |
BIN
Telegram/Resources/icons/dialogs_received.png
Normal file
After Width: | Height: | Size: 158 B |
BIN
Telegram/Resources/icons/dialogs_received@2x.png
Normal file
After Width: | Height: | Size: 309 B |
BIN
Telegram/Resources/icons/dialogs_sending.png
Normal file
After Width: | Height: | Size: 223 B |
BIN
Telegram/Resources/icons/dialogs_sending@2x.png
Normal file
After Width: | Height: | Size: 432 B |
BIN
Telegram/Resources/icons/dialogs_sent.png
Normal file
After Width: | Height: | Size: 145 B |
BIN
Telegram/Resources/icons/dialogs_sent@2x.png
Normal file
After Width: | Height: | Size: 261 B |
BIN
Telegram/Resources/icons/dialogs_verified_check.png
Normal file
After Width: | Height: | Size: 180 B |
BIN
Telegram/Resources/icons/dialogs_verified_check@2x.png
Normal file
After Width: | Height: | Size: 281 B |
BIN
Telegram/Resources/icons/dialogs_verified_star.png
Normal file
After Width: | Height: | Size: 342 B |
BIN
Telegram/Resources/icons/dialogs_verified_star@2x.png
Normal file
After Width: | Height: | Size: 660 B |
Before Width: | Height: | Size: 268 B After Width: | Height: | Size: 268 B |
Before Width: | Height: | Size: 401 B After Width: | Height: | Size: 401 B |
Before Width: | Height: | Size: 170 B After Width: | Height: | Size: 170 B |
Before Width: | Height: | Size: 281 B After Width: | Height: | Size: 281 B |
Before Width: | Height: | Size: 174 B After Width: | Height: | Size: 174 B |
Before Width: | Height: | Size: 419 B After Width: | Height: | Size: 419 B |
Before Width: | Height: | Size: 289 B After Width: | Height: | Size: 289 B |
Before Width: | Height: | Size: 468 B After Width: | Height: | Size: 468 B |
Before Width: | Height: | Size: 118 B After Width: | Height: | Size: 118 B |
Before Width: | Height: | Size: 165 B After Width: | Height: | Size: 165 B |
Before Width: | Height: | Size: 242 B After Width: | Height: | Size: 242 B |
Before Width: | Height: | Size: 417 B After Width: | Height: | Size: 417 B |
BIN
Telegram/Resources/icons/history_received.png
Normal file
After Width: | Height: | Size: 163 B |
BIN
Telegram/Resources/icons/history_received@2x.png
Normal file
After Width: | Height: | Size: 320 B |
BIN
Telegram/Resources/icons/history_sent.png
Normal file
After Width: | Height: | Size: 150 B |
BIN
Telegram/Resources/icons/history_sent@2x.png
Normal file
After Width: | Height: | Size: 267 B |
BIN
Telegram/Resources/icons/history_views.png
Normal file
After Width: | Height: | Size: 383 B |
BIN
Telegram/Resources/icons/history_views@2x.png
Normal file
After Width: | Height: | Size: 1,000 B |
BIN
Telegram/Resources/icons/title_button_close.png
Normal file
After Width: | Height: | Size: 169 B |
BIN
Telegram/Resources/icons/title_button_close@2x.png
Normal file
After Width: | Height: | Size: 299 B |
BIN
Telegram/Resources/icons/title_button_lock.png
Normal file
After Width: | Height: | Size: 316 B |
BIN
Telegram/Resources/icons/title_button_lock@2x.png
Normal file
After Width: | Height: | Size: 573 B |
BIN
Telegram/Resources/icons/title_button_maximize.png
Normal file
After Width: | Height: | Size: 124 B |
BIN
Telegram/Resources/icons/title_button_maximize@2x.png
Normal file
After Width: | Height: | Size: 165 B |
BIN
Telegram/Resources/icons/title_button_minimize.png
Normal file
After Width: | Height: | Size: 109 B |
BIN
Telegram/Resources/icons/title_button_minimize@2x.png
Normal file
After Width: | Height: | Size: 147 B |
BIN
Telegram/Resources/icons/title_button_restore.png
Normal file
After Width: | Height: | Size: 144 B |
BIN
Telegram/Resources/icons/title_button_restore@2x.png
Normal file
After Width: | Height: | Size: 185 B |
BIN
Telegram/Resources/icons/title_button_unlock.png
Normal file
After Width: | Height: | Size: 314 B |
BIN
Telegram/Resources/icons/title_button_unlock@2x.png
Normal file
After Width: | Height: | Size: 557 B |
BIN
Telegram/Resources/icons/title_button_update.png
Normal file
After Width: | Height: | Size: 142 B |
BIN
Telegram/Resources/icons/title_button_update@2x.png
Normal file
After Width: | Height: | Size: 218 B |
|
@ -772,12 +772,12 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
|||
"lng_allow_bot" = "Allow";
|
||||
|
||||
"lng_bot_start" = "Start";
|
||||
"lng_bot_choose_group" = "Choose Group";
|
||||
"lng_bot_choose_group" = "Select a Group";
|
||||
"lng_bot_no_groups" = "You have no groups";
|
||||
"lng_bot_groups_not_found" = "No groups found";
|
||||
"lng_bot_sure_invite" = "Add the bot to «{group}»?";
|
||||
"lng_bot_already_in_group" = "The bot is already a member of the group.";
|
||||
"lng_bot_choose_chat" = "Choose Chat";
|
||||
"lng_bot_choose_chat" = "Select a Chat";
|
||||
"lng_bot_no_chats" = "You have no chats";
|
||||
"lng_bot_chats_not_found" = "No chats found";
|
||||
"lng_bot_sure_share_game" = "Share the game with {user}?";
|
||||
|
@ -787,6 +787,10 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
|||
"lng_user_typing" = "{user} is typing";
|
||||
"lng_users_typing" = "{user} and {second_user} are typing";
|
||||
"lng_many_typing" = "{count:_not_used_|# is|# are} typing";
|
||||
"lng_playing_game" = "playing game";
|
||||
"lng_user_playing_game" = "{user} is playing game";
|
||||
"lng_users_playing_game" = "{user} and {second_user} are playing game";
|
||||
"lng_many_playing_game" = "{count:_not_used_|# is|# are} playing game";
|
||||
"lng_send_action_record_video" = "recording a video";
|
||||
"lng_user_action_record_video" = "{user} is recording a video";
|
||||
"lng_send_action_upload_video" = "sending a video";
|
||||
|
|
|
@ -32,6 +32,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
|||
#include "apiwrap.h"
|
||||
#include "observer_peer.h"
|
||||
#include "styles/style_boxes.h"
|
||||
#include "styles/style_dialogs.h"
|
||||
|
||||
AddContactBox::AddContactBox(QString fname, QString lname, QString phone) : AbstractBox(st::boxWidth)
|
||||
, _save(this, lang(lng_add_contact), st::defaultBoxButton)
|
||||
|
@ -1451,8 +1452,9 @@ void RevokePublicLinkBox::paintChat(Painter &p, const ChatRow &row, bool selecte
|
|||
int32 namex = st::contactsPadding.left() + st::contactsPhotoSize + st::contactsPadding.left();
|
||||
int32 namew = width() - namex - st::contactsPadding.right() - (_revokeWidth + st::contactsCheckPosition.x() * 2);
|
||||
if (peer->isVerified()) {
|
||||
namew -= st::verifiedCheck.pxWidth() + st::verifiedCheckPos.x();
|
||||
p.drawSpriteLeft(namex + qMin(row.name.maxWidth(), namew) + st::verifiedCheckPos.x(), st::contactsPadding.top() + st::contactsNameTop + st::verifiedCheckPos.y(), width(), st::verifiedCheck);
|
||||
auto icon = &st::dialogsVerifiedIcon;
|
||||
namew -= icon->width();
|
||||
icon->paint(p, namex + qMin(row.name.maxWidth(), namew), st::contactsPadding.top() + st::contactsNameTop, width());
|
||||
}
|
||||
row.name.drawLeftElided(p, namex, st::contactsPadding.top() + st::contactsNameTop, namew, width());
|
||||
|
||||
|
|
|
@ -80,9 +80,7 @@ shareCheckBorder: windowBg;
|
|||
shareCheckBg: windowActiveBg;
|
||||
shareCheckRadius: 10px;
|
||||
shareCheckSmallRadius: 3px;
|
||||
shareCheckIcon: icon {
|
||||
{ "default_checkbox_check", windowBg, point(3px, 6px) },
|
||||
};
|
||||
shareCheckIcon: icon {{ "default_checkbox_check", windowBg, point(3px, 6px) }};
|
||||
shareNameFont: font(11px);
|
||||
shareNameFg: windowTextFg;
|
||||
shareNameActiveFg: btnYesColor;
|
||||
|
|
|
@ -22,6 +22,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
|||
#include "boxes/contactsbox.h"
|
||||
|
||||
#include "dialogs/dialogs_indexed_list.h"
|
||||
#include "styles/style_dialogs.h"
|
||||
#include "lang.h"
|
||||
#include "boxes/addcontactbox.h"
|
||||
#include "mainwidget.h"
|
||||
|
@ -435,8 +436,9 @@ void ContactsInner::paintDialog(Painter &p, PeerData *peer, ContactData *data, b
|
|||
int32 iconw = (_chat || _creating != CreatingGroupNone) ? (st::contactsCheckPosition.x() * 2 + st::contactsCheckIcon.pxWidth()) : 0;
|
||||
int32 namew = width() - namex - st::contactsPadding.right() - iconw;
|
||||
if (peer->isVerified()) {
|
||||
namew -= st::verifiedCheck.pxWidth() + st::verifiedCheckPos.x();
|
||||
p.drawSpriteLeft(namex + qMin(data->name.maxWidth(), namew) + st::verifiedCheckPos.x(), st::contactsPadding.top() + st::contactsNameTop + st::verifiedCheckPos.y(), width(), st::verifiedCheck);
|
||||
auto icon = &st::dialogsVerifiedIcon;
|
||||
namew -= icon->width();
|
||||
icon->paint(p, namex + qMin(data->name.maxWidth(), namew), st::contactsPadding.top() + st::contactsNameTop, width());
|
||||
}
|
||||
data->name.drawLeftElided(p, namex, st::contactsPadding.top() + st::contactsNameTop, namew, width());
|
||||
|
||||
|
@ -1942,8 +1944,9 @@ void MembersInner::paintDialog(Painter &p, PeerData *peer, MemberData *data, boo
|
|||
int32 namex = st::contactsPadding.left() + st::contactsPhotoSize + st::contactsPadding.left();
|
||||
int32 namew = width() - namex - st::contactsPadding.right() - (data->canKick ? (_kickWidth + st::contactsCheckPosition.x() * 2) : 0);
|
||||
if (peer->isVerified()) {
|
||||
namew -= st::verifiedCheck.pxWidth() + st::verifiedCheckPos.x();
|
||||
p.drawSpriteLeft(namex + qMin(data->name.maxWidth(), namew) + st::verifiedCheckPos.x(), st::contactsPadding.top() + st::contactsNameTop + st::verifiedCheckPos.y(), width(), st::verifiedCheck);
|
||||
auto icon = &st::dialogsVerifiedIcon;
|
||||
namew -= icon->width();
|
||||
icon->paint(p, namex + qMin(data->name.maxWidth(), namew), st::contactsPadding.top() + st::contactsNameTop, width());
|
||||
}
|
||||
data->name.drawLeftElided(p, namex, st::contactsPadding.top() + st::contactsNameTop, namew, width());
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
|||
#include "mainwidget.h"
|
||||
#include "photosendbox.h"
|
||||
#include "history/history_media_types.h"
|
||||
#include "styles/style_history.h"
|
||||
|
||||
PhotoSendBox::PhotoSendBox(const FileLoadResultPtr &file) : AbstractBox(st::boxWideWidth)
|
||||
, _file(file)
|
||||
|
@ -233,7 +234,7 @@ void PhotoSendBox::paintEvent(QPaintEvent *e) {
|
|||
p.drawEllipse(inner);
|
||||
p.setRenderHint(QPainter::HighQualityAntialiasing, false);
|
||||
|
||||
auto icon = &st::msgFileInPlay;
|
||||
auto icon = &st::historyFileInPlay;
|
||||
icon->paintInCenter(p, inner);
|
||||
}
|
||||
} else {
|
||||
|
@ -273,7 +274,7 @@ void PhotoSendBox::paintEvent(QPaintEvent *e) {
|
|||
p.drawEllipse(inner);
|
||||
p.setRenderHint(QPainter::HighQualityAntialiasing, false);
|
||||
|
||||
auto icon = &(_isImage ? st::msgFileOutImage : st::msgFileOutDocument);
|
||||
auto icon = &(_isImage ? st::historyFileOutImage : st::historyFileOutDocument);
|
||||
icon->paintInCenter(p, inner);
|
||||
} else {
|
||||
p.drawPixmapLeft(x + st::msgFilePadding.left(), y + st::msgFilePadding.top(), width(), userDefPhoto(1)->pixCircled(st::msgFileSize));
|
||||
|
@ -555,7 +556,7 @@ void EditCaptionBox::paintEvent(QPaintEvent *e) {
|
|||
p.drawEllipse(inner);
|
||||
p.setRenderHint(QPainter::HighQualityAntialiasing, false);
|
||||
|
||||
auto icon = &st::msgFileInPlay;
|
||||
auto icon = &st::historyFileInPlay;
|
||||
icon->paintInCenter(p, inner);
|
||||
}
|
||||
} else if (_doc) {
|
||||
|
@ -594,7 +595,7 @@ void EditCaptionBox::paintEvent(QPaintEvent *e) {
|
|||
p.drawEllipse(inner);
|
||||
p.setRenderHint(QPainter::HighQualityAntialiasing, false);
|
||||
|
||||
auto icon = &(_isImage ? st::msgFileInImage : st::msgFileInDocument);
|
||||
auto icon = &(_isImage ? st::historyFileInImage : st::historyFileInDocument);
|
||||
icon->paintInCenter(p, inner);
|
||||
}
|
||||
p.setFont(st::semiboldFont);
|
||||
|
|
|
@ -913,15 +913,24 @@ QVector<PeerData*> ShareInner::selected() const {
|
|||
|
||||
QString appendShareGameScoreUrl(const QString &url, const FullMsgId &fullId) {
|
||||
auto shareHashData = QByteArray(0x10, Qt::Uninitialized);
|
||||
auto ints = reinterpret_cast<int32*>(shareHashData.data());
|
||||
ints[0] = MTP::authedId();
|
||||
ints[1] = fullId.channel;
|
||||
ints[2] = fullId.msg;
|
||||
ints[3] = 0;
|
||||
auto shareHashDataInts = reinterpret_cast<int32*>(shareHashData.data());
|
||||
auto channel = fullId.channel ? App::channelLoaded(fullId.channel) : static_cast<ChannelData*>(nullptr);
|
||||
auto channelAccessHash = channel ? channel->access : 0ULL;
|
||||
auto channelAccessHashInts = reinterpret_cast<int32*>(&channelAccessHash);
|
||||
shareHashDataInts[0] = MTP::authedId();
|
||||
shareHashDataInts[1] = fullId.channel;
|
||||
shareHashDataInts[2] = fullId.msg;
|
||||
shareHashDataInts[3] = channelAccessHashInts[0];
|
||||
|
||||
// Count SHA1() of data.
|
||||
auto key128Size = 0x10;
|
||||
auto shareHashEncrypted = QByteArray(key128Size + shareHashData.size(), Qt::Uninitialized);
|
||||
hashSha1(shareHashData.constData(), shareHashData.size(), shareHashEncrypted.data());
|
||||
|
||||
// Mix in channel access hash to the first 64 bits of SHA1 of data.
|
||||
*reinterpret_cast<uint64*>(shareHashEncrypted.data()) ^= *reinterpret_cast<uint64*>(channelAccessHashInts);
|
||||
|
||||
// Encrypt data.
|
||||
if (!Local::encrypt(shareHashData.constData(), shareHashEncrypted.data() + key128Size, shareHashData.size(), shareHashEncrypted.constData())) {
|
||||
return url;
|
||||
}
|
||||
|
@ -1031,29 +1040,51 @@ void shareGameScoreByHash(const QString &hash) {
|
|||
return;
|
||||
}
|
||||
|
||||
// Decrypt data.
|
||||
auto hashData = QByteArray(hashEncrypted.size() - key128Size, Qt::Uninitialized);
|
||||
if (!Local::decrypt(hashEncrypted.constData() + key128Size, hashData.data(), hashEncrypted.size() - key128Size, hashEncrypted.constData())) {
|
||||
return;
|
||||
}
|
||||
|
||||
char checkSha1[20] = { 0 };
|
||||
if (memcmp(hashSha1(hashData.constData(), hashData.size(), checkSha1), hashEncrypted.constData(), key128Size) != 0) {
|
||||
Ui::showLayer(new InformBox(lang(lng_share_wrong_user)));
|
||||
return;
|
||||
}
|
||||
auto ints = reinterpret_cast<int32*>(hashData.data());
|
||||
if (ints[0] != MTP::authedId()) {
|
||||
// Count SHA1() of data.
|
||||
char dataSha1[20] = { 0 };
|
||||
hashSha1(hashData.constData(), hashData.size(), dataSha1);
|
||||
|
||||
// Mix out channel access hash from the first 64 bits of SHA1 of data.
|
||||
auto channelAccessHash = *reinterpret_cast<uint64*>(hashEncrypted.data()) ^ *reinterpret_cast<uint64*>(dataSha1);
|
||||
|
||||
// Check next 64 bits of SHA1() of data.
|
||||
auto skipSha1Part = sizeof(channelAccessHash);
|
||||
if (memcmp(dataSha1 + skipSha1Part, hashEncrypted.constData() + skipSha1Part, key128Size - skipSha1Part) != 0) {
|
||||
Ui::showLayer(new InformBox(lang(lng_share_wrong_user)));
|
||||
return;
|
||||
}
|
||||
|
||||
auto hashDataInts = reinterpret_cast<int32*>(hashData.data());
|
||||
if (hashDataInts[0] != MTP::authedId()) {
|
||||
Ui::showLayer(new InformBox(lang(lng_share_wrong_user)));
|
||||
return;
|
||||
}
|
||||
|
||||
// Check first 32 bits of channel access hash.
|
||||
auto channelAccessHashInts = reinterpret_cast<int32*>(&channelAccessHash);
|
||||
if (channelAccessHashInts[0] != hashDataInts[3]) {
|
||||
Ui::showLayer(new InformBox(lang(lng_share_wrong_user)));
|
||||
return;
|
||||
}
|
||||
|
||||
auto channelId = hashDataInts[1];
|
||||
auto msgId = hashDataInts[2];
|
||||
if (!channelId && channelAccessHash) {
|
||||
// If there is no channel id, there should be no channel access_hash.
|
||||
Ui::showLayer(new InformBox(lang(lng_share_wrong_user)));
|
||||
return;
|
||||
}
|
||||
|
||||
auto channelId = ints[1];
|
||||
auto msgId = ints[2];
|
||||
if (auto item = App::histItemById(channelId, msgId)) {
|
||||
shareGameScoreFromItem(item);
|
||||
} else if (App::api()) {
|
||||
auto channel = channelId ? App::channelLoaded(channelId) : nullptr;
|
||||
if (channel || !channelId) {
|
||||
auto resolveMessageAndShareScore = [msgId](ChannelData *channel) {
|
||||
App::api()->requestMessageData(channel, msgId, [](ChannelData *channel, MsgId msgId) {
|
||||
if (auto item = App::histItemById(channel, msgId)) {
|
||||
shareGameScoreFromItem(item);
|
||||
|
@ -1061,6 +1092,22 @@ void shareGameScoreByHash(const QString &hash) {
|
|||
Ui::showLayer(new InformBox(lang(lng_edit_deleted)));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
auto channel = channelId ? App::channelLoaded(channelId) : nullptr;
|
||||
if (channel || !channelId) {
|
||||
resolveMessageAndShareScore(channel);
|
||||
} else {
|
||||
auto requestChannelIds = MTP_vector<MTPInputChannel>(1, MTP_inputChannel(MTP_int(channelId), MTP_long(channelAccessHash)));
|
||||
auto requestChannel = MTPchannels_GetChannels(requestChannelIds);
|
||||
MTP::send(requestChannel, rpcDone([channelId, resolveMessageAndShareScore](const MTPmessages_Chats &result) {
|
||||
if (result.type() == mtpc_messages_chats) {
|
||||
App::feedChats(result.c_messages_chats().vchats);
|
||||
}
|
||||
if (auto channel = App::channelLoaded(channelId)) {
|
||||
resolveMessageAndShareScore(channel);
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,14 +63,6 @@ dialogsScroll: flatScroll(scrollDef) {
|
|||
bottomsh: 0px;
|
||||
}
|
||||
|
||||
dialogsChatImgPos: point(1px, 4px);
|
||||
dialogsChannelImgPos: point(3px, 4px);
|
||||
dialogsImgSkip: 22px;
|
||||
|
||||
dialogsCheckLeft: 5px;
|
||||
dialogsCheckTop: 4px;
|
||||
dialogsCheckSkip: 3px;
|
||||
|
||||
dialogsTextStyle: textStyle(defaultTextStyle) {
|
||||
linkFg: dialogsTextFgService;
|
||||
linkFgDown: dialogsTextFgService;
|
||||
|
@ -89,9 +81,7 @@ dialogsTextStyleDraftActive: textStyle(dialogsTextStyle) {
|
|||
linkFgDown: #c6e1f7;
|
||||
}
|
||||
|
||||
dialogsNewChatIcon: icon {
|
||||
{ "dialogs_new_chat", #b7b7b7, point(9px, 10px) }
|
||||
};
|
||||
dialogsNewChatIcon: icon {{ "dialogs_new_chat", #b7b7b7, point(9px, 10px) }};
|
||||
dialogsNewChatButton: RoundButton {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
|
@ -108,6 +98,33 @@ dialogsNewChatButton: RoundButton {
|
|||
textBgOver: transparent;
|
||||
}
|
||||
|
||||
settingsEditIcon: icon {
|
||||
{ "dialogs_new_chat", #b7b7b7, point(3px, 9px) }
|
||||
dialogsChatTypeSkip: 22px;
|
||||
dialogsChatIcon: icon {{ "dialogs_chat", #373737, point(1px, 4px) }};
|
||||
dialogsChatActiveIcon: icon {{ "dialogs_chat", #ffffff, point(1px, 4px) }};
|
||||
dialogsChannelIcon: icon {{ "dialogs_channel", #373737, point(3px, 4px) }};
|
||||
dialogsChannelActiveIcon: icon {{ "dialogs_channel", #ffffff, point(3px, 4px) }};
|
||||
|
||||
dialogsSentStateFg: #5dc452;
|
||||
dialogsSendStateSkip: 20px;
|
||||
dialogsSendingIcon: icon {{ "dialogs_sending", #c1c1c1, point(8px, 4px) }};
|
||||
dialogsSendingActiveIcon: icon {{ "dialogs_sending", #ffffff99, point(8px, 4px) }};
|
||||
dialogsSentIcon: icon {{ "dialogs_sent", dialogsSentStateFg, point(10px, 4px) }};
|
||||
dialogsSentActiveIcon: icon {{ "dialogs_sent", #ffffff, point(10px, 4px) }};
|
||||
dialogsReceivedIcon: icon {{ "dialogs_received", dialogsSentStateFg, point(5px, 4px) }};
|
||||
dialogsReceivedActiveIcon: icon {{ "dialogs_received", #ffffff, point(5px, 4px) }};
|
||||
|
||||
dialogsVerifiedIcon: icon {
|
||||
{ "dialogs_verified_star", #4abcf1, point(4px, 2px) },
|
||||
{ "dialogs_verified_check", #ffffff, point(7px, 7px) },
|
||||
};
|
||||
dialogsVerifiedActiveIcon: icon {
|
||||
{ "dialogs_verified_star", #ffffff, point(4px, 2px) },
|
||||
{ "dialogs_verified_check", #6a91b1, point(7px, 7px) },
|
||||
};
|
||||
|
||||
historySendingIcon: icon {{ "dialogs_sending", #98d292, point(5px, 5px) }};
|
||||
historySendingInvertedIcon: icon {{ "dialogs_sending", #ffffffc8, point(5px, 5px) }};
|
||||
historyViewsSendingIcon: icon {{ "dialogs_sending", #a0adb5, point(3px, 0px) }};
|
||||
historyViewsSendingInvertedIcon: icon {{ "dialogs_sending", #ffffffc8, point(3px, 0px) }};
|
||||
|
||||
settingsEditIcon: icon {{ "dialogs_new_chat", #b7b7b7, point(3px, 9px) }};
|
||||
|
|
|
@ -30,7 +30,6 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
|||
|
||||
namespace Dialogs {
|
||||
namespace Layout {
|
||||
|
||||
namespace {
|
||||
|
||||
// Show all dates that are in the last 20 hours in time format.
|
||||
|
@ -69,26 +68,15 @@ void paintRow(Painter &p, History *history, HistoryItem *item, Data::Draft *draf
|
|||
int32 namewidth = w - nameleft - st::dialogsPadding.x();
|
||||
QRect rectForName(nameleft, st::dialogsPadding.y() + st::dialogsNameTop, namewidth, st::msgNameFont->height);
|
||||
|
||||
// draw chat icon
|
||||
if (history->peer->isChat() || history->peer->isMegagroup()) {
|
||||
p.drawSprite(QPoint(rectForName.left() + st::dialogsChatImgPos.x(), rectForName.top() + st::dialogsChatImgPos.y()), (active ? st::dlgActiveChatImg : st::dlgChatImg));
|
||||
rectForName.setLeft(rectForName.left() + st::dialogsImgSkip);
|
||||
} else if (history->peer->isChannel()) {
|
||||
p.drawSprite(QPoint(rectForName.left() + st::dialogsChannelImgPos.x(), rectForName.top() + st::dialogsChannelImgPos.y()), (active ? st::dlgActiveChannelImg : st::dlgChannelImg));
|
||||
rectForName.setLeft(rectForName.left() + st::dialogsImgSkip);
|
||||
if (auto chatTypeIcon = ChatTypeIcon(history->peer, active)) {
|
||||
chatTypeIcon->paint(p, rectForName.topLeft(), w);
|
||||
rectForName.setLeft(rectForName.left() + st::dialogsChatTypeSkip);
|
||||
}
|
||||
|
||||
int texttop = st::dialogsPadding.y() + st::msgNameFont->height + st::dialogsSkip;
|
||||
if (draft) {
|
||||
paintRowDate(p, date, rectForName, active);
|
||||
|
||||
// draw check
|
||||
if (draft->saveRequestId) {
|
||||
auto check = active ? &st::dlgActiveSendImg : &st::dlgSendImg;
|
||||
rectForName.setWidth(rectForName.width() - check->pxWidth() - st::dialogsCheckSkip);
|
||||
p.drawSprite(QPoint(rectForName.left() + rectForName.width() + st::dialogsCheckLeft, rectForName.top() + st::dialogsCheckTop), *check);
|
||||
}
|
||||
|
||||
p.setFont(st::dialogsTextFont);
|
||||
p.setPen(active ? st::dialogsTextFgActive : st::dialogsTextFgService);
|
||||
if (history->typing.isEmpty() && history->sendActions.isEmpty()) {
|
||||
|
@ -116,28 +104,33 @@ void paintRow(Painter &p, History *history, HistoryItem *item, Data::Draft *draf
|
|||
} else if (!item->isEmpty()) {
|
||||
paintRowDate(p, date, rectForName, active);
|
||||
|
||||
// draw check
|
||||
if (item->needCheck()) {
|
||||
const style::sprite *check;
|
||||
paintItemCallback(nameleft, namewidth, item);
|
||||
}
|
||||
auto sendStateIcon = ([draft, item, active]() -> const style::icon* {
|
||||
if (draft) {
|
||||
if (draft->saveRequestId) {
|
||||
return &(active ? st::dialogsSendingActiveIcon : st::dialogsSendingIcon);
|
||||
}
|
||||
} else if (item && !item->isEmpty() && item->needCheck()) {
|
||||
if (item->id > 0) {
|
||||
if (item->unread()) {
|
||||
check = active ? &st::dlgActiveCheckImg : &st::dlgCheckImg;
|
||||
} else {
|
||||
check = active ? &st::dlgActiveDblCheckImg : &st::dlgDblCheckImg;
|
||||
return &(active ? st::dialogsSentActiveIcon : st::dialogsSentIcon);
|
||||
}
|
||||
} else {
|
||||
check = active ? &st::dlgActiveSendImg : &st::dlgSendImg;
|
||||
return &(active ? st::dialogsReceivedActiveIcon : st::dialogsReceivedIcon);
|
||||
}
|
||||
rectForName.setWidth(rectForName.width() - check->pxWidth() - st::dialogsCheckSkip);
|
||||
p.drawSprite(QPoint(rectForName.left() + rectForName.width() + st::dialogsCheckLeft, rectForName.top() + st::dialogsCheckTop), *check);
|
||||
return &(active ? st::dialogsSendingActiveIcon : st::dialogsSendingIcon);
|
||||
}
|
||||
|
||||
paintItemCallback(nameleft, namewidth, item);
|
||||
return nullptr;
|
||||
})();
|
||||
if (sendStateIcon) {
|
||||
rectForName.setWidth(rectForName.width() - st::dialogsSendStateSkip);
|
||||
sendStateIcon->paint(p, rectForName.topLeft() + QPoint(rectForName.width(), 0), w);
|
||||
}
|
||||
|
||||
if (history->peer->isUser() && history->peer->isVerified()) {
|
||||
rectForName.setWidth(rectForName.width() - st::verifiedCheck.pxWidth() - st::verifiedCheckPos.x());
|
||||
p.drawSprite(rectForName.topLeft() + QPoint(qMin(history->peer->dialogName().maxWidth(), rectForName.width()), 0) + st::verifiedCheckPos, (active ? st::verifiedCheckInv : st::verifiedCheck));
|
||||
auto icon = &(active ? st::dialogsVerifiedActiveIcon : st::dialogsVerifiedIcon);
|
||||
rectForName.setWidth(rectForName.width() - icon->width());
|
||||
icon->paint(p, rectForName.topLeft() + QPoint(qMin(history->peer->dialogName().maxWidth(), rectForName.width()), 0), w);
|
||||
}
|
||||
|
||||
p.setPen(active ? st::dialogsTextFgActive : st::dialogsNameFg);
|
||||
|
@ -169,6 +162,15 @@ QImage colorizeCircleHalf(UnreadBadgeSizeData *data, int size, int half, int xof
|
|||
|
||||
} // namepsace
|
||||
|
||||
const style::icon *ChatTypeIcon(PeerData *peer, bool active) {
|
||||
if (peer->isChat() || peer->isMegagroup()) {
|
||||
return &(active ? st::dialogsChatActiveIcon : st::dialogsChatIcon);
|
||||
} else if (peer->isChannel()) {
|
||||
return &(active ? st::dialogsChannelActiveIcon : st::dialogsChannelIcon);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void paintUnreadBadge(Painter &p, const QRect &rect, const UnreadBadgeStyle &st) {
|
||||
t_assert(rect.height() == st.size);
|
||||
|
||||
|
|
|
@ -27,6 +27,8 @@ class FakeRow;
|
|||
|
||||
namespace Layout {
|
||||
|
||||
const style::icon *ChatTypeIcon(PeerData *peer, bool active);
|
||||
|
||||
class RowPainter {
|
||||
public:
|
||||
static void paint(Painter &p, const Row *row, int w, bool active, bool selected, bool onlyBackground);
|
||||
|
|
|
@ -253,16 +253,14 @@ void DialogsInner::peopleResultPaint(PeerData *peer, Painter &p, int32 w, bool a
|
|||
QRect rectForName(nameleft, st::dialogsPadding.y() + st::dialogsNameTop, namewidth, st::msgNameFont->height);
|
||||
|
||||
// draw chat icon
|
||||
if (peer->isChat() || peer->isMegagroup()) {
|
||||
p.drawSprite(QPoint(rectForName.left() + st::dialogsChatImgPos.x(), rectForName.top() + st::dialogsChatImgPos.y()), (active ? st::dlgActiveChatImg : st::dlgChatImg));
|
||||
rectForName.setLeft(rectForName.left() + st::dialogsImgSkip);
|
||||
} else if (peer->isChannel()) {
|
||||
p.drawSprite(QPoint(rectForName.left() + st::dialogsChannelImgPos.x(), rectForName.top() + st::dialogsChannelImgPos.y()), (active ? st::dlgActiveChannelImg : st::dlgChannelImg));
|
||||
rectForName.setLeft(rectForName.left() + st::dialogsImgSkip);
|
||||
if (auto chatTypeIcon = Dialogs::Layout::ChatTypeIcon(peer, active)) {
|
||||
chatTypeIcon->paint(p, rectForName.topLeft(), w);
|
||||
rectForName.setLeft(rectForName.left() + st::dialogsChatTypeSkip);
|
||||
}
|
||||
if (peer->isVerified()) {
|
||||
rectForName.setWidth(rectForName.width() - st::verifiedCheck.pxWidth() - st::verifiedCheckPos.x());
|
||||
p.drawSprite(rectForName.topLeft() + QPoint(qMin(peer->dialogName().maxWidth(), rectForName.width()), 0) + st::verifiedCheckPos, (active ? st::verifiedCheckInv : st::verifiedCheck));
|
||||
auto icon = &(active ? st::dialogsVerifiedActiveIcon : st::dialogsVerifiedIcon);
|
||||
rectForName.setWidth(rectForName.width() - icon->width());
|
||||
icon->paint(p, rectForName.topLeft() + QPoint(qMin(peer->dialogName().maxWidth(), rectForName.width()), 0), w);
|
||||
}
|
||||
|
||||
QRect tr(nameleft, st::dialogsPadding.y() + st::msgNameFont->height + st::dialogsSkip, namewidth, st::dialogsTextFont->height);
|
||||
|
@ -300,13 +298,9 @@ void DialogsInner::searchInPeerPaint(Painter &p, int32 w, bool onlyBackground) c
|
|||
int32 namewidth = w - nameleft - st::dialogsPadding.x() * 2 - st::btnCancelSearch.width;
|
||||
QRect rectForName(nameleft, st::dialogsPadding.y() + st::dialogsNameTop, namewidth, st::msgNameFont->height);
|
||||
|
||||
// draw chat icon
|
||||
if (_searchInPeer->isChat() || _searchInPeer->isMegagroup()) {
|
||||
p.drawSprite(QPoint(rectForName.left() + st::dialogsChatImgPos.x(), rectForName.top() + st::dialogsChatImgPos.y()), st::dlgChatImg);
|
||||
rectForName.setLeft(rectForName.left() + st::dialogsImgSkip);
|
||||
} else if (_searchInPeer->isChannel()) {
|
||||
p.drawSprite(QPoint(rectForName.left() + st::dialogsChannelImgPos.x(), rectForName.top() + st::dialogsChannelImgPos.y()), st::dlgChannelImg);
|
||||
rectForName.setLeft(rectForName.left() + st::dialogsImgSkip);
|
||||
if (auto chatTypeIcon = Dialogs::Layout::ChatTypeIcon(_searchInPeer, false)) {
|
||||
chatTypeIcon->paint(p, rectForName.topLeft(), w);
|
||||
rectForName.setLeft(rectForName.left() + st::dialogsChatTypeSkip);
|
||||
}
|
||||
|
||||
QRect tr(nameleft, st::dialogsPadding.y() + st::msgNameFont->height + st::dialogsSkip, namewidth, st::dialogsTextFont->height);
|
||||
|
|
|
@ -19,6 +19,7 @@ Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
|
|||
Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
||||
*/
|
||||
using "basic.style";
|
||||
using "dialogs/dialogs.style";
|
||||
|
||||
historyToDown: icon {
|
||||
{ "history_down_shadow", #00000040 },
|
||||
|
@ -45,3 +46,49 @@ membersInnerDropdown: InnerDropdown(defaultInnerDropdown) {
|
|||
scrollMargin: margins(0px, 5px, 0px, 5px);
|
||||
scrollPadding: margins(0px, 3px, 8px, 3px);
|
||||
}
|
||||
|
||||
historyFileOutImage: icon {{ "history_file_image", msgOutBg }};
|
||||
historyFileOutImageSelected: icon {{ "history_file_image", msgOutBgSelected }};
|
||||
historyFileInImage: icon {{ "history_file_image", msgInBg }};
|
||||
historyFileInImageSelected: icon {{ "history_file_image", msgInBgSelected }};
|
||||
historyFileOutDocument: icon {{ "history_file_document", msgOutBg }};
|
||||
historyFileOutDocumentSelected: icon {{ "history_file_document", msgOutBgSelected }};
|
||||
historyFileInDocument: icon {{ "history_file_document", msgInBg }};
|
||||
historyFileInDocumentSelected: icon {{ "history_file_document", msgInBgSelected }};
|
||||
historyFileOutDownload: icon {{ "history_file_download", msgOutBg }};
|
||||
historyFileOutDownloadSelected: icon {{ "history_file_download", msgOutBgSelected }};
|
||||
historyFileInDownload: icon {{ "history_file_download", msgInBg }};
|
||||
historyFileInDownloadSelected: icon {{ "history_file_download", msgInBgSelected }};
|
||||
historyFileOutCancel: icon {{ "history_file_cancel", msgOutBg }};
|
||||
historyFileOutCancelSelected: icon {{ "history_file_cancel", msgOutBgSelected }};
|
||||
historyFileInCancel: icon {{ "history_file_cancel", msgInBg }};
|
||||
historyFileInCancelSelected: icon {{ "history_file_cancel", msgInBgSelected }};
|
||||
historyFileOutPause: icon {{ "history_file_pause", msgOutBg }};
|
||||
historyFileOutPauseSelected: icon {{ "history_file_pause", msgOutBgSelected }};
|
||||
historyFileInPause: icon {{ "history_file_pause", msgInBg }};
|
||||
historyFileInPauseSelected: icon {{ "history_file_pause", msgInBgSelected }};
|
||||
historyFileOutPlay: icon {{ "history_file_play", msgOutBg }};
|
||||
historyFileOutPlaySelected: icon {{ "history_file_play", msgOutBgSelected }};
|
||||
historyFileInPlay: icon {{ "history_file_play", msgInBg }};
|
||||
historyFileInPlaySelected: icon {{ "history_file_play", msgInBgSelected }};
|
||||
|
||||
historyOutFg: dialogsSentStateFg;
|
||||
historyOutSelectedFg: #4da79f;
|
||||
historyInvertedFg: #ffffff;
|
||||
historySendStateSpace: 24px;
|
||||
historySendStatePosition: point(-17px, -19px);
|
||||
historySentIcon: icon {{ "history_sent", historyOutFg, point(2px, 4px) }};
|
||||
historySentSelectedIcon: icon {{ "history_sent", historyOutSelectedFg, point(2px, 4px) }};
|
||||
historySentInvertedIcon: icon {{ "history_sent", historyInvertedFg, point(2px, 4px) }};
|
||||
historyReceivedIcon: icon {{ "history_received", historyOutFg, point(2px, 4px) }};
|
||||
historyReceivedSelectedIcon: icon {{ "history_received", historyOutSelectedFg, point(2px, 4px) }};
|
||||
historyReceivedInvertedIcon: icon {{ "history_received", historyInvertedFg, point(2px, 4px) }};
|
||||
|
||||
historyViewsSpace: 11px;
|
||||
historyViewsWidth: 20px;
|
||||
historyViewsTop: -15px;
|
||||
historyViewsInIcon: icon {{ "history_views", #a0acb6 }};
|
||||
historyViewsInSelectedIcon: icon {{ "history_views", #6a9bc5 }};
|
||||
historyViewsOutIcon: icon {{ "history_views", historyOutFg }};
|
||||
historyViewsOutSelectedIcon: icon {{ "history_views", historyOutSelectedFg }};
|
||||
historyViewsInvertedIcon: icon {{ "history_views", #ffffffe6 }};
|
||||
|
|
|
@ -32,6 +32,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
|||
#include "boxes/addcontactbox.h"
|
||||
#include "core/click_handler_types.h"
|
||||
#include "history/history_location_manager.h"
|
||||
#include "styles/style_history.h"
|
||||
|
||||
namespace {
|
||||
|
||||
|
@ -436,11 +437,11 @@ void HistoryPhoto::draw(Painter &p, const QRect &r, TextSelection selection, uin
|
|||
if (radial || _data->loading()) {
|
||||
auto delayed = _data->full->toDelayedStorageImage();
|
||||
if (!delayed || !delayed->location().isNull()) {
|
||||
return &(selected ? st::msgFileInCancelSelected : st::msgFileInCancel);
|
||||
return &(selected ? st::historyFileInCancelSelected : st::historyFileInCancel);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
return &(selected ? st::msgFileInDownloadSelected : st::msgFileInDownload);
|
||||
return &(selected ? st::historyFileInDownloadSelected : st::historyFileInDownload);
|
||||
})();
|
||||
if (icon) {
|
||||
icon->paintInCenter(p, inner);
|
||||
|
@ -772,11 +773,11 @@ void HistoryVideo::draw(Painter &p, const QRect &r, TextSelection selection, uin
|
|||
|
||||
auto icon = ([loaded, radial, this, selected] {
|
||||
if (loaded) {
|
||||
return &(selected ? st::msgFileInPlaySelected : st::msgFileInPlay);
|
||||
return &(selected ? st::historyFileInPlaySelected : st::historyFileInPlay);
|
||||
} else if (radial || _data->loading()) {
|
||||
return &(selected ? st::msgFileInCancelSelected : st::msgFileInCancel);
|
||||
return &(selected ? st::historyFileInCancelSelected : st::historyFileInCancel);
|
||||
}
|
||||
return &(selected ? st::msgFileInDownloadSelected : st::msgFileInDownload);
|
||||
return &(selected ? st::historyFileInDownloadSelected : st::historyFileInDownload);
|
||||
})();
|
||||
icon->paintInCenter(p, inner);
|
||||
if (radial) {
|
||||
|
@ -1125,9 +1126,9 @@ void HistoryDocument::draw(Painter &p, const QRect &r, TextSelection selection,
|
|||
p.setOpacity(radialOpacity);
|
||||
auto icon = ([radial, this, selected] {
|
||||
if (radial || _data->loading()) {
|
||||
return &(selected ? st::msgFileInCancelSelected : st::msgFileInCancel);
|
||||
return &(selected ? st::historyFileInCancelSelected : st::historyFileInCancel);
|
||||
}
|
||||
return &(selected ? st::msgFileInDownloadSelected : st::msgFileInDownload);
|
||||
return &(selected ? st::historyFileInDownloadSelected : st::historyFileInDownload);
|
||||
})();
|
||||
p.setOpacity((radial && loaded) ? _animation->radial.opacity() : 1);
|
||||
icon->paintInCenter(p, inner);
|
||||
|
@ -1177,18 +1178,18 @@ void HistoryDocument::draw(Painter &p, const QRect &r, TextSelection selection,
|
|||
|
||||
auto icon = ([showPause, radial, this, loaded, outbg, selected] {
|
||||
if (showPause) {
|
||||
return &(outbg ? (selected ? st::msgFileOutPauseSelected : st::msgFileOutPause) : (selected ? st::msgFileInPauseSelected : st::msgFileInPause));
|
||||
return &(outbg ? (selected ? st::historyFileOutPauseSelected : st::historyFileOutPause) : (selected ? st::historyFileInPauseSelected : st::historyFileInPause));
|
||||
} else if (radial || _data->loading()) {
|
||||
return &(outbg ? (selected ? st::msgFileOutCancelSelected : st::msgFileOutCancel) : (selected ? st::msgFileInCancelSelected : st::msgFileInCancel));
|
||||
return &(outbg ? (selected ? st::historyFileOutCancelSelected : st::historyFileOutCancel) : (selected ? st::historyFileInCancelSelected : st::historyFileInCancel));
|
||||
} else if (loaded) {
|
||||
if (_data->song() || _data->voice()) {
|
||||
return &(outbg ? (selected ? st::msgFileOutPlaySelected : st::msgFileOutPlay) : (selected ? st::msgFileInPlaySelected : st::msgFileInPlay));
|
||||
return &(outbg ? (selected ? st::historyFileOutPlaySelected : st::historyFileOutPlay) : (selected ? st::historyFileInPlaySelected : st::historyFileInPlay));
|
||||
} else if (_data->isImage()) {
|
||||
return &(outbg ? (selected ? st::msgFileOutImageSelected : st::msgFileOutImage) : (selected ? st::msgFileInImageSelected : st::msgFileInImage));
|
||||
return &(outbg ? (selected ? st::historyFileOutImageSelected : st::historyFileOutImage) : (selected ? st::historyFileInImageSelected : st::historyFileInImage));
|
||||
}
|
||||
return &(outbg ? (selected ? st::msgFileOutDocumentSelected : st::msgFileOutDocument) : (selected ? st::msgFileInDocumentSelected : st::msgFileInDocument));
|
||||
return &(outbg ? (selected ? st::historyFileOutDocumentSelected : st::historyFileOutDocument) : (selected ? st::historyFileInDocumentSelected : st::historyFileInDocument));
|
||||
}
|
||||
return &(outbg ? (selected ? st::msgFileOutDownloadSelected : st::msgFileOutDownload) : (selected ? st::msgFileInDownloadSelected : st::msgFileInDownload));
|
||||
return &(outbg ? (selected ? st::historyFileOutDownloadSelected : st::historyFileOutDownload) : (selected ? st::historyFileInDownloadSelected : st::historyFileInDownload));
|
||||
})();
|
||||
icon->paintInCenter(p, inner);
|
||||
}
|
||||
|
@ -1748,14 +1749,14 @@ void HistoryGif::draw(Painter &p, const QRect &r, TextSelection selection, uint6
|
|||
p.setOpacity(radialOpacity);
|
||||
auto icon = ([this, radial, selected]() -> const style::icon * {
|
||||
if (_data->loaded() && !radial) {
|
||||
return &(selected ? st::msgFileInPlaySelected : st::msgFileInPlay);
|
||||
return &(selected ? st::historyFileInPlaySelected : st::historyFileInPlay);
|
||||
} else if (radial || _data->loading()) {
|
||||
if (_parent->id > 0 || _data->uploading()) {
|
||||
return &(selected ? st::msgFileInCancelSelected : st::msgFileInCancel);
|
||||
return &(selected ? st::historyFileInCancelSelected : st::historyFileInCancel);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
return &(selected ? st::msgFileInDownloadSelected : st::msgFileInDownload);
|
||||
return &(selected ? st::historyFileInDownloadSelected : st::historyFileInDownload);
|
||||
})();
|
||||
if (icon) {
|
||||
icon->paintInCenter(p, inner);
|
||||
|
@ -2652,7 +2653,7 @@ void HistoryWebPage::draw(Painter &p, const QRect &r, TextSelection selection, u
|
|||
bool out = _parent->out(), isPost = _parent->isPost(), outbg = out && !isPost;
|
||||
bool selected = (selection == FullSelection);
|
||||
|
||||
style::color barfg = (selected ? (outbg ? st::msgOutReplyBarSelColor : st::msgInReplyBarSelColor) : (outbg ? st::msgOutReplyBarColor : st::msgInReplyBarColor));
|
||||
style::color barfg = (selected ? (outbg ? st::historyOutSelectedFg : st::msgInReplyBarSelColor) : (outbg ? st::historyOutFg : st::msgInReplyBarColor));
|
||||
style::color semibold = (selected ? (outbg ? st::msgOutServiceFgSelected : st::msgInServiceFgSelected) : (outbg ? st::msgOutServiceFg : st::msgInServiceFg));
|
||||
style::color regular = (selected ? (outbg ? st::msgOutDateFgSelected : st::msgInDateFgSelected) : (outbg ? st::msgOutDateFg : st::msgInDateFg));
|
||||
|
||||
|
@ -3051,7 +3052,7 @@ void HistoryGame::draw(Painter &p, const QRect &r, TextSelection selection, uint
|
|||
bool out = _parent->out(), isPost = _parent->isPost(), outbg = out && !isPost;
|
||||
bool selected = (selection == FullSelection);
|
||||
|
||||
style::color barfg = (selected ? (outbg ? st::msgOutReplyBarSelColor : st::msgInReplyBarSelColor) : (outbg ? st::msgOutReplyBarColor : st::msgInReplyBarColor));
|
||||
style::color barfg = (selected ? (outbg ? st::historyOutSelectedFg : st::msgInReplyBarSelColor) : (outbg ? st::historyOutFg : st::msgInReplyBarColor));
|
||||
style::color semibold = (selected ? (outbg ? st::msgOutServiceFgSelected : st::msgInServiceFgSelected) : (outbg ? st::msgOutServiceFg : st::msgInServiceFg));
|
||||
style::color regular = (selected ? (outbg ? st::msgOutDateFgSelected : st::msgInDateFgSelected) : (outbg ? st::msgOutDateFg : st::msgInDateFg));
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
|||
#include "history/history_service_layout.h"
|
||||
#include "history/history_media_types.h"
|
||||
#include "styles/style_dialogs.h"
|
||||
#include "styles/style_history.h"
|
||||
|
||||
namespace {
|
||||
|
||||
|
@ -244,7 +245,7 @@ void HistoryMessageReply::paint(Painter &p, const HistoryItem *holder, int x, in
|
|||
|
||||
style::color bar;
|
||||
if (flags & PaintInBubble) {
|
||||
bar = ((flags & PaintSelected) ? (outbg ? st::msgOutReplyBarSelColor : st::msgInReplyBarSelColor) : (outbg ? st::msgOutReplyBarColor : st::msgInReplyBarColor));
|
||||
bar = ((flags & PaintSelected) ? (outbg ? st::historyOutSelectedFg : st::msgInReplyBarSelColor) : (outbg ? st::historyOutFg : st::msgInReplyBarColor));
|
||||
} else {
|
||||
bar = st::white;
|
||||
}
|
||||
|
@ -338,8 +339,8 @@ void HistoryMessage::KeyboardStyle::paintButtonIcon(Painter &p, const QRect &rec
|
|||
}
|
||||
|
||||
void HistoryMessage::KeyboardStyle::paintButtonLoading(Painter &p, const QRect &rect) const {
|
||||
style::sprite sprite = st::msgInvSendingImg;
|
||||
p.drawSprite(rect.x() + rect.width() - sprite.pxWidth() - st::msgBotKbIconPadding, rect.y() + rect.height() - sprite.pxHeight() - st::msgBotKbIconPadding, sprite);
|
||||
auto icon = &st::historySendingInvertedIcon;
|
||||
icon->paint(p, rect.x() + rect.width() - icon->width() - st::msgBotKbIconPadding, rect.y() + rect.height() - icon->height() - st::msgBotKbIconPadding, rect.x() * 2 + rect.width());
|
||||
}
|
||||
|
||||
int HistoryMessage::KeyboardStyle::minButtonWidth(HistoryMessageReplyMarkup::Button::Type type) const {
|
||||
|
@ -352,7 +353,7 @@ int HistoryMessage::KeyboardStyle::minButtonWidth(HistoryMessageReplyMarkup::But
|
|||
case Button::Type::SwitchInlineSame:
|
||||
case Button::Type::SwitchInline: iconWidth = st::msgBotKbSwitchPmIcon.pxWidth(); break;
|
||||
case Button::Type::Callback:
|
||||
case Button::Type::Game: iconWidth = st::msgInvSendingImg.pxWidth(); break;
|
||||
case Button::Type::Game: iconWidth = st::historySendingInvertedIcon.width(); break;
|
||||
}
|
||||
if (iconWidth > 0) {
|
||||
result = std::max(result, 2 * iconWidth + 4 * int(st::msgBotKbIconPadding));
|
||||
|
@ -1076,6 +1077,28 @@ bool HistoryMessage::textHasLinks() const {
|
|||
return emptyText() ? false : _text.hasLinks();
|
||||
}
|
||||
|
||||
int HistoryMessage::infoWidth() const {
|
||||
int result = _timeWidth;
|
||||
if (auto views = Get<HistoryMessageViews>()) {
|
||||
result += st::historyViewsSpace + views->_viewsWidth + st::historyViewsWidth;
|
||||
} else if (id < 0 && history()->peer->isSelf()) {
|
||||
result += st::historySendStateSpace;
|
||||
}
|
||||
if (out() && !isPost()) {
|
||||
result += st::historySendStateSpace;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
int HistoryMessage::timeLeft() const {
|
||||
int result = 0;
|
||||
if (auto views = Get<HistoryMessageViews>()) {
|
||||
result += st::historyViewsSpace + views->_viewsWidth + st::historyViewsWidth;
|
||||
} else if (id < 0 && history()->peer->isSelf()) {
|
||||
result += st::historySendStateSpace;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void HistoryMessage::drawInfo(Painter &p, int32 right, int32 bottom, int32 width, bool selected, InfoDisplayType type) const {
|
||||
p.setFont(st::msgDateFont);
|
||||
|
||||
|
@ -1122,43 +1145,38 @@ void HistoryMessage::drawInfo(Painter &p, int32 right, int32 bottom, int32 width
|
|||
p.drawText(dateX, dateY + st::msgDateFont->ascent, _timeText);
|
||||
}
|
||||
|
||||
QPoint iconPos;
|
||||
const style::sprite *iconRect = nullptr;
|
||||
if (auto views = Get<HistoryMessageViews>()) {
|
||||
iconPos = QPoint(infoRight - infoW + st::msgViewsPos.x(), infoBottom - st::msgViewsImg.pxHeight() + st::msgViewsPos.y());
|
||||
auto icon = ([this, outbg, invertedsprites, selected] {
|
||||
if (id > 0) {
|
||||
if (outbg) {
|
||||
return &(invertedsprites ? st::historyViewsInvertedIcon : (selected ? st::historyViewsOutSelectedIcon : st::historyViewsOutIcon));
|
||||
}
|
||||
return &(invertedsprites ? st::historyViewsInvertedIcon : (selected ? st::historyViewsInSelectedIcon : st::historyViewsInIcon));
|
||||
}
|
||||
return &(invertedsprites ? st::historyViewsSendingInvertedIcon : st::historyViewsSendingIcon);
|
||||
})();
|
||||
if (id > 0) {
|
||||
if (outbg) {
|
||||
iconRect = &(invertedsprites ? st::msgInvViewsImg : (selected ? st::msgSelectOutViewsImg : st::msgOutViewsImg));
|
||||
} else {
|
||||
iconRect = &(invertedsprites ? st::msgInvViewsImg : (selected ? st::msgSelectViewsImg : st::msgViewsImg));
|
||||
}
|
||||
p.drawText(iconPos.x() + st::msgViewsImg.pxWidth() + st::msgDateCheckSpace, infoBottom - st::msgDateFont->descent, views->_viewsText);
|
||||
} else {
|
||||
iconPos.setX(iconPos.x() + st::msgDateViewsSpace + views->_viewsWidth);
|
||||
if (outbg) {
|
||||
iconRect = &(invertedsprites ? st::msgInvSendingViewsImg : st::msgSendingOutViewsImg);
|
||||
} else {
|
||||
iconRect = &(invertedsprites ? st::msgInvSendingViewsImg : st::msgSendingViewsImg);
|
||||
}
|
||||
icon->paint(p, infoRight - infoW, infoBottom + st::historyViewsTop, width);
|
||||
p.drawText(infoRight - infoW + st::historyViewsWidth, infoBottom - st::msgDateFont->descent, views->_viewsText);
|
||||
} else if (!outbg) { // sending outbg icon will be painted below
|
||||
auto iconSkip = st::historyViewsSpace + views->_viewsWidth;
|
||||
icon->paint(p, infoRight - infoW + iconSkip, infoBottom + st::historyViewsTop, width);
|
||||
}
|
||||
p.drawSprite(iconPos, *iconRect);
|
||||
} else if (id < 0 && history()->peer->isSelf()) {
|
||||
iconPos = QPoint(infoRight - infoW, infoBottom - st::msgViewsImg.pxHeight() + st::msgViewsPos.y());
|
||||
iconRect = &(invertedsprites ? st::msgInvSendingViewsImg : st::msgSendingViewsImg);
|
||||
p.drawSprite(iconPos, *iconRect);
|
||||
auto icon = &(invertedsprites ? st::historyViewsSendingInvertedIcon : st::historyViewsSendingIcon);
|
||||
icon->paint(p, infoRight - infoW, infoBottom + st::historyViewsTop, width);
|
||||
}
|
||||
if (outbg) {
|
||||
iconPos = QPoint(infoRight - st::msgCheckImg.pxWidth() + st::msgCheckPos.x(), infoBottom - st::msgCheckImg.pxHeight() + st::msgCheckPos.y());
|
||||
if (id > 0) {
|
||||
if (unread()) {
|
||||
iconRect = &(invertedsprites ? st::msgInvCheckImg : (selected ? st::msgSelectCheckImg : st::msgCheckImg));
|
||||
} else {
|
||||
iconRect = &(invertedsprites ? st::msgInvDblCheckImg : (selected ? st::msgSelectDblCheckImg : st::msgDblCheckImg));
|
||||
auto icon = ([this, invertedsprites, selected] {
|
||||
if (id > 0) {
|
||||
if (unread()) {
|
||||
return &(invertedsprites ? st::historySentInvertedIcon : (selected ? st::historySentSelectedIcon : st::historySentIcon));
|
||||
}
|
||||
return &(invertedsprites ? st::historyReceivedInvertedIcon : (selected ? st::historyReceivedSelectedIcon : st::historyReceivedIcon));
|
||||
}
|
||||
} else {
|
||||
iconRect = &(invertedsprites ? st::msgInvSendingImg : st::msgSendingImg);
|
||||
}
|
||||
p.drawSprite(iconPos, *iconRect);
|
||||
return &(invertedsprites ? st::historySendingInvertedIcon : st::historySendingIcon);
|
||||
})();
|
||||
icon->paint(p, QPoint(infoRight, infoBottom) + st::historySendStatePosition, width);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -105,33 +105,14 @@ public:
|
|||
TextWithEntities originalText() const override;
|
||||
bool textHasLinks() const override;
|
||||
|
||||
int32 infoWidth() const override {
|
||||
int32 result = _timeWidth;
|
||||
if (const HistoryMessageViews *views = Get<HistoryMessageViews>()) {
|
||||
result += st::msgDateViewsSpace + views->_viewsWidth + st::msgDateCheckSpace + st::msgViewsImg.pxWidth();
|
||||
} else if (id < 0 && history()->peer->isSelf()) {
|
||||
result += st::msgDateCheckSpace + st::msgCheckImg.pxWidth();
|
||||
}
|
||||
if (out() && !isPost()) {
|
||||
result += st::msgDateCheckSpace + st::msgCheckImg.pxWidth();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
int32 timeLeft() const override {
|
||||
int32 result = 0;
|
||||
if (const HistoryMessageViews *views = Get<HistoryMessageViews>()) {
|
||||
result += st::msgDateViewsSpace + views->_viewsWidth + st::msgDateCheckSpace + st::msgViewsImg.pxWidth();
|
||||
} else if (id < 0 && history()->peer->isSelf()) {
|
||||
result += st::msgDateCheckSpace + st::msgCheckImg.pxWidth();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
int32 timeWidth() const override {
|
||||
int infoWidth() const override;
|
||||
int timeLeft() const override;
|
||||
int timeWidth() const override {
|
||||
return _timeWidth;
|
||||
}
|
||||
|
||||
int32 viewsCount() const override {
|
||||
if (const HistoryMessageViews *views = Get<HistoryMessageViews>()) {
|
||||
int viewsCount() const override {
|
||||
if (auto views = Get<HistoryMessageViews>()) {
|
||||
return views->_views;
|
||||
}
|
||||
return HistoryItem::viewsCount();
|
||||
|
|
|
@ -22,6 +22,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
|||
#include "inline_bots/inline_bot_layout_internal.h"
|
||||
|
||||
#include "styles/style_overview.h"
|
||||
#include "styles/style_history.h"
|
||||
#include "inline_bots/inline_bot_result.h"
|
||||
#include "media/media_clip_reader.h"
|
||||
#include "history/history_location_manager.h"
|
||||
|
@ -179,11 +180,11 @@ void Gif::paint(Painter &p, const QRect &clip, const PaintContext *context) cons
|
|||
p.setOpacity(radialOpacity);
|
||||
auto icon = ([loaded, radial, loading] {
|
||||
if (loaded && !radial) {
|
||||
return &st::msgFileInPlay;
|
||||
return &st::historyFileInPlay;
|
||||
} else if (radial || loading) {
|
||||
return &st::msgFileInCancel;
|
||||
return &st::historyFileInCancel;
|
||||
}
|
||||
return &st::msgFileInDownload;
|
||||
return &st::historyFileInDownload;
|
||||
})();
|
||||
QRect inner((_width - st::msgFileSize) / 2, (height - st::msgFileSize) / 2, st::msgFileSize, st::msgFileSize);
|
||||
icon->paintInCenter(p, inner);
|
||||
|
@ -723,18 +724,18 @@ void File::paint(Painter &p, const QRect &clip, const PaintContext *context) con
|
|||
|
||||
auto icon = ([showPause, radial, document] {
|
||||
if (showPause) {
|
||||
return &st::msgFileInPause;
|
||||
return &st::historyFileInPause;
|
||||
} else if (radial || document->loading()) {
|
||||
return &st::msgFileInCancel;
|
||||
return &st::historyFileInCancel;
|
||||
} else if (true || document->loaded()) {
|
||||
if (document->isImage()) {
|
||||
return &st::msgFileInImage;
|
||||
return &st::historyFileInImage;
|
||||
} else if (document->voice() || document->song()) {
|
||||
return &st::msgFileInPlay;
|
||||
return &st::historyFileInPlay;
|
||||
}
|
||||
return &st::msgFileInDocument;
|
||||
return &st::historyFileInDocument;
|
||||
}
|
||||
return &st::msgFileInDownload;
|
||||
return &st::historyFileInDownload;
|
||||
})();
|
||||
icon->paintInCenter(p, inner);
|
||||
|
||||
|
|
|
@ -220,7 +220,6 @@ void LayerStackWidget::startHide() {
|
|||
if (isHidden() || _hiding) {
|
||||
return;
|
||||
}
|
||||
|
||||
_hiding = true;
|
||||
startAnimation(0);
|
||||
}
|
||||
|
@ -653,13 +652,11 @@ QPixmap MediaPreviewWidget::currentImage() const {
|
|||
if (_cacheStatus != CacheLoaded) {
|
||||
if (_photo->full->loaded()) {
|
||||
QSize s = currentDimensions();
|
||||
LOG(("DIMENSIONS: %1 %2").arg(s.width()).arg(s.height()));
|
||||
_cache = _photo->full->pix(s.width(), s.height());
|
||||
_cacheStatus = CacheLoaded;
|
||||
} else {
|
||||
if (_cacheStatus != CacheThumbLoaded && _photo->thumb->loaded()) {
|
||||
QSize s = currentDimensions();
|
||||
LOG(("DIMENSIONS: %1 %2").arg(s.width()).arg(s.height()));
|
||||
_cache = _photo->thumb->pixBlurred(s.width(), s.height());
|
||||
_cacheStatus = CacheThumbLoaded;
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
|||
#include "stdafx.h"
|
||||
#include "mainwindow.h"
|
||||
|
||||
#include "dialogs/dialogs_layout.h"
|
||||
#include "styles/style_dialogs.h"
|
||||
#include "zip.h"
|
||||
#include "lang.h"
|
||||
|
@ -182,12 +183,9 @@ void NotifyWindow::updateNotifyDisplay() {
|
|||
|
||||
QRect rectForName(st::notifyPhotoPos.x() + st::notifyPhotoSize + st::notifyTextLeft, st::notifyTextTop, itemWidth, st::msgNameFont->height);
|
||||
if (!App::passcoded() && Global::NotifyView() <= dbinvShowName) {
|
||||
if (history->peer->isChat() || history->peer->isMegagroup()) {
|
||||
p.drawSprite(QPoint(rectForName.left() + st::dialogsChatImgPos.x(), rectForName.top() + st::dialogsChatImgPos.y()), st::dlgChatImg);
|
||||
rectForName.setLeft(rectForName.left() + st::dialogsImgSkip);
|
||||
} else if (history->peer->isChannel()) {
|
||||
p.drawSprite(QPoint(rectForName.left() + st::dialogsChannelImgPos.x(), rectForName.top() + st::dialogsChannelImgPos.y()), st::dlgChannelImg);
|
||||
rectForName.setLeft(rectForName.left() + st::dialogsImgSkip);
|
||||
if (auto chatTypeIcon = Dialogs::Layout::ChatTypeIcon(history->peer, false)) {
|
||||
chatTypeIcon->paint(p, rectForName.topLeft(), w);
|
||||
rectForName.setLeft(rectForName.left() + st::dialogsChatTypeSkip);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -39,31 +39,23 @@ mediaviewPlayButton: IconButton {
|
|||
opacity: mediaviewInactiveOpacity;
|
||||
overOpacity: mediaviewActiveOpacity;
|
||||
|
||||
icon: icon {
|
||||
{ "media_play", #ffffff, point(3px, 0px) },
|
||||
};
|
||||
icon: icon {{ "media_play", #ffffff, point(3px, 0px) }};
|
||||
iconPosition: point(3px, 1px);
|
||||
downIconPosition: point(3px, 1px);
|
||||
|
||||
duration: mediaviewOverDuration;
|
||||
}
|
||||
mediaviewPauseIcon: icon {
|
||||
{ "media_pause", #ffffff, point(1px, 1px) }
|
||||
};
|
||||
mediaviewPauseIcon: icon {{ "media_pause", #ffffff, point(1px, 1px) }};
|
||||
mediaviewPlayPauseLeft: 17px;
|
||||
mediaviewFullScreenLeft: 17px;
|
||||
mediaviewVolumeLeft: 15px;
|
||||
|
||||
mediaviewFullScreenButton: IconButton(mediaviewPlayButton) {
|
||||
icon: icon {
|
||||
{ "media_fullscreen_to", #ffffff, point(0px, 0px) },
|
||||
};
|
||||
icon: icon {{ "media_fullscreen_to", #ffffff, point(0px, 0px) }};
|
||||
iconPosition: point(0px, 1px);
|
||||
downIconPosition: point(0px, 1px);
|
||||
}
|
||||
mediaviewFullScreenOutIcon: icon {
|
||||
{ "media_fullscreen_from", #ffffff, point(0px, 0px) },
|
||||
};
|
||||
mediaviewFullScreenOutIcon: icon {{ "media_fullscreen_from", #ffffff, point(0px, 0px) }};
|
||||
|
||||
mediaviewPlaybackActive: #ffffff;
|
||||
mediaviewPlaybackInactive: #474747;
|
||||
|
@ -72,11 +64,7 @@ mediaviewPlaybackTop: 28px;
|
|||
mediaviewSeekSize: size(11px, 11px);
|
||||
|
||||
mediaviewVolumeSize: size(44px, 20px);
|
||||
mediaviewVolumeIcon: icon {
|
||||
{ "media_volume", mediaviewPlaybackInactive, point(0px, 0px) },
|
||||
};
|
||||
mediaviewVolumeOnIcon: icon {
|
||||
{ "media_volume", mediaviewPlaybackActive, point(0px, 0px) },
|
||||
};
|
||||
mediaviewVolumeIcon: icon {{ "media_volume", mediaviewPlaybackInactive, point(0px, 0px) }};
|
||||
mediaviewVolumeOnIcon: icon {{ "media_volume", mediaviewPlaybackActive, point(0px, 0px) }};
|
||||
mediaviewVolumeIconTop: 8px;
|
||||
mediaviewControllerRadius: 25px;
|
||||
|
|
|
@ -22,6 +22,7 @@ Copyright (c) 2014-2016 John Preston, https://desktop.telegram.org
|
|||
#include "overview/overview_layout.h"
|
||||
|
||||
#include "styles/style_overview.h"
|
||||
#include "styles/style_history.h"
|
||||
#include "ui/filedialog.h"
|
||||
#include "boxes/addcontactbox.h"
|
||||
#include "boxes/confirmbox.h"
|
||||
|
@ -335,11 +336,11 @@ void Video::paint(Painter &p, const QRect &clip, TextSelection selection, const
|
|||
p.setOpacity((radial && loaded) ? _radial->opacity() : 1);
|
||||
auto icon = ([radial, loaded, selected] {
|
||||
if (radial) {
|
||||
return &(selected ? st::msgFileInCancelSelected : st::msgFileInCancel);
|
||||
return &(selected ? st::historyFileInCancelSelected : st::historyFileInCancel);
|
||||
} else if (loaded) {
|
||||
return &(selected ? st::msgFileInPlaySelected : st::msgFileInPlay);
|
||||
return &(selected ? st::historyFileInPlaySelected : st::historyFileInPlay);
|
||||
}
|
||||
return &(selected ? st::msgFileInDownloadSelected : st::msgFileInDownload);
|
||||
return &(selected ? st::historyFileInDownloadSelected : st::historyFileInDownload);
|
||||
})();
|
||||
icon->paintInCenter(p, inner);
|
||||
if (radial) {
|
||||
|
@ -463,13 +464,13 @@ void Voice::paint(Painter &p, const QRect &clip, TextSelection selection, const
|
|||
|
||||
auto icon = ([showPause, this, selected] {
|
||||
if (showPause) {
|
||||
return &(selected ? st::msgFileInPauseSelected : st::msgFileInPause);
|
||||
return &(selected ? st::historyFileInPauseSelected : st::historyFileInPause);
|
||||
} else if (_statusSize < 0 || _statusSize == FileStatusSizeLoaded) {
|
||||
return &(selected ? st::msgFileInPlaySelected : st::msgFileInPlay);
|
||||
return &(selected ? st::historyFileInPlaySelected : st::historyFileInPlay);
|
||||
} else if (_data->loading()) {
|
||||
return &(selected ? st::msgFileInCancelSelected : st::msgFileInCancel);
|
||||
return &(selected ? st::historyFileInCancelSelected : st::historyFileInCancel);
|
||||
}
|
||||
return &(selected ? st::msgFileInDownloadSelected : st::msgFileInDownload);
|
||||
return &(selected ? st::historyFileInDownloadSelected : st::historyFileInDownload);
|
||||
})();
|
||||
icon->paintInCenter(p, inner);
|
||||
}
|
||||
|
@ -674,13 +675,13 @@ void Document::paint(Painter &p, const QRect &clip, TextSelection selection, con
|
|||
|
||||
auto icon = ([showPause, loaded, this, selected] {
|
||||
if (showPause) {
|
||||
return &(selected ? st::msgFileInPauseSelected : st::msgFileInPause);
|
||||
return &(selected ? st::historyFileInPauseSelected : st::historyFileInPause);
|
||||
} else if (loaded) {
|
||||
return &(selected ? st::msgFileInPlaySelected : st::msgFileInPlay);
|
||||
return &(selected ? st::historyFileInPlaySelected : st::historyFileInPlay);
|
||||
} else if (_data->loading()) {
|
||||
return &(selected ? st::msgFileInCancelSelected : st::msgFileInCancel);
|
||||
return &(selected ? st::historyFileInCancelSelected : st::historyFileInCancel);
|
||||
}
|
||||
return &(selected ? st::msgFileInDownloadSelected : st::msgFileInDownload);
|
||||
return &(selected ? st::historyFileInDownloadSelected : st::historyFileInDownload);
|
||||
})();
|
||||
icon->paintInCenter(p, inner);
|
||||
}
|
||||
|
@ -750,9 +751,9 @@ void Document::paint(Painter &p, const QRect &clip, TextSelection selection, con
|
|||
p.setOpacity(radialOpacity);
|
||||
auto icon = ([loaded, this, selected] {
|
||||
if (loaded || _data->loading()) {
|
||||
return &(selected ? st::msgFileInCancelSelected : st::msgFileInCancel);
|
||||
return &(selected ? st::historyFileInCancelSelected : st::historyFileInCancel);
|
||||
}
|
||||
return &(selected ? st::msgFileInDownloadSelected : st::msgFileInDownload);
|
||||
return &(selected ? st::historyFileInDownloadSelected : st::historyFileInDownload);
|
||||
})();
|
||||
icon->paintInCenter(p, inner);
|
||||
if (radial) {
|
||||
|
|
|
@ -666,7 +666,7 @@ void MainWindow::psRefreshTaskbarIcon() {
|
|||
w->setWindowFlags(::operator|(Qt::Tool, Qt::FramelessWindowHint));
|
||||
w->setGeometry(x() + 1, y() + 1, 1, 1);
|
||||
QPalette p(w->palette());
|
||||
p.setColor(QPalette::Background, st::titleBG->c);
|
||||
p.setColor(QPalette::Background, st::titleBg->c);
|
||||
QWindow *wnd = w->windowHandle();
|
||||
w->setPalette(p);
|
||||
w->show();
|
||||
|
|
|
@ -25,9 +25,7 @@ profileBg: windowBg;
|
|||
|
||||
profileTopBarHeight: topBarHeight;
|
||||
profileTopBarBackIconFg: #0290d7;
|
||||
profileTopBarBackIcon: icon {
|
||||
{ "topbar_back_arrow", profileTopBarBackIconFg },
|
||||
};
|
||||
profileTopBarBackIcon: icon {{ "topbar_back_arrow", profileTopBarBackIconFg }};
|
||||
profileTopBarBackIconPosition: point(15px, 20px);
|
||||
profileTopBarBackFont: font(14px);
|
||||
profileTopBarBackFg: #1485c2;
|
||||
|
@ -69,9 +67,7 @@ profileSecondaryButton: RoundButton(profilePrimaryButton) {
|
|||
textBg: #ffffff;
|
||||
textBgOver: #f2f7fa;
|
||||
}
|
||||
profileAddMemberIcon: icon {
|
||||
{ "profile_add_member", windowActiveBg, point(20px, 10px) },
|
||||
};
|
||||
profileAddMemberIcon: icon {{ "profile_add_member", windowActiveBg, point(20px, 10px) }};
|
||||
profileAddMemberButton: RoundButton(profileSecondaryButton) {
|
||||
width: 62px;
|
||||
icon: profileAddMemberIcon;
|
||||
|
@ -89,12 +85,8 @@ profileDropAreaBorderWidth: 3px;
|
|||
profileDropAreaDuration: 200;
|
||||
|
||||
profileDividerFg: windowShadowFg;
|
||||
profileDividerLeft: icon {
|
||||
{ "profile_divider_left", profileDividerFg },
|
||||
};
|
||||
profileDividerFill: icon {
|
||||
{ "profile_divider_fill", profileDividerFg },
|
||||
};
|
||||
profileDividerLeft: icon {{ "profile_divider_left", profileDividerFg }};
|
||||
profileDividerFill: icon {{ "profile_divider_fill", profileDividerFg }};
|
||||
|
||||
profileBlocksTop: 7px;
|
||||
profileBlocksBottom: 20px;
|
||||
|
@ -143,9 +135,7 @@ profileMemberStatusPosition: point(68px, 31px);
|
|||
profileMemberStatusFg: windowSubTextFg;
|
||||
profileMemberStatusFgOver: windowSubTextFgOver;
|
||||
profileMemberStatusFgActive: windowActiveTextFg;
|
||||
profileMemberAdminIcon: icon {
|
||||
{ "profile_admin_star", #3babe7, point(4px, 3px) },
|
||||
};
|
||||
profileMemberAdminIcon: icon {{ "profile_admin_star", #3babe7, point(4px, 3px) }};
|
||||
profileLimitReachedLabel: flatLabel(labelDefFlat) {
|
||||
width: 180px;
|
||||
margin: margins(profileMemberPaddingLeft, 9px, profileMemberPaddingLeft, 6px);
|
||||
|
@ -159,8 +149,8 @@ profileReportReasonOther: InputArea(defaultInputArea) {
|
|||
heightMax: 115px;
|
||||
}
|
||||
|
||||
profileVerifiedCheckPosition: point(-3px, 7px);
|
||||
profileVerifiedCheckShift: -3px;
|
||||
profileVerifiedCheck: icon {
|
||||
{ "profile_verified_star", #4abcf1 },
|
||||
{ "profile_verified_check", #ffffff, point(4px, 4px) }
|
||||
{ "profile_verified_star", #4abcf1, point(0px, 7px) },
|
||||
{ "profile_verified_check", #ffffff, point(4px, 11px) }
|
||||
};
|
||||
|
|
|
@ -151,7 +151,7 @@ void CoverWidget::refreshNameGeometry(int newWidth) {
|
|||
int nameTop = _userpicButton->y() + st::profileNameTop - st::profileNameLabel.margin.top();
|
||||
int nameWidth = newWidth - infoLeft - st::profileNameLeft;
|
||||
if (_peer->isVerified()) {
|
||||
nameWidth -= st::profileVerifiedCheckPosition.x() + st::profileVerifiedCheck.width();
|
||||
nameWidth -= st::profileVerifiedCheckShift + st::profileVerifiedCheck.width();
|
||||
}
|
||||
int marginsAdd = st::profileNameLabel.margin.left() + st::profileNameLabel.margin.right();
|
||||
_name->resizeToWidth(qMin(nameWidth - marginsAdd, _name->naturalWidth()) + marginsAdd);
|
||||
|
@ -207,7 +207,7 @@ void CoverWidget::paintEvent(QPaintEvent *e) {
|
|||
p.drawTextLeft(_statusPosition.x(), _statusPosition.y(), width(), _statusText);
|
||||
|
||||
if (_peer->isVerified()) {
|
||||
st::profileVerifiedCheck.paint(p, QPoint(_name->x() + _name->width(), _name->y()) + st::profileVerifiedCheckPosition, width());
|
||||
st::profileVerifiedCheck.paint(p, _name->x() + _name->width() + st::profileVerifiedCheckShift, _name->y(), width());
|
||||
}
|
||||
|
||||
paintDivider(p);
|
||||
|
|
|
@ -39,9 +39,7 @@ settingsFixedBarClose: IconButton {
|
|||
opacity: 0.31;
|
||||
overOpacity: 0.5;
|
||||
|
||||
icon: icon {
|
||||
{ "settings_close", #000000, point(0px, 0px) },
|
||||
};
|
||||
icon: icon {{ "settings_close", #000000, point(0px, 0px) }};
|
||||
iconPosition: point(20px, 20px);
|
||||
downIconPosition: point(20px, 20px);
|
||||
|
||||
|
|
|
@ -40,9 +40,7 @@ featuredStickersAdd: RoundButton(defaultActiveButton) {
|
|||
|
||||
stickerEmojiSkip: 5px;
|
||||
|
||||
stickersAddIcon: icon {
|
||||
{ "stickers_add", #ffffff },
|
||||
};
|
||||
stickersAddIcon: icon {{ "stickers_add", #ffffff }};
|
||||
stickersAddSize: size(30px, 24px);
|
||||
|
||||
stickersFeaturedHeight: 32px;
|
||||
|
@ -55,6 +53,4 @@ stickersFeaturedUnreadBg: msgFileInBg;
|
|||
stickersFeaturedUnreadSize: 5px;
|
||||
stickersFeaturedUnreadSkip: 5px;
|
||||
stickersFeaturedUnreadTop: 7px;
|
||||
stickersFeaturedInstalled: icon {
|
||||
{ "mediaview_save_check", #40ace3 }
|
||||
};
|
||||
stickersFeaturedInstalled: icon {{ "mediaview_save_check", #40ace3 }};
|
||||
|
|
|
@ -32,7 +32,7 @@ SysBtn::SysBtn(QWidget *parent, const style::sysButton &st, const QString &text)
|
|||
, _a_color(animation(this, &SysBtn::step_color))
|
||||
, _overLevel(0)
|
||||
, _text(text) {
|
||||
int32 w = _st.size.width() + (_text.isEmpty() ? 0 : ((_st.size.width() - _st.img.pxWidth()) / 2 + st::titleTextButton.font->width(_text)));
|
||||
int32 w = _st.size.width() + (_text.isEmpty() ? 0 : ((_st.size.width() - _st.icon.width()) / 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)));
|
||||
|
@ -40,7 +40,7 @@ SysBtn::SysBtn(QWidget *parent, const style::sysButton &st, const QString &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->width(_text)));
|
||||
int32 w = _st.size.width() + (_text.isEmpty() ? 0 : ((_st.size.width() - _st.icon.width()) / 2 + st::titleTextButton.font->width(_text)));
|
||||
resize(w, _st.size.height());
|
||||
}
|
||||
|
||||
|
@ -64,7 +64,7 @@ void SysBtn::onStateChange(int oldState, ButtonStateChangeSource source) {
|
|||
void SysBtn::paintEvent(QPaintEvent *e) {
|
||||
Painter p(this);
|
||||
|
||||
int x = width() - ((_st.size.width() + _st.img.pxWidth()) / 2), y = (height() - _st.img.pxHeight()) / 2;
|
||||
int x = width() - ((_st.size.width() + _st.icon.width()) / 2), y = (height() - _st.icon.height()) / 2;
|
||||
QColor c = a_color.current();
|
||||
if (_overLevel > 0) {
|
||||
if (_overLevel >= 1) {
|
||||
|
@ -75,13 +75,13 @@ void SysBtn::paintEvent(QPaintEvent *e) {
|
|||
c.setBlueF(c.blueF() * (1 - _overLevel) + _st.overColor->c.blueF() * _overLevel);
|
||||
}
|
||||
}
|
||||
p.fillRect(x, y, _st.img.pxWidth(), _st.img.pxHeight(), c);
|
||||
p.drawSprite(QPoint(x, y), _st.img);
|
||||
p.fillRect(x, y, _st.icon.width(), _st.icon.height(), c);
|
||||
_st.icon.paint(p, x, y, width());
|
||||
|
||||
if (!_text.isEmpty()) {
|
||||
p.setFont(st::titleTextButton.font->f);
|
||||
p.setPen(c);
|
||||
p.drawText((_st.size.width() - _st.img.pxWidth()) / 2, st::titleTextButton.textTop + st::titleTextButton.font->ascent, _text);
|
||||
p.drawText((_st.size.width() - _st.icon.width()) / 2, st::titleTextButton.textTop + st::titleTextButton.font->ascent, _text);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -101,7 +101,7 @@ TitleWidget::TitleWidget(MainWindow *window) : TWidget(window)
|
|||
|
||||
void TitleWidget::paintEvent(QPaintEvent *e) {
|
||||
Painter p(this);
|
||||
p.fillRect(QRect(0, 0, width(), st::titleHeight), st::titleBG->b);
|
||||
p.fillRect(QRect(0, 0, width(), st::titleHeight), st::titleBg);
|
||||
if (!_cancel.isHidden()) {
|
||||
p.setPen(st::titleTextButton.color->p);
|
||||
p.setFont(st::titleTextButton.font->f);
|
||||
|
|