mirror of
https://github.com/emilk/egui.git
synced 2026-09-01 14:20:04 -04:00
This compained with b8e8d09 fixes every thing about interaction per viewport
This commit is contained in:
@@ -211,6 +211,7 @@ struct ContextImpl {
|
|||||||
|
|
||||||
/// Read
|
/// Read
|
||||||
layer_rects_prev_frame: ahash::HashMap<LayerId, Vec<(Id, Rect)>>,
|
layer_rects_prev_frame: ahash::HashMap<LayerId, Vec<(Id, Rect)>>,
|
||||||
|
layer_rects_prev_viewports: HashMap<u64, HashMap<LayerId, Vec<(Id, Rect)>>>,
|
||||||
|
|
||||||
#[cfg(feature = "accesskit")]
|
#[cfg(feature = "accesskit")]
|
||||||
is_accesskit_enabled: bool,
|
is_accesskit_enabled: bool,
|
||||||
@@ -235,7 +236,10 @@ impl ContextImpl {
|
|||||||
new_raw_input.screen_rect = Some(rect);
|
new_raw_input.screen_rect = Some(rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
self.layer_rects_prev_frame = std::mem::take(&mut self.layer_rects_this_frame);
|
self.layer_rects_prev_frame = self
|
||||||
|
.layer_rects_prev_viewports
|
||||||
|
.remove(&viewport_id)
|
||||||
|
.unwrap_or_default();
|
||||||
|
|
||||||
self.memory.begin_frame(
|
self.memory.begin_frame(
|
||||||
self.input.get(&viewport_id).unwrap_or(&Default::default()),
|
self.input.get(&viewport_id).unwrap_or(&Default::default()),
|
||||||
@@ -1300,7 +1304,11 @@ impl Context {
|
|||||||
/// Call at the end of each frame.
|
/// Call at the end of each frame.
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn end_frame(&self) -> FullOutput {
|
pub fn end_frame(&self) -> FullOutput {
|
||||||
let mut viewports: Vec<u64> = self.read(|ctx| {
|
let mut viewports: Vec<u64> = self.write(|ctx| {
|
||||||
|
ctx.layer_rects_prev_viewports.insert(
|
||||||
|
ctx.current_rendering_viewport,
|
||||||
|
std::mem::take(&mut ctx.layer_rects_this_frame),
|
||||||
|
);
|
||||||
ctx.viewports
|
ctx.viewports
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(_, (_, id, _, _, _))| *id)
|
.map(|(_, (_, id, _, _, _))| *id)
|
||||||
@@ -1362,7 +1370,12 @@ impl Context {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.write(|ctx| ctx.input.retain(|id, _| viewports.contains(&id)));
|
// Context Cleanup
|
||||||
|
self.write(|ctx| {
|
||||||
|
ctx.input.retain(|id, _| viewports.contains(id));
|
||||||
|
ctx.layer_rects_prev_viewports
|
||||||
|
.retain(|id, _| viewports.contains(id))
|
||||||
|
});
|
||||||
|
|
||||||
let repaint_after = self.write(|ctx| {
|
let repaint_after = self.write(|ctx| {
|
||||||
ctx.repaint
|
ctx.repaint
|
||||||
|
|||||||
Reference in New Issue
Block a user