mirror of
https://github.com/vale981/tdesktop
synced 2025-03-06 02:01:40 -05:00
Move text options constant to a separate module.
Also start MediaView group thumbs code.
This commit is contained in:
parent
54d6673d0b
commit
5b4694a4eb
37 changed files with 721 additions and 257 deletions
|
@ -36,6 +36,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "ui/widgets/labels.h"
|
#include "ui/widgets/labels.h"
|
||||||
#include "ui/toast/toast.h"
|
#include "ui/toast/toast.h"
|
||||||
#include "ui/special_buttons.h"
|
#include "ui/special_buttons.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "mainwidget.h"
|
#include "mainwidget.h"
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "apiwrap.h"
|
#include "apiwrap.h"
|
||||||
|
@ -1378,8 +1379,15 @@ RevokePublicLinkBox::Inner::Inner(QWidget *parent, base::lambda<void()> revokeCa
|
||||||
|
|
||||||
auto row = ChatRow(peer);
|
auto row = ChatRow(peer);
|
||||||
row.peer = peer;
|
row.peer = peer;
|
||||||
row.name.setText(st::contactsNameStyle, peer->name, _textNameOptions);
|
row.name.setText(
|
||||||
row.status.setText(st::defaultTextStyle, Messenger::Instance().createInternalLink(textcmdLink(1, peer->userName())), _textDlgOptions);
|
st::contactsNameStyle,
|
||||||
|
peer->name,
|
||||||
|
Ui::NameTextOptions());
|
||||||
|
row.status.setText(
|
||||||
|
st::defaultTextStyle,
|
||||||
|
Messenger::Instance().createInternalLink(
|
||||||
|
textcmdLink(1, peer->userName())),
|
||||||
|
Ui::DialogTextOptions());
|
||||||
_rows.push_back(std::move(row));
|
_rows.push_back(std::move(row));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "boxes/edit_caption_box.h"
|
#include "boxes/edit_caption_box.h"
|
||||||
|
|
||||||
#include "ui/widgets/input_fields.h"
|
#include "ui/widgets/input_fields.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "media/media_clip_reader.h"
|
#include "media/media_clip_reader.h"
|
||||||
#include "history/history_media_types.h"
|
#include "history/history_media_types.h"
|
||||||
#include "lang/lang_keys.h"
|
#include "lang/lang_keys.h"
|
||||||
|
@ -106,7 +107,7 @@ EditCaptionBox::EditCaptionBox(
|
||||||
_name.setText(
|
_name.setText(
|
||||||
st::semiboldTextStyle,
|
st::semiboldTextStyle,
|
||||||
nameString,
|
nameString,
|
||||||
_textNameOptions);
|
Ui::NameTextOptions());
|
||||||
_status = formatSizeText(doc->size);
|
_status = formatSizeText(doc->size);
|
||||||
_statusw = qMax(
|
_statusw = qMax(
|
||||||
_name.maxWidth(),
|
_name.maxWidth(),
|
||||||
|
|
|
@ -24,10 +24,11 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "ui/widgets/checkbox.h"
|
#include "ui/widgets/checkbox.h"
|
||||||
#include "ui/widgets/labels.h"
|
#include "ui/widgets/labels.h"
|
||||||
#include "ui/widgets/buttons.h"
|
#include "ui/widgets/buttons.h"
|
||||||
#include "styles/style_boxes.h"
|
#include "ui/text_options.h"
|
||||||
#include "ui/special_buttons.h"
|
#include "ui/special_buttons.h"
|
||||||
#include "boxes/calendar_box.h"
|
#include "boxes/calendar_box.h"
|
||||||
#include "data/data_peer_values.h"
|
#include "data/data_peer_values.h"
|
||||||
|
#include "styles/style_boxes.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
@ -128,7 +129,10 @@ EditParticipantBox::Inner::Inner(
|
||||||
st::rightsPhotoButton)
|
st::rightsPhotoButton)
|
||||||
, _hasAdminRights(hasAdminRights) {
|
, _hasAdminRights(hasAdminRights) {
|
||||||
_userPhoto->setPointerCursor(false);
|
_userPhoto->setPointerCursor(false);
|
||||||
_userName.setText(st::rightsNameStyle, App::peerName(_user), _textNameOptions);
|
_userName.setText(
|
||||||
|
st::rightsNameStyle,
|
||||||
|
App::peerName(_user),
|
||||||
|
Ui::NameTextOptions());
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditParticipantBox::Inner::removeControl(QPointer<TWidget> widget) {
|
void EditParticipantBox::Inner::removeControl(QPointer<TWidget> widget) {
|
||||||
|
|
|
@ -34,6 +34,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "ui/effects/ripple_animation.h"
|
#include "ui/effects/ripple_animation.h"
|
||||||
#include "ui/empty_userpic.h"
|
#include "ui/empty_userpic.h"
|
||||||
#include "ui/wrap/slide_wrap.h"
|
#include "ui/wrap/slide_wrap.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "lang/lang_keys.h"
|
#include "lang/lang_keys.h"
|
||||||
#include "observer_peer.h"
|
#include "observer_peer.h"
|
||||||
#include "storage/file_download.h"
|
#include "storage/file_download.h"
|
||||||
|
@ -391,7 +392,7 @@ void PeerListRow::refreshName(const style::PeerListItem &st) {
|
||||||
const auto text = _isSavedMessagesChat
|
const auto text = _isSavedMessagesChat
|
||||||
? lang(lng_saved_messages)
|
? lang(lng_saved_messages)
|
||||||
: peer()->name;
|
: peer()->name;
|
||||||
_name.setText(st.nameStyle, text, _textNameOptions);
|
_name.setText(st.nameStyle, text, Ui::NameTextOptions());
|
||||||
}
|
}
|
||||||
|
|
||||||
PeerListRow::~PeerListRow() = default;
|
PeerListRow::~PeerListRow() = default;
|
||||||
|
@ -516,7 +517,7 @@ void PeerListRow::paintDisabledCheckUserpic(
|
||||||
}
|
}
|
||||||
|
|
||||||
void PeerListRow::setStatusText(const QString &text) {
|
void PeerListRow::setStatusText(const QString &text) {
|
||||||
_status.setText(st::defaultTextStyle, text, _textNameOptions);
|
_status.setText(st::defaultTextStyle, text, Ui::NameTextOptions());
|
||||||
}
|
}
|
||||||
|
|
||||||
float64 PeerListRow::checkedRatio() {
|
float64 PeerListRow::checkedRatio() {
|
||||||
|
|
|
@ -32,6 +32,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "ui/widgets/scroll_area.h"
|
#include "ui/widgets/scroll_area.h"
|
||||||
#include "ui/wrap/fade_wrap.h"
|
#include "ui/wrap/fade_wrap.h"
|
||||||
#include "ui/grouped_layout.h"
|
#include "ui/grouped_layout.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "media/media_clip_reader.h"
|
#include "media/media_clip_reader.h"
|
||||||
#include "window/window_controller.h"
|
#include "window/window_controller.h"
|
||||||
#include "styles/style_history.h"
|
#include "styles/style_history.h"
|
||||||
|
@ -796,7 +797,10 @@ void SingleFilePreview::preparePreview(const Storage::PreparedFile &file) {
|
||||||
const auto filepath = file.path;
|
const auto filepath = file.path;
|
||||||
if (filepath.isEmpty()) {
|
if (filepath.isEmpty()) {
|
||||||
auto filename = filedialogDefaultName(qsl("image"), qsl(".png"), QString(), true);
|
auto filename = filedialogDefaultName(qsl("image"), qsl(".png"), QString(), true);
|
||||||
_nameText.setText(st::semiboldTextStyle, filename, _textNameOptions);
|
_nameText.setText(
|
||||||
|
st::semiboldTextStyle,
|
||||||
|
filename,
|
||||||
|
Ui::NameTextOptions());
|
||||||
_statusText = qsl("%1x%2").arg(preview.width()).arg(preview.height());
|
_statusText = qsl("%1x%2").arg(preview.width()).arg(preview.height());
|
||||||
_statusWidth = qMax(_nameText.maxWidth(), st::normalFont->width(_statusText));
|
_statusWidth = qMax(_nameText.maxWidth(), st::normalFont->width(_statusText));
|
||||||
_fileIsImage = true;
|
_fileIsImage = true;
|
||||||
|
@ -823,7 +827,7 @@ void SingleFilePreview::preparePreview(const Storage::PreparedFile &file) {
|
||||||
_nameText.setText(
|
_nameText.setText(
|
||||||
st::semiboldTextStyle,
|
st::semiboldTextStyle,
|
||||||
nameString,
|
nameString,
|
||||||
_textNameOptions);
|
Ui::NameTextOptions());
|
||||||
_statusText = formatSizeText(fileinfo.size());
|
_statusText = formatSizeText(fileinfo.size());
|
||||||
_statusWidth = qMax(
|
_statusWidth = qMax(
|
||||||
_nameText.maxWidth(),
|
_nameText.maxWidth(),
|
||||||
|
|
|
@ -33,10 +33,11 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "apiwrap.h"
|
#include "apiwrap.h"
|
||||||
#include "ui/toast/toast.h"
|
#include "ui/toast/toast.h"
|
||||||
#include "ui/widgets/multi_select.h"
|
#include "ui/widgets/multi_select.h"
|
||||||
#include "history/history_media_types.h"
|
|
||||||
#include "history/history_message.h"
|
|
||||||
#include "ui/widgets/buttons.h"
|
#include "ui/widgets/buttons.h"
|
||||||
#include "ui/widgets/scroll_area.h"
|
#include "ui/widgets/scroll_area.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
|
#include "history/history_media_types.h"
|
||||||
|
#include "history/history_message.h"
|
||||||
#include "window/themes/window_theme.h"
|
#include "window/themes/window_theme.h"
|
||||||
#include "boxes/peer_list_box.h"
|
#include "boxes/peer_list_box.h"
|
||||||
#include "auth_session.h"
|
#include "auth_session.h"
|
||||||
|
@ -377,7 +378,7 @@ void ShareBox::Inner::updateChatName(
|
||||||
not_null<Chat*> chat,
|
not_null<Chat*> chat,
|
||||||
not_null<PeerData*> peer) {
|
not_null<PeerData*> peer) {
|
||||||
const auto text = peer->isSelf() ? lang(lng_saved_messages) : peer->name;
|
const auto text = peer->isSelf() ? lang(lng_saved_messages) : peer->name;
|
||||||
chat->name.setText(st::shareNameStyle, text, _textNameOptions);
|
chat->name.setText(st::shareNameStyle, text, Ui::NameTextOptions());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShareBox::Inner::repaintChatAtIndex(int index) {
|
void ShareBox::Inner::repaintChatAtIndex(int index) {
|
||||||
|
|
|
@ -36,6 +36,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "window/window_controller.h"
|
#include "window/window_controller.h"
|
||||||
#include "ui/empty_userpic.h"
|
#include "ui/empty_userpic.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
@ -100,7 +101,7 @@ void PeerClickHandler::onClick(Qt::MouseButton button) const {
|
||||||
PeerData::PeerData(const PeerId &id)
|
PeerData::PeerData(const PeerId &id)
|
||||||
: id(id)
|
: id(id)
|
||||||
, _userpicEmpty(createEmptyUserpic()) {
|
, _userpicEmpty(createEmptyUserpic()) {
|
||||||
nameText.setText(st::msgNameStyle, QString(), _textNameOptions);
|
nameText.setText(st::msgNameStyle, QString(), Ui::NameTextOptions());
|
||||||
}
|
}
|
||||||
|
|
||||||
void PeerData::updateNameDelayed(
|
void PeerData::updateNameDelayed(
|
||||||
|
@ -124,7 +125,7 @@ void PeerData::updateNameDelayed(
|
||||||
|
|
||||||
++nameVersion;
|
++nameVersion;
|
||||||
name = newName;
|
name = newName;
|
||||||
nameText.setText(st::msgNameStyle, name, _textNameOptions);
|
nameText.setText(st::msgNameStyle, name, Ui::NameTextOptions());
|
||||||
refreshEmptyUserpic();
|
refreshEmptyUserpic();
|
||||||
|
|
||||||
Notify::PeerUpdate update(this);
|
Notify::PeerUpdate update(this);
|
||||||
|
@ -351,7 +352,10 @@ PeerData::~PeerData() = default;
|
||||||
|
|
||||||
const Text &BotCommand::descriptionText() const {
|
const Text &BotCommand::descriptionText() const {
|
||||||
if (_descriptionText.isEmpty() && !_description.isEmpty()) {
|
if (_descriptionText.isEmpty() && !_description.isEmpty()) {
|
||||||
_descriptionText.setText(st::defaultTextStyle, _description, _textNameOptions);
|
_descriptionText.setText(
|
||||||
|
st::defaultTextStyle,
|
||||||
|
_description,
|
||||||
|
Ui::NameTextOptions());
|
||||||
}
|
}
|
||||||
return _descriptionText;
|
return _descriptionText;
|
||||||
}
|
}
|
||||||
|
@ -491,7 +495,10 @@ void UserData::setBotInfo(const MTPBotInfo &info) {
|
||||||
void UserData::setNameOrPhone(const QString &newNameOrPhone) {
|
void UserData::setNameOrPhone(const QString &newNameOrPhone) {
|
||||||
if (nameOrPhone != newNameOrPhone) {
|
if (nameOrPhone != newNameOrPhone) {
|
||||||
nameOrPhone = newNameOrPhone;
|
nameOrPhone = newNameOrPhone;
|
||||||
phoneText.setText(st::msgNameStyle, nameOrPhone, _textNameOptions);
|
phoneText.setText(
|
||||||
|
st::msgNameStyle,
|
||||||
|
nameOrPhone,
|
||||||
|
Ui::NameTextOptions());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "styles/style_window.h"
|
#include "styles/style_window.h"
|
||||||
#include "ui/widgets/buttons.h"
|
#include "ui/widgets/buttons.h"
|
||||||
#include "ui/widgets/popup_menu.h"
|
#include "ui/widgets/popup_menu.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "data/data_drafts.h"
|
#include "data/data_drafts.h"
|
||||||
#include "lang/lang_keys.h"
|
#include "lang/lang_keys.h"
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
|
@ -1799,7 +1800,7 @@ void DialogsInner::searchInPeer(PeerData *peer, UserData *from) {
|
||||||
_searchInSavedText.setText(
|
_searchInSavedText.setText(
|
||||||
st::msgNameStyle,
|
st::msgNameStyle,
|
||||||
lang(lng_saved_messages),
|
lang(lng_saved_messages),
|
||||||
_textDlgOptions);
|
Ui::DialogTextOptions());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_cancelSearchInPeer->hide();
|
_cancelSearchInPeer->hide();
|
||||||
|
@ -1811,7 +1812,7 @@ void DialogsInner::searchInPeer(PeerData *peer, UserData *from) {
|
||||||
_searchFromUserText.setText(
|
_searchFromUserText.setText(
|
||||||
st::dialogsSearchFromStyle,
|
st::dialogsSearchFromStyle,
|
||||||
fromUserText,
|
fromUserText,
|
||||||
_textDlgOptions);
|
Ui::DialogTextOptions());
|
||||||
_cancelSearchFromUser->show();
|
_cancelSearchFromUser->show();
|
||||||
} else {
|
} else {
|
||||||
_cancelSearchFromUser->hide();
|
_cancelSearchFromUser->hide();
|
||||||
|
|
|
@ -26,6 +26,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "styles/style_dialogs.h"
|
#include "styles/style_dialogs.h"
|
||||||
#include "storage/localstorage.h"
|
#include "storage/localstorage.h"
|
||||||
#include "ui/empty_userpic.h"
|
#include "ui/empty_userpic.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "lang/lang_keys.h"
|
#include "lang/lang_keys.h"
|
||||||
|
|
||||||
namespace Dialogs {
|
namespace Dialogs {
|
||||||
|
@ -156,7 +157,7 @@ void paintRow(
|
||||||
if (history->cloudDraftTextCache.isEmpty()) {
|
if (history->cloudDraftTextCache.isEmpty()) {
|
||||||
auto draftWrapped = textcmdLink(1, lng_dialogs_text_from_wrapped(lt_from, lang(lng_from_draft)));
|
auto draftWrapped = textcmdLink(1, lng_dialogs_text_from_wrapped(lt_from, lang(lng_from_draft)));
|
||||||
auto draftText = lng_dialogs_text_with_from(lt_from_part, draftWrapped, lt_message, TextUtilities::Clean(draft->textWithTags.text));
|
auto draftText = lng_dialogs_text_with_from(lt_from_part, draftWrapped, lt_message, TextUtilities::Clean(draft->textWithTags.text));
|
||||||
history->cloudDraftTextCache.setText(st::dialogsTextStyle, draftText, _textDlgOptions);
|
history->cloudDraftTextCache.setText(st::dialogsTextStyle, draftText, Ui::DialogTextOptions());
|
||||||
}
|
}
|
||||||
p.setPen(active ? st::dialogsTextFgActive : (selected ? st::dialogsTextFgOver : st::dialogsTextFg));
|
p.setPen(active ? st::dialogsTextFgActive : (selected ? st::dialogsTextFgOver : st::dialogsTextFg));
|
||||||
p.setTextPalette(active ? st::dialogsTextPaletteDraftActive : (selected ? st::dialogsTextPaletteDraftOver : st::dialogsTextPaletteDraft));
|
p.setTextPalette(active ? st::dialogsTextPaletteDraftActive : (selected ? st::dialogsTextPaletteDraftOver : st::dialogsTextPaletteDraft));
|
||||||
|
|
|
@ -39,6 +39,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "storage/storage_facade.h"
|
#include "storage/storage_facade.h"
|
||||||
#include "storage/storage_shared_media.h"
|
#include "storage/storage_shared_media.h"
|
||||||
#include "data/data_channel_admins.h"
|
#include "data/data_channel_admins.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "core/crash_reports.h"
|
#include "core/crash_reports.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
@ -62,7 +63,7 @@ auto GlobalPinnedIndex = 0;
|
||||||
|
|
||||||
HistoryItem *createUnsupportedMessage(History *history, MsgId msgId, MTPDmessage::Flags flags, MsgId replyTo, int32 viaBotId, QDateTime date, int32 from) {
|
HistoryItem *createUnsupportedMessage(History *history, MsgId msgId, MTPDmessage::Flags flags, MsgId replyTo, int32 viaBotId, QDateTime date, int32 from) {
|
||||||
auto text = TextWithEntities { lng_message_unsupported(lt_link, qsl("https://desktop.telegram.org")) };
|
auto text = TextWithEntities { lng_message_unsupported(lt_link, qsl("https://desktop.telegram.org")) };
|
||||||
TextUtilities::ParseEntities(text, _historyTextNoMonoOptions.flags);
|
TextUtilities::ParseEntities(text, Ui::ItemTextNoMonoOptions().flags);
|
||||||
text.entities.push_front(EntityInText(EntityInTextItalic, 0, text.text.size()));
|
text.entities.push_front(EntityInText(EntityInTextItalic, 0, text.text.size()));
|
||||||
flags &= ~MTPDmessage::Flag::f_post_author;
|
flags &= ~MTPDmessage::Flag::f_post_author;
|
||||||
return HistoryMessage::create(history, msgId, flags, replyTo, viaBotId, date, from, QString(), text);
|
return HistoryMessage::create(history, msgId, flags, replyTo, viaBotId, date, from, QString(), text);
|
||||||
|
@ -70,11 +71,6 @@ HistoryItem *createUnsupportedMessage(History *history, MsgId msgId, MTPDmessage
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
void HistoryInit() {
|
|
||||||
HistoryInitMessages();
|
|
||||||
HistoryInitMedia();
|
|
||||||
}
|
|
||||||
|
|
||||||
History::History(const PeerId &peerId)
|
History::History(const PeerId &peerId)
|
||||||
: peer(App::peer(peerId))
|
: peer(App::peer(peerId))
|
||||||
, lastItemTextCache(st::dialogsTextWidthMin)
|
, lastItemTextCache(st::dialogsTextWidthMin)
|
||||||
|
@ -364,7 +360,10 @@ bool History::updateSendActionNeedsAnimating(TimeMs ms, bool force) {
|
||||||
}
|
}
|
||||||
if (_sendActionString != newTypingString) {
|
if (_sendActionString != newTypingString) {
|
||||||
_sendActionString = newTypingString;
|
_sendActionString = newTypingString;
|
||||||
_sendActionText.setText(st::dialogsTextStyle, _sendActionString, _textNameOptions);
|
_sendActionText.setText(
|
||||||
|
st::dialogsTextStyle,
|
||||||
|
_sendActionString,
|
||||||
|
Ui::NameTextOptions());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
auto result = (!_typing.isEmpty() || !_sendActions.isEmpty());
|
auto result = (!_typing.isEmpty() || !_sendActions.isEmpty());
|
||||||
|
|
|
@ -30,8 +30,6 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "base/flat_set.h"
|
#include "base/flat_set.h"
|
||||||
#include "base/flags.h"
|
#include "base/flags.h"
|
||||||
|
|
||||||
void HistoryInit();
|
|
||||||
|
|
||||||
class HistoryItem;
|
class HistoryItem;
|
||||||
using HistoryItemsList = std::vector<not_null<HistoryItem*>>;
|
using HistoryItemsList = std::vector<not_null<HistoryItem*>>;
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "history/history_service_layout.h"
|
#include "history/history_service_layout.h"
|
||||||
#include "history/history_media_types.h"
|
#include "history/history_media_types.h"
|
||||||
#include "history/history_item_components.h"
|
#include "history/history_item_components.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "ui/widgets/popup_menu.h"
|
#include "ui/widgets/popup_menu.h"
|
||||||
#include "window/window_controller.h"
|
#include "window/window_controller.h"
|
||||||
#include "window/window_peer_menu.h"
|
#include "window/window_peer_menu.h"
|
||||||
|
@ -1836,7 +1837,10 @@ void HistoryInner::updateBotInfo(bool recount) {
|
||||||
int newh = 0;
|
int newh = 0;
|
||||||
if (_botAbout && !_botAbout->info->description.isEmpty()) {
|
if (_botAbout && !_botAbout->info->description.isEmpty()) {
|
||||||
if (_botAbout->info->text.isEmpty()) {
|
if (_botAbout->info->text.isEmpty()) {
|
||||||
_botAbout->info->text.setText(st::messageTextStyle, _botAbout->info->description, _historyBotNoMonoOptions);
|
_botAbout->info->text.setText(
|
||||||
|
st::messageTextStyle,
|
||||||
|
_botAbout->info->description,
|
||||||
|
Ui::ItemTextBotNoMonoOptions());
|
||||||
if (recount) {
|
if (recount) {
|
||||||
int32 tw = _scroll->width() - st::msgMargin.left() - st::msgMargin.right();
|
int32 tw = _scroll->width() - st::msgMargin.left() - st::msgMargin.right();
|
||||||
if (tw > st::msgMaxWidth) tw = st::msgMaxWidth;
|
if (tw > st::msgMaxWidth) tw = st::msgMaxWidth;
|
||||||
|
|
|
@ -31,6 +31,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "styles/style_dialogs.h"
|
#include "styles/style_dialogs.h"
|
||||||
#include "styles/style_history.h"
|
#include "styles/style_history.h"
|
||||||
#include "ui/effects/ripple_animation.h"
|
#include "ui/effects/ripple_animation.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "storage/file_upload.h"
|
#include "storage/file_upload.h"
|
||||||
#include "storage/storage_facade.h"
|
#include "storage/storage_facade.h"
|
||||||
#include "storage/storage_shared_media.h"
|
#include "storage/storage_shared_media.h"
|
||||||
|
@ -1032,7 +1033,7 @@ void HistoryItem::drawInDialog(
|
||||||
Text &cache) const {
|
Text &cache) const {
|
||||||
if (cacheFor != this) {
|
if (cacheFor != this) {
|
||||||
cacheFor = this;
|
cacheFor = this;
|
||||||
cache.setText(st::dialogsTextStyle, inDialogsText(way), _textDlgOptions);
|
cache.setText(st::dialogsTextStyle, inDialogsText(way), Ui::DialogTextOptions());
|
||||||
}
|
}
|
||||||
if (r.width()) {
|
if (r.width()) {
|
||||||
p.setTextPalette(active ? st::dialogsTextPaletteActive : (selected ? st::dialogsTextPaletteOver : st::dialogsTextPalette));
|
p.setTextPalette(active ? st::dialogsTextPaletteActive : (selected ? st::dialogsTextPaletteOver : st::dialogsTextPalette));
|
||||||
|
|
|
@ -22,6 +22,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
|
|
||||||
#include "lang/lang_keys.h"
|
#include "lang/lang_keys.h"
|
||||||
#include "ui/effects/ripple_animation.h"
|
#include "ui/effects/ripple_animation.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "history/history_service_layout.h"
|
#include "history/history_service_layout.h"
|
||||||
#include "history/history_message.h"
|
#include "history/history_message.h"
|
||||||
#include "history/history_media.h"
|
#include "history/history_media.h"
|
||||||
|
@ -63,7 +64,10 @@ void HistoryMessageSigned::refresh(const QString &date) {
|
||||||
if (timew + namew > st::maxSignatureSize) {
|
if (timew + namew > st::maxSignatureSize) {
|
||||||
name = st::msgDateFont->elided(author, st::maxSignatureSize - timew);
|
name = st::msgDateFont->elided(author, st::maxSignatureSize - timew);
|
||||||
}
|
}
|
||||||
signature.setText(st::msgDateTextStyle, name + time, _textNameOptions);
|
signature.setText(
|
||||||
|
st::msgDateTextStyle,
|
||||||
|
name + time,
|
||||||
|
Ui::NameTextOptions());
|
||||||
}
|
}
|
||||||
|
|
||||||
int HistoryMessageSigned::maxWidth() const {
|
int HistoryMessageSigned::maxWidth() const {
|
||||||
|
@ -72,7 +76,7 @@ int HistoryMessageSigned::maxWidth() const {
|
||||||
|
|
||||||
void HistoryMessageEdited::refresh(const QString &date, bool displayed) {
|
void HistoryMessageEdited::refresh(const QString &date, bool displayed) {
|
||||||
const auto prefix = displayed ? (lang(lng_edited) + ' ') : QString();
|
const auto prefix = displayed ? (lang(lng_edited) + ' ') : QString();
|
||||||
text.setText(st::msgDateTextStyle, prefix + date, _textNameOptions);
|
text.setText(st::msgDateTextStyle, prefix + date, Ui::NameTextOptions());
|
||||||
}
|
}
|
||||||
|
|
||||||
int HistoryMessageEdited::maxWidth() const {
|
int HistoryMessageEdited::maxWidth() const {
|
||||||
|
@ -151,7 +155,10 @@ bool HistoryMessageReply::updateData(HistoryMessage *holder, bool force) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (replyToMsg) {
|
if (replyToMsg) {
|
||||||
replyToText.setText(st::messageTextStyle, TextUtilities::Clean(replyToMsg->inReplyText()), _textDlgOptions);
|
replyToText.setText(
|
||||||
|
st::messageTextStyle,
|
||||||
|
TextUtilities::Clean(replyToMsg->inReplyText()),
|
||||||
|
Ui::DialogTextOptions());
|
||||||
|
|
||||||
updateName();
|
updateName();
|
||||||
|
|
||||||
|
@ -193,7 +200,7 @@ void HistoryMessageReply::updateName() const {
|
||||||
QString name = (replyToVia && replyToMsg->author()->isUser())
|
QString name = (replyToVia && replyToMsg->author()->isUser())
|
||||||
? replyToMsg->author()->asUser()->firstName
|
? replyToMsg->author()->asUser()->firstName
|
||||||
: App::peerName(replyToMsg->author());
|
: App::peerName(replyToMsg->author());
|
||||||
replyToName.setText(st::fwdTextStyle, name, _textNameOptions);
|
replyToName.setText(st::fwdTextStyle, name, Ui::NameTextOptions());
|
||||||
replyToVersion = replyToMsg->author()->nameVersion;
|
replyToVersion = replyToMsg->author()->nameVersion;
|
||||||
bool hasPreview = replyToMsg->getMedia() ? replyToMsg->getMedia()->hasReplyPreview() : false;
|
bool hasPreview = replyToMsg->getMedia() ? replyToMsg->getMedia()->hasReplyPreview() : false;
|
||||||
int32 previewSkip = hasPreview ? (st::msgReplyBarSize.height() + st::msgReplyBarSkip - st::msgReplyBarSize.width() - st::msgReplyBarPos.x()) : 0;
|
int32 previewSkip = hasPreview ? (st::msgReplyBarSize.height() + st::msgReplyBarSkip - st::msgReplyBarSize.width() - st::msgReplyBarPos.x()) : 0;
|
||||||
|
|
|
@ -26,6 +26,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "storage/storage_shared_media.h"
|
#include "storage/storage_shared_media.h"
|
||||||
#include "lang/lang_keys.h"
|
#include "lang/lang_keys.h"
|
||||||
#include "ui/grouped_layout.h"
|
#include "ui/grouped_layout.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "styles/style_history.h"
|
#include "styles/style_history.h"
|
||||||
|
|
||||||
HistoryGroupedMedia::Element::Element(not_null<HistoryItem*> item)
|
HistoryGroupedMedia::Element::Element(not_null<HistoryItem*> item)
|
||||||
|
@ -441,7 +442,7 @@ void HistoryGroupedMedia::updateNeedBubbleState() {
|
||||||
_caption.setText(
|
_caption.setText(
|
||||||
st::messageTextStyle,
|
st::messageTextStyle,
|
||||||
captionText.text + _parent->skipBlock(),
|
captionText.text + _parent->skipBlock(),
|
||||||
itemTextNoMonoOptions(_parent));
|
Ui::ItemTextNoMonoOptions(_parent));
|
||||||
_needBubble = computeNeedBubble();
|
_needBubble = computeNeedBubble();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,44 +41,13 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "calls/calls_instance.h"
|
#include "calls/calls_instance.h"
|
||||||
#include "ui/empty_userpic.h"
|
#include "ui/empty_userpic.h"
|
||||||
#include "ui/grouped_layout.h"
|
#include "ui/grouped_layout.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
constexpr auto kMaxGifForwardedBarLines = 4;
|
constexpr auto kMaxGifForwardedBarLines = 4;
|
||||||
constexpr auto kMaxOriginalEntryLines = 8192;
|
constexpr auto kMaxOriginalEntryLines = 8192;
|
||||||
|
|
||||||
TextParseOptions _webpageTitleOptions = {
|
|
||||||
TextParseMultiline | TextParseRichText, // flags
|
|
||||||
0, // maxw
|
|
||||||
0, // maxh
|
|
||||||
Qt::LayoutDirectionAuto, // dir
|
|
||||||
};
|
|
||||||
TextParseOptions _webpageDescriptionOptions = {
|
|
||||||
TextParseLinks | TextParseMentions | TextParseHashtags | TextParseMultiline | TextParseRichText | TextParseMarkdown, // flags
|
|
||||||
0, // maxw
|
|
||||||
0, // maxh
|
|
||||||
Qt::LayoutDirectionAuto, // dir
|
|
||||||
};
|
|
||||||
TextParseOptions _twitterDescriptionOptions = {
|
|
||||||
TextParseLinks | TextParseMentions | TextTwitterMentions | TextParseHashtags | TextTwitterHashtags | TextParseMultiline | TextParseRichText, // flags
|
|
||||||
0, // maxw
|
|
||||||
0, // maxh
|
|
||||||
Qt::LayoutDirectionAuto, // dir
|
|
||||||
};
|
|
||||||
TextParseOptions _instagramDescriptionOptions = {
|
|
||||||
TextParseLinks | TextParseMentions | TextInstagramMentions | TextParseHashtags | TextInstagramHashtags | TextParseMultiline | TextParseRichText, // flags
|
|
||||||
0, // maxw
|
|
||||||
0, // maxh
|
|
||||||
Qt::LayoutDirectionAuto, // dir
|
|
||||||
};
|
|
||||||
|
|
||||||
inline void initTextOptions() {
|
|
||||||
_webpageTitleOptions.maxw = st::msgMaxWidth - st::msgPadding.left() - st::msgPadding.right() - st::webPageLeft;
|
|
||||||
_webpageTitleOptions.maxh = st::webPageTitleFont->height * 2;
|
|
||||||
_webpageDescriptionOptions.maxw = st::msgMaxWidth - st::msgPadding.left() - st::msgPadding.right() - st::webPageLeft;
|
|
||||||
_webpageDescriptionOptions.maxh = st::webPageDescriptionFont->height * 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool needReSetInlineResultDocument(const MTPMessageMedia &media, DocumentData *existing) {
|
bool needReSetInlineResultDocument(const MTPMessageMedia &media, DocumentData *existing) {
|
||||||
if (media.type() == mtpc_messageMediaDocument) {
|
if (media.type() == mtpc_messageMediaDocument) {
|
||||||
auto &mediaDocument = media.c_messageMediaDocument();
|
auto &mediaDocument = media.c_messageMediaDocument();
|
||||||
|
@ -121,10 +90,6 @@ int32 gifMaxStatusWidth(DocumentData *document) {
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
void HistoryInitMedia() {
|
|
||||||
initTextOptions();
|
|
||||||
}
|
|
||||||
|
|
||||||
TextWithEntities WithCaptionSelectedText(
|
TextWithEntities WithCaptionSelectedText(
|
||||||
const QString &attachType,
|
const QString &attachType,
|
||||||
const Text &caption,
|
const Text &caption,
|
||||||
|
@ -263,7 +228,7 @@ HistoryPhoto::HistoryPhoto(
|
||||||
_caption.setText(
|
_caption.setText(
|
||||||
st::messageTextStyle,
|
st::messageTextStyle,
|
||||||
caption + _parent->skipBlock(),
|
caption + _parent->skipBlock(),
|
||||||
itemTextNoMonoOptions(_parent));
|
Ui::ItemTextNoMonoOptions(_parent));
|
||||||
}
|
}
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
@ -864,7 +829,7 @@ HistoryVideo::HistoryVideo(
|
||||||
_caption.setText(
|
_caption.setText(
|
||||||
st::messageTextStyle,
|
st::messageTextStyle,
|
||||||
caption + _parent->skipBlock(),
|
caption + _parent->skipBlock(),
|
||||||
itemTextNoMonoOptions(_parent));
|
Ui::ItemTextNoMonoOptions(_parent));
|
||||||
}
|
}
|
||||||
|
|
||||||
setDocumentLinks(_data, parent);
|
setDocumentLinks(_data, parent);
|
||||||
|
@ -1386,7 +1351,10 @@ HistoryDocument::HistoryDocument(
|
||||||
setStatusSize(FileStatusSizeReady);
|
setStatusSize(FileStatusSizeReady);
|
||||||
|
|
||||||
if (auto captioned = Get<HistoryDocumentCaptioned>()) {
|
if (auto captioned = Get<HistoryDocumentCaptioned>()) {
|
||||||
captioned->_caption.setText(st::messageTextStyle, caption + _parent->skipBlock(), itemTextNoMonoOptions(_parent));
|
captioned->_caption.setText(
|
||||||
|
st::messageTextStyle,
|
||||||
|
caption + _parent->skipBlock(),
|
||||||
|
Ui::ItemTextNoMonoOptions(_parent));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2174,7 +2142,10 @@ HistoryGif::HistoryGif(
|
||||||
setStatusSize(FileStatusSizeReady);
|
setStatusSize(FileStatusSizeReady);
|
||||||
|
|
||||||
if (!caption.isEmpty() && !_data->isVideoMessage()) {
|
if (!caption.isEmpty() && !_data->isVideoMessage()) {
|
||||||
_caption.setText(st::messageTextStyle, caption + _parent->skipBlock(), itemTextNoMonoOptions(_parent));
|
_caption.setText(
|
||||||
|
st::messageTextStyle,
|
||||||
|
caption + _parent->skipBlock(),
|
||||||
|
Ui::ItemTextNoMonoOptions(_parent));
|
||||||
}
|
}
|
||||||
|
|
||||||
_data->thumb->load();
|
_data->thumb->load();
|
||||||
|
@ -3310,7 +3281,10 @@ HistoryContact::HistoryContact(not_null<HistoryItem*> parent, int32 userId, cons
|
||||||
, _fname(first)
|
, _fname(first)
|
||||||
, _lname(last)
|
, _lname(last)
|
||||||
, _phone(App::formatPhone(phone)) {
|
, _phone(App::formatPhone(phone)) {
|
||||||
_name.setText(st::semiboldTextStyle, lng_full_name(lt_first_name, first, lt_last_name, last).trimmed(), _textNameOptions);
|
_name.setText(
|
||||||
|
st::semiboldTextStyle,
|
||||||
|
lng_full_name(lt_first_name, first, lt_last_name, last).trimmed(),
|
||||||
|
Ui::NameTextOptions());
|
||||||
_phonew = st::normalFont->width(_phone);
|
_phonew = st::normalFont->width(_phone);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3701,12 +3675,6 @@ void HistoryWebPage::initDimensions() {
|
||||||
if (textFloatsAroundInfo) {
|
if (textFloatsAroundInfo) {
|
||||||
text.text += _parent->skipBlock();
|
text.text += _parent->skipBlock();
|
||||||
}
|
}
|
||||||
auto opts = &_webpageDescriptionOptions;
|
|
||||||
if (_data->siteName == qstr("Twitter")) {
|
|
||||||
opts = &_twitterDescriptionOptions;
|
|
||||||
} else if (_data->siteName == qstr("Instagram")) {
|
|
||||||
opts = &_instagramDescriptionOptions;
|
|
||||||
}
|
|
||||||
if (isLogEntryOriginal()) {
|
if (isLogEntryOriginal()) {
|
||||||
// Fix layout for small bubbles (narrow media caption edit log entries).
|
// Fix layout for small bubbles (narrow media caption edit log entries).
|
||||||
_description = Text(st::minPhotoSize
|
_description = Text(st::minPhotoSize
|
||||||
|
@ -3714,13 +3682,19 @@ void HistoryWebPage::initDimensions() {
|
||||||
- st::msgPadding.right()
|
- st::msgPadding.right()
|
||||||
- st::webPageLeft);
|
- st::webPageLeft);
|
||||||
}
|
}
|
||||||
_description.setMarkedText(st::webPageDescriptionStyle, text, *opts);
|
_description.setMarkedText(
|
||||||
|
st::webPageDescriptionStyle,
|
||||||
|
text,
|
||||||
|
Ui::WebpageTextDescriptionOptions(_data->siteName));
|
||||||
}
|
}
|
||||||
if (_title.isEmpty() && !title.isEmpty()) {
|
if (_title.isEmpty() && !title.isEmpty()) {
|
||||||
if (textFloatsAroundInfo && _description.isEmpty()) {
|
if (textFloatsAroundInfo && _description.isEmpty()) {
|
||||||
title += _parent->skipBlock();
|
title += _parent->skipBlock();
|
||||||
}
|
}
|
||||||
_title.setText(st::webPageTitleStyle, title, _webpageTitleOptions);
|
_title.setText(
|
||||||
|
st::webPageTitleStyle,
|
||||||
|
title,
|
||||||
|
Ui::WebpageTextTitleOptions());
|
||||||
}
|
}
|
||||||
if (!_siteNameWidth && !_data->siteName.isEmpty()) {
|
if (!_siteNameWidth && !_data->siteName.isEmpty()) {
|
||||||
_siteNameWidth = st::webPageTitleFont->width(_data->siteName);
|
_siteNameWidth = st::webPageTitleFont->width(_data->siteName);
|
||||||
|
@ -4263,11 +4237,17 @@ void HistoryGame::initDimensions() {
|
||||||
auto marked = TextWithEntities { text };
|
auto marked = TextWithEntities { text };
|
||||||
auto parseFlags = TextParseLinks | TextParseMultiline | TextParseRichText;
|
auto parseFlags = TextParseLinks | TextParseMultiline | TextParseRichText;
|
||||||
TextUtilities::ParseEntities(marked, parseFlags);
|
TextUtilities::ParseEntities(marked, parseFlags);
|
||||||
_description.setMarkedText(st::webPageDescriptionStyle, marked, _webpageDescriptionOptions);
|
_description.setMarkedText(
|
||||||
|
st::webPageDescriptionStyle,
|
||||||
|
marked,
|
||||||
|
Ui::WebpageTextDescriptionOptions());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_title.isEmpty() && !title.isEmpty()) {
|
if (_title.isEmpty() && !title.isEmpty()) {
|
||||||
_title.setText(st::webPageTitleStyle, title, _webpageTitleOptions);
|
_title.setText(
|
||||||
|
st::webPageTitleStyle,
|
||||||
|
title,
|
||||||
|
Ui::WebpageTextTitleOptions());
|
||||||
}
|
}
|
||||||
|
|
||||||
// init dimensions
|
// init dimensions
|
||||||
|
@ -4529,7 +4509,10 @@ TextSelection HistoryGame::adjustSelection(TextSelection selection, TextSelectTy
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HistoryGame::consumeMessageText(const TextWithEntities &textWithEntities) {
|
bool HistoryGame::consumeMessageText(const TextWithEntities &textWithEntities) {
|
||||||
_description.setMarkedText(st::webPageDescriptionStyle, textWithEntities, itemTextOptions(_parent));
|
_description.setMarkedText(
|
||||||
|
st::webPageDescriptionStyle,
|
||||||
|
textWithEntities,
|
||||||
|
Ui::ItemTextOptions(_parent));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4702,7 +4685,10 @@ void HistoryInvoice::fillFromData(const MTPDmessageMediaInvoice &data) {
|
||||||
};
|
};
|
||||||
statusText.entities.push_back(EntityInText(EntityInTextBold, 0, statusText.text.size()));
|
statusText.entities.push_back(EntityInText(EntityInTextBold, 0, statusText.text.size()));
|
||||||
statusText.text += ' ' + labelText().toUpper();
|
statusText.text += ' ' + labelText().toUpper();
|
||||||
_status.setMarkedText(st::defaultTextStyle, statusText, itemTextOptions(_parent));
|
_status.setMarkedText(
|
||||||
|
st::defaultTextStyle,
|
||||||
|
statusText,
|
||||||
|
Ui::ItemTextOptions(_parent));
|
||||||
|
|
||||||
_receiptMsgId = data.has_receipt_msg_id() ? data.vreceipt_msg_id.v : 0;
|
_receiptMsgId = data.has_receipt_msg_id() ? data.vreceipt_msg_id.v : 0;
|
||||||
|
|
||||||
|
@ -4712,11 +4698,17 @@ void HistoryInvoice::fillFromData(const MTPDmessageMediaInvoice &data) {
|
||||||
auto marked = TextWithEntities { description };
|
auto marked = TextWithEntities { description };
|
||||||
auto parseFlags = TextParseLinks | TextParseMultiline | TextParseRichText;
|
auto parseFlags = TextParseLinks | TextParseMultiline | TextParseRichText;
|
||||||
TextUtilities::ParseEntities(marked, parseFlags);
|
TextUtilities::ParseEntities(marked, parseFlags);
|
||||||
_description.setMarkedText(st::webPageDescriptionStyle, marked, _webpageDescriptionOptions);
|
_description.setMarkedText(
|
||||||
|
st::webPageDescriptionStyle,
|
||||||
|
marked,
|
||||||
|
Ui::WebpageTextDescriptionOptions());
|
||||||
}
|
}
|
||||||
auto title = TextUtilities::SingleLine(qs(data.vtitle));
|
auto title = TextUtilities::SingleLine(qs(data.vtitle));
|
||||||
if (!title.isEmpty()) {
|
if (!title.isEmpty()) {
|
||||||
_title.setText(st::webPageTitleStyle, title, _webpageTitleOptions);
|
_title.setText(
|
||||||
|
st::webPageTitleStyle,
|
||||||
|
title,
|
||||||
|
Ui::WebpageTextTitleOptions());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5031,13 +5023,19 @@ HistoryLocation::HistoryLocation(not_null<HistoryItem*> parent, const LocationCo
|
||||||
, _description(st::msgMinWidth)
|
, _description(st::msgMinWidth)
|
||||||
, _link(std::make_shared<LocationClickHandler>(coords)) {
|
, _link(std::make_shared<LocationClickHandler>(coords)) {
|
||||||
if (!title.isEmpty()) {
|
if (!title.isEmpty()) {
|
||||||
_title.setText(st::webPageTitleStyle, TextUtilities::Clean(title), _webpageTitleOptions);
|
_title.setText(
|
||||||
|
st::webPageTitleStyle,
|
||||||
|
TextUtilities::Clean(title),
|
||||||
|
Ui::WebpageTextTitleOptions());
|
||||||
}
|
}
|
||||||
if (!description.isEmpty()) {
|
if (!description.isEmpty()) {
|
||||||
auto marked = TextWithEntities { TextUtilities::Clean(description) };
|
auto marked = TextWithEntities { TextUtilities::Clean(description) };
|
||||||
auto parseFlags = TextParseLinks | TextParseMultiline | TextParseRichText;
|
auto parseFlags = TextParseLinks | TextParseMultiline | TextParseRichText;
|
||||||
TextUtilities::ParseEntities(marked, parseFlags);
|
TextUtilities::ParseEntities(marked, parseFlags);
|
||||||
_description.setMarkedText(st::webPageDescriptionStyle, marked, _webpageDescriptionOptions);
|
_description.setMarkedText(
|
||||||
|
st::webPageDescriptionStyle,
|
||||||
|
marked,
|
||||||
|
Ui::WebpageTextDescriptionOptions());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,6 @@ namespace Ui {
|
||||||
class EmptyUserpic;
|
class EmptyUserpic;
|
||||||
} // namespace Ui
|
} // namespace Ui
|
||||||
|
|
||||||
void HistoryInitMedia();
|
|
||||||
TextWithEntities WithCaptionSelectedText(
|
TextWithEntities WithCaptionSelectedText(
|
||||||
const QString &attachType,
|
const QString &attachType,
|
||||||
const Text &caption,
|
const Text &caption,
|
||||||
|
|
|
@ -33,6 +33,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "boxes/share_box.h"
|
#include "boxes/share_box.h"
|
||||||
#include "boxes/confirm_box.h"
|
#include "boxes/confirm_box.h"
|
||||||
#include "ui/toast/toast.h"
|
#include "ui/toast/toast.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "messenger.h"
|
#include "messenger.h"
|
||||||
#include "styles/style_dialogs.h"
|
#include "styles/style_dialogs.h"
|
||||||
#include "styles/style_widgets.h"
|
#include "styles/style_widgets.h"
|
||||||
|
@ -138,11 +139,6 @@ int KeyboardStyle::minButtonWidth(
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void initTextOptions() {
|
|
||||||
_historySrvOptions.dir = _textNameOptions.dir = _textDlgOptions.dir = cLangDir();
|
|
||||||
_textDlgOptions.maxw = st::columnMaximalWidthLeft * 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString AdminBadgeText() {
|
QString AdminBadgeText() {
|
||||||
return lang(lng_admin_badge);
|
return lang(lng_admin_badge);
|
||||||
}
|
}
|
||||||
|
@ -409,10 +405,6 @@ void FastShareMessage(not_null<HistoryItem*> item) {
|
||||||
std::move(filterCallback)));
|
std::move(filterCallback)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void HistoryInitMessages() {
|
|
||||||
initTextOptions();
|
|
||||||
}
|
|
||||||
|
|
||||||
base::lambda<void(ChannelData*, MsgId)> HistoryDependentItemCallback(
|
base::lambda<void(ChannelData*, MsgId)> HistoryDependentItemCallback(
|
||||||
const FullMsgId &msgId) {
|
const FullMsgId &msgId) {
|
||||||
return [dependent = msgId](ChannelData *channel, MsgId msgId) {
|
return [dependent = msgId](ChannelData *channel, MsgId msgId) {
|
||||||
|
@ -1501,9 +1493,18 @@ void HistoryMessage::setText(const TextWithEntities &textWithEntities) {
|
||||||
} else {
|
} else {
|
||||||
auto mediaOnBottom = (_media && _media->isDisplayed() && _media->isBubbleBottom()) || Has<HistoryMessageLogEntryOriginal>();
|
auto mediaOnBottom = (_media && _media->isDisplayed() && _media->isBubbleBottom()) || Has<HistoryMessageLogEntryOriginal>();
|
||||||
if (mediaOnBottom) {
|
if (mediaOnBottom) {
|
||||||
_text.setMarkedText(st::messageTextStyle, textWithEntities, itemTextOptions(this));
|
_text.setMarkedText(
|
||||||
|
st::messageTextStyle,
|
||||||
|
textWithEntities,
|
||||||
|
Ui::ItemTextOptions(this));
|
||||||
} else {
|
} else {
|
||||||
_text.setMarkedText(st::messageTextStyle, { textWithEntities.text + skipBlock(), textWithEntities.entities }, itemTextOptions(this));
|
_text.setMarkedText(
|
||||||
|
st::messageTextStyle,
|
||||||
|
{
|
||||||
|
textWithEntities.text + skipBlock(),
|
||||||
|
textWithEntities.entities
|
||||||
|
},
|
||||||
|
Ui::ItemTextOptions(this));
|
||||||
}
|
}
|
||||||
_textWidth = -1;
|
_textWidth = -1;
|
||||||
_textHeight = 0;
|
_textHeight = 0;
|
||||||
|
@ -1511,7 +1512,10 @@ void HistoryMessage::setText(const TextWithEntities &textWithEntities) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void HistoryMessage::setEmptyText() {
|
void HistoryMessage::setEmptyText() {
|
||||||
_text.setMarkedText(st::messageTextStyle, { QString(), EntitiesInText() }, itemTextOptions(this));
|
_text.setMarkedText(
|
||||||
|
st::messageTextStyle,
|
||||||
|
{ QString(), EntitiesInText() },
|
||||||
|
Ui::ItemTextOptions(this));
|
||||||
|
|
||||||
_textWidth = -1;
|
_textWidth = -1;
|
||||||
_textHeight = 0;
|
_textHeight = 0;
|
||||||
|
|
|
@ -24,7 +24,6 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
|
|
||||||
struct HistoryMessageEdited;
|
struct HistoryMessageEdited;
|
||||||
|
|
||||||
void HistoryInitMessages();
|
|
||||||
base::lambda<void(ChannelData*, MsgId)> HistoryDependentItemCallback(
|
base::lambda<void(ChannelData*, MsgId)> HistoryDependentItemCallback(
|
||||||
const FullMsgId &msgId);
|
const FullMsgId &msgId);
|
||||||
MTPDmessage::Flags NewMessageFlags(not_null<PeerData*> peer);
|
MTPDmessage::Flags NewMessageFlags(not_null<PeerData*> peer);
|
||||||
|
|
|
@ -30,6 +30,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "auth_session.h"
|
#include "auth_session.h"
|
||||||
#include "window/notifications_manager.h"
|
#include "window/notifications_manager.h"
|
||||||
#include "storage/storage_shared_media.h"
|
#include "storage/storage_shared_media.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
@ -37,13 +38,6 @@ constexpr auto kPinnedMessageTextLimit = 16;
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
TextParseOptions _historySrvOptions = {
|
|
||||||
TextParseLinks | TextParseMentions | TextParseHashtags/* | TextParseMultiline*/ | TextParseRichText, // flags
|
|
||||||
0, // maxw
|
|
||||||
0, // maxh
|
|
||||||
Qt::LayoutDirectionAuto, // lang-dependent
|
|
||||||
};
|
|
||||||
|
|
||||||
void HistoryService::setMessageByAction(const MTPmessageAction &action) {
|
void HistoryService::setMessageByAction(const MTPmessageAction &action) {
|
||||||
auto prepareChatAddUserText = [this](const MTPDmessageActionChatAddUser &action) {
|
auto prepareChatAddUserText = [this](const MTPDmessageActionChatAddUser &action) {
|
||||||
auto result = PreparedText {};
|
auto result = PreparedText {};
|
||||||
|
@ -495,7 +489,10 @@ QString HistoryService::inReplyText() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void HistoryService::setServiceText(const PreparedText &prepared) {
|
void HistoryService::setServiceText(const PreparedText &prepared) {
|
||||||
_text.setText(st::serviceTextStyle, prepared.text, _historySrvOptions);
|
_text.setText(
|
||||||
|
st::serviceTextStyle,
|
||||||
|
prepared.text,
|
||||||
|
Ui::ItemTextServiceOptions());
|
||||||
auto linkIndex = 0;
|
auto linkIndex = 0;
|
||||||
for_const (auto &link, prepared.links) {
|
for_const (auto &link, prepared.links) {
|
||||||
// Link indices start with 1.
|
// Link indices start with 1.
|
||||||
|
|
|
@ -182,5 +182,3 @@ private:
|
||||||
static PreparedText GenerateText(not_null<History*> history, not_null<UserData*> inviter);
|
static PreparedText GenerateText(not_null<History*> history, not_null<UserData*> inviter);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern TextParseOptions _historySrvOptions;
|
|
||||||
|
|
|
@ -74,6 +74,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "observer_peer.h"
|
#include "observer_peer.h"
|
||||||
#include "base/qthelp_regex.h"
|
#include "base/qthelp_regex.h"
|
||||||
#include "ui/widgets/popup_menu.h"
|
#include "ui/widgets/popup_menu.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "auth_session.h"
|
#include "auth_session.h"
|
||||||
#include "window/themes/window_theme.h"
|
#include "window/themes/window_theme.h"
|
||||||
#include "window/notifications_manager.h"
|
#include "window/notifications_manager.h"
|
||||||
|
@ -382,7 +383,7 @@ bool HistoryHider::offerPeer(PeerId peer) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
_toText.setText(st::boxLabelStyle, phrase, _textNameOptions);
|
_toText.setText(st::boxLabelStyle, phrase, Ui::NameTextOptions());
|
||||||
_toTextWidth = _toText.maxWidth();
|
_toTextWidth = _toText.maxWidth();
|
||||||
if (_toTextWidth > _box.width() - st::boxPadding.left() - st::boxLayerButtonPadding.right()) {
|
if (_toTextWidth > _box.width() - st::boxPadding.left() - st::boxLayerButtonPadding.right()) {
|
||||||
_toTextWidth = _box.width() - st::boxPadding.left() - st::boxLayerButtonPadding.right();
|
_toTextWidth = _box.width() - st::boxPadding.left() - st::boxLayerButtonPadding.right();
|
||||||
|
@ -2776,7 +2777,7 @@ void HistoryWidget::saveEditMsg() {
|
||||||
WebPageId webPageId = _previewCancelled ? CancelledWebPageId : ((_previewData && _previewData->pendingTill >= 0) ? _previewData->id : 0);
|
WebPageId webPageId = _previewCancelled ? CancelledWebPageId : ((_previewData && _previewData->pendingTill >= 0) ? _previewData->id : 0);
|
||||||
|
|
||||||
auto &textWithTags = _field->getTextWithTags();
|
auto &textWithTags = _field->getTextWithTags();
|
||||||
auto prepareFlags = itemTextOptions(_history, App::self()).flags;
|
auto prepareFlags = Ui::ItemTextOptions(_history, App::self()).flags;
|
||||||
auto sending = TextWithEntities();
|
auto sending = TextWithEntities();
|
||||||
auto left = TextWithEntities { textWithTags.text, ConvertTextTagsToEntities(textWithTags.tags) };
|
auto left = TextWithEntities { textWithTags.text, ConvertTextTagsToEntities(textWithTags.tags) };
|
||||||
TextUtilities::PrepareForSending(left, prepareFlags);
|
TextUtilities::PrepareForSending(left, prepareFlags);
|
||||||
|
@ -3664,7 +3665,10 @@ void HistoryWidget::onKbToggle(bool manual) {
|
||||||
_kbReplyTo = (_peer->isChat() || _peer->isChannel() || _keyboard->forceReply()) ? App::histItemById(_keyboard->forMsgId()) : 0;
|
_kbReplyTo = (_peer->isChat() || _peer->isChannel() || _keyboard->forceReply()) ? App::histItemById(_keyboard->forMsgId()) : 0;
|
||||||
if (_kbReplyTo && !_editMsgId && !_replyToId && fieldEnabled) {
|
if (_kbReplyTo && !_editMsgId && !_replyToId && fieldEnabled) {
|
||||||
updateReplyToName();
|
updateReplyToName();
|
||||||
_replyEditMsgText.setText(st::messageTextStyle, TextUtilities::Clean(_kbReplyTo->inReplyText()), _textDlgOptions);
|
_replyEditMsgText.setText(
|
||||||
|
st::messageTextStyle,
|
||||||
|
TextUtilities::Clean(_kbReplyTo->inReplyText()),
|
||||||
|
Ui::DialogTextOptions());
|
||||||
_fieldBarCancel->show();
|
_fieldBarCancel->show();
|
||||||
updateMouseTracking();
|
updateMouseTracking();
|
||||||
}
|
}
|
||||||
|
@ -3683,7 +3687,10 @@ void HistoryWidget::onKbToggle(bool manual) {
|
||||||
_kbReplyTo = (_peer->isChat() || _peer->isChannel() || _keyboard->forceReply()) ? App::histItemById(_keyboard->forMsgId()) : 0;
|
_kbReplyTo = (_peer->isChat() || _peer->isChannel() || _keyboard->forceReply()) ? App::histItemById(_keyboard->forMsgId()) : 0;
|
||||||
if (_kbReplyTo && !_editMsgId && !_replyToId) {
|
if (_kbReplyTo && !_editMsgId && !_replyToId) {
|
||||||
updateReplyToName();
|
updateReplyToName();
|
||||||
_replyEditMsgText.setText(st::messageTextStyle, TextUtilities::Clean(_kbReplyTo->inReplyText()), _textDlgOptions);
|
_replyEditMsgText.setText(
|
||||||
|
st::messageTextStyle,
|
||||||
|
TextUtilities::Clean(_kbReplyTo->inReplyText()),
|
||||||
|
Ui::DialogTextOptions());
|
||||||
_fieldBarCancel->show();
|
_fieldBarCancel->show();
|
||||||
updateMouseTracking();
|
updateMouseTracking();
|
||||||
}
|
}
|
||||||
|
@ -4877,7 +4884,10 @@ void HistoryWidget::updateBotKeyboard(History *h, bool force) {
|
||||||
_kbReplyTo = (_peer->isChat() || _peer->isChannel() || _keyboard->forceReply()) ? App::histItemById(_keyboard->forMsgId()) : 0;
|
_kbReplyTo = (_peer->isChat() || _peer->isChannel() || _keyboard->forceReply()) ? App::histItemById(_keyboard->forMsgId()) : 0;
|
||||||
if (_kbReplyTo && !_replyToId) {
|
if (_kbReplyTo && !_replyToId) {
|
||||||
updateReplyToName();
|
updateReplyToName();
|
||||||
_replyEditMsgText.setText(st::messageTextStyle, TextUtilities::Clean(_kbReplyTo->inReplyText()), _textDlgOptions);
|
_replyEditMsgText.setText(
|
||||||
|
st::messageTextStyle,
|
||||||
|
TextUtilities::Clean(_kbReplyTo->inReplyText()),
|
||||||
|
Ui::DialogTextOptions());
|
||||||
_fieldBarCancel->show();
|
_fieldBarCancel->show();
|
||||||
updateMouseTracking();
|
updateMouseTracking();
|
||||||
}
|
}
|
||||||
|
@ -5211,7 +5221,10 @@ void HistoryWidget::updatePinnedBar(bool force) {
|
||||||
_pinnedBar->msg = App::histItemById(_history->channelId(), _pinnedBar->msgId);
|
_pinnedBar->msg = App::histItemById(_history->channelId(), _pinnedBar->msgId);
|
||||||
}
|
}
|
||||||
if (_pinnedBar->msg) {
|
if (_pinnedBar->msg) {
|
||||||
_pinnedBar->text.setText(st::messageTextStyle, TextUtilities::Clean(_pinnedBar->msg->notificationText()), _textDlgOptions);
|
_pinnedBar->text.setText(
|
||||||
|
st::messageTextStyle,
|
||||||
|
TextUtilities::Clean(_pinnedBar->msg->notificationText()),
|
||||||
|
Ui::DialogTextOptions());
|
||||||
update();
|
update();
|
||||||
} else if (force) {
|
} else if (force) {
|
||||||
if (auto channel = _peer ? _peer->asChannel() : nullptr) {
|
if (auto channel = _peer ? _peer->asChannel() : nullptr) {
|
||||||
|
@ -5508,7 +5521,10 @@ void HistoryWidget::onReplyToMessage() {
|
||||||
} else {
|
} else {
|
||||||
_replyEditMsg = to;
|
_replyEditMsg = to;
|
||||||
_replyToId = to->id;
|
_replyToId = to->id;
|
||||||
_replyEditMsgText.setText(st::messageTextStyle, TextUtilities::Clean(_replyEditMsg->inReplyText()), _textDlgOptions);
|
_replyEditMsgText.setText(
|
||||||
|
st::messageTextStyle,
|
||||||
|
TextUtilities::Clean(_replyEditMsg->inReplyText()),
|
||||||
|
Ui::DialogTextOptions());
|
||||||
|
|
||||||
updateBotKeyboard();
|
updateBotKeyboard();
|
||||||
|
|
||||||
|
@ -5864,13 +5880,19 @@ void HistoryWidget::updatePreview() {
|
||||||
_fieldBarCancel->show();
|
_fieldBarCancel->show();
|
||||||
updateMouseTracking();
|
updateMouseTracking();
|
||||||
if (_previewData->pendingTill) {
|
if (_previewData->pendingTill) {
|
||||||
_previewTitle.setText(st::msgNameStyle, lang(lng_preview_loading), _textNameOptions);
|
_previewTitle.setText(
|
||||||
|
st::msgNameStyle,
|
||||||
|
lang(lng_preview_loading),
|
||||||
|
Ui::NameTextOptions());
|
||||||
#ifndef OS_MAC_OLD
|
#ifndef OS_MAC_OLD
|
||||||
auto linkText = _previewLinks.splitRef(' ').at(0).toString();
|
auto linkText = _previewLinks.splitRef(' ').at(0).toString();
|
||||||
#else // OS_MAC_OLD
|
#else // OS_MAC_OLD
|
||||||
auto linkText = _previewLinks.split(' ').at(0);
|
auto linkText = _previewLinks.split(' ').at(0);
|
||||||
#endif // OS_MAC_OLD
|
#endif // OS_MAC_OLD
|
||||||
_previewDescription.setText(st::messageTextStyle, TextUtilities::Clean(linkText), _textDlgOptions);
|
_previewDescription.setText(
|
||||||
|
st::messageTextStyle,
|
||||||
|
TextUtilities::Clean(linkText),
|
||||||
|
Ui::DialogTextOptions());
|
||||||
|
|
||||||
int32 t = (_previewData->pendingTill - unixtime()) * 1000;
|
int32 t = (_previewData->pendingTill - unixtime()) * 1000;
|
||||||
if (t <= 0) t = 1;
|
if (t <= 0) t = 1;
|
||||||
|
@ -5901,8 +5923,14 @@ void HistoryWidget::updatePreview() {
|
||||||
title = lang(lng_attach_photo);
|
title = lang(lng_attach_photo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_previewTitle.setText(st::msgNameStyle, title, _textNameOptions);
|
_previewTitle.setText(
|
||||||
_previewDescription.setText(st::messageTextStyle, TextUtilities::Clean(desc), _textDlgOptions);
|
st::msgNameStyle,
|
||||||
|
title,
|
||||||
|
Ui::NameTextOptions());
|
||||||
|
_previewDescription.setText(
|
||||||
|
st::messageTextStyle,
|
||||||
|
TextUtilities::Clean(desc),
|
||||||
|
Ui::DialogTextOptions());
|
||||||
}
|
}
|
||||||
} else if (!readyToForward() && !replyToId() && !_editMsgId) {
|
} else if (!readyToForward() && !replyToId() && !_editMsgId) {
|
||||||
_fieldBarCancel->hide();
|
_fieldBarCancel->hide();
|
||||||
|
@ -6122,7 +6150,10 @@ void HistoryWidget::updateReplyEditTexts(bool force) {
|
||||||
_replyEditMsg = App::histItemById(_channel, _editMsgId ? _editMsgId : _replyToId);
|
_replyEditMsg = App::histItemById(_channel, _editMsgId ? _editMsgId : _replyToId);
|
||||||
}
|
}
|
||||||
if (_replyEditMsg) {
|
if (_replyEditMsg) {
|
||||||
_replyEditMsgText.setText(st::messageTextStyle, TextUtilities::Clean(_replyEditMsg->inReplyText()), _textDlgOptions);
|
_replyEditMsgText.setText(
|
||||||
|
st::messageTextStyle,
|
||||||
|
TextUtilities::Clean(_replyEditMsg->inReplyText()),
|
||||||
|
Ui::DialogTextOptions());
|
||||||
|
|
||||||
updateBotKeyboard();
|
updateBotKeyboard();
|
||||||
|
|
||||||
|
@ -6181,8 +6212,11 @@ void HistoryWidget::updateForwardingTexts() {
|
||||||
text = lng_forward_messages(lt_count, count);
|
text = lng_forward_messages(lt_count, count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_toForwardFrom.setText(st::msgNameStyle, from, _textNameOptions);
|
_toForwardFrom.setText(st::msgNameStyle, from, Ui::NameTextOptions());
|
||||||
_toForwardText.setText(st::messageTextStyle, TextUtilities::Clean(text), _textDlgOptions);
|
_toForwardText.setText(
|
||||||
|
st::messageTextStyle,
|
||||||
|
TextUtilities::Clean(text),
|
||||||
|
Ui::DialogTextOptions());
|
||||||
_toForwardNameVersion = version;
|
_toForwardNameVersion = version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6201,7 +6235,10 @@ void HistoryWidget::checkForwardingInfo() {
|
||||||
void HistoryWidget::updateReplyToName() {
|
void HistoryWidget::updateReplyToName() {
|
||||||
if (_editMsgId) return;
|
if (_editMsgId) return;
|
||||||
if (!_replyEditMsg && (_replyToId || !_kbReplyTo)) return;
|
if (!_replyEditMsg && (_replyToId || !_kbReplyTo)) return;
|
||||||
_replyToName.setText(st::msgNameStyle, App::peerName((_replyEditMsg ? _replyEditMsg : _kbReplyTo)->author()), _textNameOptions);
|
_replyToName.setText(
|
||||||
|
st::msgNameStyle,
|
||||||
|
App::peerName((_replyEditMsg ? _replyEditMsg : _kbReplyTo)->author()),
|
||||||
|
Ui::NameTextOptions());
|
||||||
_replyToNameVersion = (_replyEditMsg ? _replyEditMsg : _kbReplyTo)->author()->nameVersion;
|
_replyToNameVersion = (_replyEditMsg ? _replyEditMsg : _kbReplyTo)->author()->nameVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,65 +32,6 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "media/media_audio.h"
|
#include "media/media_audio.h"
|
||||||
#include "storage/localstorage.h"
|
#include "storage/localstorage.h"
|
||||||
|
|
||||||
TextParseOptions _textNameOptions = {
|
|
||||||
0, // flags
|
|
||||||
4096, // maxw
|
|
||||||
1, // maxh
|
|
||||||
Qt::LayoutDirectionAuto, // lang-dependent
|
|
||||||
};
|
|
||||||
TextParseOptions _textDlgOptions = {
|
|
||||||
TextParseRichText, // flags
|
|
||||||
0, // maxw is style-dependent
|
|
||||||
1, // maxh
|
|
||||||
Qt::LayoutDirectionAuto, // lang-dependent
|
|
||||||
};
|
|
||||||
TextParseOptions _historyTextOptions = {
|
|
||||||
TextParseLinks | TextParseMentions | TextParseHashtags | TextParseMultiline | TextParseRichText | TextParseMarkdown, // flags
|
|
||||||
0, // maxw
|
|
||||||
0, // maxh
|
|
||||||
Qt::LayoutDirectionAuto, // dir
|
|
||||||
};
|
|
||||||
TextParseOptions _historyBotOptions = {
|
|
||||||
TextParseLinks | TextParseMentions | TextParseHashtags | TextParseBotCommands | TextParseMultiline | TextParseRichText | TextParseMarkdown, // flags
|
|
||||||
0, // maxw
|
|
||||||
0, // maxh
|
|
||||||
Qt::LayoutDirectionAuto, // dir
|
|
||||||
};
|
|
||||||
TextParseOptions _historyTextNoMonoOptions = {
|
|
||||||
TextParseLinks | TextParseMentions | TextParseHashtags | TextParseMultiline | TextParseRichText, // flags
|
|
||||||
0, // maxw
|
|
||||||
0, // maxh
|
|
||||||
Qt::LayoutDirectionAuto, // dir
|
|
||||||
};
|
|
||||||
TextParseOptions _historyBotNoMonoOptions = {
|
|
||||||
TextParseLinks | TextParseMentions | TextParseHashtags | TextParseBotCommands | TextParseMultiline | TextParseRichText, // flags
|
|
||||||
0, // maxw
|
|
||||||
0, // maxh
|
|
||||||
Qt::LayoutDirectionAuto, // dir
|
|
||||||
};
|
|
||||||
|
|
||||||
const TextParseOptions &itemTextOptions(History *h, PeerData *f) {
|
|
||||||
if ((h->peer->isUser() && h->peer->asUser()->botInfo) || (f->isUser() && f->asUser()->botInfo) || (h->peer->isChat() && h->peer->asChat()->botStatus >= 0) || (h->peer->isMegagroup() && h->peer->asChannel()->mgInfo->botStatus >= 0)) {
|
|
||||||
return _historyBotOptions;
|
|
||||||
}
|
|
||||||
return _historyTextOptions;
|
|
||||||
}
|
|
||||||
|
|
||||||
const TextParseOptions &itemTextOptions(const HistoryItem *item) {
|
|
||||||
return itemTextOptions(item->history(), item->author());
|
|
||||||
}
|
|
||||||
|
|
||||||
const TextParseOptions &itemTextNoMonoOptions(History *h, PeerData *f) {
|
|
||||||
if ((h->peer->isUser() && h->peer->asUser()->botInfo) || (f->isUser() && f->asUser()->botInfo) || (h->peer->isChat() && h->peer->asChat()->botStatus >= 0) || (h->peer->isMegagroup() && h->peer->asChannel()->mgInfo->botStatus >= 0)) {
|
|
||||||
return _historyBotNoMonoOptions;
|
|
||||||
}
|
|
||||||
return _historyTextNoMonoOptions;
|
|
||||||
}
|
|
||||||
|
|
||||||
const TextParseOptions &itemTextNoMonoOptions(const HistoryItem *item) {
|
|
||||||
return itemTextNoMonoOptions(item->history(), item->author());
|
|
||||||
}
|
|
||||||
|
|
||||||
QString formatSizeText(qint64 size) {
|
QString formatSizeText(qint64 size) {
|
||||||
if (size >= 1024 * 1024) { // more than 1 mb
|
if (size >= 1024 * 1024) { // more than 1 mb
|
||||||
qint64 sizeTenthMb = (size * 10 / (1024 * 1024));
|
qint64 sizeTenthMb = (size * 10 / (1024 * 1024));
|
||||||
|
|
|
@ -58,14 +58,6 @@ inline bool IsGroupItemSelection(
|
||||||
: selection;
|
: selection;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern TextParseOptions _textNameOptions, _textDlgOptions;
|
|
||||||
extern TextParseOptions _historyTextOptions, _historyBotOptions, _historyTextNoMonoOptions, _historyBotNoMonoOptions;
|
|
||||||
|
|
||||||
const TextParseOptions &itemTextOptions(History *h, PeerData *f);
|
|
||||||
const TextParseOptions &itemTextOptions(const HistoryItem *item);
|
|
||||||
const TextParseOptions &itemTextNoMonoOptions(History *h, PeerData *f);
|
|
||||||
const TextParseOptions &itemTextNoMonoOptions(const HistoryItem *item);
|
|
||||||
|
|
||||||
enum RoundCorners {
|
enum RoundCorners {
|
||||||
SmallMaskCorners = 0x00, // for images
|
SmallMaskCorners = 0x00, // for images
|
||||||
LargeMaskCorners,
|
LargeMaskCorners,
|
||||||
|
|
|
@ -39,6 +39,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "ui/widgets/dropdown_menu.h"
|
#include "ui/widgets/dropdown_menu.h"
|
||||||
#include "ui/focus_persister.h"
|
#include "ui/focus_persister.h"
|
||||||
#include "ui/resize_area.h"
|
#include "ui/resize_area.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "ui/toast/toast.h"
|
#include "ui/toast/toast.h"
|
||||||
#include "chat_helpers/message_field.h"
|
#include "chat_helpers/message_field.h"
|
||||||
#include "chat_helpers/stickers.h"
|
#include "chat_helpers/stickers.h"
|
||||||
|
@ -1456,7 +1457,7 @@ void MainWidget::sendMessage(const MessageToSend &message) {
|
||||||
|
|
||||||
auto sending = TextWithEntities();
|
auto sending = TextWithEntities();
|
||||||
auto left = TextWithEntities { textWithTags.text, ConvertTextTagsToEntities(textWithTags.tags) };
|
auto left = TextWithEntities { textWithTags.text, ConvertTextTagsToEntities(textWithTags.tags) };
|
||||||
auto prepareFlags = itemTextOptions(history, App::self()).flags;
|
auto prepareFlags = Ui::ItemTextOptions(history, App::self()).flags;
|
||||||
TextUtilities::PrepareForSending(left, prepareFlags);
|
TextUtilities::PrepareForSending(left, prepareFlags);
|
||||||
|
|
||||||
HistoryItem *lastMessage = nullptr;
|
HistoryItem *lastMessage = nullptr;
|
||||||
|
|
42
Telegram/SourceFiles/media/view/media_view_group_thumbs.cpp
Normal file
42
Telegram/SourceFiles/media/view/media_view_group_thumbs.cpp
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
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-2017 John Preston, https://desktop.telegram.org
|
||||||
|
*/
|
||||||
|
#include "media/view/media_view_group_thumbs.h"
|
||||||
|
|
||||||
|
namespace Media {
|
||||||
|
namespace View {
|
||||||
|
|
||||||
|
GroupThumbs::GroupThumbs() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroupThumbs::resizeToWidth(int newWidth) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int GroupThumbs::height() const {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QRect GroupThumbs::paintedRect() const {
|
||||||
|
return QRect();
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace View
|
||||||
|
} // namespace Media
|
40
Telegram/SourceFiles/media/view/media_view_group_thumbs.h
Normal file
40
Telegram/SourceFiles/media/view/media_view_group_thumbs.h
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
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-2017 John Preston, https://desktop.telegram.org
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace Media {
|
||||||
|
namespace View {
|
||||||
|
|
||||||
|
class GroupThumbs {
|
||||||
|
public:
|
||||||
|
GroupThumbs();
|
||||||
|
|
||||||
|
void resizeToWidth(int newWidth);
|
||||||
|
int height() const;
|
||||||
|
|
||||||
|
QRect paintedRect() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace View
|
||||||
|
} // namespace Media
|
|
@ -27,10 +27,10 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "core/file_utilities.h"
|
#include "core/file_utilities.h"
|
||||||
#include "ui/widgets/popup_menu.h"
|
#include "ui/widgets/popup_menu.h"
|
||||||
#include "ui/widgets/buttons.h"
|
#include "ui/widgets/buttons.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "media/media_clip_reader.h"
|
#include "media/media_clip_reader.h"
|
||||||
#include "media/view/media_clip_controller.h"
|
#include "media/view/media_clip_controller.h"
|
||||||
#include "styles/style_mediaview.h"
|
#include "media/view/media_view_group_thumbs.h"
|
||||||
#include "styles/style_history.h"
|
|
||||||
#include "media/media_audio.h"
|
#include "media/media_audio.h"
|
||||||
#include "history/history_message.h"
|
#include "history/history_message.h"
|
||||||
#include "history/history_media_types.h"
|
#include "history/history_media_types.h"
|
||||||
|
@ -42,26 +42,15 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "messenger.h"
|
#include "messenger.h"
|
||||||
#include "storage/file_download.h"
|
#include "storage/file_download.h"
|
||||||
#include "calls/calls_instance.h"
|
#include "calls/calls_instance.h"
|
||||||
|
#include "styles/style_mediaview.h"
|
||||||
|
#include "styles/style_history.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
constexpr auto kPreloadCount = 4;
|
constexpr auto kPreloadCount = 4;
|
||||||
|
|
||||||
TextParseOptions _captionTextOptions = {
|
|
||||||
TextParseLinks | TextParseMentions | TextParseHashtags | TextParseMultiline | TextParseRichText, // flags
|
|
||||||
0, // maxw
|
|
||||||
0, // maxh
|
|
||||||
Qt::LayoutDirectionAuto, // dir
|
|
||||||
};
|
|
||||||
TextParseOptions _captionBotOptions = {
|
|
||||||
TextParseLinks | TextParseMentions | TextParseHashtags | TextParseMultiline | TextParseRichText | TextParseBotCommands, // flags
|
|
||||||
0, // maxw
|
|
||||||
0, // maxh
|
|
||||||
Qt::LayoutDirectionAuto, // dir
|
|
||||||
};
|
|
||||||
|
|
||||||
// Preload X message ids before and after current.
|
// Preload X message ids before and after current.
|
||||||
constexpr auto kIdsLimit = 32;
|
constexpr auto kIdsLimit = 48;
|
||||||
|
|
||||||
// Preload next messages if we went further from current than that.
|
// Preload next messages if we went further from current than that.
|
||||||
constexpr auto kIdsPreloadAfter = 28;
|
constexpr auto kIdsPreloadAfter = 28;
|
||||||
|
@ -84,7 +73,8 @@ struct MediaView::UserPhotos {
|
||||||
rpl::lifetime lifetime;
|
rpl::lifetime lifetime;
|
||||||
};
|
};
|
||||||
|
|
||||||
MediaView::MediaView() : TWidget(nullptr)
|
MediaView::MediaView()
|
||||||
|
: TWidget(nullptr)
|
||||||
, _transparentBrush(style::transparentPlaceholderBrush())
|
, _transparentBrush(style::transparentPlaceholderBrush())
|
||||||
, _animStarted(getms())
|
, _animStarted(getms())
|
||||||
, _docDownload(this, lang(lng_media_download), st::mediaviewFileLink)
|
, _docDownload(this, lang(lng_media_download), st::mediaviewFileLink)
|
||||||
|
@ -99,7 +89,7 @@ MediaView::MediaView() : TWidget(nullptr)
|
||||||
|
|
||||||
TextCustomTagsMap custom;
|
TextCustomTagsMap custom;
|
||||||
custom.insert(QChar('c'), qMakePair(textcmdStartLink(1), textcmdStopLink()));
|
custom.insert(QChar('c'), qMakePair(textcmdStartLink(1), textcmdStopLink()));
|
||||||
_saveMsgText.setRichText(st::mediaviewSaveMsgStyle, lang(lng_mediaview_saved), _textDlgOptions, custom);
|
_saveMsgText.setRichText(st::mediaviewSaveMsgStyle, lang(lng_mediaview_saved), Ui::DialogTextOptions(), custom);
|
||||||
_saveMsg = QRect(0, 0, _saveMsgText.maxWidth() + st::mediaviewSaveMsgPadding.left() + st::mediaviewSaveMsgPadding.right(), st::mediaviewSaveMsgStyle.font->height + st::mediaviewSaveMsgPadding.top() + st::mediaviewSaveMsgPadding.bottom());
|
_saveMsg = QRect(0, 0, _saveMsgText.maxWidth() + st::mediaviewSaveMsgPadding.left() + st::mediaviewSaveMsgPadding.right(), st::mediaviewSaveMsgStyle.font->height + st::mediaviewSaveMsgPadding.top() + st::mediaviewSaveMsgPadding.bottom());
|
||||||
_saveMsgText.setLink(1, std::make_shared<LambdaClickHandler>([this] { showSaveMsgFile(); }));
|
_saveMsgText.setLink(1, std::make_shared<LambdaClickHandler>([this] { showSaveMsgFile(); }));
|
||||||
|
|
||||||
|
@ -361,7 +351,7 @@ void MediaView::updateControls() {
|
||||||
_dateText = lng_mediaview_date_time(lt_date, d.date().toString(qsl("dd.MM.yy")), lt_time, d.time().toString(cTimeFormat()));
|
_dateText = lng_mediaview_date_time(lt_date, d.date().toString(qsl("dd.MM.yy")), lt_time, d.time().toString(cTimeFormat()));
|
||||||
}
|
}
|
||||||
if (_from) {
|
if (_from) {
|
||||||
_fromName.setText(st::mediaviewTextStyle, (_from->migrateTo() ? _from->migrateTo() : _from)->name, _textNameOptions);
|
_fromName.setText(st::mediaviewTextStyle, (_from->migrateTo() ? _from->migrateTo() : _from)->name, Ui::NameTextOptions());
|
||||||
_nameNav = myrtlrect(st::mediaviewTextLeft, height() - st::mediaviewTextTop, qMin(_fromName.maxWidth(), width() / 3), st::mediaviewFont->height);
|
_nameNav = myrtlrect(st::mediaviewTextLeft, height() - st::mediaviewTextTop, qMin(_fromName.maxWidth(), width() / 3), st::mediaviewFont->height);
|
||||||
_dateNav = myrtlrect(st::mediaviewTextLeft + _nameNav.width() + st::mediaviewTextSkip, height() - st::mediaviewTextTop, st::mediaviewFont->width(_dateText), st::mediaviewFont->height);
|
_dateNav = myrtlrect(st::mediaviewTextLeft + _nameNav.width() + st::mediaviewTextSkip, height() - st::mediaviewTextTop, st::mediaviewFont->width(_dateText), st::mediaviewFont->height);
|
||||||
} else {
|
} else {
|
||||||
|
@ -370,20 +360,54 @@ void MediaView::updateControls() {
|
||||||
}
|
}
|
||||||
updateHeader();
|
updateHeader();
|
||||||
refreshNavVisibility();
|
refreshNavVisibility();
|
||||||
|
resizeCenteredControls();
|
||||||
|
|
||||||
|
updateOver(mapFromGlobal(QCursor::pos()));
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MediaView::resizeCenteredControls() {
|
||||||
|
const auto bottomSkip = std::max(
|
||||||
|
_dateNav.left() + _dateNav.width(),
|
||||||
|
_headerNav.left() + _headerNav.width());
|
||||||
|
const auto bottomWidth = std::max(
|
||||||
|
width() - 2 * bottomSkip - 2 * st::mediaviewCaptionMargin.width(),
|
||||||
|
st::msgMinWidth
|
||||||
|
+ st::mediaviewCaptionPadding.left()
|
||||||
|
+ st::mediaviewCaptionPadding.right());
|
||||||
|
if (_groupThumbs) {
|
||||||
|
_groupThumbs->resizeToWidth(bottomWidth);
|
||||||
|
_groupThumbsTop = height() - _groupThumbs->height();
|
||||||
|
}
|
||||||
|
|
||||||
if (!_caption.isEmpty()) {
|
if (!_caption.isEmpty()) {
|
||||||
int32 skipw = qMax(_dateNav.left() + _dateNav.width(), _headerNav.left() + _headerNav.width());
|
const auto captionBottom = groupThumbsDisplayed()
|
||||||
int32 maxw = qMin(qMax(width() - 2 * skipw - st::mediaviewCaptionPadding.left() - st::mediaviewCaptionPadding.right() - 2 * st::mediaviewCaptionMargin.width(), int(st::msgMinWidth)), _caption.maxWidth());
|
? _groupThumbsTop
|
||||||
int32 maxh = qMin(_caption.countHeight(maxw), int(height() / 4 - st::mediaviewCaptionPadding.top() - st::mediaviewCaptionPadding.bottom() - 2 * st::mediaviewCaptionMargin.height()));
|
: height() - st::mediaviewCaptionMargin.height();
|
||||||
_captionRect = QRect((width() - maxw) / 2, height() - maxh - st::mediaviewCaptionPadding.bottom() - st::mediaviewCaptionMargin.height(), maxw, maxh);
|
const auto captionWidth = std::min(
|
||||||
|
bottomWidth
|
||||||
|
- st::mediaviewCaptionPadding.left()
|
||||||
|
- st::mediaviewCaptionPadding.right(),
|
||||||
|
_caption.maxWidth());
|
||||||
|
const auto captionHeight = std::min(
|
||||||
|
_caption.countHeight(captionWidth),
|
||||||
|
height() / 4
|
||||||
|
- st::mediaviewCaptionPadding.top()
|
||||||
|
- st::mediaviewCaptionPadding.bottom()
|
||||||
|
- 2 * st::mediaviewCaptionMargin.height());
|
||||||
|
_captionRect = QRect(
|
||||||
|
(width() - captionWidth) / 2,
|
||||||
|
captionBottom
|
||||||
|
- captionHeight
|
||||||
|
- st::mediaviewCaptionPadding.bottom(),
|
||||||
|
captionWidth,
|
||||||
|
captionHeight);
|
||||||
} else {
|
} else {
|
||||||
_captionRect = QRect();
|
_captionRect = QRect();
|
||||||
}
|
}
|
||||||
if (_clipController) {
|
if (_clipController) {
|
||||||
setClipControllerGeometry();
|
setClipControllerGeometry();
|
||||||
}
|
}
|
||||||
updateOver(mapFromGlobal(QCursor::pos()));
|
|
||||||
update();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MediaView::updateActions() {
|
void MediaView::updateActions() {
|
||||||
|
@ -1198,6 +1222,31 @@ void MediaView::refreshMediaViewer() {
|
||||||
preloadData(0);
|
preloadData(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MediaView::refreshCaption(HistoryItem *item) {
|
||||||
|
_caption = Text();
|
||||||
|
|
||||||
|
const auto media = item ? item->getMedia() : nullptr;
|
||||||
|
if (!media) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto caption = media->getCaption();
|
||||||
|
if (caption.text.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const auto asBot = [&] {
|
||||||
|
if (const auto author = item->author()->asUser()) {
|
||||||
|
return author->botInfo != nullptr;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}();
|
||||||
|
_caption = Text(st::msgMinWidth);
|
||||||
|
_caption.setMarkedText(
|
||||||
|
st::mediaviewCaptionStyle,
|
||||||
|
caption,
|
||||||
|
Ui::ItemTextOptions(item));
|
||||||
|
}
|
||||||
|
|
||||||
void MediaView::showPhoto(not_null<PhotoData*> photo, HistoryItem *context) {
|
void MediaView::showPhoto(not_null<PhotoData*> photo, HistoryItem *context) {
|
||||||
if (context) {
|
if (context) {
|
||||||
setContext(context);
|
setContext(context);
|
||||||
|
@ -1292,21 +1341,7 @@ void MediaView::displayPhoto(not_null<PhotoData*> photo, HistoryItem *item) {
|
||||||
|
|
||||||
_zoom = 0;
|
_zoom = 0;
|
||||||
|
|
||||||
_caption = Text();
|
refreshCaption(item);
|
||||||
if (const auto media = item ? item->getMedia() : nullptr) {
|
|
||||||
const auto caption = media->getCaption();
|
|
||||||
if (!caption.text.isEmpty()) {
|
|
||||||
auto asBot = (item->author()->isUser()
|
|
||||||
&& item->author()->asUser()->botInfo);
|
|
||||||
auto skipw = qMax(_dateNav.left() + _dateNav.width(), _headerNav.left() + _headerNav.width());
|
|
||||||
auto maxw = qMin(qMax(width() - 2 * skipw - st::mediaviewCaptionPadding.left() - st::mediaviewCaptionPadding.right() - 2 * st::mediaviewCaptionMargin.width(), int(st::msgMinWidth)), _caption.maxWidth());
|
|
||||||
_caption = Text(maxw);
|
|
||||||
_caption.setMarkedText(
|
|
||||||
st::mediaviewCaptionStyle,
|
|
||||||
caption,
|
|
||||||
itemTextOptions(item));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_zoomToScreen = 0;
|
_zoomToScreen = 0;
|
||||||
Auth().downloader().clearPriorities();
|
Auth().downloader().clearPriorities();
|
||||||
|
@ -2901,3 +2936,20 @@ float64 MediaView::overLevel(OverState control) const {
|
||||||
auto i = _animOpacities.constFind(control);
|
auto i = _animOpacities.constFind(control);
|
||||||
return (i == _animOpacities.cend()) ? (_over == control ? 1 : 0) : i->current();
|
return (i == _animOpacities.cend()) ? (_over == control ? 1 : 0) : i->current();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool MediaView::groupThumbsDisplayed() const {
|
||||||
|
return _groupThumbs != nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
QRect MediaView::groupThumbsRect() const {
|
||||||
|
Expects(_groupThumbs != nullptr);
|
||||||
|
|
||||||
|
auto result = _groupThumbs->paintedRect();
|
||||||
|
result.moveTopLeft(result.topLeft()
|
||||||
|
+ QPoint(_groupThumbsLeft, _groupThumbsTop));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
QRect MediaView::groupThumbsFullRect() const {
|
||||||
|
return QRect(0, width(), _groupThumbsTop, height() - _groupThumbsTop);
|
||||||
|
}
|
||||||
|
|
|
@ -32,6 +32,9 @@ struct TrackState;
|
||||||
namespace Clip {
|
namespace Clip {
|
||||||
class Controller;
|
class Controller;
|
||||||
} // namespace Clip
|
} // namespace Clip
|
||||||
|
namespace View {
|
||||||
|
class GroupThumbs;
|
||||||
|
} // namespace View
|
||||||
} // namespace Media
|
} // namespace Media
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
|
@ -50,7 +53,7 @@ namespace Notify {
|
||||||
struct PeerUpdate;
|
struct PeerUpdate;
|
||||||
} // namespace Notify
|
} // namespace Notify
|
||||||
|
|
||||||
class MediaView : public TWidget, private base::Subscriber, public RPCSender, public ClickHandlerHost {
|
class MediaView : public TWidget, private base::Subscriber, public ClickHandlerHost {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -183,6 +186,7 @@ private:
|
||||||
void validateUserPhotos();
|
void validateUserPhotos();
|
||||||
void handleUserPhotosUpdate(UserPhotosSlice &&update);
|
void handleUserPhotosUpdate(UserPhotosSlice &&update);
|
||||||
|
|
||||||
|
void refreshCaption(HistoryItem *item);
|
||||||
void refreshMediaViewer();
|
void refreshMediaViewer();
|
||||||
void refreshNavVisibility();
|
void refreshNavVisibility();
|
||||||
|
|
||||||
|
@ -190,6 +194,7 @@ private:
|
||||||
void updateDocSize();
|
void updateDocSize();
|
||||||
void updateControls();
|
void updateControls();
|
||||||
void updateActions();
|
void updateActions();
|
||||||
|
void resizeCenteredControls();
|
||||||
|
|
||||||
void displayPhoto(not_null<PhotoData*> photo, HistoryItem *item);
|
void displayPhoto(not_null<PhotoData*> photo, HistoryItem *item);
|
||||||
void displayDocument(DocumentData *document, HistoryItem *item);
|
void displayDocument(DocumentData *document, HistoryItem *item);
|
||||||
|
@ -225,9 +230,6 @@ private:
|
||||||
void radialStart();
|
void radialStart();
|
||||||
TimeMs radialTimeShift() const;
|
TimeMs radialTimeShift() const;
|
||||||
|
|
||||||
void deletePhotosDone(const MTPVector<MTPlong> &result);
|
|
||||||
bool deletePhotosFail(const RPCError &error);
|
|
||||||
|
|
||||||
void updateHeader();
|
void updateHeader();
|
||||||
void snapXY();
|
void snapXY();
|
||||||
|
|
||||||
|
@ -246,6 +248,10 @@ private:
|
||||||
bool updateOverState(OverState newState);
|
bool updateOverState(OverState newState);
|
||||||
float64 overLevel(OverState control) const;
|
float64 overLevel(OverState control) const;
|
||||||
|
|
||||||
|
bool groupThumbsDisplayed() const;
|
||||||
|
QRect groupThumbsRect() const;
|
||||||
|
QRect groupThumbsFullRect() const;
|
||||||
|
|
||||||
QBrush _transparentBrush;
|
QBrush _transparentBrush;
|
||||||
|
|
||||||
PhotoData *_photo = nullptr;
|
PhotoData *_photo = nullptr;
|
||||||
|
@ -272,6 +278,9 @@ private:
|
||||||
bool _fullScreenVideo = false;
|
bool _fullScreenVideo = false;
|
||||||
int _fullScreenZoomCache = 0;
|
int _fullScreenZoomCache = 0;
|
||||||
|
|
||||||
|
std::unique_ptr<Media::View::GroupThumbs> _groupThumbs;
|
||||||
|
int _groupThumbsLeft = 0;
|
||||||
|
int _groupThumbsTop = 0;
|
||||||
Text _caption;
|
Text _caption;
|
||||||
QRect _captionRect;
|
QRect _captionRect;
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "window/themes/window_theme.h"
|
#include "window/themes/window_theme.h"
|
||||||
#include "history/history_location_manager.h"
|
#include "history/history_location_manager.h"
|
||||||
#include "ui/widgets/tooltip.h"
|
#include "ui/widgets/tooltip.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "storage/serialize_common.h"
|
#include "storage/serialize_common.h"
|
||||||
#include "window/window_controller.h"
|
#include "window/window_controller.h"
|
||||||
#include "base/qthelp_regex.h"
|
#include "base/qthelp_regex.h"
|
||||||
|
@ -115,7 +116,7 @@ Messenger::Messenger(not_null<Core::Launcher*> launcher)
|
||||||
|
|
||||||
style::startManager();
|
style::startManager();
|
||||||
anim::startManager();
|
anim::startManager();
|
||||||
HistoryInit();
|
Ui::InitTextOptions();
|
||||||
Media::Player::start();
|
Media::Player::start();
|
||||||
|
|
||||||
DEBUG_LOG(("Application Info: inited..."));
|
DEBUG_LOG(("Application Info: inited..."));
|
||||||
|
@ -986,7 +987,6 @@ void Messenger::checkMediaViewActivation() {
|
||||||
void Messenger::loggedOut() {
|
void Messenger::loggedOut() {
|
||||||
if (_mediaView) {
|
if (_mediaView) {
|
||||||
hideMediaView();
|
hideMediaView();
|
||||||
_mediaView->rpcClear();
|
|
||||||
_mediaView->clearData();
|
_mediaView->clearData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "history/history_media_types.h"
|
#include "history/history_media_types.h"
|
||||||
#include "history/history_item_components.h"
|
#include "history/history_item_components.h"
|
||||||
#include "ui/effects/round_checkbox.h"
|
#include "ui/effects/round_checkbox.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
|
|
||||||
namespace Overview {
|
namespace Overview {
|
||||||
namespace Layout {
|
namespace Layout {
|
||||||
|
@ -754,12 +755,12 @@ void Voice::updateName() {
|
||||||
auto version = 0;
|
auto version = 0;
|
||||||
if (const auto forwarded = parent()->Get<HistoryMessageForwarded>()) {
|
if (const auto forwarded = parent()->Get<HistoryMessageForwarded>()) {
|
||||||
if (parent()->fromOriginal()->isChannel()) {
|
if (parent()->fromOriginal()->isChannel()) {
|
||||||
_name.setText(st::semiboldTextStyle, lng_forwarded_channel(lt_channel, App::peerName(parent()->fromOriginal())), _textNameOptions);
|
_name.setText(st::semiboldTextStyle, lng_forwarded_channel(lt_channel, App::peerName(parent()->fromOriginal())), Ui::NameTextOptions());
|
||||||
} else {
|
} else {
|
||||||
_name.setText(st::semiboldTextStyle, lng_forwarded(lt_user, App::peerName(parent()->fromOriginal())), _textNameOptions);
|
_name.setText(st::semiboldTextStyle, lng_forwarded(lt_user, App::peerName(parent()->fromOriginal())), Ui::NameTextOptions());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_name.setText(st::semiboldTextStyle, App::peerName(parent()->from()), _textNameOptions);
|
_name.setText(st::semiboldTextStyle, App::peerName(parent()->from()), Ui::NameTextOptions());
|
||||||
}
|
}
|
||||||
version = parent()->fromOriginal()->nameVersion;
|
version = parent()->fromOriginal()->nameVersion;
|
||||||
_nameVersion = version;
|
_nameVersion = version;
|
||||||
|
|
|
@ -22,6 +22,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
|
|
||||||
#include "ui/effects/ripple_animation.h"
|
#include "ui/effects/ripple_animation.h"
|
||||||
#include "ui/widgets/popup_menu.h"
|
#include "ui/widgets/popup_menu.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "styles/style_profile.h"
|
#include "styles/style_profile.h"
|
||||||
#include "styles/style_widgets.h"
|
#include "styles/style_widgets.h"
|
||||||
#include "auth_session.h"
|
#include "auth_session.h"
|
||||||
|
@ -100,7 +101,10 @@ void PeerListWidget::paintItem(Painter &p, int x, int y, Item *item, bool select
|
||||||
item->peer->paintUserpicLeft(p, x + _st.photoPosition.x(), y + _st.photoPosition.y(), width(), _st.photoSize);
|
item->peer->paintUserpicLeft(p, x + _st.photoPosition.x(), y + _st.photoPosition.y(), width(), _st.photoSize);
|
||||||
|
|
||||||
if (item->name.isEmpty()) {
|
if (item->name.isEmpty()) {
|
||||||
item->name.setText(st::msgNameStyle, App::peerName(item->peer), _textNameOptions);
|
item->name.setText(
|
||||||
|
st::msgNameStyle,
|
||||||
|
App::peerName(item->peer),
|
||||||
|
Ui::NameTextOptions());
|
||||||
}
|
}
|
||||||
int nameLeft = x + _st.namePosition.x();
|
int nameLeft = x + _st.namePosition.x();
|
||||||
int nameTop = y + _st.namePosition.y();
|
int nameTop = y + _st.namePosition.y();
|
||||||
|
|
257
Telegram/SourceFiles/ui/text_options.cpp
Normal file
257
Telegram/SourceFiles/ui/text_options.cpp
Normal file
|
@ -0,0 +1,257 @@
|
||||||
|
/*
|
||||||
|
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-2017 John Preston, https://desktop.telegram.org
|
||||||
|
*/
|
||||||
|
#include "ui/text_options.h"
|
||||||
|
|
||||||
|
#include "styles/style_window.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
TextParseOptions HistoryTextOptions = {
|
||||||
|
TextParseLinks
|
||||||
|
| TextParseMentions
|
||||||
|
| TextParseHashtags
|
||||||
|
| TextParseMultiline
|
||||||
|
| TextParseRichText
|
||||||
|
| TextParseMarkdown, // flags
|
||||||
|
0, // maxw
|
||||||
|
0, // maxh
|
||||||
|
Qt::LayoutDirectionAuto, // dir
|
||||||
|
};
|
||||||
|
|
||||||
|
TextParseOptions HistoryBotOptions = {
|
||||||
|
TextParseLinks
|
||||||
|
| TextParseMentions
|
||||||
|
| TextParseHashtags
|
||||||
|
| TextParseBotCommands
|
||||||
|
| TextParseMultiline
|
||||||
|
| TextParseRichText
|
||||||
|
| TextParseMarkdown, // flags
|
||||||
|
0, // maxw
|
||||||
|
0, // maxh
|
||||||
|
Qt::LayoutDirectionAuto, // dir
|
||||||
|
};
|
||||||
|
|
||||||
|
TextParseOptions HistoryServiceOptions = {
|
||||||
|
TextParseLinks
|
||||||
|
| TextParseMentions
|
||||||
|
| TextParseHashtags
|
||||||
|
//| TextParseMultiline
|
||||||
|
| TextParseRichText, // flags
|
||||||
|
0, // maxw
|
||||||
|
0, // maxh
|
||||||
|
Qt::LayoutDirectionAuto, // lang-dependent
|
||||||
|
};
|
||||||
|
|
||||||
|
TextParseOptions HistoryTextNoMonoOptions = {
|
||||||
|
TextParseLinks
|
||||||
|
| TextParseMentions
|
||||||
|
| TextParseHashtags
|
||||||
|
| TextParseMultiline
|
||||||
|
| TextParseRichText, // flags
|
||||||
|
0, // maxw
|
||||||
|
0, // maxh
|
||||||
|
Qt::LayoutDirectionAuto, // dir
|
||||||
|
};
|
||||||
|
|
||||||
|
TextParseOptions HistoryBotNoMonoOptions = {
|
||||||
|
TextParseLinks
|
||||||
|
| TextParseMentions
|
||||||
|
| TextParseHashtags
|
||||||
|
| TextParseBotCommands
|
||||||
|
| TextParseMultiline
|
||||||
|
| TextParseRichText, // flags
|
||||||
|
0, // maxw
|
||||||
|
0, // maxh
|
||||||
|
Qt::LayoutDirectionAuto, // dir
|
||||||
|
};
|
||||||
|
|
||||||
|
TextParseOptions TextNameOptions = {
|
||||||
|
0, // flags
|
||||||
|
4096, // maxw
|
||||||
|
1, // maxh
|
||||||
|
Qt::LayoutDirectionAuto, // lang-dependent
|
||||||
|
};
|
||||||
|
|
||||||
|
TextParseOptions TextDialogOptions = {
|
||||||
|
TextParseRichText, // flags
|
||||||
|
0, // maxw is style-dependent
|
||||||
|
1, // maxh
|
||||||
|
Qt::LayoutDirectionAuto, // lang-dependent
|
||||||
|
};
|
||||||
|
|
||||||
|
TextParseOptions WebpageTitleOptions = {
|
||||||
|
TextParseMultiline | TextParseRichText, // flags
|
||||||
|
0, // maxw
|
||||||
|
0, // maxh
|
||||||
|
Qt::LayoutDirectionAuto, // dir
|
||||||
|
};
|
||||||
|
|
||||||
|
TextParseOptions WebpageDescriptionOptions = {
|
||||||
|
TextParseLinks
|
||||||
|
| TextParseMentions
|
||||||
|
| TextParseHashtags
|
||||||
|
| TextParseMultiline
|
||||||
|
| TextParseRichText
|
||||||
|
| TextParseMarkdown, // flags
|
||||||
|
0, // maxw
|
||||||
|
0, // maxh
|
||||||
|
Qt::LayoutDirectionAuto, // dir
|
||||||
|
};
|
||||||
|
|
||||||
|
TextParseOptions TwitterDescriptionOptions = {
|
||||||
|
TextParseLinks
|
||||||
|
| TextParseMentions
|
||||||
|
| TextTwitterMentions
|
||||||
|
| TextParseHashtags
|
||||||
|
| TextTwitterHashtags
|
||||||
|
| TextParseMultiline
|
||||||
|
| TextParseRichText, // flags
|
||||||
|
0, // maxw
|
||||||
|
0, // maxh
|
||||||
|
Qt::LayoutDirectionAuto, // dir
|
||||||
|
};
|
||||||
|
|
||||||
|
TextParseOptions InstagramDescriptionOptions = {
|
||||||
|
TextParseLinks
|
||||||
|
| TextParseMentions
|
||||||
|
| TextInstagramMentions
|
||||||
|
| TextParseHashtags
|
||||||
|
| TextInstagramHashtags
|
||||||
|
| TextParseMultiline
|
||||||
|
| TextParseRichText, // flags
|
||||||
|
0, // maxw
|
||||||
|
0, // maxh
|
||||||
|
Qt::LayoutDirectionAuto, // dir
|
||||||
|
};
|
||||||
|
|
||||||
|
bool UseBotTextOptions(
|
||||||
|
not_null<History*> history,
|
||||||
|
not_null<PeerData*> author) {
|
||||||
|
if (const auto user = history->peer->asUser()) {
|
||||||
|
if (user->botInfo) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else if (const auto chat = history->peer->asChat()) {
|
||||||
|
if (chat->botStatus >= 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else if (const auto group = history->peer->asMegagroup()) {
|
||||||
|
if (group->mgInfo->botStatus >= 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (const auto user = author->asUser()) {
|
||||||
|
if (user->botInfo) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
void InitTextOptions() {
|
||||||
|
HistoryServiceOptions.dir
|
||||||
|
= TextNameOptions.dir
|
||||||
|
= TextDialogOptions.dir
|
||||||
|
= cLangDir();
|
||||||
|
TextDialogOptions.maxw = st::columnMaximalWidthLeft * 2;
|
||||||
|
WebpageTitleOptions.maxh = st::webPageTitleFont->height * 2;
|
||||||
|
WebpageTitleOptions.maxw
|
||||||
|
= WebpageDescriptionOptions.maxw
|
||||||
|
= TwitterDescriptionOptions.maxw
|
||||||
|
= InstagramDescriptionOptions.maxw
|
||||||
|
= st::msgMaxWidth
|
||||||
|
- st::msgPadding.left()
|
||||||
|
- st::webPageLeft
|
||||||
|
- st::msgPadding.right();
|
||||||
|
WebpageDescriptionOptions.maxh = st::webPageDescriptionFont->height * 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TextParseOptions &ItemTextDefaultOptions() {
|
||||||
|
return HistoryTextOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TextParseOptions &ItemTextBotDefaultOptions() {
|
||||||
|
return HistoryBotOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TextParseOptions &ItemTextNoMonoOptions() {
|
||||||
|
return HistoryTextNoMonoOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TextParseOptions &ItemTextBotNoMonoOptions() {
|
||||||
|
return HistoryBotNoMonoOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TextParseOptions &ItemTextServiceOptions() {
|
||||||
|
return HistoryServiceOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TextParseOptions &WebpageTextTitleOptions() {
|
||||||
|
return WebpageTitleOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TextParseOptions &WebpageTextDescriptionOptions(
|
||||||
|
const QString &siteName) {
|
||||||
|
if (siteName == qstr("Twitter")) {
|
||||||
|
return TwitterDescriptionOptions;
|
||||||
|
} else if (siteName == qstr("Instagram")) {
|
||||||
|
return InstagramDescriptionOptions;
|
||||||
|
}
|
||||||
|
return WebpageDescriptionOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TextParseOptions &NameTextOptions() {
|
||||||
|
return TextNameOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TextParseOptions &DialogTextOptions() {
|
||||||
|
return TextDialogOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TextParseOptions &ItemTextOptions(
|
||||||
|
not_null<History*> history,
|
||||||
|
not_null<PeerData*> author) {
|
||||||
|
return UseBotTextOptions(history, author)
|
||||||
|
? HistoryBotOptions
|
||||||
|
: HistoryTextOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TextParseOptions &ItemTextOptions(not_null<const HistoryItem*> item) {
|
||||||
|
return ItemTextOptions(item->history(), item->author());
|
||||||
|
}
|
||||||
|
|
||||||
|
const TextParseOptions &ItemTextNoMonoOptions(
|
||||||
|
not_null<History*> history,
|
||||||
|
not_null<PeerData*> author) {
|
||||||
|
return UseBotTextOptions(history, author)
|
||||||
|
? HistoryBotNoMonoOptions
|
||||||
|
: HistoryTextNoMonoOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
const TextParseOptions &ItemTextNoMonoOptions(
|
||||||
|
not_null<const HistoryItem*> item) {
|
||||||
|
return ItemTextNoMonoOptions(item->history(), item->author());
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Ui
|
49
Telegram/SourceFiles/ui/text_options.h
Normal file
49
Telegram/SourceFiles/ui/text_options.h
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
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-2017 John Preston, https://desktop.telegram.org
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
|
||||||
|
void InitTextOptions();
|
||||||
|
|
||||||
|
const TextParseOptions &ItemTextDefaultOptions();
|
||||||
|
const TextParseOptions &ItemTextBotDefaultOptions();
|
||||||
|
const TextParseOptions &ItemTextNoMonoOptions();
|
||||||
|
const TextParseOptions &ItemTextBotNoMonoOptions();
|
||||||
|
const TextParseOptions &ItemTextServiceOptions();
|
||||||
|
|
||||||
|
const TextParseOptions &WebpageTextTitleOptions();
|
||||||
|
const TextParseOptions &WebpageTextDescriptionOptions(
|
||||||
|
const QString &siteName = QString());
|
||||||
|
|
||||||
|
const TextParseOptions &NameTextOptions();
|
||||||
|
const TextParseOptions &DialogTextOptions();
|
||||||
|
|
||||||
|
const TextParseOptions &ItemTextOptions(
|
||||||
|
not_null<History*> history,
|
||||||
|
not_null<PeerData*> author);
|
||||||
|
const TextParseOptions &ItemTextNoMonoOptions(
|
||||||
|
not_null<History*> history,
|
||||||
|
not_null<PeerData*> author);
|
||||||
|
const TextParseOptions &ItemTextOptions(not_null<const HistoryItem*> item);
|
||||||
|
const TextParseOptions &ItemTextNoMonoOptions(not_null<const HistoryItem*> item);
|
||||||
|
|
||||||
|
} // namespace Ui
|
|
@ -25,6 +25,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "ui/widgets/input_fields.h"
|
#include "ui/widgets/input_fields.h"
|
||||||
#include "ui/widgets/scroll_area.h"
|
#include "ui/widgets/scroll_area.h"
|
||||||
#include "ui/effects/cross_animation.h"
|
#include "ui/effects/cross_animation.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "lang/lang_keys.h"
|
#include "lang/lang_keys.h"
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
|
@ -43,7 +44,7 @@ MultiSelect::Item::Item(const style::MultiSelectItem &st, uint64 id, const QStri
|
||||||
}
|
}
|
||||||
|
|
||||||
void MultiSelect::Item::setText(const QString &text) {
|
void MultiSelect::Item::setText(const QString &text) {
|
||||||
_text.setText(_st.style, text, _textNameOptions);
|
_text.setText(_st.style, text, NameTextOptions());
|
||||||
_width = _st.height + _st.padding.left() + _text.maxWidth() + _st.padding.right();
|
_width = _st.height + _st.padding.left() + _text.maxWidth() + _st.padding.right();
|
||||||
accumulate_min(_width, _st.maxWidth);
|
accumulate_min(_width, _st.maxWidth);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ Copyright (c) 2014-2017 John Preston, https://desktop.telegram.org
|
||||||
#include "window/themes/window_theme.h"
|
#include "window/themes/window_theme.h"
|
||||||
#include "lang/lang_keys.h"
|
#include "lang/lang_keys.h"
|
||||||
#include "platform/platform_window_title.h"
|
#include "platform/platform_window_title.h"
|
||||||
|
#include "ui/text_options.h"
|
||||||
#include "styles/style_widgets.h"
|
#include "styles/style_widgets.h"
|
||||||
#include "styles/style_window.h"
|
#include "styles/style_window.h"
|
||||||
#include "styles/style_mediaview.h"
|
#include "styles/style_mediaview.h"
|
||||||
|
@ -213,13 +214,13 @@ void Generator::prepare() {
|
||||||
|
|
||||||
void Generator::addRow(QString name, int peerIndex, QString date, QString text) {
|
void Generator::addRow(QString name, int peerIndex, QString date, QString text) {
|
||||||
Row row;
|
Row row;
|
||||||
row.name.setText(st::msgNameStyle, name, _textNameOptions);
|
row.name.setText(st::msgNameStyle, name, Ui::NameTextOptions());
|
||||||
|
|
||||||
row.letters = fillLetters(name);
|
row.letters = fillLetters(name);
|
||||||
|
|
||||||
row.peerIndex = peerIndex;
|
row.peerIndex = peerIndex;
|
||||||
row.date = date;
|
row.date = date;
|
||||||
row.text.setRichText(st::dialogsTextStyle, text, _textDlgOptions);
|
row.text.setRichText(st::dialogsTextStyle, text, Ui::DialogTextOptions());
|
||||||
_rows.push_back(std::move(row));
|
_rows.push_back(std::move(row));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,7 +269,7 @@ int Generator::computeInfoWidth(Status status, QString date) {
|
||||||
void Generator::addTextBubble(QString text, QString date, Status status) {
|
void Generator::addTextBubble(QString text, QString date, Status status) {
|
||||||
Bubble bubble;
|
Bubble bubble;
|
||||||
auto skipBlock = computeSkipBlock(status, date);
|
auto skipBlock = computeSkipBlock(status, date);
|
||||||
bubble.text.setRichText(st::messageTextStyle, text + textcmdSkipBlock(skipBlock.width(), skipBlock.height()), _historyTextOptions);
|
bubble.text.setRichText(st::messageTextStyle, text + textcmdSkipBlock(skipBlock.width(), skipBlock.height()), Ui::ItemTextDefaultOptions());
|
||||||
|
|
||||||
auto width = _history.width() - st::msgMargin.left() - st::msgMargin.right();
|
auto width = _history.width() - st::msgMargin.left() - st::msgMargin.right();
|
||||||
accumulate_min(width, st::msgPadding.left() + bubble.text.maxWidth() + st::msgPadding.right());
|
accumulate_min(width, st::msgPadding.left() + bubble.text.maxWidth() + st::msgPadding.right());
|
||||||
|
@ -292,7 +293,7 @@ void Generator::addPhotoBubble(QString image, QString caption, QString date, Sta
|
||||||
bubble.photoWidth = convertScale(bubble.photo.width() / 2);
|
bubble.photoWidth = convertScale(bubble.photo.width() / 2);
|
||||||
bubble.photoHeight = convertScale(bubble.photo.height() / 2);
|
bubble.photoHeight = convertScale(bubble.photo.height() / 2);
|
||||||
auto skipBlock = computeSkipBlock(status, date);
|
auto skipBlock = computeSkipBlock(status, date);
|
||||||
bubble.text.setRichText(st::messageTextStyle, caption + textcmdSkipBlock(skipBlock.width(), skipBlock.height()), _historyTextOptions);
|
bubble.text.setRichText(st::messageTextStyle, caption + textcmdSkipBlock(skipBlock.width(), skipBlock.height()), Ui::ItemTextDefaultOptions());
|
||||||
|
|
||||||
auto width = _history.width() - st::msgMargin.left() - st::msgMargin.right();
|
auto width = _history.width() - st::msgMargin.left() - st::msgMargin.right();
|
||||||
accumulate_min(width, bubble.photoWidth);
|
accumulate_min(width, bubble.photoWidth);
|
||||||
|
@ -325,7 +326,7 @@ void Generator::generateData() {
|
||||||
_rows.back().status = Status::Received;
|
_rows.back().status = Status::Received;
|
||||||
addRow("Davy Jones", 5, "4:00", textcmdLink(1, "Keynote.pdf"));
|
addRow("Davy Jones", 5, "4:00", textcmdLink(1, "Keynote.pdf"));
|
||||||
|
|
||||||
_topBarName.setText(st::msgNameStyle, "Eva Summer", _textNameOptions);
|
_topBarName.setText(st::msgNameStyle, "Eva Summer", Ui::NameTextOptions());
|
||||||
_topBarStatus = "online";
|
_topBarStatus = "online";
|
||||||
_topBarStatusActive = true;
|
_topBarStatusActive = true;
|
||||||
|
|
||||||
|
@ -345,8 +346,8 @@ void Generator::generateData() {
|
||||||
_bubbles.back().attached = true;
|
_bubbles.back().attached = true;
|
||||||
_bubbles.back().tail = true;
|
_bubbles.back().tail = true;
|
||||||
addTextBubble("Reminds me of a Chinese proverb: the best time to plant a tree was 20 years ago. The second best time is now.", "11:00", Status::None);
|
addTextBubble("Reminds me of a Chinese proverb: the best time to plant a tree was 20 years ago. The second best time is now.", "11:00", Status::None);
|
||||||
_bubbles.back().replyName.setText(st::msgNameStyle, "Alex Cassio", _textNameOptions);
|
_bubbles.back().replyName.setText(st::msgNameStyle, "Alex Cassio", Ui::NameTextOptions());
|
||||||
_bubbles.back().replyText.setText(st::messageTextStyle, "Mark Twain said that " + QString() + QChar(9757) + QChar(55356) + QChar(57339), _textDlgOptions);
|
_bubbles.back().replyText.setText(st::messageTextStyle, "Mark Twain said that " + QString() + QChar(9757) + QChar(55356) + QChar(57339), Ui::DialogTextOptions());
|
||||||
}
|
}
|
||||||
|
|
||||||
Generator::Generator(const Instance &theme, const CurrentData ¤t)
|
Generator::Generator(const Instance &theme, const CurrentData ¤t)
|
||||||
|
|
|
@ -343,6 +343,8 @@
|
||||||
<(src_loc)/media/view/media_clip_playback.h
|
<(src_loc)/media/view/media_clip_playback.h
|
||||||
<(src_loc)/media/view/media_clip_volume_controller.cpp
|
<(src_loc)/media/view/media_clip_volume_controller.cpp
|
||||||
<(src_loc)/media/view/media_clip_volume_controller.h
|
<(src_loc)/media/view/media_clip_volume_controller.h
|
||||||
|
<(src_loc)/media/view/media_view_group_thumbs.cpp
|
||||||
|
<(src_loc)/media/view/media_view_group_thumbs.h
|
||||||
<(src_loc)/media/media_audio.cpp
|
<(src_loc)/media/media_audio.cpp
|
||||||
<(src_loc)/media/media_audio.h
|
<(src_loc)/media/media_audio.h
|
||||||
<(src_loc)/media/media_audio_capture.cpp
|
<(src_loc)/media/media_audio_capture.cpp
|
||||||
|
@ -628,6 +630,8 @@
|
||||||
<(src_loc)/ui/search_field_controller.h
|
<(src_loc)/ui/search_field_controller.h
|
||||||
<(src_loc)/ui/special_buttons.cpp
|
<(src_loc)/ui/special_buttons.cpp
|
||||||
<(src_loc)/ui/special_buttons.h
|
<(src_loc)/ui/special_buttons.h
|
||||||
|
<(src_loc)/ui/text_options.cpp
|
||||||
|
<(src_loc)/ui/text_options.h
|
||||||
<(src_loc)/ui/twidget.cpp
|
<(src_loc)/ui/twidget.cpp
|
||||||
<(src_loc)/ui/twidget.h
|
<(src_loc)/ui/twidget.h
|
||||||
<(src_loc)/ui/unread_badge.cpp
|
<(src_loc)/ui/unread_badge.cpp
|
||||||
|
|
Loading…
Add table
Reference in a new issue