1
0
mirror of https://github.com/emilk/egui.git synced 2026-06-27 23:13:13 -04:00

Sets Areas per viewport

I don't really know why but fixes when other window is rendering to take focus from the main one, but apparently if the main window is rendering can take focus from other windows
This commit is contained in:
Konkitoman
2023-07-30 21:34:15 +03:00
parent 4b4414955a
commit b8e8d095c8

View File

@@ -87,8 +87,12 @@ pub struct Memory {
#[cfg_attr(feature = "persistence", serde(skip))]
pub(crate) drag_value: crate::widgets::drag_value::MonoState,
#[cfg_attr(feature = "persistence", serde(skip))]
pub(crate) areas: Areas,
#[cfg_attr(feature = "persistence", serde(skip))]
pub(crate) viewports_areas: HashMap<u64, Areas>,
/// Which popup-window is open (if any)?
/// Could be a combo box, color picker, menu etc.
#[cfg_attr(feature = "persistence", serde(skip))]
@@ -371,6 +375,10 @@ impl Memory {
.or_default()
.begin_frame(prev_input, new_input);
self.interaction = self.interactions.remove(&viewport_id).unwrap();
self.areas = self
.viewports_areas
.remove(&viewport_id)
.unwrap_or_default();
if !prev_input.pointer.any_down() {
self.window_interaction = None;
@@ -388,8 +396,11 @@ impl Memory {
self.interaction.focus.end_frame(used_ids);
self.interactions
.insert(self.viewport_id, std::mem::take(&mut self.interaction));
self.viewports_areas
.insert(self.viewport_id, std::mem::take(&mut self.areas));
self.drag_value.end_frame(input);
self.interactions.retain(|id, _| viewports.contains(id))
self.interactions.retain(|id, _| viewports.contains(id));
self.viewports_areas.retain(|id, _| viewports.contains(id));
}
/// Top-most layer at the given position.