1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-04-03 20:32:07 -04:00

Connected frames & defaults

This commit is contained in:
purian23
2026-03-24 20:21:44 -04:00
parent e57ab3e1f3
commit 220bb2708b
11 changed files with 102 additions and 31 deletions

View File

@@ -14,7 +14,7 @@ import "settings/SettingsStore.js" as Store
Singleton {
id: root
readonly property int settingsConfigVersion: 9
readonly property int settingsConfigVersion: 10
readonly property bool isGreeterMode: Quickshell.env("DMS_RUN_GREETER") === "1" || Quickshell.env("DMS_RUN_GREETER") === "true"
@@ -201,9 +201,9 @@ Singleton {
property bool frameEnabled: false
onFrameEnabledChanged: saveSettings()
property real frameThickness: 15
property real frameThickness: 16
onFrameThicknessChanged: saveSettings()
property real frameRounding: 24
property real frameRounding: 23
onFrameRoundingChanged: saveSettings()
property string frameColor: ""
onFrameColorChanged: saveSettings()
@@ -213,7 +213,7 @@ Singleton {
onFrameSyncBarColorChanged: saveSettings()
property var frameScreenPreferences: ["all"]
onFrameScreenPreferencesChanged: saveSettings()
property real frameBarThickness: 48
property real frameBarThickness: 42
onFrameBarThicknessChanged: saveSettings()
property bool frameShowOnOverview: false
onFrameShowOnOverviewChanged: saveSettings()
@@ -1974,6 +1974,14 @@ Singleton {
return Quickshell.screens.filter(screen => isScreenInPreferences(screen, prefs));
}
function getFrameScreensAlways() {
const prefs = frameScreenPreferences;
if (!prefs || prefs.length === 0 || prefs.includes("all")) {
return Quickshell.screens;
}
return Quickshell.screens.filter(s => prefs.includes(s.name));
}
function getActiveBarEdgeForScreen(screen) {
if (!screen) return "";
for (var i = 0; i < barConfigs.length; i++) {

View File

@@ -550,8 +550,8 @@ var SPEC = {
launcherPluginOrder: { def: [] },
frameEnabled: { def: false },
frameThickness: { def: 15 },
frameRounding: { def: 24 },
frameThickness: { def: 16 },
frameRounding: { def: 23 },
frameColor: { def: "" },
frameOpacity: { def: 1.0 },
frameSyncBarColor: { def: true },

View File

@@ -252,8 +252,8 @@ function migrateToVersion(obj, targetVersion) {
console.info("Migrating settings from version", currentVersion, "to version 7");
if (settings.frameEnabled === undefined) settings.frameEnabled = false;
if (settings.frameThickness === undefined) settings.frameThickness = 15;
if (settings.frameRounding === undefined) settings.frameRounding = 24;
if (settings.frameThickness === undefined) settings.frameThickness = 16;
if (settings.frameRounding === undefined) settings.frameRounding = 23;
if (settings.frameColor === undefined) settings.frameColor = "#2a2a2a";
if (settings.frameOpacity === undefined) settings.frameOpacity = 1.0;
if (settings.frameSyncBarColor === undefined) settings.frameSyncBarColor = true;
@@ -265,7 +265,7 @@ function migrateToVersion(obj, targetVersion) {
if (currentVersion < 8) {
console.info("Migrating settings from version", currentVersion, "to version 8");
if (settings.frameBarThickness === undefined) settings.frameBarThickness = 48;
if (settings.frameBarThickness === undefined) settings.frameBarThickness = 42;
settings.configVersion = 8;
}
@@ -278,6 +278,11 @@ function migrateToVersion(obj, targetVersion) {
settings.configVersion = 9;
}
// v10 migration — Session 5
if (currentVersion < 10) {
settings.configVersion = 10;
}
return settings;
}

View File

@@ -10,6 +10,8 @@ Item {
required property var axis
required property var barConfig
visible: !SettingsData.frameEnabled
anchors.fill: parent
anchors.left: parent.left
@@ -38,7 +40,7 @@ Item {
property real rt: {
if (SettingsData.frameEnabled)
return 0;
return SettingsData.frameRounding;
if (barConfig?.squareCorners ?? false)
return 0;
if (barWindow.hasMaximizedToplevel)

View File

@@ -23,6 +23,31 @@ Item {
readonly property real innerPadding: barConfig?.innerPadding ?? 4
readonly property real outlineThickness: (barConfig?.widgetOutlineEnabled ?? false) ? (barConfig?.widgetOutlineThickness ?? 1) : 0
readonly property real _frameLeftInset: {
if (!SettingsData.frameEnabled || barWindow.isVertical) return 0
return barWindow.hasAdjacentLeftBar
? SettingsData.frameBarThickness
: 0
}
readonly property real _frameRightInset: {
if (!SettingsData.frameEnabled || barWindow.isVertical) return 0
return barWindow.hasAdjacentRightBar
? SettingsData.frameBarThickness
: 0
}
readonly property real _frameTopInset: {
if (!SettingsData.frameEnabled || !barWindow.isVertical) return 0
return barWindow.hasAdjacentTopBar
? SettingsData.frameThickness
: 0
}
readonly property real _frameBottomInset: {
if (!SettingsData.frameEnabled || !barWindow.isVertical) return 0
return barWindow.hasAdjacentBottomBar
? SettingsData.frameThickness
: 0
}
property alias hLeftSection: hLeftSection
property alias hCenterSection: hCenterSection
property alias hRightSection: hRightSection
@@ -31,10 +56,14 @@ Item {
property alias vRightSection: vRightSection
anchors.fill: parent
anchors.leftMargin: Math.max(Theme.spacingXS, innerPadding * 0.8)
anchors.rightMargin: Math.max(Theme.spacingXS, innerPadding * 0.8)
anchors.topMargin: barWindow.isVertical ? (barWindow.hasAdjacentTopBar ? outlineThickness : Theme.spacingXS) : 0
anchors.bottomMargin: barWindow.isVertical ? (barWindow.hasAdjacentBottomBar ? outlineThickness : Theme.spacingXS) : 0
anchors.leftMargin: Math.max(Theme.spacingXS, innerPadding * 0.8) + _frameLeftInset
anchors.rightMargin: Math.max(Theme.spacingXS, innerPadding * 0.8) + _frameRightInset
anchors.topMargin: (barWindow.isVertical
? (barWindow.hasAdjacentTopBar ? outlineThickness : Theme.spacingXS)
: 0) + _frameTopInset
anchors.bottomMargin: (barWindow.isVertical
? (barWindow.hasAdjacentBottomBar ? outlineThickness : Theme.spacingXS)
: 0) + _frameBottomInset
clip: false
property int componentMapRevision: 0

View File

@@ -7,7 +7,7 @@ import qs.Common
Variants {
id: root
model: SettingsData.frameEnabled ? SettingsData.getFrameFilteredScreens() : []
model: SettingsData.getFrameScreensAlways()
FrameInstance {
required property ShellScreen modelData

View File

@@ -7,10 +7,10 @@ import qs.Common
Item {
id: root
required property var barEdges // array of "top" | "bottom" | "left" | "right"
anchors.fill: parent
required property var barEdges
readonly property real _thickness: SettingsData.frameThickness
readonly property real _barThickness: SettingsData.frameBarThickness
readonly property real _rounding: SettingsData.frameRounding

View File

@@ -19,7 +19,7 @@ Scope {
// Skips any edge where a bar already provides its own exclusiveZone.
Loader {
active: !root.barEdges.includes("top")
active: SettingsData.frameEnabled && !root.barEdges.includes("top")
sourceComponent: EdgeExclusion {
screen: root.screen
anchorTop: true
@@ -29,7 +29,7 @@ Scope {
}
Loader {
active: !root.barEdges.includes("bottom")
active: SettingsData.frameEnabled && !root.barEdges.includes("bottom")
sourceComponent: EdgeExclusion {
screen: root.screen
anchorBottom: true
@@ -39,7 +39,7 @@ Scope {
}
Loader {
active: !root.barEdges.includes("left")
active: SettingsData.frameEnabled && !root.barEdges.includes("left")
sourceComponent: EdgeExclusion {
screen: root.screen
anchorLeft: true
@@ -49,7 +49,7 @@ Scope {
}
Loader {
active: !root.barEdges.includes("right")
active: SettingsData.frameEnabled && !root.barEdges.includes("right")
sourceComponent: EdgeExclusion {
screen: root.screen
anchorRight: true

View File

@@ -28,9 +28,7 @@ PanelWindow {
FrameBorder {
anchors.fill: parent
barEdges: {
SettingsData.barConfigs; // force re-eval when bar configs change
return SettingsData.getActiveBarEdgesForScreen(win.screen);
}
visible: SettingsData.frameEnabled
barEdges: { SettingsData.barConfigs; return SettingsData.getActiveBarEdgesForScreen(win.screen); }
}
}

View File

@@ -1036,6 +1036,8 @@ Item {
SettingsSliderRow {
id: barTransparencySlider
enabled: !SettingsData.frameEnabled
opacity: SettingsData.frameEnabled ? 0.5 : 1.0
text: I18n.tr("Bar Transparency")
value: (selectedBarConfig?.transparency ?? 1.0) * 100
minimum: 0
@@ -1077,6 +1079,35 @@ Item {
restoreMode: Binding.RestoreBinding
}
}
Item {
visible: SettingsData.frameEnabled
width: parent.width
implicitHeight: transparencyFrameNote.implicitHeight + Theme.spacingS * 2
Row {
id: transparencyFrameNote
x: Theme.spacingM
width: parent.width - Theme.spacingM * 2
anchors.verticalCenter: parent.verticalCenter
spacing: Theme.spacingS
DankIcon {
name: "frame_source"
size: Theme.fontSizeMedium
color: Theme.primary
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
text: I18n.tr("Opacity is controlled by Frame Border Opacity in Frame settings")
font.pixelSize: Theme.fontSizeSmall
color: Theme.surfaceVariantText
wrapMode: Text.WordWrap
width: parent.width - Theme.fontSizeMedium - Theme.spacingS
}
}
}
}
SettingsCard {
@@ -1330,8 +1361,6 @@ Item {
SettingsToggleRow {
text: I18n.tr("No Background")
enabled: !SettingsData.frameEnabled
opacity: SettingsData.frameEnabled ? 0.5 : 1.0
checked: selectedBarConfig?.noBackground ?? false
onToggled: checked => SettingsData.updateBarConfig(selectedBarId, {
noBackground: checked

View File

@@ -60,7 +60,7 @@ Item {
minimum: 0
maximum: 100
step: 1
defaultValue: 24
defaultValue: 23
value: SettingsData.frameRounding
onSliderDragFinished: v => SettingsData.set("frameRounding", v)
@@ -80,7 +80,7 @@ Item {
minimum: 2
maximum: 100
step: 1
defaultValue: 15
defaultValue: 16
value: SettingsData.frameThickness
onSliderDragFinished: v => SettingsData.set("frameThickness", v)
@@ -101,7 +101,7 @@ Item {
minimum: 24
maximum: 100
step: 1
defaultValue: 48
defaultValue: 42
value: SettingsData.frameBarThickness
onSliderDragFinished: v => SettingsData.set("frameBarThickness", v)
@@ -116,7 +116,7 @@ Item {
id: opacitySlider
settingKey: "frameOpacity"
tags: ["frame", "border", "opacity", "transparency"]
text: I18n.tr("Border opacity")
text: I18n.tr("Frame Opacity")
unit: "%"
minimum: 0
maximum: 100