Improve external reply icons paddings.
This commit is contained in:
parent
537c656ee1
commit
d6c3760646
|
@ -93,6 +93,14 @@ private:
|
||||||
return u"internal:"_q;
|
return u"internal:"_q;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] QString InternalPadding(QMargins value) {
|
||||||
|
return value.isNull() ? QString() : QString(",%1,%2,%3,%4"
|
||||||
|
).arg(value.left()
|
||||||
|
).arg(value.top()
|
||||||
|
).arg(value.right()
|
||||||
|
).arg(value.bottom());
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
class CustomEmojiLoader final
|
class CustomEmojiLoader final
|
||||||
|
@ -549,13 +557,21 @@ std::unique_ptr<Ui::Text::CustomEmoji> CustomEmojiManager::create(
|
||||||
|
|
||||||
std::unique_ptr<Ui::Text::CustomEmoji> CustomEmojiManager::internal(
|
std::unique_ptr<Ui::Text::CustomEmoji> CustomEmojiManager::internal(
|
||||||
QStringView data) {
|
QStringView data) {
|
||||||
const auto index = data.mid(InternalPrefix().size()).toInt();
|
const auto v = data.mid(InternalPrefix().size()).split(',');
|
||||||
|
if (v.size() != 5 && v.size() != 1) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
const auto index = v[0].toInt();
|
||||||
Assert(index >= 0 && index < _internalEmoji.size());
|
Assert(index >= 0 && index < _internalEmoji.size());
|
||||||
|
|
||||||
auto &info = _internalEmoji[index];
|
auto &info = _internalEmoji[index];
|
||||||
|
const auto padding = (v.size() == 5)
|
||||||
|
? QMargins(v[1].toInt(), v[2].toInt(), v[3].toInt(), v[4].toInt())
|
||||||
|
: QMargins();
|
||||||
return std::make_unique<Ui::CustomEmoji::Internal>(
|
return std::make_unique<Ui::CustomEmoji::Internal>(
|
||||||
data.toString(),
|
data.toString(),
|
||||||
info.image,
|
info.image,
|
||||||
|
padding,
|
||||||
info.textColor);
|
info.textColor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -906,17 +922,21 @@ uint64 CustomEmojiManager::coloredSetId() const {
|
||||||
|
|
||||||
QString CustomEmojiManager::registerInternalEmoji(
|
QString CustomEmojiManager::registerInternalEmoji(
|
||||||
QImage emoji,
|
QImage emoji,
|
||||||
|
QMargins padding,
|
||||||
bool textColor) {
|
bool textColor) {
|
||||||
_internalEmoji.push_back({ std::move(emoji), textColor });
|
_internalEmoji.push_back({ std::move(emoji), textColor });
|
||||||
return InternalPrefix() + QString::number(_internalEmoji.size() - 1);
|
return InternalPrefix()
|
||||||
|
+ QString::number(_internalEmoji.size() - 1)
|
||||||
|
+ InternalPadding(padding);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString CustomEmojiManager::registerInternalEmoji(
|
QString CustomEmojiManager::registerInternalEmoji(
|
||||||
const style::icon &icon,
|
const style::icon &icon,
|
||||||
|
QMargins padding,
|
||||||
bool textColor) {
|
bool textColor) {
|
||||||
const auto i = _iconEmoji.find(&icon);
|
const auto i = _iconEmoji.find(&icon);
|
||||||
if (i != end(_iconEmoji)) {
|
if (i != end(_iconEmoji)) {
|
||||||
return i->second;
|
return i->second + InternalPadding(padding);
|
||||||
}
|
}
|
||||||
auto image = QImage(
|
auto image = QImage(
|
||||||
icon.size() * style::DevicePixelRatio(),
|
icon.size() * style::DevicePixelRatio(),
|
||||||
|
@ -927,9 +947,12 @@ QString CustomEmojiManager::registerInternalEmoji(
|
||||||
icon.paint(p, 0, 0, icon.width());
|
icon.paint(p, 0, 0, icon.width());
|
||||||
p.end();
|
p.end();
|
||||||
|
|
||||||
const auto result = registerInternalEmoji(std::move(image), textColor);
|
const auto result = registerInternalEmoji(
|
||||||
|
std::move(image),
|
||||||
|
QMargins{},
|
||||||
|
textColor);
|
||||||
_iconEmoji.emplace(&icon, result);
|
_iconEmoji.emplace(&icon, result);
|
||||||
return result;
|
return result + InternalPadding(padding);
|
||||||
}
|
}
|
||||||
|
|
||||||
int FrameSizeFromTag(SizeTag tag) {
|
int FrameSizeFromTag(SizeTag tag) {
|
||||||
|
|
|
@ -85,9 +85,11 @@ public:
|
||||||
|
|
||||||
[[nodiscard]] QString registerInternalEmoji(
|
[[nodiscard]] QString registerInternalEmoji(
|
||||||
QImage emoji,
|
QImage emoji,
|
||||||
|
QMargins padding = {},
|
||||||
bool textColor = true);
|
bool textColor = true);
|
||||||
[[nodiscard]] QString registerInternalEmoji(
|
[[nodiscard]] QString registerInternalEmoji(
|
||||||
const style::icon &icon,
|
const style::icon &icon,
|
||||||
|
QMargins padding = {},
|
||||||
bool textColor = true);
|
bool textColor = true);
|
||||||
|
|
||||||
[[nodiscard]] uint64 coloredSetId() const;
|
[[nodiscard]] uint64 coloredSetId() const;
|
||||||
|
|
|
@ -415,19 +415,22 @@ void Reply::updateName(
|
||||||
- st::historyReplyPadding.left())
|
- st::historyReplyPadding.left())
|
||||||
: 0;
|
: 0;
|
||||||
const auto peerIcon = [](PeerData *peer) {
|
const auto peerIcon = [](PeerData *peer) {
|
||||||
|
using namespace std;
|
||||||
return !peer
|
return !peer
|
||||||
? &st::historyReplyUser
|
? pair(&st::historyReplyUser, st::historyReplyUserPadding)
|
||||||
: peer->isBroadcast()
|
: peer->isBroadcast()
|
||||||
? &st::historyReplyChannel
|
? pair(&st::historyReplyChannel, st::historyReplyChannelPadding)
|
||||||
: (peer->isChannel() || peer->isChat())
|
: (peer->isChannel() || peer->isChat())
|
||||||
? &st::historyReplyGroup
|
? pair(&st::historyReplyGroup, st::historyReplyGroupPadding)
|
||||||
: &st::historyReplyUser;
|
: pair(&st::historyReplyUser, st::historyReplyUserPadding);
|
||||||
};
|
};
|
||||||
const auto peerEmoji = [&](PeerData *peer) {
|
const auto peerEmoji = [&](PeerData *peer) {
|
||||||
const auto owner = &view->history()->owner();
|
const auto owner = &view->history()->owner();
|
||||||
|
const auto icon = peerIcon(peer);
|
||||||
return Ui::Text::SingleCustomEmoji(
|
return Ui::Text::SingleCustomEmoji(
|
||||||
owner->customEmojiManager().registerInternalEmoji(
|
owner->customEmojiManager().registerInternalEmoji(
|
||||||
*peerIcon(peer)));
|
*icon.first,
|
||||||
|
icon.second));
|
||||||
};
|
};
|
||||||
auto nameFull = TextWithEntities();
|
auto nameFull = TextWithEntities();
|
||||||
if (!groupNameAdded && data->external() && !fields.storyId) {
|
if (!groupNameAdded && data->external() && !fields.storyId) {
|
||||||
|
@ -435,7 +438,7 @@ void Reply::updateName(
|
||||||
}
|
}
|
||||||
nameFull.append(name);
|
nameFull.append(name);
|
||||||
if (groupNameAdded) {
|
if (groupNameAdded) {
|
||||||
nameFull.append(peerEmoji(externalPeer));
|
nameFull.append(' ').append(peerEmoji(externalPeer));
|
||||||
nameFull.append(externalPeer->name());
|
nameFull.append(externalPeer->name());
|
||||||
}
|
}
|
||||||
if (!viaBotUsername.isEmpty()) {
|
if (!viaBotUsername.isEmpty()) {
|
||||||
|
|
Loading…
Reference in New Issue