From d27086e7d0c2b880dd0a484e3133f760e3e0b583 Mon Sep 17 00:00:00 2001 From: sam edelsten <samedelsten1@gmail.com> Date: Wed, 25 Oct 2023 21:40:09 +0100 Subject: [PATCH] configurable password char --- examples/login.rs | 10 +++++++++- src/lib.rs | 8 +++++++- src/render.rs | 19 +++++++++++-------- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/examples/login.rs b/examples/login.rs index 51594b6..8942c51 100644 --- a/examples/login.rs +++ b/examples/login.rs @@ -67,7 +67,7 @@ fn setup(mut commands: Commands, window: Query<&Window, With<PrimaryWindow>>) { Attrs::new().color(bevy_color_to_cosmic(Color::rgb_u8(128, 128, 128))), )), }) - .insert(PasswordInput); + .insert(PasswordInput('\u{1F92B}')); }); } @@ -104,10 +104,18 @@ fn print_changed_input(mut evr_type: EventReader<CosmicTextChanged>) { } fn main() { + let font_bytes: &[u8] = include_bytes!("../assets/fonts/VictorMono-Regular.ttf"); + let font_config = CosmicFontConfig { + fonts_dir_path: None, + font_bytes: Some(vec![font_bytes]), + load_system_fonts: true, + }; + App::new() .add_plugins(DefaultPlugins) .add_plugins(CosmicEditPlugin { change_cursor: CursorConfig::Default, + font_config, ..default() }) .add_systems(Startup, setup) diff --git a/src/lib.rs b/src/lib.rs index 51a430d..0fdbb84 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -205,7 +205,13 @@ pub struct PlaceholderText(pub CosmicText); pub struct PlaceholderAttrs(pub AttrsOwned); #[derive(Component)] -pub struct PasswordInput; +pub struct PasswordInput(pub char); + +impl Default for PasswordInput { + fn default() -> Self { + PasswordInput("•".chars().next().unwrap()) + } +} impl Default for PlaceholderAttrs { fn default() -> Self { diff --git a/src/render.rs b/src/render.rs index 1a8deca..5451d97 100644 --- a/src/render.rs +++ b/src/render.rs @@ -11,8 +11,9 @@ use image::{imageops::FilterType, GenericImageView}; use crate::{ get_text_size, get_x_offset_center, get_y_offset_center, CosmicAttrs, CosmicBackground, - CosmicCanvas, CosmicEditor, CosmicFontSystem, CosmicMetrics, CosmicMode, CosmicTextPosition, - FillColor, Focus, PasswordInput, Placeholder, ReadOnly, XOffset, DEFAULT_SCALE_PLACEHOLDER, + CosmicCanvas, CosmicEditor, CosmicFontSystem, CosmicMetrics, CosmicMode, CosmicText, + CosmicTextPosition, FillColor, Focus, PasswordInput, Placeholder, ReadOnly, XOffset, + DEFAULT_SCALE_PLACEHOLDER, }; #[derive(Resource)] @@ -73,12 +74,14 @@ pub(crate) fn cosmic_edit_redraw_buffer( let current_text = cosmic_editor.get_text(); // intercept text for password inputs - if password_opt.is_some() && !current_text.is_empty() { - cosmic_editor.set_text( - crate::CosmicText::OneStyle("•".repeat(current_text.len())), - attrs.0.clone(), - &mut font_system.0, - ); + if let Some(password) = password_opt { + if !current_text.is_empty() { + cosmic_editor.set_text( + CosmicText::OneStyle(format!("{}", password.0).repeat(current_text.len())), + attrs.0.clone(), + &mut font_system.0, + ); + } } // Check for placeholder, replace editor if found and buffer is empty -- GitLab