diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-11-26 17:56:43 +0000 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-11-26 17:57:02 +0000 |
| commit | 0948b078e1789605c42746a024df6039bb566b45 (patch) | |
| tree | e3e1a0dfe0cf748343b290f30ef85824993145c8 /src/config/ConfigManager.cpp | |
| parent | 52c03569007f3df1a3fc740450db9b4b81d06ca7 (diff) | |
added border gradients
Diffstat (limited to 'src/config/ConfigManager.cpp')
| -rw-r--r-- | src/config/ConfigManager.cpp | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 0f046c1c..795cb473 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -11,6 +11,9 @@ #include <iostream> CConfigManager::CConfigManager() { + configValues["general:col.active_border"].data = std::make_shared<CGradientValueData>(0xffffffff); + configValues["general:col.inactive_border"].data = std::make_shared<CGradientValueData>(0xff444444); + setDefaultVars(); setDefaultAnimationVars(); @@ -39,8 +42,8 @@ void CConfigManager::setDefaultVars() { configValues["general:no_border_on_floating"].intValue = 0; configValues["general:gaps_in"].intValue = 5; configValues["general:gaps_out"].intValue = 20; - configValues["general:col.active_border"].intValue = 0xffffffff; - configValues["general:col.inactive_border"].intValue = 0xff444444; + ((CGradientValueData*)configValues["general:col.active_border"].data.get())->reset(0xffffffff); + ((CGradientValueData*)configValues["general:col.inactive_border"].data.get())->reset(0xff444444); configValues["general:cursor_inactive_timeout"].intValue = 0; configValues["general:no_cursor_warps"].intValue = 0; @@ -349,6 +352,56 @@ 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->data.get() != nullptr) { + + switch (CONFIGENTRY->data->getDataType()) { + case CVD_TYPE_GRADIENT: { + + CVarList varlist(VALUE, 0, ' '); + + CGradientValueData* data = (CGradientValueData*)CONFIGENTRY->data.get(); + data->m_vColors.clear(); + + for (auto& var : varlist) { + if (var.find("deg") != std::string::npos) { + // last arg + try { + data->m_fAngle = std::stoi(var.substr(0, var.find("deg"))) * (PI / 180.0); // radians + } catch (...) { + Debug::log(WARN, "Error reading value of %s", COMMAND.c_str()); + parseError = "Error setting value <" + VALUE + "> for field <" + COMMAND + ">."; + } + + break; + } + + if (data->m_vColors.size() >= 10) { + Debug::log(WARN, "Error reading value of %s", COMMAND.c_str()); + parseError = "Error setting value <" + VALUE + "> for field <" + COMMAND + ">. Max colors in a gradient is 10."; + break; + } + + try { + data->m_vColors.push_back(configStringToInt(var)); + } catch (std::exception& e) { + Debug::log(WARN, "Error reading value of %s", COMMAND.c_str()); + parseError = "Error setting value <" + VALUE + "> for field <" + COMMAND + ">. " + e.what(); + } + } + + if (data->m_vColors.size() == 0) { + Debug::log(WARN, "Error reading value of %s", COMMAND.c_str()); + parseError = "Error setting value <" + VALUE + "> for field <" + COMMAND + ">. No colors provided."; + + data->m_vColors.push_back(0); // transparent + } + + break; + } + default: { + break; + } + } } } @@ -1607,3 +1660,7 @@ CMonitor* CConfigManager::getBoundMonitorForWS(std::string wsname) { void CConfigManager::addExecRule(SExecRequestedRule rule) { execRequestedRules.push_back(rule); } + +ICustomConfigValueData::~ICustomConfigValueData() { + ; // empty +} |
