mirror of
https://github.com/emilk/egui.git
synced 2026-08-30 05:10:03 -04:00
Add embedd button on window is only a button with character - or ^
This commit is contained in:
@@ -318,7 +318,9 @@ impl<'open> Window<'open> {
|
||||
mut window_builder,
|
||||
} = self;
|
||||
|
||||
let embedded = if let Some(embedded) = &mut embedded {
|
||||
let has_embedded = embedded.is_some();
|
||||
|
||||
let is_embedded = if let Some(embedded) = &mut embedded {
|
||||
if let Some(tmp_embedded) = ctx.data_mut(|data| {
|
||||
let tmp = data.get_persisted::<bool>(area.id.with("_embedded"));
|
||||
data.remove::<bool>(area.id.with("_embedded"));
|
||||
@@ -347,7 +349,7 @@ impl<'open> Window<'open> {
|
||||
let is_open = is_open || ctx.memory(|mem| mem.everything_is_visible());
|
||||
|
||||
ctx.data_mut(|data| {
|
||||
data.insert_persisted(area.id.with("_is_embedded"), embedded);
|
||||
data.insert_persisted(area.id.with("_is_embedded"), is_embedded);
|
||||
data.insert_persisted(area.id.with("_is_open"), is_open);
|
||||
});
|
||||
|
||||
@@ -358,7 +360,7 @@ impl<'open> Window<'open> {
|
||||
let show_close_button = open.is_some();
|
||||
|
||||
'create_viewport: {
|
||||
if !embedded && ctx.is_desktop() {
|
||||
if !is_embedded && ctx.is_desktop() {
|
||||
if let Some(size) = ctx.data(|data| data.get_temp::<Vec2>(area.id.with("size"))) {
|
||||
let size = size.round()
|
||||
+ ctx.style().spacing.window_margin.sum() * ctx.pixels_per_point();
|
||||
@@ -500,13 +502,30 @@ impl<'open> Window<'open> {
|
||||
let mut frame = frame.begin(&mut area_content_ui);
|
||||
|
||||
let title_bar = if with_title_bar {
|
||||
let mut tmp_embedded = is_embedded;
|
||||
|
||||
let embedded = if has_embedded {
|
||||
Some(&mut tmp_embedded)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let title_bar = show_title_bar(
|
||||
&mut frame.content_ui,
|
||||
title,
|
||||
show_close_button,
|
||||
&mut collapsing,
|
||||
collapsible,
|
||||
embedded,
|
||||
);
|
||||
|
||||
if tmp_embedded != is_embedded {
|
||||
area_content_ui.data_mut(|data| {
|
||||
data.insert_persisted(
|
||||
area_id.with("_embedded"),
|
||||
tmp_embedded,
|
||||
)
|
||||
});
|
||||
}
|
||||
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)
|
||||
@@ -685,13 +704,27 @@ impl<'open> Window<'open> {
|
||||
let mut frame = frame.begin(&mut area_content_ui);
|
||||
|
||||
let title_bar = if with_title_bar {
|
||||
let mut tmp_embedded = is_embedded;
|
||||
|
||||
let embedded = if has_embedded {
|
||||
Some(&mut tmp_embedded)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let title_bar = show_title_bar(
|
||||
&mut frame.content_ui,
|
||||
title,
|
||||
show_close_button,
|
||||
&mut collapsing,
|
||||
collapsible,
|
||||
embedded,
|
||||
);
|
||||
|
||||
if tmp_embedded != is_embedded {
|
||||
area_content_ui.data_mut(|data| {
|
||||
data.insert_persisted(area_id.with("_embedded"), tmp_embedded)
|
||||
});
|
||||
}
|
||||
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)
|
||||
} else {
|
||||
@@ -787,7 +820,9 @@ impl<'open> Window<'open> {
|
||||
mut window_builder,
|
||||
} = self;
|
||||
|
||||
let embedded = if let Some(embedded) = &mut embedded {
|
||||
let has_embedded = embedded.is_some();
|
||||
|
||||
let is_embedded = if let Some(embedded) = &mut embedded {
|
||||
if let Some(tmp_embedded) = ctx.data_mut(|data| {
|
||||
let tmp = data.get_persisted::<bool>(area.id.with("_embedded"));
|
||||
data.remove::<bool>(area.id.with("_embedded"));
|
||||
@@ -816,7 +851,7 @@ impl<'open> Window<'open> {
|
||||
let is_open = is_open || ctx.memory(|mem| mem.everything_is_visible());
|
||||
|
||||
ctx.data_mut(|data| {
|
||||
data.insert_persisted(area.id.with("_is_embedded"), embedded);
|
||||
data.insert_persisted(area.id.with("_is_embedded"), is_embedded);
|
||||
data.insert_persisted(area.id.with("_is_open"), is_open);
|
||||
});
|
||||
|
||||
@@ -827,7 +862,7 @@ impl<'open> Window<'open> {
|
||||
let show_close_button = open.is_some();
|
||||
|
||||
'create_viewport: {
|
||||
if !embedded && ctx.is_desktop() {
|
||||
if !is_embedded && ctx.is_desktop() {
|
||||
if let Some(size) = ctx.data(|data| data.get_temp::<Vec2>(area.id.with("size"))) {
|
||||
let size = size.round()
|
||||
+ ctx.style().spacing.window_margin.sum() * ctx.pixels_per_point();
|
||||
@@ -969,13 +1004,36 @@ impl<'open> Window<'open> {
|
||||
let mut frame = frame.begin(&mut area_content_ui);
|
||||
|
||||
let title_bar = if with_title_bar {
|
||||
let is_embedded: bool = area_content_ui.data_mut(|data| {
|
||||
data.get_persisted::<bool>(area_id.with("_is_embedded"))
|
||||
.unwrap()
|
||||
});
|
||||
|
||||
let mut tmp_embedded = is_embedded;
|
||||
|
||||
let embedded = if has_embedded {
|
||||
Some(&mut tmp_embedded)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let title_bar = show_title_bar(
|
||||
&mut frame.content_ui,
|
||||
title,
|
||||
show_close_button,
|
||||
&mut collapsing,
|
||||
collapsible,
|
||||
embedded,
|
||||
);
|
||||
|
||||
if tmp_embedded != is_embedded {
|
||||
area_content_ui.data_mut(|data| {
|
||||
data.insert_persisted(
|
||||
area_id.with("_embedded"),
|
||||
tmp_embedded,
|
||||
)
|
||||
});
|
||||
ctx.request_repaint_viewport(ctx.get_parent_viewport_id());
|
||||
}
|
||||
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)
|
||||
@@ -1149,13 +1207,33 @@ impl<'open> Window<'open> {
|
||||
let mut frame = frame.begin(&mut area_content_ui);
|
||||
|
||||
let title_bar = if with_title_bar {
|
||||
let is_embedded: bool = area_content_ui.data_mut(|data| {
|
||||
data.get_persisted::<bool>(area_id.with("_is_embedded"))
|
||||
.unwrap()
|
||||
});
|
||||
|
||||
let mut tmp_embedded = is_embedded;
|
||||
|
||||
let embedded = if has_embedded {
|
||||
Some(&mut tmp_embedded)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let title_bar = show_title_bar(
|
||||
&mut frame.content_ui,
|
||||
title,
|
||||
show_close_button,
|
||||
&mut collapsing,
|
||||
collapsible,
|
||||
embedded,
|
||||
);
|
||||
|
||||
if tmp_embedded != is_embedded {
|
||||
area_content_ui.data_mut(|data| {
|
||||
data.insert_persisted(area_id.with("_embedded"), tmp_embedded)
|
||||
});
|
||||
ctx.request_repaint_viewport(ctx.get_parent_viewport_id());
|
||||
}
|
||||
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)
|
||||
} else {
|
||||
@@ -1608,6 +1686,7 @@ fn show_title_bar(
|
||||
show_close_button: bool,
|
||||
collapsing: &mut CollapsingState,
|
||||
collapsible: bool,
|
||||
embedded: Option<&mut bool>,
|
||||
) -> TitleBar {
|
||||
let inner_response = ui.horizontal(|ui| {
|
||||
let height = ui
|
||||
@@ -1625,6 +1704,14 @@ fn show_title_bar(
|
||||
collapsing.show_default_button_with_size(ui, button_size);
|
||||
}
|
||||
|
||||
if let Some(embedded) = embedded {
|
||||
ui.add_space(pad);
|
||||
let c = if *embedded { "^" } else { "-" };
|
||||
if ui.button(c).clicked() {
|
||||
*embedded = !*embedded;
|
||||
}
|
||||
}
|
||||
|
||||
let title_galley = title.into_galley(ui, Some(false), f32::INFINITY, TextStyle::Heading);
|
||||
|
||||
let minimum_width = if collapsible || show_close_button {
|
||||
@@ -1706,7 +1793,11 @@ impl TitleBar {
|
||||
}
|
||||
|
||||
// Don't cover the close- and collapse buttons:
|
||||
let double_click_rect = self.rect.shrink2(vec2(32.0, 0.0));
|
||||
// After 32 is used for a temporary embedd button!
|
||||
let double_click_rect = self.rect.shrink2(vec2(
|
||||
32.0 + ui.style().visuals.text_cursor_width + ui.style().spacing.icon_width,
|
||||
0.0,
|
||||
));
|
||||
|
||||
let res = ui.interact(double_click_rect, self.id, Sense::click());
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ fn main() {
|
||||
let mut show_sync = false;
|
||||
let mut show = false;
|
||||
let mut value = 0.0;
|
||||
let mut debug = false;
|
||||
|
||||
let mut embedded1 = false;
|
||||
let mut embedded2 = true;
|
||||
@@ -35,6 +36,9 @@ fn main() {
|
||||
ctx.set_desktop(is_desktop);
|
||||
ui.checkbox(&mut to_repair, "To Repair!");
|
||||
|
||||
ui.checkbox(&mut debug, "Debug");
|
||||
ctx.set_debug_on_hover(debug);
|
||||
|
||||
ui.checkbox(&mut show_sync, "Show Sync Viewport");
|
||||
if show_sync {
|
||||
ctx.create_viewport_sync(
|
||||
@@ -74,13 +78,19 @@ fn main() {
|
||||
let mut embedded = ui.data_mut(|data| {
|
||||
*data.get_temp_mut_or(Id::new("Test1").with("_is_embedded"), true)
|
||||
});
|
||||
let embedded_tmp = embedded;
|
||||
if ui.checkbox(&mut embedded, "Should embedd?").clicked() {
|
||||
ui.ctx()
|
||||
.request_repaint_viewport(ui.ctx().get_parent_viewport_id());
|
||||
}
|
||||
ui.data_mut(|data| {
|
||||
data.insert_persisted(Id::new("Test1").with("_embedded"), embedded)
|
||||
});
|
||||
if embedded_tmp != embedded {
|
||||
ui.data_mut(|data| {
|
||||
data.insert_persisted(
|
||||
Id::new("Test1").with("_embedded"),
|
||||
embedded,
|
||||
)
|
||||
});
|
||||
}
|
||||
if to_repair {
|
||||
ui.spinner();
|
||||
}
|
||||
@@ -117,16 +127,7 @@ fn main() {
|
||||
.embedded(&mut embedded2)
|
||||
.show_async(ctx, move |ui| {
|
||||
ui.label(format!("Frame: {}", ui.ctx().frame_nr()));
|
||||
let mut embedded = ui.data_mut(|data| {
|
||||
*data.get_temp_mut_or(Id::new("Test2").with("_is_embedded"), true)
|
||||
});
|
||||
if ui.checkbox(&mut embedded, "Should embedd?").clicked() {
|
||||
ui.ctx()
|
||||
.request_repaint_viewport(ui.ctx().get_parent_viewport_id());
|
||||
}
|
||||
ui.data_mut(|data| {
|
||||
data.insert_persisted(Id::new("Test2").with("_embedded"), embedded)
|
||||
});
|
||||
|
||||
if to_repair {
|
||||
ui.spinner();
|
||||
}
|
||||
@@ -157,16 +158,6 @@ fn main() {
|
||||
.embedded(&mut embedded3)
|
||||
.show_async(ctx, move |ui| {
|
||||
ui.label(format!("Frame: {}", ui.ctx().frame_nr()));
|
||||
let mut embedded = ui.data_mut(|data| {
|
||||
*data.get_temp_mut_or(Id::new("Test3").with("_is_embedded"), true)
|
||||
});
|
||||
if ui.checkbox(&mut embedded, "Should embedd?").clicked() {
|
||||
ui.ctx()
|
||||
.request_repaint_viewport(ui.ctx().get_parent_viewport_id());
|
||||
}
|
||||
ui.data_mut(|data| {
|
||||
data.insert_persisted(Id::new("Test3").with("_embedded"), embedded)
|
||||
});
|
||||
let ctx = ui.ctx().clone();
|
||||
ui.label(format!(
|
||||
"Current rendering window: {}",
|
||||
|
||||
Reference in New Issue
Block a user