Disabling big emoji outline

This commit is contained in:
Eric Kotato 2019-10-01 20:10:19 +03:00
parent a160580f52
commit 92ea4c5908
3 changed files with 6 additions and 44 deletions

View file

@ -321,57 +321,19 @@ EmojiImageLoader::EmojiImageLoader(
QImage EmojiImageLoader::prepare(EmojiPtr emoji) {
const auto loaded = _images->ensureLoaded();
const auto factor = cIntRetinaFactor();
const auto side = st::largeEmojiSize + 2 * st::largeEmojiOutline;
auto tinted = QImage(
QSize(st::largeEmojiSize, st::largeEmojiSize) * factor,
QImage::Format_ARGB32_Premultiplied);
tinted.fill(Qt::white);
if (loaded) {
QPainter p(&tinted);
p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
_images->draw(
p,
emoji,
st::largeEmojiSize * factor,
0,
0);
}
const auto side = st::largeEmojiSize;
auto result = QImage(
QSize(side, side) * factor,
QImage::Format_ARGB32_Premultiplied);
result.fill(Qt::transparent);
if (loaded) {
QPainter p(&result);
const auto delta = st::largeEmojiOutline * factor;
const auto planar = std::array<QPoint, 4>{ {
{ 0, -1 },
{ -1, 0 },
{ 1, 0 },
{ 0, 1 },
} };
for (const auto &shift : planar) {
for (auto i = 0; i != delta; ++i) {
p.drawImage(QPoint(delta, delta) + shift * (i + 1), tinted);
}
}
const auto diagonal = std::array<QPoint, 4>{ {
{ -1, -1 },
{ 1, -1 },
{ -1, 1 },
{ 1, 1 },
} };
const auto corrected = int(std::round(delta / sqrt(2.)));
for (const auto &shift : diagonal) {
for (auto i = 0; i != corrected; ++i) {
p.drawImage(QPoint(delta, delta) + shift * (i + 1), tinted);
}
}
_images->draw(
p,
emoji,
st::largeEmojiSize * factor,
delta,
delta);
0,
0);
}
return result;
}

View file

@ -55,7 +55,7 @@ QSize LargeEmoji::size() {
Assert(count > 0);
const auto single = _images[0]->size() / cIntRetinaFactor();
const auto skip = st::largeEmojiSkip - 2 * st::largeEmojiOutline;
const auto skip = st::largeEmojiSkip;
const auto inner = count * single.width() + (count - 1) * skip;
const auto &padding = st::largeEmojiPadding;
_size = QSize(
@ -70,7 +70,7 @@ void LargeEmoji::draw(Painter &p, const QRect &r, bool selected) {
auto x = r.x() + (r.width() - _size.width()) / 2 + padding.left();
const auto y = r.y() + (r.height() - _size.height()) / 2 + padding.top();
const auto o = Data::FileOrigin();
const auto skip = st::largeEmojiSkip - 2 * st::largeEmojiOutline;
const auto skip = st::largeEmojiSkip;
for (const auto &image : images) {
image->load(Data::FileOrigin());
const auto w = image->width() / cIntRetinaFactor();

View file

@ -32,7 +32,7 @@ QSize UnwrappedMedia::countOptimalSize() {
_content->size(),
{ st::maxStickerSize, st::historyStickerHeight }));
auto maxWidth = _contentSize.width();
const auto minimal = st::largeEmojiSize + 2 * st::largeEmojiOutline;
const auto minimal = st::largeEmojiSize;
auto minHeight = std::max(_contentSize.height(), minimal);
if (_parent->media() == this) {
const auto item = _parent->data();