Fix forum userpic rounding on Retina screens.

This commit is contained in:
John Preston 2022-12-06 16:38:54 +04:00
parent 3649cb41e2
commit d5c145b707
4 changed files with 10 additions and 12 deletions

View file

@ -353,7 +353,7 @@ QImage PeerData::generateUserpicImage(
const auto round = [&](int radius) { const auto round = [&](int radius) {
return Images::Round( return Images::Round(
std::move(image), std::move(image),
Images::CornersMask(radius)); Images::CornersMask(radius / style::DevicePixelRatio()));
}; };
if (radius == 0) { if (radius == 0) {
return image; return image;

View file

@ -382,13 +382,12 @@ void Photo::validateUserpicImageCache(QSize size, bool forum) const {
if (blurredValue) { if (blurredValue) {
args = args.blurred(); args = args.blurred();
} }
original = Images::Prepare(std::move(original), size, args); original = Images::Prepare(std::move(original), size * ratio, args);
if (forumValue) { if (forumValue) {
original = Images::Round( original = Images::Round(
std::move(original), std::move(original),
Images::CornersMask(std::min(size.width(), size.height()) Images::CornersMask(std::min(size.width(), size.height())
* Ui::ForumUserpicRadiusMultiplier() * Ui::ForumUserpicRadiusMultiplier()));
* style::DevicePixelRatio()));
} else { } else {
original = Images::Circle(std::move(original)); original = Images::Circle(std::move(original));
} }
@ -460,9 +459,8 @@ void Photo::paintUserpicFrame(
request.outer = request.resize = size * ratio; request.outer = request.resize = size * ratio;
if (forum) { if (forum) {
const auto radius = int(std::min(size.width(), size.height()) const auto radius = int(std::min(size.width(), size.height())
* Ui::ForumUserpicRadiusMultiplier() * Ui::ForumUserpicRadiusMultiplier());
* ratio); if (_streamed->roundingCorners[0].width() != radius * ratio) {
if (_streamed->roundingCorners[0].width() != radius) {
_streamed->roundingCorners = Images::CornersMask(radius); _streamed->roundingCorners = Images::CornersMask(radius);
} }
request.rounding = Images::CornersMaskRef( request.rounding = Images::CornersMaskRef(

View file

@ -478,9 +478,8 @@ void UserpicButton::paintUserpicFrame(Painter &p, QPoint photoPosition) {
const auto forum = _peer && _peer->isForum(); const auto forum = _peer && _peer->isForum();
if (forum) { if (forum) {
const auto radius = int(_st.photoSize const auto radius = int(_st.photoSize
* Ui::ForumUserpicRadiusMultiplier() * Ui::ForumUserpicRadiusMultiplier());
* ratio); if (_roundingCorners[0].width() != radius * ratio) {
if (_roundingCorners[0].width() != radius) {
_roundingCorners = Images::CornersMask(radius); _roundingCorners = Images::CornersMask(radius);
} }
request.rounding = Images::CornersMaskRef(_roundingCorners); request.rounding = Images::CornersMaskRef(_roundingCorners);

View file

@ -51,8 +51,9 @@ void ValidateUserpicCache(
if (forum) { if (forum) {
view.cached = Images::Round( view.cached = Images::Round(
std::move(view.cached), std::move(view.cached),
Images::CornersMask( Images::CornersMask(size
size * Ui::ForumUserpicRadiusMultiplier())); * Ui::ForumUserpicRadiusMultiplier()
/ style::DevicePixelRatio()));
} else { } else {
view.cached = Images::Circle(std::move(view.cached)); view.cached = Images::Circle(std::move(view.cached));
} }