From 292de83c359a9b03127778665cd446b99355932e Mon Sep 17 00:00:00 2001 From: AlexeyZavar Date: Fri, 31 Jan 2025 02:53:31 +0300 Subject: [PATCH] fix: messageshot on macOS Co-authored-by: Vladislav Gorodkov --- .../ayu/features/messageshot/message_shot.cpp | 5 +++-- .../ayu/ui/boxes/message_shot_box.cpp | 2 +- .../ayu/ui/components/image_view.cpp | 21 ++++++++++--------- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/Telegram/SourceFiles/ayu/features/messageshot/message_shot.cpp b/Telegram/SourceFiles/ayu/features/messageshot/message_shot.cpp index ce93caa38..b653f6fd2 100644 --- a/Telegram/SourceFiles/ayu/features/messageshot/message_shot.cpp +++ b/Telegram/SourceFiles/ayu/features/messageshot/message_shot.cpp @@ -247,8 +247,8 @@ QImage addPadding(const QImage &original) { } QImage paddedImage( - original.width() + 2 * st::messageShotPadding, - original.height() + 2 * st::messageShotPadding, + original.width() + 2 * st::messageShotPadding * style::DevicePixelRatio(), + original.height() + 2 * st::messageShotPadding * style::DevicePixelRatio(), QImage::Format_ARGB32_Premultiplied ); paddedImage.setDevicePixelRatio(style::DevicePixelRatio()); @@ -352,6 +352,7 @@ QImage Make(not_null box, const ShotConfig &config) { height += view->resizeGetHeight(width); } + width *= style::DevicePixelRatio(); height *= style::DevicePixelRatio(); // create the image diff --git a/Telegram/SourceFiles/ayu/ui/boxes/message_shot_box.cpp b/Telegram/SourceFiles/ayu/ui/boxes/message_shot_box.cpp index 685797351..de8e4b425 100644 --- a/Telegram/SourceFiles/ayu/ui/boxes/message_shot_box.cpp +++ b/Telegram/SourceFiles/ayu/ui/boxes/message_shot_box.cpp @@ -200,7 +200,7 @@ void MessageShotBox::setupContent() { 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( [=] diff --git a/Telegram/SourceFiles/ayu/ui/components/image_view.cpp b/Telegram/SourceFiles/ayu/ui/components/image_view.cpp index 0b1e4083b..6e9854c43 100644 --- a/Telegram/SourceFiles/ayu/ui/components/image_view.cpp +++ b/Telegram/SourceFiles/ayu/ui/components/image_view.cpp @@ -27,7 +27,8 @@ void ImageView::setImage(const QImage &image) { this->prevImage = this->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()) { this->animation.stop(); @@ -67,7 +68,7 @@ void ImageView::paintEvent(QPaintEvent *e) { const auto brush = QBrush(AyuFeatures::MessageShot::makeDefaultBackgroundColor()); QPainterPath path; - path.addRoundedRect(rect(), st::bubbleRadiusLarge, st::bubbleRadiusLarge); + path.addRoundedRect(rect(), st::roundRadiusLarge, st::roundRadiusLarge); p.fillPath(path, brush); @@ -75,10 +76,10 @@ void ImageView::paintEvent(QPaintEvent *e) { const auto realRect = rect().marginsRemoved(st::imageViewInnerPadding); const auto resizedRect = QRect( - (realRect.width() - prevImage.width()) / 2 + st::imageViewInnerPadding.left(), - (realRect.height() - prevImage.height()) / 2 + st::imageViewInnerPadding.top(), - prevImage.width(), - prevImage.height()); + (realRect.width() - prevImage.width() / style::DevicePixelRatio()) / 2 + st::imageViewInnerPadding.left(), + (realRect.height() - prevImage.height() / style::DevicePixelRatio()) / 2 + st::imageViewInnerPadding.top(), + prevImage.width() / style::DevicePixelRatio(), + prevImage.height() / style::DevicePixelRatio()); const auto opacity = 1.0 - animation.value(1.0); p.setOpacity(opacity); @@ -90,10 +91,10 @@ void ImageView::paintEvent(QPaintEvent *e) { const auto realRect = rect().marginsRemoved(st::imageViewInnerPadding); const auto resizedRect = QRect( - (realRect.width() - image.width()) / 2 + st::imageViewInnerPadding.left(), - (realRect.height() - image.height()) / 2 + st::imageViewInnerPadding.top(), - image.width(), - image.height()); + (realRect.width() - image.width() / style::DevicePixelRatio()) / 2 + st::imageViewInnerPadding.left(), + (realRect.height() - image.height() / style::DevicePixelRatio()) / 2 + st::imageViewInnerPadding.top(), + image.width() / style::DevicePixelRatio(), + image.height() / style::DevicePixelRatio()); const auto opacity = animation.value(1.0); p.setOpacity(opacity);