summaryrefslogtreecommitdiff
path: root/src/render/decorations/DecorationPositioner.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2023-11-12 13:01:23 +0000
committerVaxry <vaxry@vaxry.net>2023-11-12 13:01:23 +0000
commit91cbe93cf875c064847c76c6501d2a22c3f0abec (patch)
treed1f6418f9ad87d7079abe02d95a57f322e7ed63a /src/render/decorations/DecorationPositioner.cpp
parent9afdd61adeaf413afbe853dbc5fdf6853c8bde21 (diff)
decoration: add NON_SOLID flag for shadow
fixes #3841
Diffstat (limited to 'src/render/decorations/DecorationPositioner.cpp')
-rw-r--r--src/render/decorations/DecorationPositioner.cpp32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/render/decorations/DecorationPositioner.cpp b/src/render/decorations/DecorationPositioner.cpp
index 62279ca5..840fd907 100644
--- a/src/render/decorations/DecorationPositioner.cpp
+++ b/src/render/decorations/DecorationPositioner.cpp
@@ -168,16 +168,20 @@ void CDecorationPositioner::onWindowUpdate(CWindow* pWindow) {
const bool LEFT = wd->positioningInfo.edges & DECORATION_EDGE_LEFT;
const bool RIGHT = wd->positioningInfo.edges & DECORATION_EDGE_RIGHT;
const int EDGESNO = TOP + BOTTOM + LEFT + RIGHT;
+ const bool SOLID = !(wd->pDecoration->getDecorationFlags() & DECORATION_NON_SOLID);
if (wd->positioningInfo.policy == DECORATION_POSITION_ABSOLUTE) {
- if (LEFT)
- stickyOffsetXL += wd->positioningInfo.desiredExtents.topLeft.x;
- if (RIGHT)
- stickyOffsetXR += wd->positioningInfo.desiredExtents.bottomRight.x;
- if (TOP)
- stickyOffsetYT += wd->positioningInfo.desiredExtents.topLeft.y;
- if (BOTTOM)
- stickyOffsetYB += wd->positioningInfo.desiredExtents.bottomRight.y;
+
+ if (SOLID) {
+ if (LEFT)
+ stickyOffsetXL += wd->positioningInfo.desiredExtents.topLeft.x;
+ if (RIGHT)
+ stickyOffsetXR += wd->positioningInfo.desiredExtents.bottomRight.x;
+ if (TOP)
+ stickyOffsetYT += wd->positioningInfo.desiredExtents.topLeft.y;
+ if (BOTTOM)
+ stickyOffsetYB += wd->positioningInfo.desiredExtents.bottomRight.y;
+ }
wd->lastReply = {};
wd->pDecoration->onPositioningReply({});
@@ -210,23 +214,27 @@ void CDecorationPositioner::onWindowUpdate(CWindow* pWindow) {
pos.x -= desiredSize;
size = {desiredSize, wb.size().y};
- stickyOffsetXL += desiredSize;
+ if (SOLID)
+ stickyOffsetXL += desiredSize;
} else if (RIGHT) {
pos = wb.pos() + Vector2D{wb.size().x, 0} - EDGEPOINT + Vector2D{stickyOffsetXR, 0};
size = {desiredSize, wb.size().y};
- stickyOffsetXR += desiredSize;
+ if (SOLID)
+ stickyOffsetXR += desiredSize;
} else if (TOP) {
pos = wb.pos() - EDGEPOINT - Vector2D{0, stickyOffsetYT};
pos.y -= desiredSize;
size = {wb.size().x, desiredSize};
- stickyOffsetYT += desiredSize;
+ if (SOLID)
+ stickyOffsetYT += desiredSize;
} else {
pos = wb.pos() + Vector2D{0, wb.size().y} - EDGEPOINT - Vector2D{0, stickyOffsetYB};
size = {wb.size().x, desiredSize};
- stickyOffsetYB += desiredSize;
+ if (SOLID)
+ stickyOffsetYB += desiredSize;
}
wd->lastReply = {{pos, size}, EPHEMERAL};