summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-08-05 19:23:53 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-08-05 19:23:53 +0200
commitd72f1cc644b30b1517d5a1725fb9014cffde5642 (patch)
tree1c65e4ed8f12aeb839505ea6461f27c72b10219b /src
parent78e4f274bc0b9318178602343b73843e9a381560 (diff)
fix various shadow damage issues
Diffstat (limited to 'src')
-rw-r--r--src/layout/IHyprLayout.cpp6
-rw-r--r--src/managers/AnimationManager.cpp4
-rw-r--r--src/render/decorations/CHyprDropShadowDecoration.cpp12
3 files changed, 12 insertions, 10 deletions
diff --git a/src/layout/IHyprLayout.cpp b/src/layout/IHyprLayout.cpp
index bbe30e5b..c07ca6d9 100644
--- a/src/layout/IHyprLayout.cpp
+++ b/src/layout/IHyprLayout.cpp
@@ -178,8 +178,6 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) {
if (g_pInputManager->dragButton == BTN_LEFT) {
DRAGGINGWINDOW->m_vRealPosition.setValueAndWarp(m_vBeginDragPositionXY + DELTA);
- DRAGGINGWINDOW->updateWindowDecos();
-
g_pXWaylandManager->setWindowSize(DRAGGINGWINDOW, DRAGGINGWINDOW->m_vRealSize.goalv());
} else {
if (DRAGGINGWINDOW->m_bIsFloating) {
@@ -189,8 +187,6 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) {
DRAGGINGWINDOW->m_vRealSize.setValueAndWarp(m_vBeginDragSizeXY + DELTA);
DRAGGINGWINDOW->m_vRealSize.setValueAndWarp(Vector2D(std::clamp(DRAGGINGWINDOW->m_vRealSize.vec().x, (double)20, (double)MAXSIZE.x), std::clamp(DRAGGINGWINDOW->m_vRealSize.vec().y, (double)20, (double)MAXSIZE.y)));
- DRAGGINGWINDOW->updateWindowDecos();
-
g_pXWaylandManager->setWindowSize(DRAGGINGWINDOW, DRAGGINGWINDOW->m_vRealSize.goalv());
} else {
resizeActiveWindow(TICKDELTA, DRAGGINGWINDOW);
@@ -208,6 +204,8 @@ void IHyprLayout::onMouseMove(const Vector2D& mousePos) {
DRAGGINGWINDOW->m_iWorkspaceID = PMONITOR->activeWorkspace;
}
+ DRAGGINGWINDOW->updateWindowDecos();
+
g_pHyprRenderer->damageWindow(DRAGGINGWINDOW);
}
diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp
index 85258003..54c4ab30 100644
--- a/src/managers/AnimationManager.cpp
+++ b/src/managers/AnimationManager.cpp
@@ -147,8 +147,8 @@ void CAnimationManager::tick() {
g_pHyprRenderer->damageBox(&WLRBOXPREV);
if (PWINDOW) {
- g_pHyprRenderer->damageWindow(PWINDOW);
PWINDOW->updateWindowDecos();
+ g_pHyprRenderer->damageWindow(PWINDOW);
} else if (PWORKSPACE) {
for (auto& w : g_pCompositor->m_vWindows) {
if (!w->m_bIsMapped || w->m_bHidden)
@@ -197,7 +197,7 @@ void CAnimationManager::tick() {
if (PDECO) {
const auto EXTENTS = PDECO->getWindowDecorationExtents();
- wlr_box dmg = {PWINDOW->m_vRealPosition.vec().x + EXTENTS.topLeft.x, PWINDOW->m_vRealPosition.vec().y + EXTENTS.topLeft.y,
+ wlr_box dmg = {PWINDOW->m_vRealPosition.vec().x - EXTENTS.topLeft.x, PWINDOW->m_vRealPosition.vec().y - EXTENTS.topLeft.y,
PWINDOW->m_vRealSize.vec().x + EXTENTS.topLeft.x + EXTENTS.bottomRight.x, PWINDOW->m_vRealSize.vec().y + EXTENTS.topLeft.y + EXTENTS.bottomRight.y};
if (!*PSHADOWIGNOREWINDOW) {
diff --git a/src/render/decorations/CHyprDropShadowDecoration.cpp b/src/render/decorations/CHyprDropShadowDecoration.cpp
index 0a937059..33ed3be4 100644
--- a/src/render/decorations/CHyprDropShadowDecoration.cpp
+++ b/src/render/decorations/CHyprDropShadowDecoration.cpp
@@ -92,12 +92,14 @@ void CHyprDropShadowDecoration::draw(CMonitor* pMonitor, float a) {
if (fullBox.width < 1 || fullBox.height < 1)
return; // don't draw invisible shadows
+ g_pHyprOpenGL->scissor((wlr_box *)nullptr);
+
if (*PSHADOWIGNOREWINDOW) {
+ glEnable(GL_STENCIL_TEST);
+
glClearStencil(0);
glClear(GL_STENCIL_BUFFER_BIT);
- glEnable(GL_STENCIL_TEST);
-
glStencilFunc(GL_ALWAYS, 1, -1);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
@@ -106,8 +108,10 @@ void CHyprDropShadowDecoration::draw(CMonitor* pMonitor, float a) {
scaleBox(&windowBox, pMonitor->scale);
if (windowBox.width < 1 || windowBox.height < 1) {
- glDisable(GL_STENCIL_TEST);
- return; // prevent assert failed
+ glClearStencil(0);
+ glClear(GL_STENCIL_BUFFER_BIT);
+ glDisable(GL_STENCIL_TEST);
+ return; // prevent assert failed
}
g_pHyprOpenGL->renderRect(&windowBox, CColor(0,0,0,0), *PROUNDING);