From 3a79f92c30626950d6e98aad97b7386ef01f16d9 Mon Sep 17 00:00:00 2001 From: zhaoyingzhen Date: Tue, 14 May 2024 13:21:38 +0800 Subject: [PATCH] fix: x11 preview content is blurry Solve the problem of blurry images in the preview widget. Log: x11 preview content is blurry Influence: x11 preview content --- panels/dock/taskmanager/x11preview.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/panels/dock/taskmanager/x11preview.cpp b/panels/dock/taskmanager/x11preview.cpp index 00ab0d3eb..4faa53588 100644 --- a/panels/dock/taskmanager/x11preview.cpp +++ b/panels/dock/taskmanager/x11preview.cpp @@ -249,7 +249,8 @@ class AppItemWindowDeletegate : public QAbstractItemDelegate if (WM_HELPER->hasComposite()) { auto pixmap = index.data(WindowPreviewContentRole).value(); auto size = calSize(pixmap.size()); - auto scaledPixmap = pixmap.scaled(size, Qt::KeepAspectRatio); + auto scaledPixmap = pixmap.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation); + scaledPixmap.setDevicePixelRatio(qApp->devicePixelRatio()); hoverRect.setSize(size + QSize(PREVIEW_HOVER_BORDER * 2, PREVIEW_HOVER_BORDER * 2)); hoverRect = hoverRect.marginsAdded(QMargins(-2, -2, -2, -2)); @@ -257,7 +258,7 @@ class AppItemWindowDeletegate : public QAbstractItemDelegate const int radius = dstyle.pixelMetric(DStyle::PM_FrameRadius); painter->save(); - painter->setRenderHint(QPainter::Antialiasing); + painter->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); pen.setWidth(1); pen.setColor(themeType == DGuiApplicationHelper::DarkType ? QColor(255, 255, 255, 255 * 0.1) : QColor(0, 0, 0, 255 * 0.1)); painter->setPen(pen); @@ -269,7 +270,7 @@ class AppItemWindowDeletegate : public QAbstractItemDelegate QPainterPath clipPath; clipPath.addRoundedRect(imageRect, radius, radius); painter->setClipPath(clipPath); - painter->drawPixmap(imageRect, pixmap.scaled(size, Qt::KeepAspectRatio)); + painter->drawPixmap(imageRect, scaledPixmap); painter->setClipping(false); painter->drawRoundedRect(imageRect, radius, radius); if (option.state.testFlag(QStyle::State_MouseOver)) { @@ -324,7 +325,7 @@ class AppItemWindowDeletegate : public QAbstractItemDelegate auto closeButton = new DToolButton(parent); closeButton->setIconSize(QSize(16, 16)); closeButton->setFixedSize(PREVIEW_TITLE_HEIGHT, PREVIEW_TITLE_HEIGHT); - closeButton->move(option.rect.topRight() - QPoint(PREVIEW_TITLE_HEIGHT + 4, -4)); + closeButton->move(option.rect.topRight() - QPoint(PREVIEW_TITLE_HEIGHT + 4, -5)); closeButton->setVisible(true); closeButton->setIcon(QIcon::fromTheme("close"));