From 0b1f2a97ef10cfd10669cbfbb3e45d1cab1073a0 Mon Sep 17 00:00:00 2001
From: Maximilian Seidler <78690852+PaideiaDilemma@users.noreply.github.com>
Date: Wed, 2 Apr 2025 22:15:59 +0200
Subject: [PATCH] input-field: decouple outer color and base for hidden input
random colors (#727)
---
assets/example.conf | 2 +-
src/config/ConfigManager.cpp | 2 ++
src/renderer/widgets/PasswordInputField.cpp | 3 ++-
src/renderer/widgets/PasswordInputField.hpp | 2 ++
4 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/assets/example.conf b/assets/example.conf
index ee9a575..f815bfc 100644
--- a/assets/example.conf
+++ b/assets/example.conf
@@ -89,4 +89,4 @@ label {
position = -30, -150
halign = right
valign = top
-}
\ No newline at end of file
+}
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index 27c5e3f..5995f5e 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -294,6 +294,7 @@ void CConfigManager::init() {
m_config.addSpecialConfigValue("input-field", "position", LAYOUTCONFIG("0,0"));
m_config.addSpecialConfigValue("input-field", "placeholder_text", Hyprlang::STRING{"Input Password"});
m_config.addSpecialConfigValue("input-field", "hide_input", Hyprlang::INT{0});
+ m_config.addSpecialConfigValue("input-field", "hide_input_base_color", Hyprlang::INT{0xEE00FF99});
m_config.addSpecialConfigValue("input-field", "rounding", Hyprlang::INT{-1});
m_config.addSpecialConfigValue("input-field", "check_color", GRADIENTCONFIG("0xFF22CC88"));
m_config.addSpecialConfigValue("input-field", "fail_color", GRADIENTCONFIG("0xFFCC2222"));
@@ -469,6 +470,7 @@ std::vector CConfigManager::getWidgetConfigs() {
{"position", m_config.getSpecialConfigValue("input-field", "position", k.c_str())},
{"placeholder_text", m_config.getSpecialConfigValue("input-field", "placeholder_text", k.c_str())},
{"hide_input", m_config.getSpecialConfigValue("input-field", "hide_input", k.c_str())},
+ {"hide_input_base_color", m_config.getSpecialConfigValue("input-field", "hide_input_base_color", k.c_str())},
{"rounding", m_config.getSpecialConfigValue("input-field", "rounding", k.c_str())},
{"check_color", m_config.getSpecialConfigValue("input-field", "check_color", k.c_str())},
{"fail_color", m_config.getSpecialConfigValue("input-field", "fail_color", k.c_str())},
diff --git a/src/renderer/widgets/PasswordInputField.cpp b/src/renderer/widgets/PasswordInputField.cpp
index f7a9b5b..b27a0ee 100644
--- a/src/renderer/widgets/PasswordInputField.cpp
+++ b/src/renderer/widgets/PasswordInputField.cpp
@@ -59,6 +59,7 @@ void CPasswordInputField::configure(const std::unordered_map(props.at("invert_numlock"));
colorConfig.swapFont = std::any_cast(props.at("swap_font_color"));
+ colorConfig.hiddenBase = std::any_cast(props.at("hide_input_base_color"));
} catch (const std::bad_any_cast& e) {
RASSERT(false, "Failed to construct CPasswordInputField: {}", e.what()); //
} catch (const std::out_of_range& e) {
@@ -411,7 +412,7 @@ void CPasswordInputField::updateHiddenInputState() {
// randomize new thang
hiddenInputState.lastPasswordLength = passwordLength;
- const auto BASEOK = colorConfig.outer->m_vColors.front().asOkLab();
+ const auto BASEOK = colorConfig.hiddenBase.asOkLab();
// convert to polar coordinates
const auto OKICHCHROMA = std::sqrt(std::pow(BASEOK.a, 2) + std::pow(BASEOK.b, 2));
diff --git a/src/renderer/widgets/PasswordInputField.hpp b/src/renderer/widgets/PasswordInputField.hpp
index 86ff7e2..179680d 100644
--- a/src/renderer/widgets/PasswordInputField.hpp
+++ b/src/renderer/widgets/PasswordInputField.hpp
@@ -101,6 +101,8 @@ class CPasswordInputField : public IWidget {
CGradientValueData* num = nullptr;
CGradientValueData* both = nullptr;
+ CHyprColor hiddenBase;
+
int transitionMs = 0;
bool invertNum = false;
bool swapFont = false;