diff options
author | 2022-06-07 07:30:44 +0800 | |
---|---|---|
committer | 2022-06-07 07:30:44 +0800 | |
commit | 20780f36d1c00666140b31e8192e74e1cf36570c (patch) | |
tree | 885a0df6ff97be019ad72b481ee3f35eb638d970 /native/src/widget/pane_grid | |
parent | 260bbc5690b921e678d02eeb7a558c48874544d0 (diff) | |
download | iced-20780f36d1c00666140b31e8192e74e1cf36570c.tar.gz iced-20780f36d1c00666140b31e8192e74e1cf36570c.tar.bz2 iced-20780f36d1c00666140b31e8192e74e1cf36570c.zip |
Prevent pane grid title bar content and controls from overlapping
Diffstat (limited to 'native/src/widget/pane_grid')
-rw-r--r-- | native/src/widget/pane_grid/title_bar.rs | 71 |
1 files changed, 47 insertions, 24 deletions
diff --git a/native/src/widget/pane_grid/title_bar.rs b/native/src/widget/pane_grid/title_bar.rs index a10181af..6713724a 100644 --- a/native/src/widget/pane_grid/title_bar.rs +++ b/native/src/widget/pane_grid/title_bar.rs @@ -105,19 +105,17 @@ where let mut children = padded.children(); let title_layout = children.next().unwrap(); - - self.content.draw( - renderer, - &inherited_style, - title_layout, - cursor_position, - viewport, - ); + let mut show_title = true; if let Some(controls) = &self.controls { let controls_layout = children.next().unwrap(); if show_controls || self.always_show_controls { + if title_layout.bounds().width + controls_layout.bounds().width + > padded.bounds().width + { + show_title = false; + } controls.draw( renderer, &inherited_style, @@ -127,6 +125,16 @@ where ); } } + + if show_title { + self.content.draw( + renderer, + &inherited_style, + title_layout, + cursor_position, + viewport, + ); + } } /// Returns whether the mouse cursor is over the pick area of the @@ -214,9 +222,15 @@ where let mut children = padded.children(); let title_layout = children.next().unwrap(); + let mut show_title = true; let control_status = if let Some(controls) = &mut self.controls { let controls_layout = children.next().unwrap(); + if title_layout.bounds().width + controls_layout.bounds().width + > padded.bounds().width + { + show_title = false; + } controls.on_event( event.clone(), @@ -230,14 +244,18 @@ where event::Status::Ignored }; - let title_status = self.content.on_event( - event, - title_layout, - cursor_position, - renderer, - clipboard, - shell, - ); + let title_status = if show_title { + self.content.on_event( + event, + title_layout, + cursor_position, + renderer, + clipboard, + shell, + ) + } else { + event::Status::Ignored + }; control_status.merge(title_status) } @@ -264,15 +282,20 @@ where if let Some(controls) = &self.controls { let controls_layout = children.next().unwrap(); + let controls_interaction = controls.mouse_interaction( + controls_layout, + cursor_position, + viewport, + renderer, + ); - controls - .mouse_interaction( - controls_layout, - cursor_position, - viewport, - renderer, - ) - .max(title_interaction) + if title_layout.bounds().width + controls_layout.bounds().width + > padded.bounds().width + { + controls_interaction + } else { + controls_interaction.max(title_interaction) + } } else { title_interaction } |