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) {
return Images::Round(
std::move(image),
Images::CornersMask(radius));
Images::CornersMask(radius / style::DevicePixelRatio()));
};
if (radius == 0) {
return image;

View File

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

View File

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

View File

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