From 58d3b69ce7a23fe99d506fa7855a18ea89a31f92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E5=8D=9A=E6=96=87?= Date: Mon, 28 Aug 2017 11:38:20 +0800 Subject: [PATCH] Hi_DPI support Change-Id: If063f16f246b65f4c2ce4eef3e57df5cc0347427 --- frame/dbus/dbusdisplay.h | 16 +++++++++++++--- frame/main.cpp | 2 +- frame/util/docksettings.cpp | 4 ++-- frame/window/mainwindow.cpp | 7 ++++--- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/frame/dbus/dbusdisplay.h b/frame/dbus/dbusdisplay.h index e2ed5cdf7..63566bfa5 100644 --- a/frame/dbus/dbusdisplay.h +++ b/frame/dbus/dbusdisplay.h @@ -19,6 +19,7 @@ #include #include #include +#include typedef QMap BrightnessMap; @@ -108,15 +109,24 @@ public: Q_PROPERTY(DisplayRect PrimaryRect READ primaryRect NOTIFY PrimaryRectChanged) inline DisplayRect primaryRect() const - { return qvariant_cast< DisplayRect >(property("PrimaryRect")); } + { + const qreal scale = qApp->devicePixelRatio(); + DisplayRect dr = qvariant_cast< DisplayRect >(property("PrimaryRect")); + dr.x = qreal(dr.x) / scale; + dr.y = qreal(dr.y) / scale; + dr.width = qreal(dr.width) / scale; + dr.height = qreal(dr.height) / scale; + + return dr; + } Q_PROPERTY(ushort ScreenHeight READ screenHeight NOTIFY ScreenHeightChanged) inline ushort screenHeight() const - { return qvariant_cast< ushort >(property("ScreenHeight")); } + { return qreal(qvariant_cast< ushort >(property("ScreenHeight"))) / qApp->devicePixelRatio(); } Q_PROPERTY(ushort ScreenWidth READ screenWidth NOTIFY ScreenWidthChanged) inline ushort screenWidth() const - { return qvariant_cast< ushort >(property("ScreenWidth")); } + { return qreal(qvariant_cast< ushort >(property("ScreenWidth"))) / qApp->devicePixelRatio(); } public Q_SLOTS: // METHODS inline QDBusPendingReply<> Apply() diff --git a/frame/main.cpp b/frame/main.cpp index 0de8a41d7..ad46b6f68 100644 --- a/frame/main.cpp +++ b/frame/main.cpp @@ -35,7 +35,6 @@ void RegisterDdeSession() int main(int argc, char *argv[]) { DApplication::loadDXcbPlugin(); - DApplication app(argc, argv); if (!app.setSingleInstance(QString("dde-dock_%1").arg(getuid()))) { qDebug() << "set single instance failed!"; @@ -47,6 +46,7 @@ int main(int argc, char *argv[]) app.setApplicationDisplayName("DDE Dock"); app.setApplicationVersion("2.0"); app.loadTranslator(); + app.setAttribute(Qt::AA_EnableHighDpiScaling, true); DLogManager::registerConsoleAppender(); DLogManager::registerFileAppender(); diff --git a/frame/util/docksettings.cpp b/frame/util/docksettings.cpp index 7c8b36bbe..240b4d8c8 100644 --- a/frame/util/docksettings.cpp +++ b/frame/util/docksettings.cpp @@ -42,7 +42,7 @@ DockSettings::DockSettings(QWidget *parent) m_hideMode = Dock::HideMode(m_dockInter->hideMode()); m_hideState = Dock::HideState(m_dockInter->hideState()); m_iconSize = m_dockInter->iconSize(); - AppItem::setIconBaseSize(m_iconSize); + AppItem::setIconBaseSize(m_iconSize * qApp->devicePixelRatio()); DockItem::setDockPosition(m_position); qApp->setProperty(PROP_POSITION, QVariant::fromValue(m_position)); DockItem::setDockDisplayMode(m_displayMode); @@ -304,7 +304,7 @@ void DockSettings::iconSizeChanged() { // qDebug() << Q_FUNC_INFO; m_iconSize = m_dockInter->iconSize(); - AppItem::setIconBaseSize(m_iconSize); + AppItem::setIconBaseSize(m_iconSize * qApp->devicePixelRatio()); calculateWindowConfig(); diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index 069503ef5..cbdd5e94b 100644 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -430,7 +430,7 @@ void MainWindow::setStrutPartial() if (count > 0) return; - m_xcbMisc->set_strut_partial(winId(), orientation, strut, strutStart, strutEnd); + m_xcbMisc->set_strut_partial(winId(), orientation, strut * qApp->devicePixelRatio(), strutStart, strutEnd); } void MainWindow::expand() @@ -567,7 +567,8 @@ void MainWindow::adjustShadowMask() return; } - const QRect r = rect(); + const qreal scale = qApp->devicePixelRatio(); + const QRect r = QRect(QPoint(), rect().size() * scale); const int radius = 5; QPainterPath path; @@ -589,7 +590,7 @@ void MainWindow::adjustShadowMask() default:; } } else { - path.addRect(rect()); + path.addRect(r); } m_platformWindowHandle.setShadowRadius(60);