From 6ba4e541a09559e6fdc040c928ceaf87fb012d5a Mon Sep 17 00:00:00 2001 From: dawsers Date: Fri, 21 Feb 2025 22:21:18 +0100 Subject: [PATCH] dispatchers: Allow relative numbers for scaleactive --- src/managers/KeybindManager.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 1e234e1243b..3529fa45045 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -2156,20 +2156,28 @@ SDispatchResult CKeybindManager::scaleActive(std::string args) { return {.success = false, .error = "Window not found"}; std::optional scaleResult; + bool exact = false; - try { - scaleResult = stof(args); - } catch (...) { + if (args.starts_with("exact")) { + exact = true; + scaleResult = getPlusMinusKeywordResult(args.substr(5), 0); + } else + scaleResult = getPlusMinusKeywordResult(args, 0); + + if (!scaleResult.has_value()) { Debug::log(ERR, "Invalid arg \"{}\" in scaleactive!", args); - return {.success = false, .error = "Invalid scale in scaleactive!"}; + return {.success = false, .error = "Invalid scale argument in scaleactive!"}; } float scale = scaleResult.value(); - if (scale > 0.0f) { + if (!exact) + scale += 1.0 / PLASTWINDOW->m_sWindowData.contentScale.valueOr(1.0f); + + if (scale > 0.0f) PLASTWINDOW->m_sWindowData.contentScale = CWindowOverridableVar(1.0f / scale, PRIORITY_SET_PROP); - } else { + else PLASTWINDOW->m_sWindowData.contentScale.unset(PRIORITY_SET_PROP); - } + PLASTWINDOW->sendWindowSize(); return {};