Skip to content

Commit

Permalink
TextEdit: Change margin property to egui::Margin type (emilk#3993)
Browse files Browse the repository at this point in the history
Despite their being an actual `egui::Margin` struct, Textedit has a
`margin()` builder function that supports only `Vec2` types and thereby
only symmetric margins. This PR changes the function to accept
`egui::Margin` type instead making it more congruent with overall egui
logic as well as supporting asymmetric margins.

P.S: I tried to run all checks but I had to modify `./rust-toolchain` to
1.67.0 to get the checks to run on macOS.

---------

Co-authored-by: Emil Ernerfeldt <[email protected]>
  • Loading branch information
bu5hm4nn and emilk committed Feb 15, 2024
1 parent f954e98 commit 1b5a726
Showing 1 changed file with 11 additions and 9 deletions.
20 changes: 11 additions & 9 deletions crates/egui/src/widgets/text_edit/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ pub struct TextEdit<'t> {
layouter: Option<&'t mut dyn FnMut(&Ui, &str, f32) -> Arc<Galley>>,
password: bool,
frame: bool,
margin: Vec2,
margin: Margin,
multiline: bool,
interactive: bool,
desired_width: Option<f32>,
Expand Down Expand Up @@ -119,7 +119,7 @@ impl<'t> TextEdit<'t> {
layouter: None,
password: false,
frame: true,
margin: vec2(4.0, 2.0),
margin: Margin::symmetric(4.0, 2.0),
multiline: true,
interactive: true,
desired_width: None,
Expand Down Expand Up @@ -261,10 +261,10 @@ impl<'t> TextEdit<'t> {
self
}

/// Set margin of text. Default is [4.0,2.0]
/// Set margin of text. Default is `Margin::symmetric(4.0, 2.0)`
#[inline]
pub fn margin(mut self, margin: Vec2) -> Self {
self.margin = margin;
pub fn margin(mut self, margin: impl Into<Margin>) -> Self {
self.margin = margin.into();
self
}

Expand Down Expand Up @@ -381,13 +381,14 @@ impl<'t> TextEdit<'t> {
let where_to_put_background = ui.painter().add(Shape::Noop);

let margin = self.margin;
let max_rect = ui.available_rect_before_wrap().shrink2(margin);
let available = ui.available_rect_before_wrap();
let max_rect = margin.shrink_rect(available);
let mut content_ui = ui.child_ui(max_rect, *ui.layout());

let mut output = self.show_content(&mut content_ui);

let id = output.response.id;
let frame_rect = output.response.rect.expand2(margin);
let frame_rect = margin.expand_rect(output.response.rect);
ui.allocate_space(frame_rect.size());
if interactive {
output.response |= ui.interact(frame_rect, id, Sense::click());
Expand Down Expand Up @@ -493,8 +494,9 @@ impl<'t> TextEdit<'t> {
galley.size().x.max(wrap_width)
};
let desired_height = (desired_height_rows.at_least(1) as f32) * row_height;
let desired_size = vec2(desired_width, galley.size().y.max(desired_height))
.at_least(min_size - margin * 2.0);
let at_least = min_size - margin.sum();
let desired_size =
vec2(desired_width, galley.size().y.max(desired_height)).at_least(at_least);

let (auto_id, rect) = ui.allocate_space(desired_size);

Expand Down

0 comments on commit 1b5a726

Please sign in to comment.