diff --git a/frame/item/appitem.cpp b/frame/item/appitem.cpp index 49a368870..7823960d1 100644 --- a/frame/item/appitem.cpp +++ b/frame/item/appitem.cpp @@ -257,13 +257,15 @@ void AppItem::paintEvent(QPaintEvent *e) return; // icon pos - const QPointF iconPos = itemRect.center() - QRectF(pixmap.rect()).center(); + const auto ratio = qApp->devicePixelRatio(); + const int iconX = itemRect.center().x() - pixmap.rect().center().x() / ratio; + const int iconY = itemRect.center().y() - pixmap.rect().center().y() / ratio; // draw ligher/normal icon if (!m_hover) - painter.drawPixmap(iconPos, pixmap); + painter.drawPixmap(iconX, iconY, pixmap); else - painter.drawPixmap(iconPos, ImageFactory::lighterEffect(pixmap)); + painter.drawPixmap(iconX, iconY, ImageFactory::lighterEffect(pixmap)); } void AppItem::mouseReleaseEvent(QMouseEvent *e) diff --git a/frame/item/launcheritem.cpp b/frame/item/launcheritem.cpp index 28ed019cd..a1178d47e 100644 --- a/frame/item/launcheritem.cpp +++ b/frame/item/launcheritem.cpp @@ -45,10 +45,15 @@ void LauncherItem::paintEvent(QPaintEvent *e) const QPixmap pixmap = DockDisplayMode == Fashion ? m_largeIcon : m_smallIcon; - if (m_hover) - painter.drawPixmap(rect().center() - pixmap.rect().center(), ImageFactory::lighterEffect(pixmap)); + const auto ratio = qApp->devicePixelRatio(); + const int iconX = rect().center().x() - pixmap.rect().center().x() / ratio; + const int iconY = rect().center().y() - pixmap.rect().center().y() / ratio; + + // draw ligher/normal icon + if (!m_hover) + painter.drawPixmap(iconX, iconY, pixmap); else - painter.drawPixmap(rect().center() - pixmap.rect().center(), pixmap); + painter.drawPixmap(iconX, iconY, ImageFactory::lighterEffect(pixmap)); } void LauncherItem::resizeEvent(QResizeEvent *e) diff --git a/frame/util/themeappicon.cpp b/frame/util/themeappicon.cpp index bf4b2ab8c..e656e16f7 100644 --- a/frame/util/themeappicon.cpp +++ b/frame/util/themeappicon.cpp @@ -3,6 +3,7 @@ #include #include #include +#include ThemeAppIcon::ThemeAppIcon(QObject *parent) : QObject(parent) { @@ -16,7 +17,8 @@ ThemeAppIcon::~ThemeAppIcon() const QPixmap ThemeAppIcon::getIcon(const QString iconName, const int size) { - const int s = size & ~1; + const auto ratio = qApp->devicePixelRatio(); + const int s = int(size * ratio) & ~1; QPixmap pixmap; @@ -52,6 +54,9 @@ const QPixmap ThemeAppIcon::getIcon(const QString iconName, const int size) } while (false); - return pixmap.scaled(s, s, Qt::KeepAspectRatio, Qt::SmoothTransformation); + pixmap = pixmap.scaled(s, s, Qt::KeepAspectRatio, Qt::SmoothTransformation); + pixmap.setDevicePixelRatio(ratio); + + return pixmap; } diff --git a/plugins/system-tray/traywidget.cpp b/plugins/system-tray/traywidget.cpp index 3e9a38391..9d88e39a6 100644 --- a/plugins/system-tray/traywidget.cpp +++ b/plugins/system-tray/traywidget.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -169,11 +170,12 @@ void TrayWidget::enterEvent(QEvent *e) // qDebug() << Q_FUNC_INFO; // fake enter event + const auto ratio = qApp->devicePixelRatio(); const QPoint p(QCursor::pos()); configContainerPosition(); setX11PassMouseEvent(false); setWindowOnTop(true); - XTestFakeMotionEvent(QX11Info::display(), 0, p.x(), p.y(), CurrentTime); + XTestFakeMotionEvent(QX11Info::display(), 0, p.x() * ratio, p.y() * ratio, CurrentTime); setX11PassMouseEvent(true); // setWindowOnTop(false); @@ -182,6 +184,7 @@ void TrayWidget::enterEvent(QEvent *e) void TrayWidget::configContainerPosition() { + const auto ratio = qApp->devicePixelRatio(); auto c = QX11Info::connection(); QPoint p(QCursor::pos()); @@ -193,7 +196,7 @@ void TrayWidget::configContainerPosition() // w = static_cast(w->parent()); // } - const uint32_t containerVals[4] = {uint32_t(p.x()), uint32_t(p.y()), 1, 1}; + const uint32_t containerVals[4] = {uint32_t(p.x() * ratio), uint32_t(p.y() * ratio), 1, 1}; xcb_configure_window(c, m_containerWid, XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y | XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT, containerVals); @@ -344,10 +347,11 @@ void TrayWidget::sendClick(uint8_t mouseButton, int x, int y) // qDebug() << Q_FUNC_INFO; m_ignoreRepeat->start(); + const auto ratio = qApp->devicePixelRatio(); configContainerPosition(); setX11PassMouseEvent(false); setWindowOnTop(true); - XTestFakeMotionEvent(QX11Info::display(), 0, x, y, CurrentTime); + XTestFakeMotionEvent(QX11Info::display(), 0, x * ratio, y * ratio, CurrentTime); XTestFakeButtonEvent(QX11Info::display(), mouseButton, true, CurrentTime); XFlush(QX11Info::display()); XTestFakeButtonEvent(QX11Info::display(), mouseButton, false, CurrentTime);