import QtQuick import Quickshell import Quickshell.Wayland import "." as M // Empty region = no input area — clicks pass through to windows below // Draws rounded black corners at the edges of each screen. // Disabled when screenRadius is 0 (the default). Item { id: root required property var screen readonly property int _r: M.Theme.screenRadius Repeater { model: root._r > 0 ? [ { top: true, left: true, right: false, bottom: false, corner: 0 }, { top: true, left: false, right: true, bottom: false, corner: 1 }, { top: false, left: true, right: false, bottom: true, corner: 2 }, { top: false, left: false, right: true, bottom: true, corner: 3 } ] : [] delegate: PanelWindow { id: cornerWindow required property var modelData screen: root.screen color: "transparent" WlrLayershell.layer: WlrLayer.Overlay WlrLayershell.exclusiveZone: 0 WlrLayershell.namespace: "nova-corners" mask: Region {} anchors.top: cornerWindow.modelData.top anchors.left: cornerWindow.modelData.left anchors.right: cornerWindow.modelData.right anchors.bottom: cornerWindow.modelData.bottom implicitWidth: root._r implicitHeight: root._r Canvas { anchors.fill: parent onPaint: { const r = root._r; const ctx = getContext("2d"); ctx.clearRect(0, 0, r, r); ctx.fillStyle = "black"; ctx.beginPath(); switch (cornerWindow.modelData.corner) { case 0: // top-left ctx.moveTo(0, 0); ctx.lineTo(r, 0); ctx.arc(r, r, r, -Math.PI / 2, Math.PI, true); ctx.closePath(); break; case 1: // top-right ctx.moveTo(r, 0); ctx.lineTo(0, 0); ctx.arc(0, r, r, -Math.PI / 2, 0, false); ctx.closePath(); break; case 2: // bottom-left ctx.moveTo(0, r); ctx.lineTo(0, 0); ctx.arc(r, 0, r, Math.PI, Math.PI / 2, true); ctx.closePath(); break; case 3: // bottom-right ctx.moveTo(r, r); ctx.lineTo(r, 0); ctx.arc(0, 0, r, 0, Math.PI / 2, false); ctx.closePath(); break; } ctx.fill(); } } } } }