diff options
author | 2022-10-19 23:32:12 +0200 | |
---|---|---|
committer | 2022-10-19 23:32:12 +0200 | |
commit | 82217947aa80287282ed6deb02d238a31303e0d6 (patch) | |
tree | 35c6b4818a02b6cd967f53e7305071b79fc968d7 | |
parent | 69e288cad1fef83e1fde18225af63b38e0eed534 (diff) | |
parent | 069371c86b2eef62277462810fb5ac1852623bd9 (diff) | |
download | iced-82217947aa80287282ed6deb02d238a31303e0d6.tar.gz iced-82217947aa80287282ed6deb02d238a31303e0d6.tar.bz2 iced-82217947aa80287282ed6deb02d238a31303e0d6.zip |
Merge pull request #1480 from tarkah/more-pane-grid-fixes
More pane grid fixes
-rw-r--r-- | native/src/widget/pane_grid.rs | 46 | ||||
-rw-r--r-- | native/src/widget/pane_grid/content.rs | 3 |
2 files changed, 29 insertions, 20 deletions
diff --git a/native/src/widget/pane_grid.rs b/native/src/widget/pane_grid.rs index d84fb7a0..96cf78ef 100644 --- a/native/src/widget/pane_grid.rs +++ b/native/src/widget/pane_grid.rs @@ -341,6 +341,7 @@ where cursor_position, viewport, renderer, + self.on_drag.is_some(), ) }) .max() @@ -648,7 +649,7 @@ pub fn mouse_interaction( resize_leeway: Option<u16>, ) -> Option<mouse::Interaction> { if action.picked_pane().is_some() { - return Some(mouse::Interaction::Grab); + return Some(mouse::Interaction::Grabbing); } let resize_axis = @@ -756,27 +757,12 @@ pub fn draw<Renderer, T>( cursor_position }; + let mut render_picked_pane = None; + for ((id, pane), layout) in elements.zip(layout.children()) { match picked_pane { Some((dragging, origin)) if id == dragging => { - let bounds = layout.bounds(); - - renderer.with_translation( - cursor_position - - Point::new(bounds.x + origin.x, bounds.y + origin.y), - |renderer| { - renderer.with_layer(bounds, |renderer| { - draw_pane( - pane, - renderer, - default_style, - layout, - pane_cursor_position, - viewport, - ); - }); - }, - ); + render_picked_pane = Some((pane, origin, layout)); } _ => { draw_pane( @@ -791,6 +777,28 @@ pub fn draw<Renderer, T>( } } + // Render picked pane last + if let Some((pane, origin, layout)) = render_picked_pane { + let bounds = layout.bounds(); + + renderer.with_translation( + cursor_position + - Point::new(bounds.x + origin.x, bounds.y + origin.y), + |renderer| { + renderer.with_layer(bounds, |renderer| { + draw_pane( + pane, + renderer, + default_style, + layout, + pane_cursor_position, + viewport, + ); + }); + }, + ); + }; + if let Some((axis, split_region, is_picked)) = picked_split { let highlight = if is_picked { theme.picked_split(style) diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs index 8d26c3d8..c236d820 100644 --- a/native/src/widget/pane_grid/content.rs +++ b/native/src/widget/pane_grid/content.rs @@ -238,6 +238,7 @@ where cursor_position: Point, viewport: &Rectangle, renderer: &Renderer, + drag_enabled: bool, ) -> mouse::Interaction { let (body_layout, title_bar_interaction) = if let Some(title_bar) = &self.title_bar { @@ -247,7 +248,7 @@ where let is_over_pick_area = title_bar .is_over_pick_area(title_bar_layout, cursor_position); - if is_over_pick_area { + if is_over_pick_area && drag_enabled { return mouse::Interaction::Grab; } |