diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index e2466ee..32e62ac 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -283,16 +283,18 @@ void CConfigManager::init() { m_config.addSpecialConfigValue("input-field", "inner_color", Hyprlang::INT{0xFFDDDDDD}); m_config.addSpecialConfigValue("input-field", "outer_color", GRADIENTCONFIG("0xFF111111")); m_config.addSpecialConfigValue("input-field", "outline_thickness", Hyprlang::INT{4}); - m_config.addSpecialConfigValue("input-field", "password-appearance:dots_spacing", Hyprlang::FLOAT{0.2}); - m_config.addSpecialConfigValue("input-field", "password-appearance:dots_rounding", Hyprlang::INT{-1}); - m_config.addSpecialConfigValue("input-field", "password-appearance:dots_format", Hyprlang::STRING{""}); - m_config.addSpecialConfigValue("input-field", "password-appearance:size", Hyprlang::FLOAT{0.25}); - m_config.addSpecialConfigValue("input-field", "password-appearance:center", Hyprlang::INT{1}); - m_config.addSpecialConfigValue("input-field", "password-appearance:toggle_password_visibility", Hyprlang::INT{0}); - m_config.addSpecialConfigValue("input-field", "password-appearance:hide_eye", Hyprlang::INT{0}); - m_config.addSpecialConfigValue("input-field", "password-appearance:eye_margin", Hyprlang::INT{16}); - m_config.addSpecialConfigValue("input-field", "password-appearance:eye_size", Hyprlang::FLOAT{0.25}); - m_config.addSpecialConfigValue("input-field", "password-appearance:eye_placement", Hyprlang::STRING{"right"}); + m_config.addSpecialConfigValue("input-field", "dots_size", Hyprlang::FLOAT{0.25}); + m_config.addSpecialConfigValue("input-field", "dots_center", Hyprlang::INT{1}); + m_config.addSpecialConfigValue("input-field", "dots_spacing", Hyprlang::FLOAT{0.2}); + m_config.addSpecialConfigValue("input-field", "dots_rounding", Hyprlang::INT{-1}); + m_config.addSpecialConfigValue("input-field", "dots_text_format", Hyprlang::STRING{""}); + m_config.addSpecialConfigValue("input-field", "password_size", Hyprlang::FLOAT{0.4}); + m_config.addSpecialConfigValue("input-field", "password_center", Hyprlang::INT{1}); + m_config.addSpecialConfigValue("input-field", "toggle_password_visibility", Hyprlang::INT{0}); + m_config.addSpecialConfigValue("input-field", "hide_eye", Hyprlang::INT{0}); + m_config.addSpecialConfigValue("input-field", "eye_margin", Hyprlang::INT{16}); + m_config.addSpecialConfigValue("input-field", "eye_size", Hyprlang::FLOAT{0.25}); + m_config.addSpecialConfigValue("input-field", "eye_placement", Hyprlang::STRING{"right"}); m_config.addSpecialConfigValue("input-field", "fade_on_empty", Hyprlang::INT{1}); m_config.addSpecialConfigValue("input-field", "fade_timeout", Hyprlang::INT{2000}); m_config.addSpecialConfigValue("input-field", "font_color", Hyprlang::INT{0xFF000000}); @@ -470,16 +472,18 @@ std::vector CConfigManager::getWidgetConfigs() { {"inner_color", m_config.getSpecialConfigValue("input-field", "inner_color", k.c_str())}, {"outer_color", m_config.getSpecialConfigValue("input-field", "outer_color", k.c_str())}, {"outline_thickness", m_config.getSpecialConfigValue("input-field", "outline_thickness", k.c_str())}, - {"password-appearance:dots_spacing", m_config.getSpecialConfigValue("input-field", "password-appearance:dots_spacing", k.c_str())}, - {"password-appearance:dots_rounding", m_config.getSpecialConfigValue("input-field", "password-appearance:dots_rounding", k.c_str())}, - {"password-appearance:dots_format", m_config.getSpecialConfigValue("input-field", "password-appearance:dots_format", k.c_str())}, - {"password-appearance:size", m_config.getSpecialConfigValue("input-field", "password-appearance:size", k.c_str())}, - {"password-appearance:center", m_config.getSpecialConfigValue("input-field", "password-appearance:center", k.c_str())}, - {"password-appearance:toggle_password_visibility", m_config.getSpecialConfigValue("input-field", "password-appearance:toggle_password_visibility", k.c_str())}, - {"password-appearance:hide_eye", m_config.getSpecialConfigValue("input-field", "password-appearance:hide_eye", k.c_str())}, - {"password-appearance:eye_margin", m_config.getSpecialConfigValue("input-field", "password-appearance:eye_margin", k.c_str())}, - {"password-appearance:eye_size", m_config.getSpecialConfigValue("input-field", "password-appearance:eye_size", k.c_str())}, - {"password-appearance:eye_placement", m_config.getSpecialConfigValue("input-field", "password-appearance:eye_placement", k.c_str())}, + {"dots_size", m_config.getSpecialConfigValue("input-field", "dots_size", k.c_str())}, + {"dots_center", m_config.getSpecialConfigValue("input-field", "dots_center", k.c_str())}, + {"dots_spacing", m_config.getSpecialConfigValue("input-field", "dots_spacing", k.c_str())}, + {"dots_rounding", m_config.getSpecialConfigValue("input-field", "dots_rounding", k.c_str())}, + {"dots_text_format", m_config.getSpecialConfigValue("input-field", "dots_text_format", k.c_str())}, + {"password_size", m_config.getSpecialConfigValue("input-field", "password_size", k.c_str())}, + {"password_center", m_config.getSpecialConfigValue("input-field", "password_center", k.c_str())}, + {"toggle_password_visibility", m_config.getSpecialConfigValue("input-field", "toggle_password_visibility", k.c_str())}, + {"hide_eye", m_config.getSpecialConfigValue("input-field", "hide_eye", k.c_str())}, + {"eye_margin", m_config.getSpecialConfigValue("input-field", "eye_margin", k.c_str())}, + {"eye_size", m_config.getSpecialConfigValue("input-field", "eye_size", k.c_str())}, + {"eye_placement", m_config.getSpecialConfigValue("input-field", "eye_placement", k.c_str())}, {"fade_on_empty", m_config.getSpecialConfigValue("input-field", "fade_on_empty", k.c_str())}, {"fade_timeout", m_config.getSpecialConfigValue("input-field", "fade_timeout", k.c_str())}, {"font_color", m_config.getSpecialConfigValue("input-field", "font_color", k.c_str())}, diff --git a/src/renderer/widgets/PasswordInputField.cpp b/src/renderer/widgets/PasswordInputField.cpp index 817a96f..11e772e 100644 --- a/src/renderer/widgets/PasswordInputField.cpp +++ b/src/renderer/widgets/PasswordInputField.cpp @@ -43,16 +43,18 @@ void CPasswordInputField::configure(const std::unordered_map(props.at("halign")); valign = std::any_cast(props.at("valign")); outThick = std::any_cast(props.at("outline_thickness")); - password.dots.spacing = std::any_cast(props.at("password-appearance:dots_spacing")); - password.dots.rounding = std::any_cast(props.at("password-appearance:dots_rounding")); - password.dots.format = std::any_cast(props.at("password-appearance:dots_format")); - password.size = std::any_cast(props.at("password-appearance:size")); - password.center = std::any_cast(props.at("password-appearance:center")); - password.allowToggle = std::any_cast(props.at("password-appearance:toggle_password_visibility")); - password.eye.hide = std::any_cast(props.at("password-appearance:hide_eye")); - password.eye.margin = std::any_cast(props.at("password-appearance:eye_margin")); - password.eye.size = std::any_cast(props.at("password-appearance:eye_size")); - password.eye.placement = std::any_cast(props.at("password-appearance:eye_placement")); + password.dots.size = std::any_cast(props.at("dots_size")); + password.dots.center = std::any_cast(props.at("dots_center")); + password.dots.spacing = std::any_cast(props.at("dots_spacing")); + password.dots.rounding = std::any_cast(props.at("dots_rounding")); + password.dots.format = std::any_cast(props.at("dots_text_format")); + password.text.size = std::any_cast(props.at("password_size")); + password.text.center = std::any_cast(props.at("password_center")); + password.allowToggle = std::any_cast(props.at("toggle_password_visibility")); + password.eye.hide = std::any_cast(props.at("hide_eye")); + password.eye.margin = std::any_cast(props.at("eye_margin")); + password.eye.size = std::any_cast(props.at("eye_size")); + password.eye.placement = std::any_cast(props.at("eye_placement")); fadeOnEmpty = std::any_cast(props.at("fade_on_empty")); fadeTimeoutMs = std::any_cast(props.at("fade_timeout")); hiddenInputState.enabled = std::any_cast(props.at("hide_input")); @@ -77,11 +79,14 @@ void CPasswordInputField::configure(const std::unordered_mapm_bIsFallback ? colorConfig.fail : colorConfig.caps; @@ -104,7 +109,7 @@ void CPasswordInputField::configure(const std::unordered_mapasyncResourceGatherer->requestAsyncAssetPreload(request); } @@ -210,7 +215,7 @@ void CPasswordInputField::updatePassword() { request.type = CAsyncResourceGatherer::eTargetType::TARGET_TEXT; request.props["font_family"] = fontFamily; request.props["color"] = colorConfig.font; - request.props["font_size"] = (int)(std::nearbyint(configSize.y * password.size * 0.5f) * 2.f); + request.props["font_size"] = (int)(std::nearbyint(configSize.y * password.text.size * 0.5f) * 2.f); request.callback = [REF = m_self]() { assetReadyCallback(REF); }; password.text.pendingResourceID = textResourceID; @@ -345,7 +350,7 @@ bool CPasswordInputField::draw(const SRenderData& data) { double padding = (inputFieldBox.h - passSize.y) / 2.0; double areaWidth = inputFieldBox.w - (padding * 2) - eyeOffset; - double xstart = password.center ? (inputFieldBox.w - passSize.x - eyeOffset) / 2.0 : padding; + double xstart = password.text.center ? (inputFieldBox.w - passSize.x - eyeOffset) / 2.0 : padding; if (passSize.x > areaWidth) xstart -= (passSize.x - areaWidth) / 2.0; if (password.eye.placement == "left") @@ -362,7 +367,7 @@ bool CPasswordInputField::draw(const SRenderData& data) { } else forceReload = true; } else { - const int RECTPASSSIZE = std::nearbyint(inputFieldBox.h * password.size * 0.5f) * 2.f; + const int RECTPASSSIZE = std::nearbyint(inputFieldBox.h * password.dots.size * 0.5f) * 2.f; Vector2D passSize{RECTPASSSIZE, RECTPASSSIZE}; int passSpacing = std::floor(passSize.x * password.dots.spacing); @@ -389,7 +394,7 @@ bool CPasswordInputField::draw(const SRenderData& data) { const double CURRWIDTH = ((passSize.x + passSpacing) * CURRDOTS) - passSpacing; // Calculate starting x-position to ensure dots stay centered within the input field - double xstart = password.center ? ((DOTAREAWIDTH - CURRWIDTH) / 2.0) + DOTPAD : DOTPAD; + double xstart = password.dots.center ? ((DOTAREAWIDTH - CURRWIDTH) / 2.0) + DOTPAD : DOTPAD; if (CURRDOTS > MAXDOTS) xstart = (inputFieldBox.w + MAXDOTS * (passSize.x + passSpacing) - passSpacing - 2 * CURRWIDTH - eyeOffset) / 2.0; @@ -401,7 +406,7 @@ bool CPasswordInputField::draw(const SRenderData& data) { if (password.dots.rounding == -1) password.dots.rounding = passSize.x / 2.0; else if (password.dots.rounding == -2) - password.dots.rounding = rounding == -1 ? passSize.x / 2.0 : rounding * password.size; + password.dots.rounding = rounding == -1 ? passSize.x / 2.0 : rounding * password.dots.size; for (int i = 0; i < CURRDOTS; ++i) { if (i < DOTFLOORED - MAXDOTS) diff --git a/src/renderer/widgets/PasswordInputField.hpp b/src/renderer/widgets/PasswordInputField.hpp index eff23b3..da0c697 100644 --- a/src/renderer/widgets/PasswordInputField.hpp +++ b/src/renderer/widgets/PasswordInputField.hpp @@ -2,7 +2,6 @@ #include "IWidget.hpp" #include "../../helpers/Color.hpp" -#include "../../helpers/Math.hpp" #include "../../core/Timer.hpp" #include "Shadowable.hpp" #include "../../config/ConfigDataValues.hpp" @@ -69,12 +68,12 @@ class CPasswordInputField : public IWidget { int outThick, rounding; struct { - bool allowToggle = false; - bool center = false; - float size = 0.25; - bool show = false; + bool allowToggle = false; + bool show = false; struct { + float size = 0.25; + bool center = false; std::string content = ""; std::string resourceID = ""; std::string pendingResourceID = ""; @@ -84,6 +83,8 @@ class CPasswordInputField : public IWidget { struct { PHLANIMVAR currentAmount; + float size = 0.25; + bool center = false; float spacing = 0; int rounding = 0; std::string format = "";