From d17b1661b13482fad66e3888aaa0f843ea2fa013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=B3=E5=8D=9A=E6=96=87?= Date: Tue, 26 Dec 2017 11:54:31 +0800 Subject: [PATCH] fix window redius Change-Id: I0a6492d288830e3331d69ced357677a6f636f8a9 --- frame/dbus/dbusdockadaptors.cpp | 2 +- frame/panel/mainpanel.cpp | 9 ++-- frame/panel/mainpanel.h | 1 + frame/util/docksettings.cpp | 78 ++++++++------------------------- frame/util/docksettings.h | 31 ++++++------- frame/window/mainwindow.cpp | 53 ++++++++++------------ frame/window/mainwindow.h | 1 - 7 files changed, 62 insertions(+), 113 deletions(-) diff --git a/frame/dbus/dbusdockadaptors.cpp b/frame/dbus/dbusdockadaptors.cpp index ca75a025e..b268d86a5 100644 --- a/frame/dbus/dbusdockadaptors.cpp +++ b/frame/dbus/dbusdockadaptors.cpp @@ -41,6 +41,6 @@ MainWindow *DBusDockAdaptors::parent() const QRect DBusDockAdaptors::geometry() const { - return parent()->panelGeometry(); + return parent()->geometry(); } diff --git a/frame/panel/mainpanel.cpp b/frame/panel/mainpanel.cpp index 1a5a7a995..c9b71c1a2 100644 --- a/frame/panel/mainpanel.cpp +++ b/frame/panel/mainpanel.cpp @@ -46,6 +46,8 @@ MainPanel::MainPanel(QWidget *parent) m_itemLayout->setSpacing(0); m_itemLayout->setContentsMargins(0, 0, 0, 0); + m_effectWidget->setBlurRectXRadius(0); + m_effectWidget->setBlurRectYRadius(0); m_effectWidget->setMaskColor(DBlurEffectWidget::DarkColor); m_effectWidget->setBlendMode(DBlurEffectWidget::BehindWindowBlend); m_effectWidget->setDisabled(true); @@ -384,20 +386,15 @@ void MainPanel::updateBlurEffect() const qApp->processEvents(); if (m_displayMode == Efficient || !m_wmHelper->hasComposite()) { - m_effectWidget->setBlurRectXRadius(0); - m_effectWidget->setBlurRectYRadius(0); m_effectWidget->move(pos()); m_effectWidget->resize(size()); } else { - const int expandSize = 10; + const int expandSize = 5; int width = this->width(); int height = this->height(); const int x = pos().x(); const int y = pos().y(); - m_effectWidget->setBlurRectXRadius(5); - m_effectWidget->setBlurRectYRadius(5); - switch (m_position) { case Top: { diff --git a/frame/panel/mainpanel.h b/frame/panel/mainpanel.h index 783c80b63..2a372ccfd 100644 --- a/frame/panel/mainpanel.h +++ b/frame/panel/mainpanel.h @@ -36,6 +36,7 @@ #define str(s) #s #define PANEL_BORDER 0 #define PANEL_PADDING 6 +#define WINDOW_OVERFLOW 5 DWIDGET_USE_NAMESPACE diff --git a/frame/util/docksettings.cpp b/frame/util/docksettings.cpp index adf94755b..ecf42a5be 100644 --- a/frame/util/docksettings.cpp +++ b/frame/util/docksettings.cpp @@ -152,59 +152,19 @@ DockSettings::DockSettings(QWidget *parent) resetFrontendGeometry(); } -DisplayMode DockSettings::displayMode() const +const QSize DockSettings::panelSize() const { - return m_displayMode; -} + switch (m_position) + { + case Top: + case Bottom: + return m_mainWindowSize - QSize(0, WINDOW_OVERFLOW); + case Left: + case Right: + return m_mainWindowSize - QSize(WINDOW_OVERFLOW, 0); + } -HideMode DockSettings::hideMode() const -{ - return m_hideMode; -} - -Position DockSettings::position() const -{ - return m_position; -} - -int DockSettings::screenHeight() const -{ - return m_displayInter->screenHeight(); -} - -int DockSettings::screenWidth() const -{ - return m_displayInter->screenWidth(); -} - -int DockSettings::expandTimeout() const -{ - return m_dockInter->showTimeout(); -} - -int DockSettings::narrowTimeout() const -{ - return 0; -} - -bool DockSettings::autoHide() const -{ - return m_autoHide; -} - -HideState DockSettings::hideState() const -{ - return m_hideState; -} - -const QRect DockSettings::primaryRect() const -{ - return m_primaryRect; -} - -const QSize DockSettings::windowSize() const -{ - return m_mainWindowSize; + Q_UNREACHABLE(); } const QRect DockSettings::windowRect(const Position position, const bool hide) const @@ -229,13 +189,13 @@ const QRect DockSettings::windowRect(const Position position, const bool hide) c switch (position) { case Top: - p = QPoint(offsetX, 0); break; + p = QPoint(offsetX, -WINDOW_OVERFLOW); break; case Left: - p = QPoint(0, offsetY); break; + p = QPoint(-WINDOW_OVERFLOW, offsetY); break; case Right: - p = QPoint(primaryRect.width() - size.width(), offsetY); break; + p = QPoint(primaryRect.width() - size.width() + WINDOW_OVERFLOW, offsetY); break; case Bottom: - p = QPoint(offsetX, primaryRect.height() - size.height()); break; + p = QPoint(offsetX, primaryRect.height() - size.height() + WINDOW_OVERFLOW); break; default:Q_UNREACHABLE(); } @@ -526,14 +486,14 @@ void DockSettings::calculateWindowConfig() { case Top: case Bottom: - m_mainWindowSize.setHeight(defaultHeight + PANEL_BORDER); + m_mainWindowSize.setHeight(defaultHeight + PANEL_BORDER + WINDOW_OVERFLOW); m_mainWindowSize.setWidth(m_primaryRect.width()); break; case Left: case Right: m_mainWindowSize.setHeight(m_primaryRect.height()); - m_mainWindowSize.setWidth(defaultWidth + PANEL_BORDER); + m_mainWindowSize.setWidth(defaultWidth + PANEL_BORDER + WINDOW_OVERFLOW); break; default: @@ -558,8 +518,8 @@ void DockSettings::calculateWindowConfig() } } - const int perfectWidth = visibleItemCount * defaultWidth + PANEL_BORDER * 2 + PANEL_PADDING * 2; - const int perfectHeight = visibleItemCount * defaultHeight + PANEL_BORDER * 2 + PANEL_PADDING * 2; + const int perfectWidth = visibleItemCount * defaultWidth + PANEL_BORDER * 2 + PANEL_PADDING * 2 + WINDOW_OVERFLOW; + const int perfectHeight = visibleItemCount * defaultHeight + PANEL_BORDER * 2 + PANEL_PADDING * 2 + WINDOW_OVERFLOW; const int calcWidth = qMin(m_primaryRect.width() - FASHION_MODE_PADDING * 2, perfectWidth); const int calcHeight = qMin(m_primaryRect.height() - FASHION_MODE_PADDING * 2, perfectHeight); switch (m_position) diff --git a/frame/util/docksettings.h b/frame/util/docksettings.h index 44ee9b398..d0d42f5a2 100644 --- a/frame/util/docksettings.h +++ b/frame/util/docksettings.h @@ -59,22 +59,23 @@ class DockSettings : public QObject public: explicit DockSettings(QWidget *parent = 0); - DisplayMode displayMode() const; - HideMode hideMode() const; - HideState hideState() const; - Position position() const; - int screenHeight() const; - int screenWidth() const; - int screenRawHeight() const { return m_screenRawHeight; } - int screenRawWidth() const { return m_screenRawWidth; } - int expandTimeout() const; - int narrowTimeout() const; + inline DisplayMode displayMode() const { return m_displayMode; } + inline HideMode hideMode() const { return m_hideMode; } + inline HideState hideState() const { return m_hideState; } + inline Position position() const { return m_position; } + inline int screenHeight() const { return m_displayInter->screenHeight(); } + inline int screenWidth() const { return m_displayInter->screenWidth(); } + inline int screenRawHeight() const { return m_screenRawHeight; } + inline int screenRawWidth() const { return m_screenRawWidth; } + inline int expandTimeout() const { return m_dockInter->showTimeout(); } + inline int narrowTimeout() const { return 0; } + inline bool autoHide() const { return m_autoHide; } + inline const QRect primaryRect() const { return m_primaryRect; } + inline const QRect primaryRawRect() const { return m_primaryRawRect; } + inline const QRect frontendWindowRect() const { return m_frontendRect; } + inline const QSize windowSize() const { return m_mainWindowSize; } - bool autoHide() const; - const QRect primaryRect() const; - const QRect primaryRawRect() const { return m_primaryRawRect; } - const QRect frontendWindowRect() const { return m_frontendRect; } - const QSize windowSize() const; + const QSize panelSize() const; const QRect windowRect(const Position position, const bool hide = false) const; void showDockSettingsMenu(); diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index b6ac17359..7a5d256e2 100644 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -106,7 +106,7 @@ MainWindow::MainWindow(QWidget *parent) initComponents(); initConnections(); - m_mainPanel->setFixedSize(m_settings->windowSize()); + m_mainPanel->setFixedSize(m_settings->panelSize()); } MainWindow::~MainWindow() @@ -114,13 +114,6 @@ MainWindow::~MainWindow() delete m_xcbMisc; } -QRect MainWindow::panelGeometry() -{ - QRect rect = m_mainPanel->geometry(); - rect.moveTopLeft(m_mainPanel->mapToGlobal(QPoint(0,0))); - return rect; -} - void MainWindow::launch() { m_updatePanelVisible = false; @@ -353,7 +346,6 @@ void MainWindow::initConnections() const QSize size = m_sizeChangeAni->currentValue().toSize(); QWidget::setFixedSize(size); - m_mainPanel->setFixedSize(size); }); connect(m_wmHelper, &DWindowManagerHelper::hasCompositeChanged, this, &MainWindow::compositeChanged, Qt::QueuedConnection); @@ -436,9 +428,7 @@ void MainWindow::updateGeometry() const Position position = m_settings->position(); QSize size = m_settings->windowSize(); -// qDebug() << Q_FUNC_INFO << position << size; - - m_mainPanel->setFixedSize(size); + m_mainPanel->setFixedSize(m_settings->panelSize()); m_mainPanel->updateDockPosition(position); m_mainPanel->updateDockDisplayMode(m_settings->displayMode()); @@ -465,7 +455,6 @@ void MainWindow::updateGeometry() } const QRect windowRect = m_settings->windowRect(position, m_settings->hideState() == Hide); - qDebug() << Q_FUNC_INFO << windowRect; if (animation) internalAnimationMove(windowRect.x(), windowRect.y()); @@ -574,8 +563,13 @@ void MainWindow::setStrutPartial() void MainWindow::expand() { -// qDebug() << "expand"; - const QPoint finishPos(0, 0); + QPoint finishPos(0, 0); + switch (m_settings->position()) + { + case Left: finishPos.setX(WINDOW_OVERFLOW); break; + case Top: finishPos.setY(WINDOW_OVERFLOW); break; + default:; + } const int epsilon = std::round(devicePixelRatioF()) - 1; const QSize s = size(); @@ -609,16 +603,14 @@ void MainWindow::expand() void MainWindow::narrow(const Position prevPos) { -// qDebug() << "narrow" << prevPos; -// const QSize size = m_settings->windowSize(); - const QSize size = m_mainPanel->size(); + const QSize size = m_settings->panelSize(); QPoint finishPos(0, 0); switch (prevPos) { - case Top: finishPos.setY(-size.height()); break; + case Top: finishPos.setY(-size.height() + WINDOW_OVERFLOW); break; case Bottom: finishPos.setY(size.height()); break; - case Left: finishPos.setX(-size.width()); break; + case Left: finishPos.setX(-size.width() + WINDOW_OVERFLOW); break; case Right: finishPos.setX(size.width()); break; } @@ -644,25 +636,22 @@ void MainWindow::resetPanelEnvironment(const bool visible) const QRect r(m_settings->windowRect(position)); m_sizeChangeAni->setEndValue(r.size()); - m_mainPanel->setFixedSize(r.size()); + m_mainPanel->setFixedSize(m_settings->panelSize()); QWidget::setFixedSize(r.size()); m_posChangeAni->setEndValue(r.topLeft()); QWidget::move(r.topLeft()); QPoint finishPos(0, 0); - if (!visible) + + switch (position) { - switch (position) - { - case Top: finishPos.setY(-r.height()); break; - case Bottom: finishPos.setY(r.height()); break; - case Left: finishPos.setX(-r.width()); break; - case Right: finishPos.setX(r.width()); break; - } + case Top: finishPos.setY((visible ? 0 : -r.height()) + WINDOW_OVERFLOW); break; + case Bottom: finishPos.setY(visible ? 0 : r.height()); break; + case Left: finishPos.setX((visible ? 0 :-r.width()) + WINDOW_OVERFLOW); break; + case Right: finishPos.setX(visible ? 0 : r.width()); break; } m_mainPanel->move(finishPos); - qDebug() << Q_FUNC_INFO << m_mainPanel->isVisible() << m_mainPanel->pos() << finishPos; } void MainWindow::updatePanelVisible() @@ -702,14 +691,16 @@ void MainWindow::adjustShadowMask() if (m_shadowMaskOptimizeTimer->isActive()) return; - if (m_mainPanel->pos() != QPoint(0, 0) || + if (m_mainPanel->pos().manhattanLength() > WINDOW_OVERFLOW || m_panelHideAni->state() == QPropertyAnimation::Running || m_panelShowAni->state() == QPauseAnimation::Running || !m_wmHelper->hasComposite()) { m_platformWindowHandle.setShadowRadius(0); + m_platformWindowHandle.setWindowRadius(0); } else { m_platformWindowHandle.setShadowRadius(60); + m_platformWindowHandle.setWindowRadius(5); } } diff --git a/frame/window/mainwindow.h b/frame/window/mainwindow.h index 2fc6eac28..42dcca762 100644 --- a/frame/window/mainwindow.h +++ b/frame/window/mainwindow.h @@ -43,7 +43,6 @@ class MainWindow : public QWidget public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); - QRect panelGeometry(); public slots: void launch();