egui/crates
Emil Ernerfeldt ca8c8792c2
New widget interaction logic (#4026)
* Closes https://github.com/emilk/egui/issues/3936
* Closes https://github.com/emilk/egui/issues/3923
* Closes https://github.com/emilk/egui/pull/4058

The interaction code is now done at the start of the frame, using stored
`WidgetRect`s from the previous frame.

The intention is that the new interaction code should be more accurate,
making it easier to hit widgets, and better respecting the rules of
overlapping widgets.

There is a new `style::Interaction::interact_radius` controlling how far
away from a widget the cursor can be and still hit it. This helps big
fat fingers hit small widgets on touch screens.

This PR adds a new `Context::read_response` which lets you read the
`Response` of a `Widget` _before_ you create the widget. This can be
used for styling, or for reading the result of an interaction early (to
prevent frame-delay) for a widget you add late (so it is on top of other
widgets).

# ⚠️ BREAKING CHANGES
`Memory::dragged_id`, `Memory::set_dragged_id` etc have been moved to
`Context`.
The semantics for `Context::dragged_id` is slightly different: a widget
is not considered dragged until egui it is sure this is not a
click-in-progress. For a widget that is only sensitive to drags, that is
right away, but for widgets sensitive to both clicks and drags it is not
until the mouse has moved a certain distance.

# TODO
* [x] Fix panel resizing
* [x] Fix scroll hover weirdness
* [x] Fix Resize widget
* [x] Fix drag-and-drop
* [x] Test all of egui_demo_app
* [x] Change `is_dragging` API
* [x] Consistent naming of start/stop or begin/end drag
* [x] Test `egui_tiles`
* [x] Test Rerun
* [x] Document
* [x] Document breaking changes in PR description
* [x] Test one final time

# Saving for a later PR
* [ ] Fix https://github.com/emilk/egui/issues/4047
* [ ] Specify what the response order for e.g. `ui.horizontal` is

I think both these can be fixed if each `Ui` registers themselves as a
`WidgetRect`, with the possibility to interact with it later, as if the
interaction was under all widgets on top of it.
2024-02-17 15:48:23 +01:00
..
ecolor Release 0.26.2 - Response.interact/context_menu fix 2024-02-14 10:49:57 +01:00
eframe Release 0.26.2 - Response.interact/context_menu fix 2024-02-14 10:49:57 +01:00
egui New widget interaction logic (#4026) 2024-02-17 15:48:23 +01:00
egui-wgpu Release 0.26.2 - Response.interact/context_menu fix 2024-02-14 10:49:57 +01:00
egui-winit Release 0.26.2 - Response.interact/context_menu fix 2024-02-14 10:49:57 +01:00
egui_demo_app Update `ehttp` to 0.5 (#4055) 2024-02-16 10:57:54 +01:00
egui_demo_lib New widget interaction logic (#4026) 2024-02-17 15:48:23 +01:00
egui_extras New widget interaction logic (#4026) 2024-02-17 15:48:23 +01:00
egui_glow Release 0.26.2 - Response.interact/context_menu fix 2024-02-14 10:49:57 +01:00
egui_plot New widget interaction logic (#4026) 2024-02-17 15:48:23 +01:00
egui_web Fix typos (#2866) 2023-04-18 15:52:45 +02:00
emath Add layer transforms, interaction in layer (#3906) 2024-02-17 11:02:56 +01:00
epaint Add layer transforms, interaction in layer (#3906) 2024-02-17 11:02:56 +01:00