diff options
Diffstat (limited to 'src/desktop/rule/layerRule/LayerRuleApplicator.cpp')
| -rw-r--r-- | src/desktop/rule/layerRule/LayerRuleApplicator.cpp | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/src/desktop/rule/layerRule/LayerRuleApplicator.cpp b/src/desktop/rule/layerRule/LayerRuleApplicator.cpp index 8c157dae..79ee80ae 100644 --- a/src/desktop/rule/layerRule/LayerRuleApplicator.cpp +++ b/src/desktop/rule/layerRule/LayerRuleApplicator.cpp @@ -3,7 +3,6 @@ #include "../Engine.hpp" #include "../../view/LayerSurface.hpp" #include "../../types/OverridableVar.hpp" -#include "../../../helpers/MiscFunctions.hpp" #include "../../../event/EventBus.hpp" #include <tuple> @@ -39,7 +38,11 @@ void CLayerRuleApplicator::resetProps(std::underlying_type_t<eRuleProperty> prop } void CLayerRuleApplicator::applyDynamicRule(const SP<CLayerRule>& rule) { - for (const auto& [key, effect] : rule->effects()) { + for (const auto& effectData : rule->effects()) { + const auto key = effectData.key; + const auto& effect = effectData.raw; + const auto& value = effectData.value; + switch (key) { default: { if (key <= LAYER_RULE_EFFECT_LAST_STATIC) { @@ -68,58 +71,52 @@ void CLayerRuleApplicator::applyDynamicRule(const SP<CLayerRule>& rule) { break; } case LAYER_RULE_EFFECT_NO_ANIM: { - m_noanim.first.set(truthy(effect), Types::PRIORITY_WINDOW_RULE); + m_noanim.first.set(std::get<bool>(value), Types::PRIORITY_WINDOW_RULE); m_noanim.second |= rule->getPropertiesMask(); break; } case LAYER_RULE_EFFECT_BLUR: { - m_blur.first.set(truthy(effect), Types::PRIORITY_WINDOW_RULE); + m_blur.first.set(std::get<bool>(value), Types::PRIORITY_WINDOW_RULE); m_blur.second |= rule->getPropertiesMask(); break; } case LAYER_RULE_EFFECT_BLUR_POPUPS: { - m_blurPopups.first.set(truthy(effect), Types::PRIORITY_WINDOW_RULE); + m_blurPopups.first.set(std::get<bool>(value), Types::PRIORITY_WINDOW_RULE); m_blurPopups.second |= rule->getPropertiesMask(); break; } case LAYER_RULE_EFFECT_DIM_AROUND: { - m_dimAround.first.set(truthy(effect), Types::PRIORITY_WINDOW_RULE); + m_dimAround.first.set(std::get<bool>(value), Types::PRIORITY_WINDOW_RULE); m_dimAround.second |= rule->getPropertiesMask(); break; } case LAYER_RULE_EFFECT_XRAY: { - m_xray.first.set(truthy(effect), Types::PRIORITY_WINDOW_RULE); + m_xray.first.set(std::get<bool>(value), Types::PRIORITY_WINDOW_RULE); m_xray.second |= rule->getPropertiesMask(); break; } case LAYER_RULE_EFFECT_NO_SCREEN_SHARE: { - m_noScreenShare.first.set(truthy(effect), Types::PRIORITY_WINDOW_RULE); + m_noScreenShare.first.set(std::get<bool>(value), Types::PRIORITY_WINDOW_RULE); m_noScreenShare.second |= rule->getPropertiesMask(); break; } case LAYER_RULE_EFFECT_ORDER: { - try { - m_order.first.set(std::stoi(effect), Types::PRIORITY_WINDOW_RULE); - m_order.second |= rule->getPropertiesMask(); - } catch (...) { Log::logger->log(Log::ERR, "CLayerRuleApplicator::applyDynamicRule: invalid order {}", effect); } + m_order.first.set(std::get<int64_t>(value), Types::PRIORITY_WINDOW_RULE); + m_order.second |= rule->getPropertiesMask(); break; } case LAYER_RULE_EFFECT_ABOVE_LOCK: { - try { - m_aboveLock.first.set(std::clamp(std::stoull(effect), 0ULL, 2ULL), Types::PRIORITY_WINDOW_RULE); - m_aboveLock.second |= rule->getPropertiesMask(); - } catch (...) { Log::logger->log(Log::ERR, "CLayerRuleApplicator::applyDynamicRule: invalid order {}", effect); } + m_aboveLock.first.set(std::get<int64_t>(value), Types::PRIORITY_WINDOW_RULE); + m_aboveLock.second |= rule->getPropertiesMask(); break; } case LAYER_RULE_EFFECT_IGNORE_ALPHA: { - try { - m_ignoreAlpha.first.set(std::clamp(std::stof(effect), 0.F, 1.F), Types::PRIORITY_WINDOW_RULE); - m_ignoreAlpha.second |= rule->getPropertiesMask(); - } catch (...) { Log::logger->log(Log::ERR, "CLayerRuleApplicator::applyDynamicRule: invalid order {}", effect); } + m_ignoreAlpha.first.set(std::get<float>(value), Types::PRIORITY_WINDOW_RULE); + m_ignoreAlpha.second |= rule->getPropertiesMask(); break; } case LAYER_RULE_EFFECT_ANIMATION: { - m_animationStyle.first.set(effect, Types::PRIORITY_WINDOW_RULE); + m_animationStyle.first.set(std::get<std::string>(value), Types::PRIORITY_WINDOW_RULE); m_animationStyle.second |= rule->getPropertiesMask(); break; } |
