Introduce Renderer argument to mouse_interaction and on_event
This commit is contained in:
parent
6ab4611a6e
commit
810e086728
24 changed files with 165 additions and 58 deletions
|
|
@ -193,6 +193,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
_viewport: &Rectangle,
|
_viewport: &Rectangle,
|
||||||
|
_renderer: &Renderer<B>,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
let bounds = layout.bounds();
|
let bounds = layout.bounds();
|
||||||
let cursor = Cursor::from_window_position(cursor_position);
|
let cursor = Cursor::from_window_position(cursor_position);
|
||||||
|
|
|
||||||
|
|
@ -214,15 +214,22 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
self.with_element(|element| {
|
self.with_element(|element| {
|
||||||
element.mouse_interaction(layout, cursor_position, viewport)
|
element.mouse_interaction(
|
||||||
|
layout,
|
||||||
|
cursor_position,
|
||||||
|
viewport,
|
||||||
|
renderer,
|
||||||
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn overlay(
|
fn overlay(
|
||||||
&mut self,
|
&mut self,
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
||||||
let has_overlay = self
|
let has_overlay = self
|
||||||
.state
|
.state
|
||||||
|
|
@ -236,7 +243,9 @@ where
|
||||||
CacheBuilder {
|
CacheBuilder {
|
||||||
element,
|
element,
|
||||||
message: PhantomData,
|
message: PhantomData,
|
||||||
overlay_builder: |element| element.overlay(layout),
|
overlay_builder: |element| {
|
||||||
|
element.overlay(layout, renderer)
|
||||||
|
},
|
||||||
}
|
}
|
||||||
.build(),
|
.build(),
|
||||||
);
|
);
|
||||||
|
|
@ -331,9 +340,15 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
self.with_overlay_maybe(|overlay| {
|
self.with_overlay_maybe(|overlay| {
|
||||||
overlay.mouse_interaction(layout, cursor_position, viewport)
|
overlay.mouse_interaction(
|
||||||
|
layout,
|
||||||
|
cursor_position,
|
||||||
|
viewport,
|
||||||
|
renderer,
|
||||||
|
)
|
||||||
})
|
})
|
||||||
.unwrap_or_default()
|
.unwrap_or_default()
|
||||||
}
|
}
|
||||||
|
|
@ -397,7 +412,7 @@ where
|
||||||
element: state.view(),
|
element: state.view(),
|
||||||
message: PhantomData,
|
message: PhantomData,
|
||||||
overlay_builder: |element| {
|
overlay_builder: |element| {
|
||||||
element.overlay(layout)
|
element.overlay(layout, renderer)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
.build(),
|
.build(),
|
||||||
|
|
|
||||||
|
|
@ -259,9 +259,14 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
self.widget
|
self.widget.mouse_interaction(
|
||||||
.mouse_interaction(layout, cursor_position, viewport)
|
layout,
|
||||||
|
cursor_position,
|
||||||
|
viewport,
|
||||||
|
renderer,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Computes the _layout_ hash of the [`Element`].
|
/// Computes the _layout_ hash of the [`Element`].
|
||||||
|
|
@ -273,8 +278,9 @@ where
|
||||||
pub fn overlay<'b>(
|
pub fn overlay<'b>(
|
||||||
&'b mut self,
|
&'b mut self,
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> Option<overlay::Element<'b, Message, Renderer>> {
|
) -> Option<overlay::Element<'b, Message, Renderer>> {
|
||||||
self.widget.overlay(layout)
|
self.widget.overlay(layout, renderer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -363,9 +369,14 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
self.widget
|
self.widget.mouse_interaction(
|
||||||
.mouse_interaction(layout, cursor_position, viewport)
|
layout,
|
||||||
|
cursor_position,
|
||||||
|
viewport,
|
||||||
|
renderer,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn hash_layout(&self, state: &mut Hasher) {
|
fn hash_layout(&self, state: &mut Hasher) {
|
||||||
|
|
@ -375,11 +386,12 @@ where
|
||||||
fn overlay(
|
fn overlay(
|
||||||
&mut self,
|
&mut self,
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> Option<overlay::Element<'_, B, Renderer>> {
|
) -> Option<overlay::Element<'_, B, Renderer>> {
|
||||||
let mapper = &self.mapper;
|
let mapper = &self.mapper;
|
||||||
|
|
||||||
self.widget
|
self.widget
|
||||||
.overlay(layout)
|
.overlay(layout, renderer)
|
||||||
.map(move |overlay| overlay.map(mapper))
|
.map(move |overlay| overlay.map(mapper))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -482,10 +494,14 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
self.element
|
self.element.widget.mouse_interaction(
|
||||||
.widget
|
layout,
|
||||||
.mouse_interaction(layout, cursor_position, viewport)
|
cursor_position,
|
||||||
|
viewport,
|
||||||
|
renderer,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn hash_layout(&self, state: &mut Hasher) {
|
fn hash_layout(&self, state: &mut Hasher) {
|
||||||
|
|
@ -495,7 +511,8 @@ where
|
||||||
fn overlay(
|
fn overlay(
|
||||||
&mut self,
|
&mut self,
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
||||||
self.element.overlay(layout)
|
self.element.overlay(layout, renderer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,7 @@ where
|
||||||
_layout: Layout<'_>,
|
_layout: Layout<'_>,
|
||||||
_cursor_position: Point,
|
_cursor_position: Point,
|
||||||
_viewport: &Rectangle,
|
_viewport: &Rectangle,
|
||||||
|
_renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
mouse::Interaction::Idle
|
mouse::Interaction::Idle
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -80,9 +80,14 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
self.overlay
|
self.overlay.mouse_interaction(
|
||||||
.mouse_interaction(layout, cursor_position, viewport)
|
layout,
|
||||||
|
cursor_position,
|
||||||
|
viewport,
|
||||||
|
renderer,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Draws the [`Element`] and its children using the given [`Layout`].
|
/// Draws the [`Element`] and its children using the given [`Layout`].
|
||||||
|
|
@ -160,9 +165,14 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
self.content
|
self.content.mouse_interaction(
|
||||||
.mouse_interaction(layout, cursor_position, viewport)
|
layout,
|
||||||
|
cursor_position,
|
||||||
|
viewport,
|
||||||
|
renderer,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw(
|
fn draw(
|
||||||
|
|
|
||||||
|
|
@ -239,9 +239,14 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
self.container
|
self.container.mouse_interaction(
|
||||||
.mouse_interaction(layout, cursor_position, viewport)
|
layout,
|
||||||
|
cursor_position,
|
||||||
|
viewport,
|
||||||
|
renderer,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw(
|
fn draw(
|
||||||
|
|
@ -392,6 +397,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
_viewport: &Rectangle,
|
_viewport: &Rectangle,
|
||||||
|
_renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
let is_mouse_over = layout.bounds().contains(cursor_position);
|
let is_mouse_over = layout.bounds().contains(cursor_position);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -205,7 +205,7 @@ where
|
||||||
let mut state = State::Updated;
|
let mut state = State::Updated;
|
||||||
|
|
||||||
let (base_cursor, overlay_statuses) = if let Some(mut overlay) =
|
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;
|
let bounds = self.bounds;
|
||||||
|
|
||||||
|
|
@ -391,7 +391,7 @@ where
|
||||||
let viewport = Rectangle::with_size(self.bounds);
|
let viewport = Rectangle::with_size(self.bounds);
|
||||||
|
|
||||||
if let Some(mut overlay) =
|
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(
|
let layer = Self::overlay_layer(
|
||||||
self.overlay.take(),
|
self.overlay.take(),
|
||||||
|
|
@ -432,6 +432,7 @@ where
|
||||||
Layout::new(&self.base.layout),
|
Layout::new(&self.base.layout),
|
||||||
cursor_position,
|
cursor_position,
|
||||||
&viewport,
|
&viewport,
|
||||||
|
renderer,
|
||||||
);
|
);
|
||||||
|
|
||||||
let Self {
|
let Self {
|
||||||
|
|
@ -449,30 +450,33 @@ where
|
||||||
overlay
|
overlay
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.and_then(|layer| {
|
.and_then(|layer| {
|
||||||
root.overlay(Layout::new(&base.layout)).map(|overlay| {
|
root.overlay(Layout::new(&base.layout), renderer).map(
|
||||||
let overlay_interaction = overlay.mouse_interaction(
|
|overlay| {
|
||||||
Layout::new(&layer.layout),
|
let overlay_interaction = overlay.mouse_interaction(
|
||||||
cursor_position,
|
|
||||||
&viewport,
|
|
||||||
);
|
|
||||||
|
|
||||||
let overlay_bounds = layer.layout.bounds();
|
|
||||||
|
|
||||||
renderer.with_layer(overlay_bounds, |renderer| {
|
|
||||||
overlay.draw(
|
|
||||||
renderer,
|
|
||||||
&renderer::Style::default(),
|
|
||||||
Layout::new(&layer.layout),
|
Layout::new(&layer.layout),
|
||||||
cursor_position,
|
cursor_position,
|
||||||
|
&viewport,
|
||||||
|
renderer,
|
||||||
);
|
);
|
||||||
});
|
|
||||||
|
|
||||||
if overlay_bounds.contains(cursor_position) {
|
let overlay_bounds = layer.layout.bounds();
|
||||||
overlay_interaction
|
|
||||||
} else {
|
renderer.with_layer(overlay_bounds, |renderer| {
|
||||||
base_interaction
|
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)
|
.unwrap_or(base_interaction)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -179,6 +179,7 @@ where
|
||||||
_layout: Layout<'_>,
|
_layout: Layout<'_>,
|
||||||
_cursor_position: Point,
|
_cursor_position: Point,
|
||||||
_viewport: &Rectangle,
|
_viewport: &Rectangle,
|
||||||
|
_renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
mouse::Interaction::Idle
|
mouse::Interaction::Idle
|
||||||
}
|
}
|
||||||
|
|
@ -187,6 +188,7 @@ where
|
||||||
fn overlay(
|
fn overlay(
|
||||||
&mut self,
|
&mut self,
|
||||||
_layout: Layout<'_>,
|
_layout: Layout<'_>,
|
||||||
|
_renderer: &Renderer,
|
||||||
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -253,6 +253,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
_viewport: &Rectangle,
|
_viewport: &Rectangle,
|
||||||
|
_renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
let is_mouse_over = layout.bounds().contains(cursor_position);
|
let is_mouse_over = layout.bounds().contains(cursor_position);
|
||||||
let is_disabled = self.on_press.is_none();
|
let is_disabled = self.on_press.is_none();
|
||||||
|
|
@ -343,8 +344,10 @@ where
|
||||||
fn overlay(
|
fn overlay(
|
||||||
&mut self,
|
&mut self,
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
||||||
self.content.overlay(layout.children().next().unwrap())
|
self.content
|
||||||
|
.overlay(layout.children().next().unwrap(), renderer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -195,6 +195,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
_viewport: &Rectangle,
|
_viewport: &Rectangle,
|
||||||
|
_renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
if layout.bounds().contains(cursor_position) {
|
if layout.bounds().contains(cursor_position) {
|
||||||
mouse::Interaction::Pointer
|
mouse::Interaction::Pointer
|
||||||
|
|
|
||||||
|
|
@ -169,6 +169,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
self.children
|
self.children
|
||||||
.iter()
|
.iter()
|
||||||
|
|
@ -178,6 +179,7 @@ where
|
||||||
layout,
|
layout,
|
||||||
cursor_position,
|
cursor_position,
|
||||||
viewport,
|
viewport,
|
||||||
|
renderer,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
.max()
|
.max()
|
||||||
|
|
@ -217,11 +219,14 @@ where
|
||||||
fn overlay(
|
fn overlay(
|
||||||
&mut self,
|
&mut self,
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
||||||
self.children
|
self.children
|
||||||
.iter_mut()
|
.iter_mut()
|
||||||
.zip(layout.children())
|
.zip(layout.children())
|
||||||
.filter_map(|(child, layout)| child.widget.overlay(layout))
|
.filter_map(|(child, layout)| {
|
||||||
|
child.widget.overlay(layout, renderer)
|
||||||
|
})
|
||||||
.next()
|
.next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -184,11 +184,13 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
self.content.widget.mouse_interaction(
|
self.content.widget.mouse_interaction(
|
||||||
layout.children().next().unwrap(),
|
layout.children().next().unwrap(),
|
||||||
cursor_position,
|
cursor_position,
|
||||||
viewport,
|
viewport,
|
||||||
|
renderer,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -235,8 +237,10 @@ where
|
||||||
fn overlay(
|
fn overlay(
|
||||||
&mut self,
|
&mut self,
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
||||||
self.content.overlay(layout.children().next().unwrap())
|
self.content
|
||||||
|
.overlay(layout.children().next().unwrap(), renderer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -286,6 +286,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
_viewport: &Rectangle,
|
_viewport: &Rectangle,
|
||||||
|
_renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
let bounds = layout.bounds();
|
let bounds = layout.bounds();
|
||||||
let is_mouse_over = bounds.contains(cursor_position);
|
let is_mouse_over = bounds.contains(cursor_position);
|
||||||
|
|
|
||||||
|
|
@ -472,6 +472,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
if self.state.picked_pane().is_some() {
|
if self.state.picked_pane().is_some() {
|
||||||
return mouse::Interaction::Grab;
|
return mouse::Interaction::Grab;
|
||||||
|
|
@ -511,7 +512,12 @@ where
|
||||||
.iter()
|
.iter()
|
||||||
.zip(layout.children())
|
.zip(layout.children())
|
||||||
.map(|((_pane, content), layout)| {
|
.map(|((_pane, content), layout)| {
|
||||||
content.mouse_interaction(layout, cursor_position, viewport)
|
content.mouse_interaction(
|
||||||
|
layout,
|
||||||
|
cursor_position,
|
||||||
|
viewport,
|
||||||
|
renderer,
|
||||||
|
)
|
||||||
})
|
})
|
||||||
.max()
|
.max()
|
||||||
.unwrap_or_default()
|
.unwrap_or_default()
|
||||||
|
|
@ -678,11 +684,12 @@ where
|
||||||
fn overlay(
|
fn overlay(
|
||||||
&mut self,
|
&mut self,
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
||||||
self.elements
|
self.elements
|
||||||
.iter_mut()
|
.iter_mut()
|
||||||
.zip(layout.children())
|
.zip(layout.children())
|
||||||
.filter_map(|((_, pane), layout)| pane.overlay(layout))
|
.filter_map(|((_, pane), layout)| pane.overlay(layout, renderer))
|
||||||
.next()
|
.next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -205,6 +205,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
let (body_layout, title_bar_interaction) =
|
let (body_layout, title_bar_interaction) =
|
||||||
if let Some(title_bar) = &self.title_bar {
|
if let Some(title_bar) = &self.title_bar {
|
||||||
|
|
@ -222,6 +223,7 @@ where
|
||||||
title_bar_layout,
|
title_bar_layout,
|
||||||
cursor_position,
|
cursor_position,
|
||||||
viewport,
|
viewport,
|
||||||
|
renderer,
|
||||||
);
|
);
|
||||||
|
|
||||||
(children.next().unwrap(), mouse_interaction)
|
(children.next().unwrap(), mouse_interaction)
|
||||||
|
|
@ -230,7 +232,7 @@ where
|
||||||
};
|
};
|
||||||
|
|
||||||
self.body
|
self.body
|
||||||
.mouse_interaction(body_layout, cursor_position, viewport)
|
.mouse_interaction(body_layout, cursor_position, viewport, renderer)
|
||||||
.max(title_bar_interaction)
|
.max(title_bar_interaction)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -245,17 +247,18 @@ where
|
||||||
pub(crate) fn overlay(
|
pub(crate) fn overlay(
|
||||||
&mut self,
|
&mut self,
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
||||||
if let Some(title_bar) = self.title_bar.as_mut() {
|
if let Some(title_bar) = self.title_bar.as_mut() {
|
||||||
let mut children = layout.children();
|
let mut children = layout.children();
|
||||||
let title_bar_layout = children.next()?;
|
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),
|
Some(overlay) => Some(overlay),
|
||||||
None => self.body.overlay(children.next()?),
|
None => self.body.overlay(children.next()?, renderer),
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
self.body.overlay(layout)
|
self.body.overlay(layout, renderer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -258,6 +258,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
let mut children = layout.children();
|
let mut children = layout.children();
|
||||||
let padded = children.next().unwrap();
|
let padded = children.next().unwrap();
|
||||||
|
|
@ -269,13 +270,19 @@ where
|
||||||
title_layout,
|
title_layout,
|
||||||
cursor_position,
|
cursor_position,
|
||||||
viewport,
|
viewport,
|
||||||
|
renderer,
|
||||||
);
|
);
|
||||||
|
|
||||||
if let Some(controls) = &self.controls {
|
if let Some(controls) = &self.controls {
|
||||||
let controls_layout = children.next().unwrap();
|
let controls_layout = children.next().unwrap();
|
||||||
|
|
||||||
controls
|
controls
|
||||||
.mouse_interaction(controls_layout, cursor_position, viewport)
|
.mouse_interaction(
|
||||||
|
controls_layout,
|
||||||
|
cursor_position,
|
||||||
|
viewport,
|
||||||
|
renderer,
|
||||||
|
)
|
||||||
.max(title_interaction)
|
.max(title_interaction)
|
||||||
} else {
|
} else {
|
||||||
title_interaction
|
title_interaction
|
||||||
|
|
@ -285,6 +292,7 @@ where
|
||||||
pub(crate) fn overlay(
|
pub(crate) fn overlay(
|
||||||
&mut self,
|
&mut self,
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
||||||
let mut children = layout.children();
|
let mut children = layout.children();
|
||||||
let padded = children.next()?;
|
let padded = children.next()?;
|
||||||
|
|
@ -296,11 +304,11 @@ where
|
||||||
content, controls, ..
|
content, controls, ..
|
||||||
} = self;
|
} = self;
|
||||||
|
|
||||||
content.overlay(title_layout).or_else(move || {
|
content.overlay(title_layout, renderer).or_else(move || {
|
||||||
controls.as_mut().and_then(|controls| {
|
controls.as_mut().and_then(|controls| {
|
||||||
let controls_layout = children.next()?;
|
let controls_layout = children.next()?;
|
||||||
|
|
||||||
controls.overlay(controls_layout)
|
controls.overlay(controls_layout, renderer)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -331,6 +331,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
_viewport: &Rectangle,
|
_viewport: &Rectangle,
|
||||||
|
_renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
let bounds = layout.bounds();
|
let bounds = layout.bounds();
|
||||||
let is_mouse_over = bounds.contains(cursor_position);
|
let is_mouse_over = bounds.contains(cursor_position);
|
||||||
|
|
@ -415,6 +416,7 @@ where
|
||||||
fn overlay(
|
fn overlay(
|
||||||
&mut self,
|
&mut self,
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
|
_renderer: &Renderer,
|
||||||
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
||||||
if *self.is_open {
|
if *self.is_open {
|
||||||
let bounds = layout.bounds();
|
let bounds = layout.bounds();
|
||||||
|
|
|
||||||
|
|
@ -209,6 +209,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
_viewport: &Rectangle,
|
_viewport: &Rectangle,
|
||||||
|
_renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
if layout.bounds().contains(cursor_position) {
|
if layout.bounds().contains(cursor_position) {
|
||||||
mouse::Interaction::Pointer
|
mouse::Interaction::Pointer
|
||||||
|
|
|
||||||
|
|
@ -168,6 +168,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
self.children
|
self.children
|
||||||
.iter()
|
.iter()
|
||||||
|
|
@ -177,6 +178,7 @@ where
|
||||||
layout,
|
layout,
|
||||||
cursor_position,
|
cursor_position,
|
||||||
viewport,
|
viewport,
|
||||||
|
renderer,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
.max()
|
.max()
|
||||||
|
|
@ -216,11 +218,14 @@ where
|
||||||
fn overlay(
|
fn overlay(
|
||||||
&mut self,
|
&mut self,
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
||||||
self.children
|
self.children
|
||||||
.iter_mut()
|
.iter_mut()
|
||||||
.zip(layout.children())
|
.zip(layout.children())
|
||||||
.filter_map(|(child, layout)| child.widget.overlay(layout))
|
.filter_map(|(child, layout)| {
|
||||||
|
child.widget.overlay(layout, renderer)
|
||||||
|
})
|
||||||
.next()
|
.next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -427,6 +427,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
_viewport: &Rectangle,
|
_viewport: &Rectangle,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
let bounds = layout.bounds();
|
let bounds = layout.bounds();
|
||||||
let content_layout = layout.children().next().unwrap();
|
let content_layout = layout.children().next().unwrap();
|
||||||
|
|
@ -457,6 +458,7 @@ where
|
||||||
y: bounds.y + offset as f32,
|
y: bounds.y + offset as f32,
|
||||||
..bounds
|
..bounds
|
||||||
},
|
},
|
||||||
|
renderer,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -581,11 +583,12 @@ where
|
||||||
fn overlay(
|
fn overlay(
|
||||||
&mut self,
|
&mut self,
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
) -> Option<overlay::Element<'_, Message, Renderer>> {
|
||||||
let Self { content, state, .. } = self;
|
let Self { content, state, .. } = self;
|
||||||
|
|
||||||
content
|
content
|
||||||
.overlay(layout.children().next().unwrap())
|
.overlay(layout.children().next().unwrap(), renderer)
|
||||||
.map(|overlay| {
|
.map(|overlay| {
|
||||||
let bounds = layout.bounds();
|
let bounds = layout.bounds();
|
||||||
let content_layout = layout.children().next().unwrap();
|
let content_layout = layout.children().next().unwrap();
|
||||||
|
|
|
||||||
|
|
@ -361,6 +361,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
_viewport: &Rectangle,
|
_viewport: &Rectangle,
|
||||||
|
_renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
let bounds = layout.bounds();
|
let bounds = layout.bounds();
|
||||||
let is_mouse_over = bounds.contains(cursor_position);
|
let is_mouse_over = bounds.contains(cursor_position);
|
||||||
|
|
|
||||||
|
|
@ -764,6 +764,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
_viewport: &Rectangle,
|
_viewport: &Rectangle,
|
||||||
|
_renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
if layout.bounds().contains(cursor_position) {
|
if layout.bounds().contains(cursor_position) {
|
||||||
mouse::Interaction::Text
|
mouse::Interaction::Text
|
||||||
|
|
|
||||||
|
|
@ -196,6 +196,7 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
_viewport: &Rectangle,
|
_viewport: &Rectangle,
|
||||||
|
_renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
if layout.bounds().contains(cursor_position) {
|
if layout.bounds().contains(cursor_position) {
|
||||||
mouse::Interaction::Pointer
|
mouse::Interaction::Pointer
|
||||||
|
|
|
||||||
|
|
@ -147,9 +147,14 @@ where
|
||||||
layout: Layout<'_>,
|
layout: Layout<'_>,
|
||||||
cursor_position: Point,
|
cursor_position: Point,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
self.content
|
self.content.mouse_interaction(
|
||||||
.mouse_interaction(layout, cursor_position, viewport)
|
layout,
|
||||||
|
cursor_position,
|
||||||
|
viewport,
|
||||||
|
renderer,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw(
|
fn draw(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue