From 29820e2ab264957b458d8336b8d6b0e0ed40802e Mon Sep 17 00:00:00 2001 From: Thiago Sueto Date: Thu, 12 Dec 2024 18:12:38 +0000 Subject: [PATCH] Don't set emoji size to font size https://invent.kde.org/network/neochat/-/merge_requests/2005 changed the custom emoji height (whose default is 32 on every Matrix client) to match font height (on my machine it becomes 17, my font is 12pt). It makes emojis unreadable on non-HiDPI resolutions (1366x768, 1920x1080), and even in the MR itself you can see how much detail is lost. This is compounded by some other rendering bug where the emoji image becomes very jagged when downscaled. That MR however was correct in that: * we want custom emojis to have a different size than unicode emojis * we want custom emojis to be centered according to the text (to make better use of line spacing/paddings) * we don't want the line height to be changed (too much) by custom emojis * we (probably) want custom emojis to be _displayed_ proportionally to the text I'm investigating ways to solve this issue. It seems other Matrix clients (and even chat applications like Telegram or Discord) all globally suffer from this issue and have dealt with it in different ways, sometimes masquerading it and sometimes working around it. For now though, we shouldn't break emoji legibility for our users. Affecting line height by a few pt is a minor issue compared to being almost unable to tell what inline emoji you or your interlocutor is using. Even just the "center emoji with text" thing already makes the line height issue 1/3 less of a problem. Once we improve the emoji rendering so it's more readable, _then_ it would make sense to decrease the emoji height to something like font.height * 1.6 or so. This does not affect unicode emojis, as far as I can tell those are handled elsewhere. This only affects inline custom emojis. Illegible on 1366x768 with 100% scaling and font size 11: ![image](/uploads/1d074c78d63aa1f28d9f3d204a656cc7/image.png){width=1025 height=576} ![Screenshot_20241212_144737](/uploads/7ae8e080f383461dcef3320575c05b24/Screenshot_20241212_144737.png) Legible: ![Screenshot_20241212_150257](/uploads/4f9395bd25025317005aaf1b9a1633c0/Screenshot_20241212_150257.png) ![Screenshot_20241212_150357](/uploads/a5fbb8885d601592591e99c0cc669794/Screenshot_20241212_150357.png) --- src/texthandler.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/texthandler.cpp b/src/texthandler.cpp index 3c234b5b4..42ac78344 100644 --- a/src/texthandler.cpp +++ b/src/texthandler.cpp @@ -142,15 +142,6 @@ TextHandler::handleRecieveRichText(Qt::TextFormat inputFormat, const NeoChatRoom // If the image does not have an explicit width, but has a vertical-align it's most likely an emoticon. // We must do some pre-processing for it to show up nicely in and around text. if (isEmoticon) { - // Remove any pre-existing height - extraAttributes.removeIf([](const QString &s) { - return s.contains(QStringLiteral("height=")); - }); - - // Make sure it's the same height as the rest of the text - const QFontMetrics metrics(QGuiApplication::font()); - extraAttributes.append(QStringLiteral("height=\"%1\"").arg(metrics.height())); - // Align it properly extraAttributes.append(QStringLiteral("style=\"%1\"").arg(customEmojiStyle)); }