import QtQuick import QtQuick.Shapes import qs.Commons import qs.Services import qs.Modules.MainScreen.Backgrounds /** * ScreenCornersBackground - ShapePath component for rendering screen corners * * Renders concave corners at the screen edges to create a rounded screen effect. * Uses the unified shadow system - this ShapePath is a child of the AllBackgrounds Shape container. */ ShapePath { id: root // Required reference to AllBackgrounds shapeContainer required property var shapeContainer // Corner configuration readonly property color cornerColor: Settings.data.general.forceBlackScreenCorners ? Color.black : Color.mSurface readonly property real cornerRadius: Style.screenRadius readonly property real cornerSize: Style.screenRadius // Determine margins based on bar position readonly property real topMargin: 0 readonly property real bottomMargin: 0 readonly property real leftMargin: 0 readonly property real rightMargin: 0 // Screen dimensions readonly property real screenWidth: shapeContainer ? shapeContainer.width : 0 readonly property real screenHeight: shapeContainer ? shapeContainer.height : 0 // Only show screen corners if enabled and appropriate conditions are met readonly property bool shouldShow: Settings.data.general.showScreenCorners // ShapePath configuration strokeWidth: -1 // No stroke, fill only fillColor: shouldShow ? cornerColor : Color.transparent // Smooth color animation Behavior on fillColor { ColorAnimation { duration: Style.animationFast } } // ========== PATH DEFINITION ========== // Draws 4 separate corner squares at screen edges // Each corner square has a concave arc on the inner diagonal // ========== TOP-LEFT CORNER ========== // Arc is at the bottom-right of this square (inner diagonal) // Start at top-left screen corner startX: leftMargin startY: topMargin // Top edge (moving right) PathLine { relativeX: cornerSize relativeY: 0 } // Right edge (moving down toward arc) PathLine { relativeX: 0 relativeY: cornerSize - cornerRadius } // Concave arc (bottom-right corner of square, curving inward toward screen center) PathArc { relativeX: -cornerRadius relativeY: cornerRadius radiusX: cornerRadius radiusY: cornerRadius direction: PathArc.Counterclockwise } // Bottom edge (moving left) PathLine { relativeX: -(cornerSize - cornerRadius) relativeY: 0 } // Left edge (moving up) - closes back to start PathLine { relativeX: 0 relativeY: -cornerSize } // ========== TOP-RIGHT CORNER ========== // Arc is at the bottom-left of this square (inner diagonal) PathMove { x: screenWidth - rightMargin - cornerSize y: topMargin } // Top edge (moving right) PathLine { relativeX: cornerSize relativeY: 0 } // Right edge (moving down) PathLine { relativeX: 0 relativeY: cornerSize } // Bottom edge (moving left toward arc) PathLine { relativeX: -(cornerSize - cornerRadius) relativeY: 0 } // Concave arc (bottom-left corner of square, curving inward toward screen center) PathArc { relativeX: -cornerRadius relativeY: -cornerRadius radiusX: cornerRadius radiusY: cornerRadius direction: PathArc.Counterclockwise } // Left edge (moving up) - closes back to start PathLine { relativeX: 0 relativeY: -(cornerSize - cornerRadius) } // ========== BOTTOM-LEFT CORNER ========== // Arc is at the top-right of this square (inner diagonal) PathMove { x: leftMargin y: screenHeight - bottomMargin - cornerSize } // Top edge (moving right toward arc) PathLine { relativeX: cornerSize - cornerRadius relativeY: 0 } // Concave arc (top-right corner of square, curving inward toward screen center) PathArc { relativeX: cornerRadius relativeY: cornerRadius radiusX: cornerRadius radiusY: cornerRadius direction: PathArc.Counterclockwise } // Right edge (moving down) PathLine { relativeX: 0 relativeY: cornerSize - cornerRadius } // Bottom edge (moving left) PathLine { relativeX: -cornerSize relativeY: 0 } // Left edge (moving up) - closes back to start PathLine { relativeX: 0 relativeY: -cornerSize } // ========== BOTTOM-RIGHT CORNER ========== // Arc is at the top-left of this square (inner diagonal) // Start at bottom-right of square (different from other corners!) PathMove { x: screenWidth - rightMargin y: screenHeight - bottomMargin } // Bottom edge (moving left) PathLine { relativeX: -cornerSize relativeY: 0 } // Left edge (moving up toward arc) PathLine { relativeX: 0 relativeY: -(cornerSize - cornerRadius) } // Concave arc (top-left corner of square, curving inward toward screen center) PathArc { relativeX: cornerRadius relativeY: -cornerRadius radiusX: cornerRadius radiusY: cornerRadius direction: PathArc.Counterclockwise } // Top edge (moving right) PathLine { relativeX: cornerSize - cornerRadius relativeY: 0 } // Right edge (moving down) - closes back to start PathLine { relativeX: 0 relativeY: cornerSize } }