Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

close button on/off in egui::Window #4334

Closed
wants to merge 43 commits into from
Closed
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
f0b7737
Update memory.rs
rustbasic Mar 23, 2024
3b98d7f
Update epi_integration.rs
rustbasic Mar 23, 2024
af5a7bb
Update memory.rs
rustbasic Mar 23, 2024
7f66b56
Update memory.rs
rustbasic Mar 23, 2024
6396c4a
Update epi_integration.rs
rustbasic Mar 23, 2024
9fe42ff
Merge branch 'emilk:master' into master
rustbasic Mar 25, 2024
d7673fe
Merge branch 'emilk:master' into master
rustbasic Mar 25, 2024
a7edc53
Merge branch 'emilk:master' into master
rustbasic Mar 26, 2024
2432784
Merge branch 'emilk:master' into master
rustbasic Mar 27, 2024
9b6209b
Merge branch 'emilk:master' into master
rustbasic Mar 27, 2024
f3687f6
Merge branch 'emilk:master' into master
rustbasic Mar 28, 2024
78880de
Merge branch 'emilk:master' into master
rustbasic Mar 29, 2024
01ba2ec
Merge branch 'emilk:master' into master
rustbasic Mar 29, 2024
0ae2451
Merge branch 'emilk:master' into master
rustbasic Mar 29, 2024
e6c84ce
Merge branch 'emilk:master' into master
rustbasic Mar 30, 2024
821dff0
Update epi_integration.rs
rustbasic Mar 30, 2024
eecfafd
Merge branch 'emilk:master' into master
rustbasic Mar 30, 2024
cbb5ac7
Merge branch 'emilk:master' into master
rustbasic Mar 30, 2024
07b5143
Merge branch 'emilk:master' into master
rustbasic Mar 31, 2024
3313633
Update epi_integration.rs
rustbasic Mar 31, 2024
90b968c
Merge branch 'emilk:master' into master
rustbasic Apr 1, 2024
13af44f
Merge branch 'emilk:master' into master
rustbasic Apr 1, 2024
5d95f09
Merge branch 'emilk:master' into master
rustbasic Apr 1, 2024
4be440a
Merge branch 'emilk:master' into master
rustbasic Apr 1, 2024
1ef0e10
Merge branch 'emilk:master' into master
rustbasic Apr 2, 2024
6541324
Merge branch 'emilk:master' into master
rustbasic Apr 2, 2024
8abc161
Merge branch 'emilk:master' into master
rustbasic Apr 3, 2024
1b21742
Merge branch 'emilk:master' into master
rustbasic Apr 4, 2024
052bb68
Merge branch 'emilk:master' into master
rustbasic Apr 5, 2024
24e24e0
Update window.rs
rustbasic Apr 7, 2024
8164d69
Update window.rs
rustbasic Apr 7, 2024
6a26b39
Update window.rs
rustbasic Apr 7, 2024
700bfff
Update window.rs
rustbasic Apr 7, 2024
070c518
Update window.rs
rustbasic Apr 7, 2024
b9f7219
Update window.rs
rustbasic Apr 7, 2024
1a634bd
Update window.rs
rustbasic Apr 7, 2024
98a7a87
Update window.rs
rustbasic Apr 7, 2024
c1de628
Merge branch 'emilk:master' into patch39
rustbasic Apr 19, 2024
e92d47b
Merge branch 'emilk:master' into patch39
rustbasic Apr 21, 2024
cb1c46e
Merge branch 'emilk:master' into patch39
rustbasic Apr 22, 2024
76946d5
Merge branch 'emilk:master' into patch39
rustbasic Apr 22, 2024
1de23b1
Merge branch 'emilk:master' into patch39
rustbasic Apr 23, 2024
2d7feec
Merge branch 'emilk:master' into patch39
rustbasic Apr 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 28 additions & 10 deletions crates/egui/src/containers/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ pub struct Window<'open> {
resize: Resize,
scroll: ScrollArea,
collapsible: bool,
closebutton: bool,
default_open: bool,
with_title_bar: bool,
}
Expand All @@ -60,6 +61,7 @@ impl<'open> Window<'open> {
.default_size([340.0, 420.0]), // Default inner size of a window
scroll: ScrollArea::neither(),
collapsible: true,
closebutton: true,
default_open: true,
with_title_bar: true,
}
Expand Down Expand Up @@ -316,6 +318,13 @@ impl<'open> Window<'open> {
self
}

/// Show close button on title bar?
#[inline]
pub fn closebutton(mut self, closebutton: bool) -> Self {
self.closebutton = closebutton;
self
}

/// Show title bar on top of the window?
/// If `false`, the window will not be collapsible nor have a close-button.
#[inline]
Expand Down Expand Up @@ -400,6 +409,7 @@ impl<'open> Window<'open> {
resize,
scroll,
collapsible,
closebutton,
default_open,
with_title_bar,
} = self;
Expand Down Expand Up @@ -483,7 +493,7 @@ impl<'open> Window<'open> {
let frame_stroke = window_frame.stroke;
let mut frame = window_frame.begin(&mut area_content_ui);

let show_close_button = open.is_some();
let show_close_button = open.is_some() && closebutton;

let where_to_put_header_background = &area_content_ui.painter().add(Shape::Noop);

Expand All @@ -496,9 +506,9 @@ impl<'open> Window<'open> {
let title_bar = show_title_bar(
&mut frame.content_ui,
title,
show_close_button,
&mut collapsing,
collapsible,
show_close_button,
);
resize.min_size.x = resize.min_size.x.at_least(title_bar.rect.width()); // Prevent making window smaller than title bar width
Some(title_bar)
Expand Down Expand Up @@ -574,7 +584,6 @@ impl<'open> Window<'open> {
&content_response,
open,
&mut collapsing,
collapsible,
);
}

Expand Down Expand Up @@ -1003,14 +1012,20 @@ struct TitleBar {
/// Size of the title bar in an expanded state. This size become known only
/// after expanding window and painting its content
rect: Rect,

/// Can the window be collapsed by clicking on its title?
collapsible: bool,

/// Show close button on title bar?
closebutton: bool,
}

fn show_title_bar(
ui: &mut Ui,
title: WidgetText,
show_close_button: bool,
collapsing: &mut CollapsingState,
collapsible: bool,
show_close_button: bool,
) -> TitleBar {
let inner_response = ui.horizontal(|ui| {
let height = ui
Expand Down Expand Up @@ -1044,6 +1059,8 @@ fn show_title_bar(
title_galley,
min_rect,
rect: Rect::NAN, // Will be filled in later
collapsible,
closebutton: show_close_button,
}
});

Expand Down Expand Up @@ -1075,17 +1092,18 @@ impl TitleBar {
content_response: &Option<Response>,
open: Option<&mut bool>,
collapsing: &mut CollapsingState,
collapsible: bool,
) {
if let Some(content_response) = &content_response {
// Now we know how large we got to be:
self.rect.max.x = self.rect.max.x.max(content_response.rect.max.x);
}

if let Some(open) = open {
// Add close button now that we know our full width:
if self.close_button_ui(ui).clicked() {
*open = false;
if self.closebutton {
if let Some(open) = open {
// Add close button now that we know our full width:
if self.close_button_ui(ui).clicked() {
*open = false;
}
}
}

Expand Down Expand Up @@ -1117,7 +1135,7 @@ impl TitleBar {
if ui
.interact(double_click_rect, self.id, Sense::click())
.double_clicked()
&& collapsible
&& self.collapsible
{
collapsing.toggle(ui);
}
Expand Down
Loading