Browse Source

Allow easier setting of background color for TextEdit (#5203)

* Closes <https://github.com/emilk/egui/issues/5183>
* [x] I have followed the instructions in the PR template
pull/5219/head
Nicolas 1 month ago
committed by GitHub
parent
commit
0f2b427ff4
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 21
      crates/egui/src/widgets/text_edit/builder.rs
  2. 2
      examples/hello_world_simple/README.md

21
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<KeyboardShortcut>,
background_color: Option<Color32>,
}
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<FontSelection>) -> 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

2
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)

Loading…
Cancel
Save