Skip to content

Commit

Permalink
Allow easier setting of background color for TextEdit (emilk#5203)
Browse files Browse the repository at this point in the history
* Closes <emilk#5183>
* [x] I have followed the instructions in the PR template
  • Loading branch information
bircni authored and hacknus committed Oct 30, 2024
1 parent 38711db commit 69b2307
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 5 deletions.
21 changes: 17 additions & 4 deletions crates/egui/src/widgets/text_edit/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -84,6 +84,7 @@ pub struct TextEdit<'t> {
clip_text: bool,
char_limit: usize,
return_key: Option<KeyboardShortcut>,
background_color: Option<Color32>,
}

impl<'t> WidgetWithState for TextEdit<'t> {
Expand Down Expand Up @@ -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,
}
}

Expand Down Expand Up @@ -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<FontSelection>) -> Self {
Expand Down Expand Up @@ -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);

Expand All @@ -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".
)
}
Expand Down Expand Up @@ -477,6 +489,7 @@ impl<'t> TextEdit<'t> {
clip_text,
char_limit,
return_key,
background_color: _,
} = self;

let text_color = text_color
Expand Down
2 changes: 1 addition & 1 deletion examples/hello_world_simple/README.md
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit 69b2307

Please sign in to comment.