From 3c27d1ab130409c2e320aaaacaf0939ebef1bee9 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Fri, 30 Sep 2022 17:03:06 +0100 Subject: [PATCH] optimize vector config value setting --- src/config/ConfigManager.cpp | 23 ++++++++++++++++--- src/config/ConfigManager.hpp | 5 ++-- .../decorations/CHyprDropShadowDecoration.cpp | 19 ++------------- 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 3f2c9331..6c2d782a 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -81,7 +81,7 @@ void CConfigManager::setDefaultVars() { configValues["decoration:shadow_range"].intValue = 4; configValues["decoration:shadow_render_power"].intValue = 3; configValues["decoration:shadow_ignore_window"].intValue = 1; - configValues["decoration:shadow_offset"].strValue = "0 0"; + configValues["decoration:shadow_offset"].vecValue = Vector2D(); configValues["decoration:col.shadow"].intValue = 0xee1a1a1a; configValues["decoration:col.shadow_inactive"].intValue = INT_MAX; configValues["decoration:dim_inactive"].intValue = 0; @@ -292,7 +292,7 @@ void CConfigManager::configSetValueSafe(const std::string& COMMAND, const std::s CONFIGENTRY->set = true; - if (CONFIGENTRY->intValue != -1) { + if (CONFIGENTRY->intValue != -INT64_MAX) { try { if (VALUE.find("0x") == 0) { // Values with 0x are hex @@ -309,7 +309,7 @@ void CConfigManager::configSetValueSafe(const std::string& COMMAND, const std::s Debug::log(WARN, "Error reading value of %s", COMMAND.c_str()); parseError = "Error setting value <" + VALUE + "> for field <" + COMMAND + ">."; } - } else if (CONFIGENTRY->floatValue != -1) { + } else if (CONFIGENTRY->floatValue != -__FLT_MAX__) { try { CONFIGENTRY->floatValue = stof(VALUE); } catch (...) { @@ -323,6 +323,23 @@ void CConfigManager::configSetValueSafe(const std::string& COMMAND, const std::s Debug::log(WARN, "Error reading value of %s", COMMAND.c_str()); parseError = "Error setting value <" + VALUE + "> for field <" + COMMAND + ">."; } + } else if (CONFIGENTRY->vecValue != Vector2D(-__FLT_MAX__, -__FLT_MAX__)) { + try { + if (const auto SPACEPOS = VALUE.find(' '); SPACEPOS != std::string::npos) { + const auto X = VALUE.substr(0, SPACEPOS); + const auto Y = VALUE.substr(SPACEPOS + 1); + + if (isNumber(X, true) && isNumber(Y, true)) { + CONFIGENTRY->vecValue = Vector2D(std::stof(X), std::stof(Y)); + } + } else { + Debug::log(WARN, "Error reading value of %s", COMMAND.c_str()); + parseError = "Error setting value <" + VALUE + "> for field <" + COMMAND + ">."; + } + } catch (...) { + Debug::log(WARN, "Error reading value of %s", COMMAND.c_str()); + parseError = "Error setting value <" + VALUE + "> for field <" + COMMAND + ">."; + } } } diff --git a/src/config/ConfigManager.hpp b/src/config/ConfigManager.hpp index cb73e102..e134b7a6 100644 --- a/src/config/ConfigManager.hpp +++ b/src/config/ConfigManager.hpp @@ -20,9 +20,10 @@ #define CREATEANIMCFG(name, parent) animationConfig[name] = {false, "", "", 0.f, -1, &animationConfig["global"], &animationConfig[parent]} struct SConfigValue { - int64_t intValue = -1; - float floatValue = -1; + int64_t intValue = -INT64_MAX; + float floatValue = -__FLT_MAX__; std::string strValue = ""; + Vector2D vecValue = Vector2D(-__FLT_MAX__, -__FLT_MAX__); bool set = false; // used for device configs }; diff --git a/src/render/decorations/CHyprDropShadowDecoration.cpp b/src/render/decorations/CHyprDropShadowDecoration.cpp index 38de306d..3f56977b 100644 --- a/src/render/decorations/CHyprDropShadowDecoration.cpp +++ b/src/render/decorations/CHyprDropShadowDecoration.cpp @@ -63,30 +63,15 @@ void CHyprDropShadowDecoration::draw(CMonitor* pMonitor, float a) { static auto *const PSHADOWSIZE = &g_pConfigManager->getConfigValuePtr("decoration:shadow_range")->intValue; static auto *const PROUNDING = &g_pConfigManager->getConfigValuePtr("decoration:rounding")->intValue; static auto *const PSHADOWIGNOREWINDOW = &g_pConfigManager->getConfigValuePtr("decoration:shadow_ignore_window")->intValue; - static auto *const PSHADOWOFFSET = &g_pConfigManager->getConfigValuePtr("decoration:shadow_offset")->strValue; + static auto *const PSHADOWOFFSET = &g_pConfigManager->getConfigValuePtr("decoration:shadow_offset")->vecValue; if (*PSHADOWS != 1) return; // disabled - // get the real offset - Vector2D offset; - try { - if (const auto SPACEPOS = PSHADOWOFFSET->find(' '); SPACEPOS != std::string::npos) { - const auto X = PSHADOWOFFSET->substr(0, SPACEPOS); - const auto Y = PSHADOWOFFSET->substr(SPACEPOS + 1); - - if (isNumber(X, true) && isNumber(Y, true)) { - offset = Vector2D(std::stof(X), std::stof(Y)); - } - } - } catch (std::exception& e) { - return; // cannot parse - } - const auto ROUNDING = !m_pWindow->m_sSpecialRenderData.rounding ? 0 : (m_pWindow->m_sAdditionalConfigData.rounding == -1 ? *PROUNDING : m_pWindow->m_sAdditionalConfigData.rounding); // update the extents - m_seExtents = {{*PSHADOWSIZE + 2 - offset.x, *PSHADOWSIZE + 2 - offset.y}, {*PSHADOWSIZE + 2 + offset.x, *PSHADOWSIZE + 2 + offset.y}}; + m_seExtents = {{*PSHADOWSIZE + 2 - PSHADOWOFFSET->x, *PSHADOWSIZE + 2 - PSHADOWOFFSET->y}, {*PSHADOWSIZE + 2 + PSHADOWOFFSET->x, *PSHADOWSIZE + 2 + PSHADOWOFFSET->y}}; // draw the shadow wlr_box fullBox = {m_vLastWindowPos.x - m_seExtents.topLeft.x + 2, m_vLastWindowPos.y - m_seExtents.topLeft.y + 2, m_vLastWindowSize.x + m_seExtents.topLeft.x + m_seExtents.bottomRight.x - 4, m_vLastWindowSize.y + m_seExtents.topLeft.y + m_seExtents.bottomRight.y - 4};