feat: add drag_destinations for container widgets
This commit is contained in:
parent
b9cc88c492
commit
745cba1c2c
5 changed files with 72 additions and 1 deletions
|
|
@ -198,6 +198,23 @@ impl<'a, Message: 'static + Clone> Widget<Message, crate::Theme, Renderer>
|
|||
.map(|((c, c_layout), state)| c.as_widget().a11y_nodes(c_layout, state, p)),
|
||||
)
|
||||
}
|
||||
|
||||
fn drag_destinations(
|
||||
&self,
|
||||
state: &Tree,
|
||||
layout: Layout<'_>,
|
||||
dnd_rectangles: &mut iced_style::core::clipboard::DndDestinationRectangles,
|
||||
) {
|
||||
for ((e, layout), state) in self
|
||||
.children
|
||||
.iter()
|
||||
.zip(layout.children())
|
||||
.zip(state.children.iter())
|
||||
{
|
||||
e.as_widget()
|
||||
.drag_destinations(state, layout, dnd_rectangles);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, Message: 'static + Clone> From<FlexRow<'a, Message>> for Element<'a, Message> {
|
||||
|
|
|
|||
|
|
@ -263,6 +263,23 @@ impl<'a, Message: 'static + Clone> Widget<Message, crate::Theme, Renderer> for G
|
|||
.map(|((c, c_layout), state)| c.as_widget().a11y_nodes(c_layout, state, p)),
|
||||
)
|
||||
}
|
||||
|
||||
fn drag_destinations(
|
||||
&self,
|
||||
state: &Tree,
|
||||
layout: Layout<'_>,
|
||||
dnd_rectangles: &mut iced_style::core::clipboard::DndDestinationRectangles,
|
||||
) {
|
||||
for ((e, layout), state) in self
|
||||
.children
|
||||
.iter()
|
||||
.zip(layout.children())
|
||||
.zip(state.children.iter())
|
||||
{
|
||||
e.as_widget()
|
||||
.drag_destinations(state, layout, dnd_rectangles);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, Message: 'static + Clone> From<Grid<'a, Message>> for Element<'a, Message> {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
use crate::{ext::CollectionWidget, widget, Element};
|
||||
use apply::Apply;
|
||||
use derive_setters::Setters;
|
||||
use iced::{window, Length};
|
||||
use iced::Length;
|
||||
use iced_core::{widget::tree, Widget};
|
||||
use std::borrow::Cow;
|
||||
|
||||
|
|
@ -232,6 +232,23 @@ impl<'a, Message: Clone + 'static> Widget<Message, crate::Theme, crate::Renderer
|
|||
.as_widget_mut()
|
||||
.overlay(child_tree, child_layout, renderer)
|
||||
}
|
||||
|
||||
fn drag_destinations(
|
||||
&self,
|
||||
state: &tree::Tree,
|
||||
layout: iced_core::Layout<'_>,
|
||||
dnd_rectangles: &mut iced_style::core::clipboard::DndDestinationRectangles,
|
||||
) {
|
||||
if let Some((child_tree, child_layout)) =
|
||||
state.children.iter().zip(layout.children()).next()
|
||||
{
|
||||
self.header_bar_inner.as_widget().drag_destinations(
|
||||
child_tree,
|
||||
child_layout,
|
||||
dnd_rectangles,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, Message: Clone + 'static> HeaderBar<'a, Message> {
|
||||
|
|
|
|||
|
|
@ -251,6 +251,16 @@ where
|
|||
) -> Option<overlay::Element<'b, Message, Theme, Renderer>> {
|
||||
self.container.overlay(tree, layout, renderer)
|
||||
}
|
||||
|
||||
fn drag_destinations(
|
||||
&self,
|
||||
state: &Tree,
|
||||
layout: Layout<'_>,
|
||||
dnd_rectangles: &mut iced_style::core::clipboard::DndDestinationRectangles,
|
||||
) {
|
||||
self.container
|
||||
.drag_destinations(state, layout, dnd_rectangles);
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, Message, Theme, Renderer> From<LayerContainer<'a, Message, Theme, Renderer>>
|
||||
|
|
|
|||
|
|
@ -291,6 +291,16 @@ where
|
|||
) -> Option<overlay::Element<'b, Message, crate::Theme, Renderer>> {
|
||||
self.container.overlay(tree, layout, renderer)
|
||||
}
|
||||
|
||||
fn drag_destinations(
|
||||
&self,
|
||||
state: &Tree,
|
||||
layout: Layout<'_>,
|
||||
dnd_rectangles: &mut iced_style::core::clipboard::DndDestinationRectangles,
|
||||
) {
|
||||
self.container
|
||||
.drag_destinations(state, layout, dnd_rectangles);
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, Message, Renderer, I> From<RectangleTrackingContainer<'a, Message, Renderer, I>>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue