noctalia-shell/Services/ScalingService.qml

78 lines
1.9 KiB
QML

pragma Singleton
import Quickshell
import qs.Commons
Singleton {
id: root
// -------------------------------------------
// Manual scaling via Settings
function scale(aScreen) {
try {
if (aScreen !== undefined && aScreen.name !== undefined) {
return getMonitorScale(aScreen.name)
}
} catch (e) {
//Logger.warn(e)
}
return 1.0
}
// -------------------------------------------
function getMonitorScale(aScreenName) {
try {
var monitors = Settings.data.ui.monitorsScaling
if (monitors !== undefined) {
for (var i = 0; i < monitors.length; i++) {
if (monitors[i].name !== undefined && monitors[i].name === aScreenName) {
return monitors[i].scale
}
}
}
} catch (e) {
//Logger.warn(e)
}
return 1.0
}
// -------------------------------------------
function setMonitorScale(aScreenName, scale) {
try {
var monitors = Settings.data.ui.monitorsScaling
if (monitors !== undefined) {
for (var i = 0; i < monitors.length; i++) {
if (monitors[i].name !== undefined && monitors[i].name === aScreenName) {
monitors[i].scale = scale
return
}
}
}
monitors.push({
"name": aScreenName,
"scale": scale
})
} catch (e) {
//Logger.warn(e)
}
}
// -------------------------------------------
// Dynamic scaling based on resolution
// Design reference resolution (for scale = 1.0)
readonly property int designScreenWidth: 2560
readonly property int designScreenHeight: 1440
function dynamicScale(aScreen) {
if (aScreen != null) {
var ratioW = aScreen.width / designScreenWidth
var ratioH = aScreen.height / designScreenHeight
return Math.min(ratioW, ratioH)
}
return 1.0
}
}