/* * 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_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_mut(|d| d.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_mut(|d| d.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) }