diff options
author | 2022-01-11 14:12:28 +0700 | |
---|---|---|
committer | 2022-01-11 14:12:28 +0700 | |
commit | 810e086728e938d1d12758c7b486c1e371127349 (patch) | |
tree | a598aab256c113bf7e21ba198d22a965ad554c03 /native | |
parent | 6ab4611a6eec9c4bb4ca1ff1bb580bb7edf49add (diff) | |
download | iced-810e086728e938d1d12758c7b486c1e371127349.tar.gz iced-810e086728e938d1d12758c7b486c1e371127349.tar.bz2 iced-810e086728e938d1d12758c7b486c1e371127349.zip |
Introduce `Renderer` argument to `mouse_interaction` and `on_event`
Diffstat (limited to 'native')
-rw-r--r-- | native/src/element.rs | 37 | ||||
-rw-r--r-- | native/src/overlay.rs | 1 | ||||
-rw-r--r-- | native/src/overlay/element.rs | 18 | ||||
-rw-r--r-- | native/src/overlay/menu.rs | 10 | ||||
-rw-r--r-- | native/src/user_interface.rs | 48 | ||||
-rw-r--r-- | native/src/widget.rs | 2 | ||||
-rw-r--r-- | native/src/widget/button.rs | 5 | ||||
-rw-r--r-- | native/src/widget/checkbox.rs | 1 | ||||
-rw-r--r-- | native/src/widget/column.rs | 7 | ||||
-rw-r--r-- | native/src/widget/container.rs | 6 | ||||
-rw-r--r-- | native/src/widget/image/viewer.rs | 1 | ||||
-rw-r--r-- | native/src/widget/pane_grid.rs | 11 | ||||
-rw-r--r-- | native/src/widget/pane_grid/content.rs | 11 | ||||
-rw-r--r-- | native/src/widget/pane_grid/title_bar.rs | 14 | ||||
-rw-r--r-- | native/src/widget/pick_list.rs | 2 | ||||
-rw-r--r-- | native/src/widget/radio.rs | 1 | ||||
-rw-r--r-- | native/src/widget/row.rs | 7 | ||||
-rw-r--r-- | native/src/widget/scrollable.rs | 5 | ||||
-rw-r--r-- | native/src/widget/slider.rs | 1 | ||||
-rw-r--r-- | native/src/widget/text_input.rs | 1 | ||||
-rw-r--r-- | native/src/widget/toggler.rs | 1 | ||||
-rw-r--r-- | native/src/widget/tooltip.rs | 9 |
22 files changed, 145 insertions, 54 deletions
diff --git a/native/src/element.rs b/native/src/element.rs index 7e806b08..6afa3f62 100644 --- a/native/src/element.rs +++ b/native/src/element.rs @@ -259,9 +259,14 @@ where layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, + renderer: &Renderer, ) -> mouse::Interaction { - self.widget - .mouse_interaction(layout, cursor_position, viewport) + self.widget.mouse_interaction( + layout, + cursor_position, + viewport, + renderer, + ) } /// Computes the _layout_ hash of the [`Element`]. @@ -273,8 +278,9 @@ where pub fn overlay<'b>( &'b mut self, layout: Layout<'_>, + renderer: &Renderer, ) -> Option<overlay::Element<'b, Message, Renderer>> { - self.widget.overlay(layout) + self.widget.overlay(layout, renderer) } } @@ -363,9 +369,14 @@ where layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, + renderer: &Renderer, ) -> mouse::Interaction { - self.widget - .mouse_interaction(layout, cursor_position, viewport) + self.widget.mouse_interaction( + layout, + cursor_position, + viewport, + renderer, + ) } fn hash_layout(&self, state: &mut Hasher) { @@ -375,11 +386,12 @@ where fn overlay( &mut self, layout: Layout<'_>, + renderer: &Renderer, ) -> Option<overlay::Element<'_, B, Renderer>> { let mapper = &self.mapper; self.widget - .overlay(layout) + .overlay(layout, renderer) .map(move |overlay| overlay.map(mapper)) } } @@ -482,10 +494,14 @@ where layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, + renderer: &Renderer, ) -> mouse::Interaction { - self.element - .widget - .mouse_interaction(layout, cursor_position, viewport) + self.element.widget.mouse_interaction( + layout, + cursor_position, + viewport, + renderer, + ) } fn hash_layout(&self, state: &mut Hasher) { @@ -495,7 +511,8 @@ where fn overlay( &mut self, layout: Layout<'_>, + renderer: &Renderer, ) -> Option<overlay::Element<'_, Message, Renderer>> { - self.element.overlay(layout) + self.element.overlay(layout, renderer) } } diff --git a/native/src/overlay.rs b/native/src/overlay.rs index e66d421a..d4b641af 100644 --- a/native/src/overlay.rs +++ b/native/src/overlay.rs @@ -84,6 +84,7 @@ where _layout: Layout<'_>, _cursor_position: Point, _viewport: &Rectangle, + _renderer: &Renderer, ) -> mouse::Interaction { mouse::Interaction::Idle } diff --git a/native/src/overlay/element.rs b/native/src/overlay/element.rs index 70cb417e..e7621600 100644 --- a/native/src/overlay/element.rs +++ b/native/src/overlay/element.rs @@ -80,9 +80,14 @@ where layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, + renderer: &Renderer, ) -> mouse::Interaction { - self.overlay - .mouse_interaction(layout, cursor_position, viewport) + self.overlay.mouse_interaction( + layout, + cursor_position, + viewport, + renderer, + ) } /// Draws the [`Element`] and its children using the given [`Layout`]. @@ -160,9 +165,14 @@ where layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, + renderer: &Renderer, ) -> mouse::Interaction { - self.content - .mouse_interaction(layout, cursor_position, viewport) + self.content.mouse_interaction( + layout, + cursor_position, + viewport, + renderer, + ) } fn draw( diff --git a/native/src/overlay/menu.rs b/native/src/overlay/menu.rs index c0282aae..2deef551 100644 --- a/native/src/overlay/menu.rs +++ b/native/src/overlay/menu.rs @@ -239,9 +239,14 @@ where layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, + renderer: &Renderer, ) -> mouse::Interaction { - self.container - .mouse_interaction(layout, cursor_position, viewport) + self.container.mouse_interaction( + layout, + cursor_position, + viewport, + renderer, + ) } fn draw( @@ -392,6 +397,7 @@ where layout: Layout<'_>, cursor_position: Point, _viewport: &Rectangle, + _renderer: &Renderer, ) -> mouse::Interaction { let is_mouse_over = layout.bounds().contains(cursor_position); diff --git a/native/src/user_interface.rs b/native/src/user_interface.rs index 1c78b754..b6bed5ed 100644 --- a/native/src/user_interface.rs +++ b/native/src/user_interface.rs @@ -205,7 +205,7 @@ where let mut state = State::Updated; let (base_cursor, overlay_statuses) = if let Some(mut overlay) = - self.root.overlay(Layout::new(&self.base.layout)) + self.root.overlay(Layout::new(&self.base.layout), renderer) { let bounds = self.bounds; @@ -391,7 +391,7 @@ where let viewport = Rectangle::with_size(self.bounds); if let Some(mut overlay) = - self.root.overlay(Layout::new(&self.base.layout)) + self.root.overlay(Layout::new(&self.base.layout), renderer) { let layer = Self::overlay_layer( self.overlay.take(), @@ -432,6 +432,7 @@ where Layout::new(&self.base.layout), cursor_position, &viewport, + renderer, ); let Self { @@ -449,30 +450,33 @@ where overlay .as_ref() .and_then(|layer| { - root.overlay(Layout::new(&base.layout)).map(|overlay| { - let overlay_interaction = overlay.mouse_interaction( - Layout::new(&layer.layout), - cursor_position, - &viewport, - ); - - let overlay_bounds = layer.layout.bounds(); - - renderer.with_layer(overlay_bounds, |renderer| { - overlay.draw( - renderer, - &renderer::Style::default(), + root.overlay(Layout::new(&base.layout), renderer).map( + |overlay| { + let overlay_interaction = overlay.mouse_interaction( Layout::new(&layer.layout), cursor_position, + &viewport, + renderer, ); - }); - if overlay_bounds.contains(cursor_position) { - overlay_interaction - } else { - base_interaction - } - }) + let overlay_bounds = layer.layout.bounds(); + + renderer.with_layer(overlay_bounds, |renderer| { + overlay.draw( + renderer, + &renderer::Style::default(), + Layout::new(&layer.layout), + cursor_position, + ); + }); + + if overlay_bounds.contains(cursor_position) { + overlay_interaction + } else { + base_interaction + } + }, + ) }) .unwrap_or(base_interaction) } diff --git a/native/src/widget.rs b/native/src/widget.rs index d1619bf3..30405346 100644 --- a/native/src/widget.rs +++ b/native/src/widget.rs @@ -179,6 +179,7 @@ where _layout: Layout<'_>, _cursor_position: Point, _viewport: &Rectangle, + _renderer: &Renderer, ) -> mouse::Interaction { mouse::Interaction::Idle } @@ -187,6 +188,7 @@ where fn overlay( &mut self, _layout: Layout<'_>, + _renderer: &Renderer, ) -> Option<overlay::Element<'_, Message, Renderer>> { None } diff --git a/native/src/widget/button.rs b/native/src/widget/button.rs index 686289e4..b4a3adc3 100644 --- a/native/src/widget/button.rs +++ b/native/src/widget/button.rs @@ -253,6 +253,7 @@ where layout: Layout<'_>, cursor_position: Point, _viewport: &Rectangle, + _renderer: &Renderer, ) -> mouse::Interaction { let is_mouse_over = layout.bounds().contains(cursor_position); let is_disabled = self.on_press.is_none(); @@ -343,8 +344,10 @@ where fn overlay( &mut self, layout: Layout<'_>, + renderer: &Renderer, ) -> Option<overlay::Element<'_, Message, Renderer>> { - self.content.overlay(layout.children().next().unwrap()) + self.content + .overlay(layout.children().next().unwrap(), renderer) } } diff --git a/native/src/widget/checkbox.rs b/native/src/widget/checkbox.rs index 95856928..a314140c 100644 --- a/native/src/widget/checkbox.rs +++ b/native/src/widget/checkbox.rs @@ -195,6 +195,7 @@ where layout: Layout<'_>, cursor_position: Point, _viewport: &Rectangle, + _renderer: &Renderer, ) -> mouse::Interaction { if layout.bounds().contains(cursor_position) { mouse::Interaction::Pointer diff --git a/native/src/widget/column.rs b/native/src/widget/column.rs index 4c43c8c8..66ed5e23 100644 --- a/native/src/widget/column.rs +++ b/native/src/widget/column.rs @@ -169,6 +169,7 @@ where layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, + renderer: &Renderer, ) -> mouse::Interaction { self.children .iter() @@ -178,6 +179,7 @@ where layout, cursor_position, viewport, + renderer, ) }) .max() @@ -217,11 +219,14 @@ where fn overlay( &mut self, layout: Layout<'_>, + renderer: &Renderer, ) -> Option<overlay::Element<'_, Message, Renderer>> { self.children .iter_mut() .zip(layout.children()) - .filter_map(|(child, layout)| child.widget.overlay(layout)) + .filter_map(|(child, layout)| { + child.widget.overlay(layout, renderer) + }) .next() } } diff --git a/native/src/widget/container.rs b/native/src/widget/container.rs index 0c291788..4444732a 100644 --- a/native/src/widget/container.rs +++ b/native/src/widget/container.rs @@ -184,11 +184,13 @@ where layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, + renderer: &Renderer, ) -> mouse::Interaction { self.content.widget.mouse_interaction( layout.children().next().unwrap(), cursor_position, viewport, + renderer, ) } @@ -235,8 +237,10 @@ where fn overlay( &mut self, layout: Layout<'_>, + renderer: &Renderer, ) -> Option<overlay::Element<'_, Message, Renderer>> { - self.content.overlay(layout.children().next().unwrap()) + self.content + .overlay(layout.children().next().unwrap(), renderer) } } diff --git a/native/src/widget/image/viewer.rs b/native/src/widget/image/viewer.rs index 645ce852..486d5fa5 100644 --- a/native/src/widget/image/viewer.rs +++ b/native/src/widget/image/viewer.rs @@ -286,6 +286,7 @@ where layout: Layout<'_>, cursor_position: Point, _viewport: &Rectangle, + _renderer: &Renderer, ) -> mouse::Interaction { let bounds = layout.bounds(); let is_mouse_over = bounds.contains(cursor_position); diff --git a/native/src/widget/pane_grid.rs b/native/src/widget/pane_grid.rs index b3d8b819..5f293fa6 100644 --- a/native/src/widget/pane_grid.rs +++ b/native/src/widget/pane_grid.rs @@ -472,6 +472,7 @@ where layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, + renderer: &Renderer, ) -> mouse::Interaction { if self.state.picked_pane().is_some() { return mouse::Interaction::Grab; @@ -511,7 +512,12 @@ where .iter() .zip(layout.children()) .map(|((_pane, content), layout)| { - content.mouse_interaction(layout, cursor_position, viewport) + content.mouse_interaction( + layout, + cursor_position, + viewport, + renderer, + ) }) .max() .unwrap_or_default() @@ -678,11 +684,12 @@ where fn overlay( &mut self, layout: Layout<'_>, + renderer: &Renderer, ) -> Option<overlay::Element<'_, Message, Renderer>> { self.elements .iter_mut() .zip(layout.children()) - .filter_map(|((_, pane), layout)| pane.overlay(layout)) + .filter_map(|((_, pane), layout)| pane.overlay(layout, renderer)) .next() } } diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs index 533827b7..6d12aa2d 100644 --- a/native/src/widget/pane_grid/content.rs +++ b/native/src/widget/pane_grid/content.rs @@ -205,6 +205,7 @@ where layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, + renderer: &Renderer, ) -> mouse::Interaction { let (body_layout, title_bar_interaction) = if let Some(title_bar) = &self.title_bar { @@ -222,6 +223,7 @@ where title_bar_layout, cursor_position, viewport, + renderer, ); (children.next().unwrap(), mouse_interaction) @@ -230,7 +232,7 @@ where }; self.body - .mouse_interaction(body_layout, cursor_position, viewport) + .mouse_interaction(body_layout, cursor_position, viewport, renderer) .max(title_bar_interaction) } @@ -245,17 +247,18 @@ where pub(crate) fn overlay( &mut self, layout: Layout<'_>, + renderer: &Renderer, ) -> Option<overlay::Element<'_, Message, Renderer>> { if let Some(title_bar) = self.title_bar.as_mut() { let mut children = layout.children(); let title_bar_layout = children.next()?; - match title_bar.overlay(title_bar_layout) { + match title_bar.overlay(title_bar_layout, renderer) { Some(overlay) => Some(overlay), - None => self.body.overlay(children.next()?), + None => self.body.overlay(children.next()?, renderer), } } else { - self.body.overlay(layout) + self.body.overlay(layout, renderer) } } } diff --git a/native/src/widget/pane_grid/title_bar.rs b/native/src/widget/pane_grid/title_bar.rs index 353e1ce9..ea9ebfc4 100644 --- a/native/src/widget/pane_grid/title_bar.rs +++ b/native/src/widget/pane_grid/title_bar.rs @@ -258,6 +258,7 @@ where layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, + renderer: &Renderer, ) -> mouse::Interaction { let mut children = layout.children(); let padded = children.next().unwrap(); @@ -269,13 +270,19 @@ where title_layout, cursor_position, viewport, + renderer, ); if let Some(controls) = &self.controls { let controls_layout = children.next().unwrap(); controls - .mouse_interaction(controls_layout, cursor_position, viewport) + .mouse_interaction( + controls_layout, + cursor_position, + viewport, + renderer, + ) .max(title_interaction) } else { title_interaction @@ -285,6 +292,7 @@ where pub(crate) fn overlay( &mut self, layout: Layout<'_>, + renderer: &Renderer, ) -> Option<overlay::Element<'_, Message, Renderer>> { let mut children = layout.children(); let padded = children.next()?; @@ -296,11 +304,11 @@ where content, controls, .. } = self; - content.overlay(title_layout).or_else(move || { + content.overlay(title_layout, renderer).or_else(move || { controls.as_mut().and_then(|controls| { let controls_layout = children.next()?; - controls.overlay(controls_layout) + controls.overlay(controls_layout, renderer) }) }) } diff --git a/native/src/widget/pick_list.rs b/native/src/widget/pick_list.rs index 1f79e07a..a200fb13 100644 --- a/native/src/widget/pick_list.rs +++ b/native/src/widget/pick_list.rs @@ -331,6 +331,7 @@ where layout: Layout<'_>, cursor_position: Point, _viewport: &Rectangle, + _renderer: &Renderer, ) -> mouse::Interaction { let bounds = layout.bounds(); let is_mouse_over = bounds.contains(cursor_position); @@ -415,6 +416,7 @@ where fn overlay( &mut self, layout: Layout<'_>, + _renderer: &Renderer, ) -> Option<overlay::Element<'_, Message, Renderer>> { if *self.is_open { let bounds = layout.bounds(); diff --git a/native/src/widget/radio.rs b/native/src/widget/radio.rs index 1dbe7cf5..c6cc46ed 100644 --- a/native/src/widget/radio.rs +++ b/native/src/widget/radio.rs @@ -209,6 +209,7 @@ where layout: Layout<'_>, cursor_position: Point, _viewport: &Rectangle, + _renderer: &Renderer, ) -> mouse::Interaction { if layout.bounds().contains(cursor_position) { mouse::Interaction::Pointer diff --git a/native/src/widget/row.rs b/native/src/widget/row.rs index a0174f79..c423d31f 100644 --- a/native/src/widget/row.rs +++ b/native/src/widget/row.rs @@ -168,6 +168,7 @@ where layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, + renderer: &Renderer, ) -> mouse::Interaction { self.children .iter() @@ -177,6 +178,7 @@ where layout, cursor_position, viewport, + renderer, ) }) .max() @@ -216,11 +218,14 @@ where fn overlay( &mut self, layout: Layout<'_>, + renderer: &Renderer, ) -> Option<overlay::Element<'_, Message, Renderer>> { self.children .iter_mut() .zip(layout.children()) - .filter_map(|(child, layout)| child.widget.overlay(layout)) + .filter_map(|(child, layout)| { + child.widget.overlay(layout, renderer) + }) .next() } } diff --git a/native/src/widget/scrollable.rs b/native/src/widget/scrollable.rs index 3ef737c0..4b005c6b 100644 --- a/native/src/widget/scrollable.rs +++ b/native/src/widget/scrollable.rs @@ -427,6 +427,7 @@ where layout: Layout<'_>, cursor_position: Point, _viewport: &Rectangle, + renderer: &Renderer, ) -> mouse::Interaction { let bounds = layout.bounds(); let content_layout = layout.children().next().unwrap(); @@ -457,6 +458,7 @@ where y: bounds.y + offset as f32, ..bounds }, + renderer, ) } } @@ -581,11 +583,12 @@ where fn overlay( &mut self, layout: Layout<'_>, + renderer: &Renderer, ) -> Option<overlay::Element<'_, Message, Renderer>> { let Self { content, state, .. } = self; content - .overlay(layout.children().next().unwrap()) + .overlay(layout.children().next().unwrap(), renderer) .map(|overlay| { let bounds = layout.bounds(); let content_layout = layout.children().next().unwrap(); diff --git a/native/src/widget/slider.rs b/native/src/widget/slider.rs index 65632a5c..917bfc14 100644 --- a/native/src/widget/slider.rs +++ b/native/src/widget/slider.rs @@ -361,6 +361,7 @@ where layout: Layout<'_>, cursor_position: Point, _viewport: &Rectangle, + _renderer: &Renderer, ) -> mouse::Interaction { let bounds = layout.bounds(); let is_mouse_over = bounds.contains(cursor_position); diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs index f06b6aa6..03adeb12 100644 --- a/native/src/widget/text_input.rs +++ b/native/src/widget/text_input.rs @@ -764,6 +764,7 @@ where layout: Layout<'_>, cursor_position: Point, _viewport: &Rectangle, + _renderer: &Renderer, ) -> mouse::Interaction { if layout.bounds().contains(cursor_position) { mouse::Interaction::Text diff --git a/native/src/widget/toggler.rs b/native/src/widget/toggler.rs index 7eca58d2..002e0a4f 100644 --- a/native/src/widget/toggler.rs +++ b/native/src/widget/toggler.rs @@ -196,6 +196,7 @@ where layout: Layout<'_>, cursor_position: Point, _viewport: &Rectangle, + _renderer: &Renderer, ) -> mouse::Interaction { if layout.bounds().contains(cursor_position) { mouse::Interaction::Pointer diff --git a/native/src/widget/tooltip.rs b/native/src/widget/tooltip.rs index 79a57824..f6630864 100644 --- a/native/src/widget/tooltip.rs +++ b/native/src/widget/tooltip.rs @@ -147,9 +147,14 @@ where layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, + renderer: &Renderer, ) -> mouse::Interaction { - self.content - .mouse_interaction(layout, cursor_position, viewport) + self.content.mouse_interaction( + layout, + cursor_position, + viewport, + renderer, + ) } fn draw( |