wip rebase updates
This commit is contained in:
parent
86dcf8af6c
commit
e10459fb37
68 changed files with 1776 additions and 1544 deletions
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue