From 0f2b427ff4c0a8c68f6622ec7d0afb7ba7e71bba Mon Sep 17 00:00:00 2001 From: Nicolas Date: Wed, 2 Oct 2024 21:23:54 +0200 Subject: [PATCH] Allow easier setting of background color for TextEdit (#5203) * Closes * [x] I have followed the instructions in the PR template --- crates/egui/src/widgets/text_edit/builder.rs | 21 ++++++++++++++++---- examples/hello_world_simple/README.md | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/crates/egui/src/widgets/text_edit/builder.rs b/crates/egui/src/widgets/text_edit/builder.rs index 7bd4e8db8e5..f4824a38117 100644 --- a/crates/egui/src/widgets/text_edit/builder.rs +++ b/crates/egui/src/widgets/text_edit/builder.rs @@ -59,7 +59,7 @@ use super::{TextEditOutput, TextEditState}; /// See [`TextEdit::show`]. /// /// ## Other -/// The background color of a [`crate::TextEdit`] is [`crate::Visuals::extreme_bg_color`]. +/// The background color of a [`crate::TextEdit`] is [`crate::Visuals::extreme_bg_color`] or can be set with [`crate::TextEdit::background_color`]. #[must_use = "You should put this widget in a ui with `ui.add(widget);`"] pub struct TextEdit<'t> { text: &'t mut dyn TextBuffer, @@ -84,6 +84,7 @@ pub struct TextEdit<'t> { clip_text: bool, char_limit: usize, return_key: Option, + background_color: Option, } impl<'t> WidgetWithState for TextEdit<'t> { @@ -142,6 +143,7 @@ impl<'t> TextEdit<'t> { clip_text: false, char_limit: usize::MAX, return_key: Some(KeyboardShortcut::new(Modifiers::NONE, Key::Enter)), + background_color: None, } } @@ -201,6 +203,14 @@ impl<'t> TextEdit<'t> { self } + /// Set the background color of the [`TextEdit`]. The default is [`crate::Visuals::extreme_bg_color`]. + // TODO(bircni): remove this once #3284 is implemented + #[inline] + pub fn background_color(mut self, color: Color32) -> Self { + self.background_color = Some(color); + self + } + /// Set a specific style for the hint text. #[inline] pub fn hint_text_font(mut self, hint_text_font: impl Into) -> Self { @@ -409,7 +419,9 @@ impl<'t> TextEdit<'t> { let is_mutable = self.text.is_mutable(); let frame = self.frame; let where_to_put_background = ui.painter().add(Shape::Noop); - + let background_color = self + .background_color + .unwrap_or(ui.visuals().extreme_bg_color); let margin = self.margin; let mut output = self.show_content(ui); @@ -427,14 +439,14 @@ impl<'t> TextEdit<'t> { epaint::RectShape::new( frame_rect, visuals.rounding, - ui.visuals().extreme_bg_color, + background_color, ui.visuals().selection.stroke, ) } else { epaint::RectShape::new( frame_rect, visuals.rounding, - ui.visuals().extreme_bg_color, + background_color, visuals.bg_stroke, // TODO(emilk): we want to show something here, or a text-edit field doesn't "pop". ) } @@ -477,6 +489,7 @@ impl<'t> TextEdit<'t> { clip_text, char_limit, return_key, + background_color: _, } = self; let text_color = text_color diff --git a/examples/hello_world_simple/README.md b/examples/hello_world_simple/README.md index 08c58a7d229..12aee1fada0 100644 --- a/examples/hello_world_simple/README.md +++ b/examples/hello_world_simple/README.md @@ -1,7 +1,7 @@ Example showing some UI controls like `Label`, `TextEdit`, `Slider`, `Button`. ```sh -cargo run -p hello_world +cargo run -p hello_world_simple ``` ![](screenshot.png)