feat: add drag_destinations for container widgets

This commit is contained in:
Ashley Wulber 2024-04-01 16:12:45 -04:00 committed by Michael Murphy
parent b9cc88c492
commit 745cba1c2c
5 changed files with 72 additions and 1 deletions

View file

@ -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> {

View file

@ -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> {

View file

@ -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> {

View file

@ -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>>

View file

@ -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>>