From 883c74f479d6c9a3f481a0bc7fcdf006864b004b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8C=83=E6=9C=8B=E7=A8=8B?= Date: Wed, 2 Sep 2020 13:11:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B8=80=E5=A4=84?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=A0=8F=E6=98=BE=E7=A4=BA=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit windowSizeFashion和windowSizeEfficient给出的值始终对应前端认为的界面高度或宽度.举例:当前缩放为2时,任务栏为高效模式,windowSizeEfficient对应值为50,那么任务栏显示的高度应该为50*2个像素 Log: 修复一处任务栏显示异常的问题 Task: https://pms.uniontech.com/zentao/task-view-36233.html Change-Id: I1986ca9d1b0d6fad67186c9bad210a54f153095b Reviewed-on: http://gerrit.uniontech.com/c/dde-dock/+/3301 Reviewed-by: Reviewed-by: wangwei Reviewed-by: niecheng Tested-by: --- frame/util/multiscreenworker.cpp | 18 ++++++++++-------- frame/window/mainwindow.cpp | 21 ++++++++++----------- frame/window/mainwindow.h | 1 - 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/frame/util/multiscreenworker.cpp b/frame/util/multiscreenworker.cpp index 245cf332e..37c89b8f4 100644 --- a/frame/util/multiscreenworker.cpp +++ b/frame/util/multiscreenworker.cpp @@ -530,7 +530,8 @@ void MultiScreenWorker::onRequestUpdateRegionMonitor() const static int flags = Motion | Button | Key; const static int monitorHeight = 15; - const int dockSize = int(m_displayMode == DisplayMode::Fashion ? m_dockInter->windowSizeFashion() + 2 * 10/*上下的边距各10像素*/ : m_dockInter->windowSizeEfficient()); + // 后端认为的任务栏大小(无缩放因素影响) + const int realDockSize = int(m_displayMode == DisplayMode::Fashion ? m_dockInter->windowSizeFashion() + 2 * 10/*上下的边距各10像素*/ : m_dockInter->windowSizeEfficient()); // 任务栏唤起区域 m_monitorRectList.clear(); @@ -589,7 +590,7 @@ void MultiScreenWorker::onRequestUpdateRegionMonitor() switch (m_position) { case Top: { rect.x1 = inter->x(); - rect.y1 = inter->y() + dockSize; + rect.y1 = inter->y() + realDockSize; rect.x2 = inter->x() + inter->w(); rect.y2 = inter->y() + inter->h(); } @@ -598,11 +599,11 @@ void MultiScreenWorker::onRequestUpdateRegionMonitor() rect.x1 = inter->x(); rect.y1 = inter->y(); rect.x2 = inter->x() + inter->w(); - rect.y2 = inter->y() + inter->h() - dockSize; + rect.y2 = inter->y() + inter->h() - realDockSize; } break; case Left: { - rect.x1 = inter->x() + dockSize; + rect.x1 = inter->x() + realDockSize; rect.y1 = inter->y(); rect.x2 = inter->x() + inter->w(); rect.y2 = inter->y() + inter->h(); @@ -611,7 +612,7 @@ void MultiScreenWorker::onRequestUpdateRegionMonitor() case Right: { rect.x1 = inter->x(); rect.y1 = inter->y(); - rect.x2 = inter->x() + inter->w() - dockSize; + rect.x2 = inter->x() + inter->w() - realDockSize; rect.y2 = inter->y() + inter->h(); } break; @@ -1289,7 +1290,8 @@ QRect MultiScreenWorker::getDockShowGeometry(const QString &screenName, const Po if (withoutScale) {//后端真实大小 foreach (Monitor *inter, validMonitorList(m_monitorInfo)) { if (inter->name() == screenName) { - const int dockSize = int(displaymode == DisplayMode::Fashion ? m_dockInter->windowSizeFashion() : m_dockInter->windowSizeEfficient()); + // windowSizeFashion和windowSizeEfficient给出的值始终对应前端认为的界面高度或宽度(受缩放影响) + const int dockSize = int(displaymode == DisplayMode::Fashion ? m_dockInter->windowSizeFashion() : m_dockInter->windowSizeEfficient()) * scale; switch (static_cast(pos)) { case Top: { rect.setX(inter->x() + WINDOWMARGIN); @@ -1325,8 +1327,8 @@ QRect MultiScreenWorker::getDockShowGeometry(const QString &screenName, const Po } else {//前端真实大小 foreach (Monitor *inter, validMonitorList(m_monitorInfo)) { if (inter->name() == screenName) { - // 注意这里的dockSize是除以缩放的 - const int dockSize = int(displaymode == DisplayMode::Fashion ? m_dockInter->windowSizeFashion() : m_dockInter->windowSizeEfficient()) / scale; + // windowSizeFashion和windowSizeEfficient给出的值始终对应前端认为的界面高度或宽度(受缩放影响) + const int dockSize = int(displaymode == DisplayMode::Fashion ? m_dockInter->windowSizeFashion() : m_dockInter->windowSizeEfficient()); switch (static_cast(pos)) { case Top: { rect.setX(inter->x() + WINDOWMARGIN); diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index e12253f15..015e04f02 100755 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -85,7 +85,6 @@ MainWindow::MainWindow(QWidget *parent) , m_sniWatcher(new StatusNotifierWatcher(SNI_WATCHER_SERVICE, SNI_WATCHER_PATH, QDBusConnection::sessionBus(), this)) , m_dragWidget(new DragWidget(this)) , m_launched(false) - , m_dockSize(0) { setAccessibleName("mainwindow"); m_mainPanel->setAccessibleName("mainpanel"); @@ -347,6 +346,7 @@ bool MainWindow::appIsOnDock(const QString &appDesktop) void MainWindow::resetDragWindow() { + int dockSize = 0; switch (m_multiScreenWorker->position()) { case Dock::Top: m_dragWidget->setGeometry(0, height() - DRAG_AREA_SIZE, width(), DRAG_AREA_SIZE); @@ -364,13 +364,13 @@ void MainWindow::resetDragWindow() if (m_multiScreenWorker->position() == Position::Left || m_multiScreenWorker->position() == Position::Right) { - m_dockSize = this->width() * qApp->devicePixelRatio(); + dockSize = this->width(); } else { - m_dockSize = this->height() * qApp->devicePixelRatio(); + dockSize = this->height(); } // 通知窗管和后端更新数据 - m_multiScreenWorker->updateDaemonDockSize(m_dockSize); // 1.先更新任务栏高度 + m_multiScreenWorker->updateDaemonDockSize(dockSize); // 1.先更新任务栏高度 m_multiScreenWorker->requestUpdateFrontendGeometry(); // 2.再更新任务栏位置,保证先1再2 m_multiScreenWorker->requestNotifyWindowManager(); @@ -387,34 +387,33 @@ void MainWindow::onMainWindowSizeChanged(QPoint offset) , m_multiScreenWorker->position() , HideMode::KeepShowing, m_multiScreenWorker->displayMode()); - const qreal scale = qApp->devicePixelRatio(); QRect newRect; switch (m_multiScreenWorker->position()) { case Top: { newRect.setX(rect.x()); newRect.setY(rect.y()); newRect.setWidth(rect.width()); - newRect.setHeight(qBound(qMax(int(MAINWINDOW_MIN_SIZE / scale), MAINWINDOW_MIN_SIZE), rect.height() + offset.y(), int(MAINWINDOW_MAX_SIZE / scale))); + newRect.setHeight(qBound(MAINWINDOW_MIN_SIZE, rect.height() + offset.y(), MAINWINDOW_MAX_SIZE)); } break; case Bottom: { newRect.setX(rect.x()); - newRect.setY(rect.y() + rect.height() - qBound(qMax(int(MAINWINDOW_MIN_SIZE / scale), MAINWINDOW_MIN_SIZE), rect.height() - offset.y(), int(MAINWINDOW_MAX_SIZE / scale))); + newRect.setY(rect.y() + rect.height() - qBound(MAINWINDOW_MIN_SIZE, rect.height() - offset.y(), MAINWINDOW_MAX_SIZE)); newRect.setWidth(rect.width()); - newRect.setHeight(qBound(qMax(int(MAINWINDOW_MIN_SIZE / scale), MAINWINDOW_MIN_SIZE), rect.height() - offset.y(), int(MAINWINDOW_MAX_SIZE / scale) )); + newRect.setHeight(qBound(MAINWINDOW_MIN_SIZE, rect.height() - offset.y(), MAINWINDOW_MAX_SIZE )); } break; case Left: { newRect.setX(rect.x()); newRect.setY(rect.y()); - newRect.setWidth(qBound(qMax(int(MAINWINDOW_MIN_SIZE / scale), MAINWINDOW_MIN_SIZE), rect.width() + offset.x(), int(MAINWINDOW_MAX_SIZE / scale))); + newRect.setWidth(qBound(MAINWINDOW_MIN_SIZE, rect.width() + offset.x(), MAINWINDOW_MAX_SIZE)); newRect.setHeight(rect.height()); } break; case Right: { - newRect.setX(rect.x() + rect.width() - qBound(qMax(int(MAINWINDOW_MIN_SIZE / scale), MAINWINDOW_MIN_SIZE), rect.width() - offset.x(), int(MAINWINDOW_MAX_SIZE / scale))); + newRect.setX(rect.x() + rect.width() - qBound(MAINWINDOW_MIN_SIZE, rect.width() - offset.x(), MAINWINDOW_MAX_SIZE)); newRect.setY(rect.y()); - newRect.setWidth(qBound(qMax(int(MAINWINDOW_MIN_SIZE / scale), MAINWINDOW_MIN_SIZE), rect.width() - offset.x(), int(MAINWINDOW_MAX_SIZE / scale))); + newRect.setWidth(qBound(MAINWINDOW_MIN_SIZE, rect.width() - offset.x(), MAINWINDOW_MAX_SIZE)); newRect.setHeight(rect.height()); } break; diff --git a/frame/window/mainwindow.h b/frame/window/mainwindow.h index a165c4fe7..85cba4ae3 100644 --- a/frame/window/mainwindow.h +++ b/frame/window/mainwindow.h @@ -178,7 +178,6 @@ private: QString m_sniHostService; bool m_launched; - int m_dockSize; QString m_registerKey; QStringList m_registerKeys; };