diff options
author | 2021-05-24 16:37:47 -0500 | |
---|---|---|
committer | 2021-05-24 16:37:47 -0500 | |
commit | d4c5f3ee950262c578c7b9b2a4aab60d3c5edaed (patch) | |
tree | 8659fb678d989a2f97876b20aa501d5415af4b02 | |
parent | 1a2fd4e743fe2b5237a4b51fa0ab2ddc660dfd5a (diff) | |
download | iced-d4c5f3ee950262c578c7b9b2a4aab60d3c5edaed.tar.gz iced-d4c5f3ee950262c578c7b9b2a4aab60d3c5edaed.tar.bz2 iced-d4c5f3ee950262c578c7b9b2a4aab60d3c5edaed.zip |
Enable event handling within the title elements
Shrink the pick area to avoid both the controls and the title elements.
Handle events and merge title area event status with control events.
-rw-r--r-- | graphics/src/widget/pane_grid.rs | 6 | ||||
-rw-r--r-- | native/src/widget/pane_grid/title_bar.rs | 33 |
2 files changed, 26 insertions, 13 deletions
diff --git a/graphics/src/widget/pane_grid.rs b/graphics/src/widget/pane_grid.rs index d06f8c6c..93b4b672 100644 --- a/graphics/src/widget/pane_grid.rs +++ b/graphics/src/widget/pane_grid.rs @@ -218,10 +218,10 @@ where body_primitive, ], }, - if is_over_pick_area { - mouse::Interaction::Grab - } else if title_bar_interaction > body_interaction { + if title_bar_interaction > body_interaction { title_bar_interaction + } else if is_over_pick_area { + mouse::Interaction::Grab } else { body_interaction }, diff --git a/native/src/widget/pane_grid/title_bar.rs b/native/src/widget/pane_grid/title_bar.rs index a1e5107e..8e42ce38 100644 --- a/native/src/widget/pane_grid/title_bar.rs +++ b/native/src/widget/pane_grid/title_bar.rs @@ -129,15 +129,16 @@ where if layout.bounds().contains(cursor_position) { let mut children = layout.children(); let padded = children.next().unwrap(); + let mut children = padded.children(); + let title_layout = children.next().unwrap(); if self.controls.is_some() { - let mut children = padded.children(); - let _ = children.next().unwrap(); let controls_layout = children.next().unwrap(); !controls_layout.bounds().contains(cursor_position) + && !title_layout.bounds().contains(cursor_position) } else { - true + !title_layout.bounds().contains(cursor_position) } } else { false @@ -205,16 +206,17 @@ where clipboard: &mut dyn Clipboard, messages: &mut Vec<Message>, ) -> event::Status { - if let Some(controls) = &mut self.controls { - let mut children = layout.children(); - let padded = children.next().unwrap(); + let mut children = layout.children(); + let padded = children.next().unwrap(); - let mut children = padded.children(); - let _ = children.next(); + let mut children = padded.children(); + let title_layout = children.next().unwrap(); + + let control_status = if let Some(controls) = &mut self.controls { let controls_layout = children.next().unwrap(); controls.on_event( - event, + event.clone(), controls_layout, cursor_position, renderer, @@ -223,6 +225,17 @@ where ) } else { event::Status::Ignored - } + }; + + let title_status = self.content.on_event( + event, + title_layout, + cursor_position, + renderer, + clipboard, + messages, + ); + + control_status.merge(title_status) } } |