fix: text input icon render

This commit is contained in:
Ashley Wulber 2024-10-21 09:12:41 -04:00 committed by Michael Murphy
parent accb65b7ec
commit 533e099cf6
2 changed files with 33 additions and 5 deletions

View file

@ -54,6 +54,8 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
pub enum Message { pub enum Message {
Input1(String), Input1(String),
Input2(String), Input2(String),
Ignore,
ToggleHide,
} }
/// The [`App`] stores application-specific state. /// The [`App`] stores application-specific state.
@ -62,6 +64,7 @@ pub struct App {
nav_model: nav_bar::Model, nav_model: nav_bar::Model,
input_1: String, input_1: String,
input_2: String, input_2: String,
hidden: bool,
} }
/// Implement [`cosmic::Application`] to integrate with COSMIC. /// Implement [`cosmic::Application`] to integrate with COSMIC.
@ -101,6 +104,7 @@ impl cosmic::Application for App {
nav_model, nav_model,
input_1: String::new(), input_1: String::new(),
input_2: String::new(), input_2: String::new(),
hidden: true,
}; };
let command = app.update_title(); let command = app.update_title();
@ -128,6 +132,10 @@ impl cosmic::Application for App {
Message::Input2(v) => { Message::Input2(v) => {
self.input_2 = v; self.input_2 = v;
} }
Message::Ignore => {}
Message::ToggleHide => {
self.hidden = !self.hidden;
}
} }
Task::none() Task::none()
} }
@ -144,8 +152,20 @@ impl cosmic::Application for App {
let centered = cosmic::widget::container( let centered = cosmic::widget::container(
column![ column![
text, text,
cosmic::widget::text_input::text_input("", &self.input_1)
.on_input(Message::Input1)
.on_clear(Message::Ignore),
cosmic::widget::text_input::secure_input(
"",
&self.input_1,
Some(Message::ToggleHide),
self.hidden
)
.on_input(Message::Input1),
cosmic::widget::text_input::text_input("", &self.input_1).on_input(Message::Input1), cosmic::widget::text_input::text_input("", &self.input_1).on_input(Message::Input1),
cosmic::widget::text_input::text_input("", &self.input_2).on_input(Message::Input2), cosmic::widget::text_input::search_input("", &self.input_2)
.on_input(Message::Input2)
.on_clear(Message::Ignore),
] ]
.width(iced::Length::Fill) .width(iced::Length::Fill)
.height(iced::Length::Shrink) .height(iced::Length::Shrink)

View file

@ -431,7 +431,7 @@ where
value: Option<&Value>, value: Option<&Value>,
style: &renderer::Style, style: &renderer::Style,
) { ) {
let text_layout = self.text_layout(layout.clone()); let text_layout = self.text_layout(layout);
draw( draw(
renderer, renderer,
theme, theme,
@ -2008,7 +2008,7 @@ pub fn draw<'a, Message>(
let mut children_layout = layout.children(); let mut children_layout = layout.children();
let bounds = layout.bounds(); let bounds = layout.bounds();
let text_bounds = text_layout.bounds(); let text_bounds = children_layout.next().unwrap().bounds();
let is_mouse_over = cursor_position.is_over(bounds); let is_mouse_over = cursor_position.is_over(bounds);
@ -2115,8 +2115,11 @@ pub fn draw<'a, Message>(
let mut child_index = 0; let mut child_index = 0;
let leading_icon_tree = children.get(child_index); let leading_icon_tree = children.get(child_index);
// draw the start icon in the text input // draw the start icon in the text input
let has_start_icon = icon.is_some();
if let (Some(icon), Some(tree)) = (icon, leading_icon_tree) { if let (Some(icon), Some(tree)) = (icon, leading_icon_tree) {
let icon_layout = children_layout.next().unwrap(); let mut children = text_layout.children();
let _ = children.next().unwrap();
let icon_layout = children.next().unwrap();
icon.as_widget().draw( icon.as_widget().draw(
tree, tree,
@ -2292,7 +2295,12 @@ pub fn draw<'a, Message>(
// draw the end icon in the text input // draw the end icon in the text input
if let (Some(icon), Some(tree)) = (trailing_icon, trailing_icon_tree) { if let (Some(icon), Some(tree)) = (trailing_icon, trailing_icon_tree) {
let icon_layout = children_layout.next().unwrap(); let mut children = text_layout.children();
let mut icon_layout = children.next().unwrap();
if has_start_icon {
icon_layout = children.next().unwrap();
}
icon_layout = children.next().unwrap();
icon.as_widget().draw( icon.as_widget().draw(
tree, tree,