/*
* This file is part of laurelin/client
* Copyright (C) 2023 Jonni Liljamo <jonni@liljamo.com>
*
* Licensed under GPL-3.0-only.
* See LICENSE for licensing information.
*/
use bevy_inspector_egui::bevy_egui::egui;
fn password_ui(ui: &mut egui::Ui, password: &mut String) -> egui::Response {
let state_id = ui.id().with("show_plaintext");
let mut show_plaintext = ui.data().get_temp::<bool>(state_id).unwrap_or(false);
let result = ui.with_layout(egui::Layout::left_to_right(egui::Align::Center), |ui| {
// TODO: this was previously add_sized() with a max of ui.available_size()
// just, a note if... some usecase breaks or something
ui.add(egui::TextEdit::singleline(password).password(!show_plaintext));
let response = ui
.add(egui::SelectableLabel::new(show_plaintext, "👁"))
.on_hover_text("Show/hide password");
if response.clicked() {
show_plaintext = !show_plaintext;
}
});
ui.data().insert_temp(state_id, show_plaintext);
result.response
}
pub fn password(password: &mut String) -> impl egui::Widget + '_ {
move |ui: &mut egui::Ui| password_ui(ui, password)
}