diff --git a/CHANGELOG.md b/CHANGELOG.md index 2da1b1f8..974db0ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,12 @@ NOTE: [`eframe`](eframe/CHANGELOG.md), [`egui_web`](egui_web/CHANGELOG.md) and [ ## Unreleased +## 0.14.2 - 2021-08-28 - Window resize fix + +### Fixed 🐛 +* Fix window resize bug introduced in `0.14.1`. + + ## 0.14.1 - 2021-08-28 - Layout bug fixes ### Added ⭐ diff --git a/Cargo.lock b/Cargo.lock index c18ed670..2c3a27ef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -788,7 +788,7 @@ dependencies = [ [[package]] name = "egui" -version = "0.14.1" +version = "0.14.2" dependencies = [ "epaint", "ron", diff --git a/docs/egui_demo_app.js b/docs/egui_demo_app.js index 88e3735a..d2ce7704 100644 --- a/docs/egui_demo_app.js +++ b/docs/egui_demo_app.js @@ -1375,56 +1375,56 @@ async function init(input) { var ret = wasm.memory; return addHeapObject(ret); }; + imports.wbg.__wbindgen_closure_wrapper2074 = function(arg0, arg1, arg2) { + var ret = makeMutClosure(arg0, arg1, 663, __wbg_adapter_30); + return addHeapObject(ret); + }; imports.wbg.__wbindgen_closure_wrapper2075 = function(arg0, arg1, arg2) { - var ret = makeMutClosure(arg0, arg1, 664, __wbg_adapter_30); + var ret = makeMutClosure(arg0, arg1, 663, __wbg_adapter_33); return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper2076 = function(arg0, arg1, arg2) { - var ret = makeMutClosure(arg0, arg1, 664, __wbg_adapter_33); + imports.wbg.__wbindgen_closure_wrapper2077 = function(arg0, arg1, arg2) { + var ret = makeMutClosure(arg0, arg1, 663, __wbg_adapter_36); return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper2078 = function(arg0, arg1, arg2) { - var ret = makeMutClosure(arg0, arg1, 664, __wbg_adapter_36); + imports.wbg.__wbindgen_closure_wrapper2079 = function(arg0, arg1, arg2) { + var ret = makeMutClosure(arg0, arg1, 663, __wbg_adapter_39); return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper2080 = function(arg0, arg1, arg2) { - var ret = makeMutClosure(arg0, arg1, 664, __wbg_adapter_39); + imports.wbg.__wbindgen_closure_wrapper2081 = function(arg0, arg1, arg2) { + var ret = makeMutClosure(arg0, arg1, 663, __wbg_adapter_42); return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper2082 = function(arg0, arg1, arg2) { - var ret = makeMutClosure(arg0, arg1, 664, __wbg_adapter_42); + imports.wbg.__wbindgen_closure_wrapper2084 = function(arg0, arg1, arg2) { + var ret = makeMutClosure(arg0, arg1, 663, __wbg_adapter_45); return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper2085 = function(arg0, arg1, arg2) { - var ret = makeMutClosure(arg0, arg1, 664, __wbg_adapter_45); + imports.wbg.__wbindgen_closure_wrapper2086 = function(arg0, arg1, arg2) { + var ret = makeMutClosure(arg0, arg1, 663, __wbg_adapter_48); return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper2087 = function(arg0, arg1, arg2) { - var ret = makeMutClosure(arg0, arg1, 664, __wbg_adapter_48); + imports.wbg.__wbindgen_closure_wrapper2088 = function(arg0, arg1, arg2) { + var ret = makeMutClosure(arg0, arg1, 663, __wbg_adapter_51); return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper2089 = function(arg0, arg1, arg2) { - var ret = makeMutClosure(arg0, arg1, 664, __wbg_adapter_51); + imports.wbg.__wbindgen_closure_wrapper2090 = function(arg0, arg1, arg2) { + var ret = makeMutClosure(arg0, arg1, 663, __wbg_adapter_54); return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper2091 = function(arg0, arg1, arg2) { - var ret = makeMutClosure(arg0, arg1, 664, __wbg_adapter_54); + imports.wbg.__wbindgen_closure_wrapper2092 = function(arg0, arg1, arg2) { + var ret = makeMutClosure(arg0, arg1, 663, __wbg_adapter_57); return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper2093 = function(arg0, arg1, arg2) { - var ret = makeMutClosure(arg0, arg1, 664, __wbg_adapter_57); + imports.wbg.__wbindgen_closure_wrapper2152 = function(arg0, arg1, arg2) { + var ret = makeClosure(arg0, arg1, 720, __wbg_adapter_60); return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper2153 = function(arg0, arg1, arg2) { - var ret = makeClosure(arg0, arg1, 721, __wbg_adapter_60); + imports.wbg.__wbindgen_closure_wrapper2154 = function(arg0, arg1, arg2) { + var ret = makeClosure(arg0, arg1, 720, __wbg_adapter_63); return addHeapObject(ret); }; - imports.wbg.__wbindgen_closure_wrapper2155 = function(arg0, arg1, arg2) { - var ret = makeClosure(arg0, arg1, 721, __wbg_adapter_63); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_closure_wrapper3335 = function(arg0, arg1, arg2) { - var ret = makeMutClosure(arg0, arg1, 747, __wbg_adapter_66); + imports.wbg.__wbindgen_closure_wrapper3334 = function(arg0, arg1, arg2) { + var ret = makeMutClosure(arg0, arg1, 746, __wbg_adapter_66); return addHeapObject(ret); }; diff --git a/docs/egui_demo_app_bg.wasm b/docs/egui_demo_app_bg.wasm index 58eae24a..3054f9aa 100644 Binary files a/docs/egui_demo_app_bg.wasm and b/docs/egui_demo_app_bg.wasm differ diff --git a/egui/Cargo.toml b/egui/Cargo.toml index b61541b0..917aa294 100644 --- a/egui/Cargo.toml +++ b/egui/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "egui" -version = "0.14.1" +version = "0.14.2" authors = ["Emil Ernerfeldt "] description = "Simple, portable immediate mode GUI library for Rust" edition = "2018" diff --git a/egui/src/containers/area.rs b/egui/src/containers/area.rs index acd42873..a50370f0 100644 --- a/egui/src/containers/area.rs +++ b/egui/src/containers/area.rs @@ -339,11 +339,9 @@ impl Prepared { // Important check - don't try to move e.g. a combobox popup! if movable { - if let Some(bounds) = drag_bounds { - state.pos = ctx.constrain_window_rect_to_area(state.rect(), bounds).min; - } else { - state.pos = ctx.constrain_window_rect(state.rect()).min; - } + state.pos = ctx + .constrain_window_rect_to_area(state.rect(), drag_bounds) + .min; } if (move_response.dragged() || move_response.clicked()) diff --git a/egui/src/containers/window.rs b/egui/src/containers/window.rs index f1fedfeb..77b49dc6 100644 --- a/egui/src/containers/window.rs +++ b/egui/src/containers/window.rs @@ -275,7 +275,7 @@ impl<'open> Window<'open> { && !collapsing_header::State::is_open(ctx, collapsing_id).unwrap_or_default(); let possible = PossibleInteractions::new(&area, &resize, is_collapsed); - let area = area.movable(false); // We move it manually + let area = area.movable(false); // We move it manually, or the area will move the window when we want to resize it let resize = resize.resizable(false); // We move it manually let mut resize = resize.id(resize_id); @@ -301,16 +301,14 @@ impl<'open> Window<'open> { 0.0 }; let margins = 2.0 * frame.margin + vec2(0.0, title_bar_height); - let bounds = area.drag_bounds(); interact( window_interaction, ctx, margins, area_layer_id, - area.state_mut(), + &mut area, resize_id, - bounds, ) }) } else { @@ -405,7 +403,10 @@ impl<'open> Window<'open> { content_inner }; - area.movable = possible.movable; // Tell it the truth + area.state_mut().pos = ctx + .constrain_window_rect_to_area(area.state().rect(), area.drag_bounds()) + .min; + let full_response = area.end(ctx, area_content_ui); let inner_response = InnerResponse { @@ -505,21 +506,16 @@ fn interact( ctx: &Context, margins: Vec2, area_layer_id: LayerId, - area_state: &mut area::State, + area: &mut area::Prepared, resize_id: Id, - drag_bounds: Option, ) -> Option { let new_rect = move_and_resize_window(ctx, &window_interaction)?; let new_rect = ctx.round_rect_to_pixels(new_rect); - let new_rect = if let Some(bounds) = drag_bounds { - ctx.constrain_window_rect_to_area(new_rect, bounds) - } else { - ctx.constrain_window_rect(new_rect) - }; + let new_rect = ctx.constrain_window_rect_to_area(new_rect, area.drag_bounds()); // TODO: add this to a Window state instead as a command "move here next frame" - area_state.pos = new_rect.min; + area.state_mut().pos = new_rect.min; if window_interaction.is_resize() { ctx.memory() diff --git a/egui/src/context.rs b/egui/src/context.rs index 9fbd9d18..1a9e9e8e 100644 --- a/egui/src/context.rs +++ b/egui/src/context.rs @@ -509,15 +509,12 @@ impl Context { // --------------------------------------------------------------------- - /// Constrain the position of a window/area - /// so it fits within the screen. - pub(crate) fn constrain_window_rect(&self, window: Rect) -> Rect { - self.constrain_window_rect_to_area(window, self.available_rect()) - } + /// Constrain the position of a window/area so it fits within the provided boundary. + /// + /// If area is `None`, will constrain to [`Self::available_rect`]. + pub(crate) fn constrain_window_rect_to_area(&self, window: Rect, area: Option) -> Rect { + let mut area = area.unwrap_or_else(|| self.available_rect()); - /// Constrain the position of a window/area - /// so it fits within the provided boundary. - pub(crate) fn constrain_window_rect_to_area(&self, window: Rect, mut area: Rect) -> Rect { if window.width() > area.width() { // Allow overlapping side bars. // This is important for small screens, e.g. mobiles running the web demo. diff --git a/egui_demo_lib/src/apps/demo/plot_demo.rs b/egui_demo_lib/src/apps/demo/plot_demo.rs index f4d23b9c..1f98b350 100644 --- a/egui_demo_lib/src/apps/demo/plot_demo.rs +++ b/egui_demo_lib/src/apps/demo/plot_demo.rs @@ -75,8 +75,7 @@ impl LineDemo { .on_hover_text("Always keep the viewport square."); ui.checkbox(proportional, "Proportional data axes") .on_hover_text("Tick are the same size on both axes."); - }); - ui.vertical(|ui| { + ComboBox::from_label("Line style") .selected_text(line_style.to_string()) .show_ui(ui, |ui| {