fix: messageshot on macOS

Co-authored-by: Vladislav Gorodkov <fuccsoc@gmail.com>
This commit is contained in:
AlexeyZavar 2025-01-31 02:53:31 +03:00
parent 7fe66c07e4
commit 292de83c35
3 changed files with 15 additions and 13 deletions

View file

@ -247,8 +247,8 @@ QImage addPadding(const QImage &original) {
} }
QImage paddedImage( QImage paddedImage(
original.width() + 2 * st::messageShotPadding, original.width() + 2 * st::messageShotPadding * style::DevicePixelRatio(),
original.height() + 2 * st::messageShotPadding, original.height() + 2 * st::messageShotPadding * style::DevicePixelRatio(),
QImage::Format_ARGB32_Premultiplied QImage::Format_ARGB32_Premultiplied
); );
paddedImage.setDevicePixelRatio(style::DevicePixelRatio()); paddedImage.setDevicePixelRatio(style::DevicePixelRatio());
@ -352,6 +352,7 @@ QImage Make(not_null<QWidget*> box, const ShotConfig &config) {
height += view->resizeGetHeight(width); height += view->resizeGetHeight(width);
} }
width *= style::DevicePixelRatio();
height *= style::DevicePixelRatio(); height *= style::DevicePixelRatio();
// create the image // create the image

View file

@ -200,7 +200,7 @@ void MessageShotBox::setupContent() {
updatePreview(); updatePreview();
const auto boxWidth = imageView->getImage().width() + (st::boxPadding.left() + st::boxPadding.right()) * 4; const auto boxWidth = imageView->getImage().width() / style::DevicePixelRatio() + (st::boxPadding.left() + st::boxPadding.right()) * 4;
boxClosing() | rpl::start_with_next( boxClosing() | rpl::start_with_next(
[=] [=]

View file

@ -27,7 +27,8 @@ void ImageView::setImage(const QImage &image) {
this->prevImage = this->image; this->prevImage = this->image;
this->image = image; this->image = image;
setMinimumSize(image.size().grownBy(st::imageViewInnerPadding)); const auto size = image.size() / style::DevicePixelRatio();
setMinimumSize(size.grownBy(st::imageViewInnerPadding));
if (this->animation.animating()) { if (this->animation.animating()) {
this->animation.stop(); this->animation.stop();
@ -67,7 +68,7 @@ void ImageView::paintEvent(QPaintEvent *e) {
const auto brush = QBrush(AyuFeatures::MessageShot::makeDefaultBackgroundColor()); const auto brush = QBrush(AyuFeatures::MessageShot::makeDefaultBackgroundColor());
QPainterPath path; QPainterPath path;
path.addRoundedRect(rect(), st::bubbleRadiusLarge, st::bubbleRadiusLarge); path.addRoundedRect(rect(), st::roundRadiusLarge, st::roundRadiusLarge);
p.fillPath(path, brush); p.fillPath(path, brush);
@ -75,10 +76,10 @@ void ImageView::paintEvent(QPaintEvent *e) {
const auto realRect = rect().marginsRemoved(st::imageViewInnerPadding); const auto realRect = rect().marginsRemoved(st::imageViewInnerPadding);
const auto resizedRect = QRect( const auto resizedRect = QRect(
(realRect.width() - prevImage.width()) / 2 + st::imageViewInnerPadding.left(), (realRect.width() - prevImage.width() / style::DevicePixelRatio()) / 2 + st::imageViewInnerPadding.left(),
(realRect.height() - prevImage.height()) / 2 + st::imageViewInnerPadding.top(), (realRect.height() - prevImage.height() / style::DevicePixelRatio()) / 2 + st::imageViewInnerPadding.top(),
prevImage.width(), prevImage.width() / style::DevicePixelRatio(),
prevImage.height()); prevImage.height() / style::DevicePixelRatio());
const auto opacity = 1.0 - animation.value(1.0); const auto opacity = 1.0 - animation.value(1.0);
p.setOpacity(opacity); p.setOpacity(opacity);
@ -90,10 +91,10 @@ void ImageView::paintEvent(QPaintEvent *e) {
const auto realRect = rect().marginsRemoved(st::imageViewInnerPadding); const auto realRect = rect().marginsRemoved(st::imageViewInnerPadding);
const auto resizedRect = QRect( const auto resizedRect = QRect(
(realRect.width() - image.width()) / 2 + st::imageViewInnerPadding.left(), (realRect.width() - image.width() / style::DevicePixelRatio()) / 2 + st::imageViewInnerPadding.left(),
(realRect.height() - image.height()) / 2 + st::imageViewInnerPadding.top(), (realRect.height() - image.height() / style::DevicePixelRatio()) / 2 + st::imageViewInnerPadding.top(),
image.width(), image.width() / style::DevicePixelRatio(),
image.height()); image.height() / style::DevicePixelRatio());
const auto opacity = animation.value(1.0); const auto opacity = animation.value(1.0);
p.setOpacity(opacity); p.setOpacity(opacity);