Add AppLauncher opacity, topCenter & bottomCenter

This commit is contained in:
Ly-sec 2025-08-26 14:31:59 +02:00
parent 3c39ea192b
commit f3f0f611cb
4 changed files with 80 additions and 13 deletions

View file

@ -188,8 +188,9 @@ Singleton {
property JsonObject appLauncher: JsonObject { property JsonObject appLauncher: JsonObject {
// When disabled, Launcher hides clipboard command and ignores cliphist // When disabled, Launcher hides clipboard command and ignores cliphist
property bool enableClipboardHistory: true property bool enableClipboardHistory: true
// Position: center, top_left, top_right, bottom_left, bottom_right // Position: center, top_left, top_right, bottom_left, bottom_right, bottom_center, top_center
property string position: "center" property string position: "center"
property real backgroundOpacity: 1.0
property list<string> pinnedExecs: [] property list<string> pinnedExecs: []
} }

View file

@ -18,11 +18,17 @@ NPanel {
panelHeight: Math.min(550 * scaling, screen?.height * 0.8) panelHeight: Math.min(550 * scaling, screen?.height * 0.8)
// Positioning derives from Settings.data.bar.position for vertical (top/bottom) // Positioning derives from Settings.data.bar.position for vertical (top/bottom)
// and from Settings.data.appLauncher.position for horizontal vs center. // and from Settings.data.appLauncher.position for horizontal vs center.
// Options: center, top_left, top_right, bottom_left, bottom_right // Options: center, top_left, top_right, bottom_left, bottom_right, bottom_center, top_center
readonly property string launcherPosition: Settings.data.appLauncher.position readonly property string launcherPosition: Settings.data.appLauncher.position
panelAnchorCentered: launcherPosition === "center" panelAnchorCentered: launcherPosition === "center"
panelAnchorLeft: launcherPosition !== "center" && (launcherPosition.endsWith("_left")) panelAnchorLeft: launcherPosition !== "center" && (launcherPosition.endsWith("_left"))
panelAnchorRight: launcherPosition !== "center" && (launcherPosition.endsWith("_right")) panelAnchorRight: launcherPosition !== "center" && (launcherPosition.endsWith("_right"))
panelAnchorBottomCentered: launcherPosition === "bottom_center"
panelAnchorTopCentered: launcherPosition === "top_center"
// Background opacity following bar's approach
panelBackgroundColor: Qt.rgba(Color.mSurface.r, Color.mSurface.g, Color.mSurface.b,
Settings.data.appLauncher.backgroundOpacity)
// Properties // Properties
property string searchText: "" property string searchText: ""

View file

@ -89,12 +89,54 @@ ColumnLayout {
key: "bottom_right" key: "bottom_right"
name: "Bottom Right" name: "Bottom Right"
} }
ListElement {
key: "bottom_center"
name: "Bottom Center"
}
ListElement {
key: "top_center"
name: "Top Center"
}
} }
currentKey: Settings.data.appLauncher.position currentKey: Settings.data.appLauncher.position
onSelected: function (key) { onSelected: function (key) {
Settings.data.appLauncher.position = key Settings.data.appLauncher.position = key
} }
} }
NDivider {
Layout.fillWidth: true
Layout.topMargin: Style.marginL * scaling
Layout.bottomMargin: Style.marginS * scaling
}
NText {
text: "Launcher Background"
font.pointSize: Style.fontSizeXXL * scaling
font.weight: Style.fontWeightBold
color: Color.mOnSurface
Layout.bottomMargin: Style.marginS * scaling
}
RowLayout {
NSlider {
id: launcherBgOpacity
Layout.fillWidth: true
from: 0.0
to: 1.0
stepSize: 0.01
value: Settings.data.appLauncher.backgroundOpacity
onMoved: Settings.data.appLauncher.backgroundOpacity = value
cutoutColor: Color.mSurface
}
NText {
text: Math.floor(Settings.data.appLauncher.backgroundOpacity * 100) + "%"
Layout.alignment: Qt.AlignVCenter
Layout.leftMargin: Style.marginS * scaling
color: Color.mOnSurface
}
}
} }
} }
} }

View file

@ -19,6 +19,9 @@ Loader {
property bool panelAnchorCentered: false property bool panelAnchorCentered: false
property bool panelAnchorLeft: false property bool panelAnchorLeft: false
property bool panelAnchorRight: false property bool panelAnchorRight: false
property bool panelAnchorBottomCentered: false
property bool panelAnchorTopCentered: false
property color panelBackgroundColor: Color.mSurface
// Animation properties // Animation properties
readonly property real originalScale: 0.7 readonly property real originalScale: 0.7
@ -132,7 +135,7 @@ Loader {
Rectangle { Rectangle {
id: panelBackground id: panelBackground
color: Color.mSurface color: panelBackgroundColor
radius: Style.radiusL * scaling radius: Style.radiusL * scaling
border.color: Color.mOutline border.color: Color.mOutline
border.width: Math.max(1, Style.borderS * scaling) border.width: Math.max(1, Style.borderS * scaling)
@ -141,18 +144,33 @@ Loader {
height: panelHeight height: panelHeight
anchors { anchors {
centerIn: panelAnchorCentered ? parent : null // Top/bottom centered modes
left: !panelAnchorCentered && panelAnchorLeft ? parent.left : parent.center horizontalCenter: (panelAnchorTopCentered || panelAnchorBottomCentered) ? parent.horizontalCenter : undefined
right: !panelAnchorCentered && panelAnchorRight ? parent.right : parent.center top: panelAnchorTopCentered ? parent.top : (!panelAnchorTopCentered && !panelAnchorBottomCentered
top: !panelAnchorCentered && (Settings.data.bar.position === "top") ? parent.top : undefined && !panelAnchorCentered
bottom: !panelAnchorCentered && (Settings.data.bar.position === "bottom") ? parent.bottom : undefined && (Settings.data.bar.position === "top") ? parent.top : undefined)
bottom: panelAnchorBottomCentered ? parent.bottom : ((!panelAnchorBottomCentered && !panelAnchorCentered
&& (Settings.data.bar.position === "bottom")) ? parent.bottom : undefined)
// Fully centered mode
centerIn: (!panelAnchorTopCentered && !panelAnchorBottomCentered && panelAnchorCentered) ? parent : null
// Side-anchored modes
left: (!panelAnchorTopCentered && !panelAnchorBottomCentered && !panelAnchorCentered
&& panelAnchorLeft) ? parent.left : parent.center
right: (!panelAnchorTopCentered && !panelAnchorBottomCentered && !panelAnchorCentered
&& panelAnchorRight) ? parent.right : parent.center
// margins // margins
topMargin: !panelAnchorCentered topMargin: panelAnchorTopCentered ? Style.marginS * scaling : (!panelAnchorBottomCentered
&& (Settings.data.bar.position === "top") ? Style.marginS * scaling : undefined && !panelAnchorCentered
bottomMargin: !panelAnchorCentered && (Settings.data.bar.position
&& (Settings.data.bar.position === "bottom") ? Style.marginS * scaling : undefined === "top")) ? Style.marginS * scaling : undefined
rightMargin: !panelAnchorCentered && panelAnchorRight ? Style.marginS * scaling : undefined bottomMargin: panelAnchorBottomCentered ? Style.marginS * scaling : (!panelAnchorCentered
&& (Settings.data.bar.position
=== "bottom") ? Style.marginS * scaling : undefined)
rightMargin: (!panelAnchorTopCentered && !panelAnchorBottomCentered && !panelAnchorCentered
&& panelAnchorRight) ? Style.marginS * scaling : undefined
} }
scale: root.scaleValue scale: root.scaleValue