/
diev
/
stelegramdesktop-tdesktop
Обзор
Документация
Войти
/
diev
/
stelegramdesktop-tdesktop
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
Telegram/SourceFiles/ui/userpic_view.cpp
81 строка
2 KB
John Preston
Fix forum userpic rounding on Retina screens.
06 дек 2022, 15:38
06 дек 2022, 15:38
d5c145b
Код
Авторство
О чём код?
/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "ui/userpic_view.h" #include "ui/empty_userpic.h" #include "ui/image/image_prepare.h" namespace Ui { float64 ForumUserpicRadiusMultiplier() { return 0.3; } bool PeerUserpicLoading(const PeerUserpicView &view) { return view.cloud && view.cloud->isNull(); } void ValidateUserpicCache( PeerUserpicView &view, const QImage *cloud, const EmptyUserpic *empty, int size, bool forum) { Expects(cloud != nullptr || empty != nullptr); const auto full = QSize(size, size); const auto version = style::PaletteVersion(); const auto forumValue = forum ? 1 : 0; const auto regenerate = (view.cached.size() != QSize(size, size)) || (view.forum != forumValue) || (cloud && !view.empty.null()) || (empty && empty != view.empty.get()) || (empty && view.paletteVersion != version); if (!regenerate) { return; } view.empty = empty; view.forum = forumValue; view.paletteVersion = version; if (cloud) { view.cached = cloud->scaled( full, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); if (forum) { view.cached = Images::Round( std::move(view.cached), Images::CornersMask(size * Ui::ForumUserpicRadiusMultiplier() / style::DevicePixelRatio())); } else { view.cached = Images::Circle(std::move(view.cached)); } } else { if (view.cached.size() != full) { view.cached = QImage(full, QImage::Format_ARGB32_Premultiplied); } view.cached.fill(Qt::transparent); auto p = QPainter(&view.cached); if (forum) { empty->paintRounded( p, 0, 0, size, size, size * Ui::ForumUserpicRadiusMultiplier()); } else { empty->paintCircle(p, 0, 0, size, size); } } } } // namespace Ui