This commit is contained in:
Ashley Wulber 2024-04-04 19:56:24 -04:00 committed by Jeremy Soller
parent 94ee2c7a63
commit fa31f42cd8
4 changed files with 48 additions and 2 deletions

2
iced

@ -1 +1 @@
Subproject commit 745d8467647209a9929fe631b2ba784d9cd39832
Subproject commit 52187b687876d17fe95441cc27ff42af0a7e70b4

View file

@ -12,7 +12,7 @@ use iced_core::alignment;
use iced_core::event::{self, Event};
use iced_core::widget::{Operation, Tree};
use iced_core::{
layout, mouse, overlay as iced_overlay, renderer, Clipboard, Color, Layout, Length, Padding,
layout, mouse, overlay as iced_overlay, renderer, Clipboard, Layout, Length, Padding,
Rectangle, Shell, Widget,
};
@ -20,6 +20,7 @@ use iced_renderer::core::widget::OperationOutputWrapper;
#[must_use]
pub struct ContextDrawer<'a, Message> {
id: Option<iced_core::widget::Id>,
content: Element<'a, Message>,
drawer: Element<'a, Message>,
on_close: Option<Message>,
@ -80,6 +81,7 @@ impl<'a, Message: Clone + 'static> ContextDrawer<'a, Message> {
);
ContextDrawer {
id: None,
content: content.into(),
// XXX new limits do not exactly handle the max width well for containers
// XXX this is a hack to get around that
@ -99,6 +101,12 @@ impl<'a, Message: Clone + 'static> ContextDrawer<'a, Message> {
}
}
/// Sets the [`Id`] of the [`ContextDrawer`].
pub fn id(mut self, id: iced_core::widget::Id) -> Self {
self.id = Some(id);
self
}
// Optionally assigns message to `on_close` event.
pub fn on_close_maybe(mut self, message: Option<Message>) -> Self {
self.on_close = message;
@ -233,6 +241,25 @@ impl<'a, Message: Clone> Widget<Message, crate::Theme, Renderer> for ContextDraw
let c_state = &state.children[0];
self.content.as_widget().a11y_nodes(c_layout, c_state, p)
}
fn drag_destinations(
&self,
state: &Tree,
layout: Layout<'_>,
dnd_rectangles: &mut iced_core::clipboard::DndDestinationRectangles,
) {
self.content
.as_widget()
.drag_destinations(&state.children[0], layout, dnd_rectangles);
}
fn id(&self) -> Option<iced_core::widget::Id> {
self.id.clone()
}
fn set_id(&mut self, id: iced_core::widget::Id) {
self.id = Some(id);
}
}
impl<'a, Message: 'a + Clone> From<ContextDrawer<'a, Message>> for Element<'a, Message> {

View file

@ -261,6 +261,14 @@ where
self.container
.drag_destinations(state, layout, dnd_rectangles);
}
fn id(&self) -> Option<crate::widget::Id> {
Widget::id(&self.container)
}
fn set_id(&mut self, id: crate::widget::Id) {
self.container.set_id(id);
}
}
impl<'a, Message, Theme, Renderer> From<LayerContainer<'a, Message, Theme, Renderer>>

View file

@ -209,6 +209,17 @@ where
.overlay(&mut tree.children[0], layout, renderer)
}
}
fn drag_destinations(
&self,
tree: &Tree,
layout: Layout<'_>,
dnd_rectangles: &mut iced_core::clipboard::DndDestinationRectangles,
) {
self.content
.as_widget()
.drag_destinations(&tree.children[0], layout, dnd_rectangles);
}
}
impl<'a, Message, Renderer> From<Popover<'a, Message, Renderer>>