Estimate size of images to avoid layout shifts (#5192)

This commit is contained in:
nerix
2024-02-25 18:19:20 +01:00
committed by GitHub
parent 0cfd25ce8e
commit f285ada36c
13 changed files with 145 additions and 70 deletions
+19 -7
View File
@@ -18,6 +18,13 @@
#include <QThread>
#include <QUrlQuery>
namespace {
// From Twitch docs - expected size for a badge (1x)
constexpr QSize BADGE_BASE_SIZE(18, 18);
} // namespace
namespace chatterino {
void TwitchBadges::loadTwitchBadges()
@@ -37,9 +44,12 @@ void TwitchBadges::loadTwitchBadges()
.name = EmoteName{},
.images =
ImageSet{
Image::fromUrl(version.imageURL1x, 1),
Image::fromUrl(version.imageURL2x, .5),
Image::fromUrl(version.imageURL4x, .25),
Image::fromUrl(version.imageURL1x, 1,
BADGE_BASE_SIZE),
Image::fromUrl(version.imageURL2x, .5,
BADGE_BASE_SIZE * 2),
Image::fromUrl(version.imageURL4x, .25,
BADGE_BASE_SIZE * 4),
},
.tooltip = Tooltip{version.title},
.homePage = version.clickURL,
@@ -100,17 +110,19 @@ void TwitchBadges::parseTwitchBadges(QJsonObject root)
for (auto vIt = versions.begin(); vIt != versions.end(); ++vIt)
{
auto versionObj = vIt.value().toObject();
auto emote = Emote{
.name = {""},
.images =
ImageSet{
Image::fromUrl(
{versionObj.value("image_url_1x").toString()}, 1),
{versionObj.value("image_url_1x").toString()}, 1,
BADGE_BASE_SIZE),
Image::fromUrl(
{versionObj.value("image_url_2x").toString()}, .5),
{versionObj.value("image_url_2x").toString()}, .5,
BADGE_BASE_SIZE * 2),
Image::fromUrl(
{versionObj.value("image_url_4x").toString()}, .25),
{versionObj.value("image_url_4x").toString()}, .25,
BADGE_BASE_SIZE * 4),
},
.tooltip = Tooltip{versionObj.value("title").toString()},
.homePage = Url{versionObj.value("click_url").toString()},