mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-10-30 15:07:49 -04:00
displays: round-trip hyprland HDR metadata and dedupe whitespace-duplicated outputs
fixes #3221 fixes #3219
This commit is contained in:
1 parent
f29a48f681
commit
6ce86a07a5
2 files changed
+49
-15
No files matched your search
@@ -991,31 +991,27 @@ Singleton {
|
||||
}
|
||||
|
||||
function initHyprlandSettingsFromConfig(parsedOutputs) {
|
||||
const importedFields = ["colorManagement", "bitdepth", "sdrBrightness", "sdrSaturation", "supportsWideColor", "supportsHdr", "sdrEotf", "icc", "sdrMinLuminance", "sdrMaxLuminance", "minLuminance", "maxLuminance", "maxAvgLuminance"];
|
||||
const current = JSON.parse(JSON.stringify(SessionData.hyprlandOutputSettings));
|
||||
let changed = false;
|
||||
|
||||
for (const outputName in parsedOutputs) {
|
||||
const output = parsedOutputs[outputName];
|
||||
const settings = output.hyprlandSettings;
|
||||
const settings = parsedOutputs[outputName]?.hyprlandSettings;
|
||||
if (!settings)
|
||||
continue;
|
||||
|
||||
if (current[outputName])
|
||||
continue;
|
||||
|
||||
const hasSettings = settings.colorManagement || settings.bitdepth || settings.sdrBrightness !== undefined || settings.sdrSaturation !== undefined;
|
||||
if (!hasSettings)
|
||||
const entry = {};
|
||||
for (const field of importedFields) {
|
||||
if (settings[field] !== undefined)
|
||||
entry[field] = settings[field];
|
||||
}
|
||||
if (Object.keys(entry).length === 0)
|
||||
continue;
|
||||
|
||||
current[outputName] = {};
|
||||
if (settings.colorManagement)
|
||||
current[outputName].colorManagement = settings.colorManagement;
|
||||
if (settings.bitdepth)
|
||||
current[outputName].bitdepth = settings.bitdepth;
|
||||
if (settings.sdrBrightness !== undefined)
|
||||
current[outputName].sdrBrightness = settings.sdrBrightness;
|
||||
if (settings.sdrSaturation !== undefined)
|
||||
current[outputName].sdrSaturation = settings.sdrSaturation;
|
||||
current[outputName] = entry;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
@@ -1103,9 +1099,9 @@ Singleton {
|
||||
const serial = o.serial || "Unknown";
|
||||
const id = (o.make + " " + o.model + " " + serial).trim();
|
||||
liveByIdentifier[id] = true;
|
||||
liveByIdentifier[o.make + " " + o.model] = true;
|
||||
liveByIdentifier[(o.make + " " + o.model).trim()] = true;
|
||||
if (CompositorService.isHyprland)
|
||||
liveByIdentifier[getHyprlandOutputIdentifier(o, name)] = true;
|
||||
liveByIdentifier[getHyprlandOutputIdentifier(o, name).trim()] = true;
|
||||
}
|
||||
liveByIdentifier[name] = true;
|
||||
}
|
||||
@@ -1254,6 +1250,13 @@ Singleton {
|
||||
"sdrSaturation": hyprLuaField(line, "sdrsaturation"),
|
||||
"supportsWideColor": hyprLuaField(line, "supports_wide_color"),
|
||||
"supportsHdr": hyprLuaField(line, "supports_hdr"),
|
||||
"sdrEotf": hyprLuaField(line, "sdr_eotf"),
|
||||
"icc": hyprLuaField(line, "icc"),
|
||||
"sdrMinLuminance": hyprLuaField(line, "sdr_min_luminance"),
|
||||
"sdrMaxLuminance": hyprLuaField(line, "sdr_max_luminance"),
|
||||
"minLuminance": hyprLuaField(line, "min_luminance"),
|
||||
"maxLuminance": hyprLuaField(line, "max_luminance"),
|
||||
"maxAvgLuminance": hyprLuaField(line, "max_avg_luminance"),
|
||||
"vrrFullscreenOnly": vrrMode === 2 ? true : undefined
|
||||
};
|
||||
return {
|
||||
|
||||
@@ -183,12 +183,22 @@ Singleton {
|
||||
const settings = hyprlandSettings || SessionData.hyprlandOutputSettings;
|
||||
let lines = ["-- Auto-generated by DMS — do not edit manually", ""];
|
||||
|
||||
const liveIdentifiers = {};
|
||||
for (const outputName in outputsData) {
|
||||
const output = outputsData[outputName];
|
||||
if (output?.make && output?.model)
|
||||
liveIdentifiers[getOutputIdentifier(output, outputName).trim()] = true;
|
||||
}
|
||||
|
||||
for (const outputName in outputsData) {
|
||||
const output = outputsData[outputName];
|
||||
if (!output)
|
||||
continue;
|
||||
|
||||
const identifier = getOutputIdentifier(output, outputName);
|
||||
if (!(output.make && output.model) && liveIdentifiers[identifier.trim()])
|
||||
continue;
|
||||
|
||||
const outputSettings = settings[identifier] || {};
|
||||
|
||||
if (outputSettings.disabled) {
|
||||
@@ -228,6 +238,12 @@ Singleton {
|
||||
if (outputSettings.colorManagement && outputSettings.colorManagement !== "auto")
|
||||
parts.push(`cm = ${luaQuoted(outputSettings.colorManagement)}`);
|
||||
|
||||
if (outputSettings.sdrEotf)
|
||||
parts.push(`sdr_eotf = ${luaQuoted(outputSettings.sdrEotf)}`);
|
||||
|
||||
if (outputSettings.icc)
|
||||
parts.push(`icc = ${luaQuoted(outputSettings.icc)}`);
|
||||
|
||||
if (outputSettings.sdrBrightness !== undefined && outputSettings.sdrBrightness !== 1.0)
|
||||
parts.push(`sdrbrightness = ${Number(outputSettings.sdrBrightness)}`);
|
||||
|
||||
@@ -240,6 +256,21 @@ Singleton {
|
||||
if (outputSettings.supportsHdr !== undefined)
|
||||
parts.push(`supports_hdr = ${forceFlagValue(outputSettings.supportsHdr)}`);
|
||||
|
||||
if (outputSettings.sdrMinLuminance !== undefined)
|
||||
parts.push(`sdr_min_luminance = ${Number(outputSettings.sdrMinLuminance)}`);
|
||||
|
||||
if (outputSettings.sdrMaxLuminance !== undefined)
|
||||
parts.push(`sdr_max_luminance = ${Number(outputSettings.sdrMaxLuminance)}`);
|
||||
|
||||
if (outputSettings.minLuminance !== undefined)
|
||||
parts.push(`min_luminance = ${Number(outputSettings.minLuminance)}`);
|
||||
|
||||
if (outputSettings.maxLuminance !== undefined)
|
||||
parts.push(`max_luminance = ${Number(outputSettings.maxLuminance)}`);
|
||||
|
||||
if (outputSettings.maxAvgLuminance !== undefined)
|
||||
parts.push(`max_avg_luminance = ${Number(outputSettings.maxAvgLuminance)}`);
|
||||
|
||||
lines.push("hl.monitor({ " + parts.join(", ") + " })");
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user