summaryrefslogtreecommitdiffstats
path: root/widget/src/pane_grid/content.rs
diff options
context:
space:
mode:
Diffstat (limited to 'widget/src/pane_grid/content.rs')
-rw-r--r--widget/src/pane_grid/content.rs47
1 files changed, 33 insertions, 14 deletions
diff --git a/widget/src/pane_grid/content.rs b/widget/src/pane_grid/content.rs
index ec0676b1..fa9f7a9f 100644
--- a/widget/src/pane_grid/content.rs
+++ b/widget/src/pane_grid/content.rs
@@ -1,12 +1,12 @@
use crate::container;
-use crate::core::event::{self, Event};
use crate::core::layout;
use crate::core::mouse;
use crate::core::overlay;
use crate::core::renderer;
use crate::core::widget::{self, Tree};
use crate::core::{
- self, Clipboard, Element, Layout, Point, Rectangle, Shell, Size, Vector,
+ self, Clipboard, Element, Event, Layout, Point, Rectangle, Shell, Size,
+ Vector,
};
use crate::pane_grid::{Draggable, TitleBar};
@@ -239,7 +239,7 @@ where
);
}
- pub(crate) fn on_event(
+ pub(crate) fn update(
&mut self,
tree: &mut Tree,
event: Event,
@@ -250,13 +250,11 @@ where
shell: &mut Shell<'_, Message>,
viewport: &Rectangle,
is_picked: bool,
- ) -> event::Status {
- let mut event_status = event::Status::Ignored;
-
+ ) {
let body_layout = if let Some(title_bar) = &mut self.title_bar {
let mut children = layout.children();
- event_status = title_bar.on_event(
+ title_bar.update(
&mut tree.children[1],
event.clone(),
children.next().unwrap(),
@@ -272,10 +270,8 @@ where
layout
};
- let body_status = if is_picked {
- event::Status::Ignored
- } else {
- self.body.as_widget_mut().on_event(
+ if !is_picked {
+ self.body.as_widget_mut().update(
&mut tree.children[0],
event,
body_layout,
@@ -284,10 +280,33 @@ where
clipboard,
shell,
viewport,
- )
- };
+ );
+ }
+ }
+
+ pub(crate) fn grid_interaction(
+ &self,
+ layout: Layout<'_>,
+ cursor: mouse::Cursor,
+ drag_enabled: bool,
+ ) -> Option<mouse::Interaction> {
+ let title_bar = self.title_bar.as_ref()?;
+
+ let mut children = layout.children();
+ let title_bar_layout = children.next().unwrap();
+
+ let is_over_pick_area = cursor
+ .position()
+ .map(|cursor_position| {
+ title_bar.is_over_pick_area(title_bar_layout, cursor_position)
+ })
+ .unwrap_or_default();
+
+ if is_over_pick_area && drag_enabled {
+ return Some(mouse::Interaction::Grab);
+ }
- event_status.merge(body_status)
+ None
}
pub(crate) fn mouse_interaction(