wip rebase updates

This commit is contained in:
Ashley Wulber 2026-02-10 15:37:41 -05:00
parent 86dcf8af6c
commit e10459fb37
68 changed files with 1776 additions and 1544 deletions

View file

@ -303,43 +303,43 @@ impl<Message: 'static> Widget<Message, crate::Theme, crate::Renderer>
}
fn layout(
&self,
&mut self,
tree: &mut Tree,
renderer: &crate::Renderer,
limits: &layout::Limits,
) -> layout::Node {
self.container
.as_widget()
.as_widget_mut()
.layout(&mut tree.children[0], renderer, limits)
}
fn operate(
&self,
&mut self,
tree: &mut Tree,
layout: layout::Layout<'_>,
renderer: &crate::Renderer,
operation: &mut dyn iced_core::widget::Operation<()>,
) {
self.container
.as_widget()
.as_widget_mut()
.operate(&mut tree.children[0], layout, renderer, operation);
}
#[allow(clippy::too_many_lines)]
fn on_event(
fn update(
&mut self,
tree: &mut Tree,
event: Event,
event: &Event,
layout: layout::Layout<'_>,
cursor: mouse::Cursor,
renderer: &crate::Renderer,
clipboard: &mut dyn Clipboard,
shell: &mut Shell<'_, Message>,
viewport: &Rectangle,
) -> event::Status {
let s = self.container.as_widget_mut().on_event(
) {
let s = self.container.as_widget_mut().update(
&mut tree.children[0],
event.clone(),
event,
layout,
cursor,
renderer,
@ -347,8 +347,8 @@ impl<Message: 'static> Widget<Message, crate::Theme, crate::Renderer>
shell,
viewport,
);
if matches!(s, event::Status::Captured) {
return event::Status::Captured;
if shell.is_event_captured() {
return;
}
let state = tree.state.downcast_mut::<State<()>>();
@ -367,23 +367,23 @@ impl<Message: 'static> Widget<Message, crate::Theme, crate::Renderer>
OfferEvent::Enter {
x, y, mime_types, ..
},
)) if id == Some(my_id) => {
)) if *id == Some(my_id) => {
if !self.mime_matches(&mime_types) {
log::trace!(
target: DND_DEST_LOG_TARGET,
"offer enter id={my_id:?} ignored (mimes={mime_types:?} not in {:?})",
self.mime_types
);
return event::Status::Ignored;
return;
}
log::trace!(
target: DND_DEST_LOG_TARGET,
"offer enter id={my_id:?} coords=({x},{y}) mimes={mime_types:?}"
);
if let Some(msg) = state.on_enter(
x,
y,
mime_types,
*x,
*y,
mime_types.clone(),
self.on_enter.as_ref().map(std::convert::AsRef::as_ref),
(),
) {
@ -391,13 +391,13 @@ impl<Message: 'static> Widget<Message, crate::Theme, crate::Renderer>
}
if self.forward_drag_as_cursor {
#[allow(clippy::cast_possible_truncation)]
let drag_cursor = mouse::Cursor::Available((x as f32, y as f32).into());
let drag_cursor = mouse::Cursor::Available((*x as f32, *y as f32).into());
let event = Event::Mouse(mouse::Event::CursorMoved {
position: drag_cursor.position().unwrap(),
});
self.container.as_widget_mut().on_event(
self.container.as_widget_mut().update(
&mut tree.children[0],
event,
&event,
layout,
drag_cursor,
renderer,
@ -406,7 +406,8 @@ impl<Message: 'static> Widget<Message, crate::Theme, crate::Renderer>
viewport,
);
}
return event::Status::Captured;
shell.capture_event();
return;
}
Event::Dnd(DndEvent::Offer(_, OfferEvent::Leave)) => {
log::trace!(
@ -423,9 +424,9 @@ impl<Message: 'static> Widget<Message, crate::Theme, crate::Renderer>
if self.forward_drag_as_cursor {
let drag_cursor = mouse::Cursor::Unavailable;
let event = Event::Mouse(mouse::Event::CursorLeft);
self.container.as_widget_mut().on_event(
self.container.as_widget_mut().update(
&mut tree.children[0],
event,
&event,
layout,
drag_cursor,
renderer,
@ -434,16 +435,16 @@ impl<Message: 'static> Widget<Message, crate::Theme, crate::Renderer>
viewport,
);
}
return event::Status::Ignored;
return;
}
Event::Dnd(DndEvent::Offer(id, OfferEvent::Motion { x, y })) if id == Some(my_id) => {
Event::Dnd(DndEvent::Offer(id, OfferEvent::Motion { x, y })) if *id == Some(my_id) => {
log::trace!(
target: DND_DEST_LOG_TARGET,
"offer motion id={my_id:?} coords=({x},{y})"
);
if let Some(msg) = state.on_motion(
x,
y,
*x,
*y,
self.on_motion.as_ref().map(std::convert::AsRef::as_ref),
self.on_enter.as_ref().map(std::convert::AsRef::as_ref),
(),
@ -453,13 +454,13 @@ impl<Message: 'static> Widget<Message, crate::Theme, crate::Renderer>
if self.forward_drag_as_cursor {
#[allow(clippy::cast_possible_truncation)]
let drag_cursor = mouse::Cursor::Available((x as f32, y as f32).into());
let drag_cursor = mouse::Cursor::Available((*x as f32, *y as f32).into());
let event = Event::Mouse(mouse::Event::CursorMoved {
position: drag_cursor.position().unwrap(),
});
self.container.as_widget_mut().on_event(
self.container.as_widget_mut().update(
&mut tree.children[0],
event,
&event,
layout,
drag_cursor,
renderer,
@ -468,7 +469,8 @@ impl<Message: 'static> Widget<Message, crate::Theme, crate::Renderer>
viewport,
);
}
return event::Status::Captured;
shell.capture_event();
return;
}
Event::Dnd(DndEvent::Offer(_, OfferEvent::LeaveDestination)) => {
log::trace!(
@ -481,9 +483,9 @@ impl<Message: 'static> Widget<Message, crate::Theme, crate::Renderer>
{
shell.publish(msg);
}
return event::Status::Ignored;
return;
}
Event::Dnd(DndEvent::Offer(id, OfferEvent::Drop)) if id == Some(my_id) => {
Event::Dnd(DndEvent::Offer(id, OfferEvent::Drop)) if *id == Some(my_id) => {
log::trace!(
target: DND_DEST_LOG_TARGET,
"offer drop id={my_id:?}"
@ -493,27 +495,29 @@ impl<Message: 'static> Widget<Message, crate::Theme, crate::Renderer>
{
shell.publish(msg);
}
return event::Status::Captured;
shell.capture_event();
return;
}
Event::Dnd(DndEvent::Offer(id, OfferEvent::SelectedAction(action)))
if id == Some(my_id) =>
if *id == Some(my_id) =>
{
log::trace!(
target: DND_DEST_LOG_TARGET,
"offer selected-action id={my_id:?} action={action:?}"
);
if let Some(msg) = state.on_action_selected(
action,
*action,
self.on_action_selected
.as_ref()
.map(std::convert::AsRef::as_ref),
) {
shell.publish(msg);
}
return event::Status::Captured;
shell.capture_event();
return;
}
Event::Dnd(DndEvent::Offer(id, OfferEvent::Data { data, mime_type }))
if id == Some(my_id) =>
if *id == Some(my_id) =>
{
log::trace!(
target: DND_DEST_LOG_TARGET,
@ -531,21 +535,28 @@ impl<Message: 'static> Widget<Message, crate::Theme, crate::Renderer>
}
if let (Some(msg), ret) = state.on_data_received(
mime_type,
data,
mime_type.clone(),
data.clone(),
self.on_data_received
.as_ref()
.map(std::convert::AsRef::as_ref),
self.on_finish.as_ref().map(std::convert::AsRef::as_ref),
) {
shell.publish(msg);
return ret;
if ret == event::Status::Captured {
log::trace!(
target: DND_DEST_LOG_TARGET,
"offer data id={my_id:?} captured"
);
shell.capture_event();
}
return;
}
return event::Status::Captured;
shell.capture_event();
return;
}
_ => {}
}
event::Status::Ignored
}
fn mouse_interaction(
@ -589,13 +600,18 @@ impl<Message: 'static> Widget<Message, crate::Theme, crate::Renderer>
fn overlay<'b>(
&'b mut self,
tree: &'b mut Tree,
layout: layout::Layout<'_>,
layout: layout::Layout<'b>,
renderer: &crate::Renderer,
viewport: &Rectangle,
translation: Vector,
) -> Option<overlay::Element<'b, Message, crate::Theme, crate::Renderer>> {
self.container
.as_widget_mut()
.overlay(&mut tree.children[0], layout, renderer, translation)
self.container.as_widget_mut().overlay(
&mut tree.children[0],
layout,
renderer,
viewport,
translation,
)
}
fn drag_destinations(