diff options
author | MightyPlaza <[email protected]> | 2023-07-23 13:49:49 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2023-07-23 15:49:49 +0200 |
commit | d3bba2489d1cf8d7012abdca6a55177eb971076c (patch) | |
tree | d6f91f0211569b15a3ae81aec5adeef26c418369 | |
parent | b21644b61143de0835fef9c3fa69fbdd2553cdfa (diff) | |
download | Hyprland-d3bba2489d1cf8d7012abdca6a55177eb971076c.tar.gz Hyprland-d3bba2489d1cf8d7012abdca6a55177eb971076c.zip |
render: Border fixes (#2781)
* Window.cpp
* layout
* CHyprGroupBarDecoration.cpp
-rw-r--r-- | src/Window.cpp | 10 | ||||
-rw-r--r-- | src/layout/DwindleLayout.cpp | 3 | ||||
-rw-r--r-- | src/layout/MasterLayout.cpp | 4 | ||||
-rw-r--r-- | src/render/decorations/CHyprGroupBarDecoration.cpp | 25 |
4 files changed, 35 insertions, 7 deletions
diff --git a/src/Window.cpp b/src/Window.cpp index e95a0959..233a1088 100644 --- a/src/Window.cpp +++ b/src/Window.cpp @@ -25,12 +25,20 @@ CWindow::~CWindow() { wlr_box CWindow::getFullWindowBoundingBox() { static auto* const PBORDERSIZE = &g_pConfigManager->getConfigValuePtr("general:border_size")->intValue; + const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(g_pCompositor->getWorkspaceByID(m_iWorkspaceID)); + + auto borderSize = m_sSpecialRenderData.borderSize.toUnderlying() != -1 ? m_sSpecialRenderData.borderSize.toUnderlying() : WORKSPACERULE.borderSize.value_or(*PBORDERSIZE); + if (m_sAdditionalConfigData.borderSize.toUnderlying() != -1) + borderSize = m_sAdditionalConfigData.borderSize.toUnderlying(); + + borderSize *= m_sSpecialRenderData.border && !m_sAdditionalConfigData.forceNoBorder; + if (m_sAdditionalConfigData.dimAround) { const auto PMONITOR = g_pCompositor->getMonitorFromID(m_iMonitorID); return {PMONITOR->vecPosition.x, PMONITOR->vecPosition.y, PMONITOR->vecSize.x, PMONITOR->vecSize.y}; } - SWindowDecorationExtents maxExtents = {{*PBORDERSIZE + 2, *PBORDERSIZE + 2}, {*PBORDERSIZE + 2, *PBORDERSIZE + 2}}; + SWindowDecorationExtents maxExtents = {{borderSize + 2, borderSize + 2}, {borderSize + 2, borderSize + 2}}; for (auto& wd : m_dWindowDecorations) { diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp index c1b33bd5..d0d4dd23 100644 --- a/src/layout/DwindleLayout.cpp +++ b/src/layout/DwindleLayout.cpp @@ -127,9 +127,12 @@ void CHyprDwindleLayout::applyNodeDataToWindow(SDwindleNodeData* pNode, bool for auto gapsOut = WORKSPACERULE.gapsOut.value_or(*PGAPSOUT); auto borderSize = PWINDOW->m_sSpecialRenderData.borderSize.toUnderlying() != -1 ? PWINDOW->m_sSpecialRenderData.borderSize.toUnderlying() : WORKSPACERULE.borderSize.value_or(*PBORDERSIZE); + if (PWINDOW->m_sAdditionalConfigData.borderSize.toUnderlying() != -1) borderSize = PWINDOW->m_sAdditionalConfigData.borderSize.toUnderlying(); + borderSize *= PWINDOW->m_sSpecialRenderData.border && !PWINDOW->m_sAdditionalConfigData.forceNoBorder; + if (!g_pCompositor->windowExists(PWINDOW) || !PWINDOW->m_bIsMapped) { Debug::log(ERR, "Node %lx holding invalid window %lx!!", pNode, PWINDOW); onWindowRemovedTiling(PWINDOW); diff --git a/src/layout/MasterLayout.cpp b/src/layout/MasterLayout.cpp index 5a9d252e..ca826d4d 100644 --- a/src/layout/MasterLayout.cpp +++ b/src/layout/MasterLayout.cpp @@ -294,7 +294,7 @@ void CHyprMasterLayout::calculateWorkspace(const int& ws) { if ((WINDOWS < 2) && !centerMasterWindow) { PMASTERNODE->position = PMONITOR->vecReservedTopLeft + PMONITOR->vecPosition; PMASTERNODE->size = Vector2D(PMONITOR->vecSize.x - PMONITOR->vecReservedTopLeft.x - PMONITOR->vecReservedBottomRight.x, - PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y - PMONITOR->vecReservedTopLeft.y); + PMONITOR->vecSize.y - PMONITOR->vecReservedBottomRight.y - PMONITOR->vecReservedTopLeft.y); applyNodeDataToWindow(PMASTERNODE); return; } else if (orientation == ORIENTATION_LEFT || orientation == ORIENTATION_RIGHT || (orientation == ORIENTATION_CENTER && STACKWINDOWS <= 1)) { @@ -518,6 +518,8 @@ void CHyprMasterLayout::applyNodeDataToWindow(SMasterNodeData* pNode) { if (PWINDOW->m_sAdditionalConfigData.borderSize.toUnderlying() != -1) borderSize = PWINDOW->m_sAdditionalConfigData.borderSize.toUnderlying(); + borderSize *= PWINDOW->m_sSpecialRenderData.border && !PWINDOW->m_sAdditionalConfigData.forceNoBorder; + if (!g_pCompositor->windowValidMapped(PWINDOW)) { Debug::log(ERR, "Node %lx holding invalid window %lx!!", pNode, PWINDOW); return; diff --git a/src/render/decorations/CHyprGroupBarDecoration.cpp b/src/render/decorations/CHyprGroupBarDecoration.cpp index 43c94404..07abdbe5 100644 --- a/src/render/decorations/CHyprGroupBarDecoration.cpp +++ b/src/render/decorations/CHyprGroupBarDecoration.cpp @@ -41,7 +41,16 @@ void CHyprGroupBarDecoration::updateWindow(CWindow* pWindow) { // we draw 3px above the window's border with 3px static auto* const PBORDERSIZE = &g_pConfigManager->getConfigValuePtr("general:border_size")->intValue; - m_seExtents.topLeft = Vector2D(0, *PBORDERSIZE + BAR_PADDING_OUTER_VERT * 2 + BAR_INDICATOR_HEIGHT + (*PRENDERTITLES ? *PTITLEFONTSIZE : 0) + 2); + const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(g_pCompositor->getWorkspaceByID(pWindow->m_iWorkspaceID)); + + auto borderSize = pWindow->m_sSpecialRenderData.borderSize.toUnderlying() != -1 ? pWindow->m_sSpecialRenderData.borderSize.toUnderlying() : + WORKSPACERULE.borderSize.value_or(*PBORDERSIZE); + if (pWindow->m_sAdditionalConfigData.borderSize.toUnderlying() != -1) + borderSize = pWindow->m_sAdditionalConfigData.borderSize.toUnderlying(); + + borderSize *= pWindow->m_sSpecialRenderData.border && !pWindow->m_sAdditionalConfigData.forceNoBorder; + + m_seExtents.topLeft = Vector2D(0, borderSize + BAR_PADDING_OUTER_VERT * 2 + BAR_INDICATOR_HEIGHT + (*PRENDERTITLES ? *PTITLEFONTSIZE : 0) + 2); m_seExtents.bottomRight = Vector2D(); m_vLastWindowPos = pWindow->m_vRealPosition.vec() + WORKSPACEOFFSET; @@ -93,8 +102,14 @@ void CHyprGroupBarDecoration::draw(CMonitor* pMonitor, float a, const Vector2D& static auto* const PBORDERSIZE = &g_pConfigManager->getConfigValuePtr("general:border_size")->intValue; static auto* const PGRADIENTS = &g_pConfigManager->getConfigValuePtr("misc:groupbar_gradients")->intValue; - if (barsToDraw < 1 || m_pWindow->isHidden() || !g_pCompositor->windowValidMapped(m_pWindow)) - return; + const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(g_pCompositor->getWorkspaceByID(m_pWindow->m_iWorkspaceID)); + + auto borderSize = m_pWindow->m_sSpecialRenderData.borderSize.toUnderlying() != -1 ? m_pWindow->m_sSpecialRenderData.borderSize.toUnderlying() : + WORKSPACERULE.borderSize.value_or(*PBORDERSIZE); + if (m_pWindow->m_sAdditionalConfigData.borderSize.toUnderlying() != -1) + borderSize = m_pWindow->m_sAdditionalConfigData.borderSize.toUnderlying(); + + borderSize *= m_pWindow->m_sSpecialRenderData.border && !m_pWindow->m_sAdditionalConfigData.forceNoBorder; if (!m_pWindow->m_sSpecialRenderData.decorate) return; @@ -107,7 +122,7 @@ void CHyprGroupBarDecoration::draw(CMonitor* pMonitor, float a, const Vector2D& for (int i = 0; i < barsToDraw; ++i) { wlr_box rect = {m_vLastWindowPos.x + xoff - pMonitor->vecPosition.x + offset.x, - m_vLastWindowPos.y - BAR_PADDING_OUTER_VERT - *PBORDERSIZE - BAR_INDICATOR_HEIGHT - pMonitor->vecPosition.y + offset.y, BARW, BAR_INDICATOR_HEIGHT}; + m_vLastWindowPos.y - BAR_PADDING_OUTER_VERT - borderSize - BAR_INDICATOR_HEIGHT - pMonitor->vecPosition.y + offset.y, BARW, BAR_INDICATOR_HEIGHT}; if (rect.width <= 0 || rect.height <= 0) break; @@ -306,4 +321,4 @@ void CHyprGroupBarDecoration::refreshGradients() { renderGradientTo(m_tGradientActive, ((CGradientValueData*)PCOLACTIVE->get())->m_vColors[0]); renderGradientTo(m_tGradientInactive, ((CGradientValueData*)PCOLINACTIVE->get())->m_vColors[0]); -}
\ No newline at end of file +} |