fix window redius

Change-Id: I0a6492d288830e3331d69ced357677a6f636f8a9
This commit is contained in:
石博文 2017-12-26 11:54:31 +08:00
parent 83cb34e880
commit d17b1661b1
Notes: Deepin Code Review 2018-01-02 14:13:17 +08:00
Verified+1: Anonymous Coward #1000004
Code-Review+2: 石博文 <sbw@sbw.so>
Submitted-by: 石博文 <sbw@sbw.so>
Submitted-at: Tue, 02 Jan 2018 14:13:16 +0800
Reviewed-on: https://cr.deepin.io/29723
Project: dde/dde-dock
Branch: refs/heads/master
7 changed files with 62 additions and 113 deletions

View File

@ -41,6 +41,6 @@ MainWindow *DBusDockAdaptors::parent() const
QRect DBusDockAdaptors::geometry() const
{
return parent()->panelGeometry();
return parent()->geometry();
}

View File

@ -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: {

View File

@ -36,6 +36,7 @@
#define str(s) #s
#define PANEL_BORDER 0
#define PANEL_PADDING 6
#define WINDOW_OVERFLOW 5
DWIDGET_USE_NAMESPACE

View File

@ -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)

View File

@ -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();

View File

@ -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);
}
}

View File

@ -43,7 +43,6 @@ class MainWindow : public QWidget
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QRect panelGeometry();
public slots:
void launch();