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:
@@ -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++) {
|
||||
|
||||
@@ -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 },
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -7,7 +7,7 @@ import qs.Common
|
||||
Variants {
|
||||
id: root
|
||||
|
||||
model: SettingsData.frameEnabled ? SettingsData.getFrameFilteredScreens() : []
|
||||
model: SettingsData.getFrameScreensAlways()
|
||||
|
||||
FrameInstance {
|
||||
required property ShellScreen modelData
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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); }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user