bar: ensure popouts fully on screen

Also round the other way if touching edge
This commit is contained in:
2 * r + 2 * t 2025-06-04 17:29:53 +10:00
parent 2ffaf4eb3c
commit be9666457c
3 changed files with 12 additions and 3 deletions

View file

@ -7,6 +7,7 @@ ShapePath {
id: root
required property Wrapper wrapper
required property bool invertBottomRounding
readonly property real rounding: BorderConfig.rounding
readonly property bool flatten: wrapper.width < rounding * 2
readonly property real roundingX: flatten ? wrapper.width / 2 : rounding
@ -36,13 +37,14 @@ ShapePath {
relativeY: root.wrapper.height - root.rounding * 4
}
PathArc {
relativeX: -root.roundingX
relativeX: root.invertBottomRounding ? root.roundingX : -root.roundingX
relativeY: root.rounding
radiusX: Math.min(root.rounding, root.wrapper.width)
radiusY: root.rounding
direction: root.invertBottomRounding ? PathArc.Counterclockwise : PathArc.Clockwise
}
PathLine {
relativeX: -(root.wrapper.width - root.roundingX * 2)
relativeX: -(root.wrapper.width - root.roundingX * (root.invertBottomRounding ? 0 : 2))
relativeY: 0
}
PathArc {

View file

@ -55,6 +55,7 @@ Shape {
BarPopouts.Background {
wrapper: panels.popouts
invertBottomRounding: wrapper.y + wrapper.height - BorderConfig.rounding >= root.height
startX: 0
startY: wrapper.y

View file

@ -80,6 +80,12 @@ Item {
anchors.left: parent.left
anchors.verticalCenter: parent.top
anchors.verticalCenterOffset: Popouts.currentCenter - BorderConfig.thickness
anchors.verticalCenterOffset: {
const off = Popouts.currentCenter - BorderConfig.thickness;
const diff = root.height - Math.floor(off + implicitHeight / 2 - BorderConfig.rounding);
if (diff < 0)
return off + diff;
return off;
}
}
}