Browse Source

`ui.dnd_drop_zone()` now returns `InnerResponse`. (#4079)

* Closes <https://github.com/emilk/egui/issues/4059>

```bash
$ ./scripts/check.sh 
[...]
+ echo 'All checks passed.'
```
pull/4090/head
Mike Tsao 9 months ago
committed by GitHub
parent
commit
cdb7d153dc
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 10
      crates/egui/src/ui.rs
  2. 2
      crates/egui_demo_lib/src/demo/drag_and_drop.rs

10
crates/egui/src/ui.rs

@ -2223,11 +2223,11 @@ impl Ui {
///
/// The given frame is used for its margins, but it color is ignored.
#[doc(alias = "drag and drop")]
pub fn dnd_drop_zone<Payload>(
pub fn dnd_drop_zone<Payload, R>(
&mut self,
frame: Frame,
add_contents: impl FnOnce(&mut Ui),
) -> (Response, Option<Arc<Payload>>)
add_contents: impl FnOnce(&mut Ui) -> R,
) -> (InnerResponse<R>, Option<Arc<Payload>>)
where
Payload: Any + Send + Sync,
{
@ -2236,7 +2236,7 @@ impl Ui {
DragAndDrop::has_payload_of_type::<Payload>(self.ctx());
let mut frame = frame.begin(self);
add_contents(&mut frame.content_ui);
let inner = add_contents(&mut frame.content_ui);
let response = frame.allocate_space(self);
// NOTE: we use `response.contains_pointer` here instead of `hovered`, because
@ -2266,7 +2266,7 @@ impl Ui {
let payload = response.dnd_release_payload::<Payload>();
(response, payload)
(InnerResponse { inner, response }, payload)
}
/// Close the menu we are in (including submenus), if any.

2
crates/egui_demo_lib/src/demo/drag_and_drop.rs

@ -60,7 +60,7 @@ impl super::View for DragAndDropDemo {
let frame = Frame::default().inner_margin(4.0);
let (_, dropped_payload) = ui.dnd_drop_zone::<Location>(frame, |ui| {
let (_, dropped_payload) = ui.dnd_drop_zone::<Location, ()>(frame, |ui| {
ui.set_min_size(vec2(64.0, 100.0));
for (row_idx, item) in column.iter().enumerate() {
let item_id = Id::new(("my_drag_and_drop_demo", col_idx, row_idx));

Loading…
Cancel
Save