mirror of
https://github.com/emilk/egui.git
synced 2026-08-31 13:50:04 -04:00
Cleanup
This commit is contained in:
@@ -177,12 +177,10 @@ struct ContextImpl {
|
|||||||
force_embedding: bool,
|
force_embedding: bool,
|
||||||
|
|
||||||
/// Written to during the frame.
|
/// Written to during the frame.
|
||||||
layer_rects_this_frame: ahash::HashMap<LayerId, Vec<(Id, Rect)>>,
|
layer_rects_this_frame: ViewportMap<HashMap<LayerId, Vec<(Id, Rect)>>>,
|
||||||
layer_rects_this_viewports: ViewportMap<HashMap<LayerId, Vec<(Id, Rect)>>>,
|
|
||||||
|
|
||||||
/// Read
|
/// Read
|
||||||
layer_rects_prev_frame: ahash::HashMap<LayerId, Vec<(Id, Rect)>>,
|
layer_rects_prev_frame: ViewportMap<HashMap<LayerId, Vec<(Id, Rect)>>>,
|
||||||
layer_rects_prev_viewports: ViewportMap<HashMap<LayerId, Vec<(Id, Rect)>>>,
|
|
||||||
|
|
||||||
#[cfg(feature = "accesskit")]
|
#[cfg(feature = "accesskit")]
|
||||||
is_accesskit_enabled: bool,
|
is_accesskit_enabled: bool,
|
||||||
@@ -199,14 +197,6 @@ impl ContextImpl {
|
|||||||
|
|
||||||
// Pause the active viewport
|
// Pause the active viewport
|
||||||
self.memory.pause_frame(previous_viewport_id);
|
self.memory.pause_frame(previous_viewport_id);
|
||||||
self.layer_rects_this_viewports.insert(
|
|
||||||
previous_viewport_id,
|
|
||||||
std::mem::take(&mut self.layer_rects_this_frame),
|
|
||||||
);
|
|
||||||
self.layer_rects_prev_viewports.insert(
|
|
||||||
previous_viewport_id,
|
|
||||||
std::mem::take(&mut self.layer_rects_prev_frame),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let viewport_id = id_pair.this;
|
let viewport_id = id_pair.this;
|
||||||
@@ -233,10 +223,8 @@ impl ContextImpl {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.layer_rects_prev_frame = self
|
self.layer_rects_prev_frame.entry(viewport_id).or_default();
|
||||||
.layer_rects_prev_viewports
|
self.layer_rects_this_frame.entry(viewport_id).or_default();
|
||||||
.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()),
|
||||||
@@ -808,15 +796,16 @@ impl Context {
|
|||||||
let mut show_blocking_widget = None;
|
let mut show_blocking_widget = None;
|
||||||
|
|
||||||
self.write(|ctx| {
|
self.write(|ctx| {
|
||||||
ctx.layer_rects_this_frame
|
if let Some(l) = ctx.layer_rects_this_frame.get_mut(&ctx.viewport_id()) {
|
||||||
.entry(layer_id)
|
l.entry(layer_id).or_default().push((id, interact_rect))
|
||||||
.or_default()
|
}
|
||||||
.push((id, interact_rect));
|
|
||||||
|
|
||||||
if hovered {
|
if hovered {
|
||||||
let pointer_pos = &ctx.input[&ctx.viewport_id()].pointer.interact_pos();
|
let pointer_pos = &ctx.input[&ctx.viewport_id()].pointer.interact_pos();
|
||||||
if let Some(pointer_pos) = pointer_pos {
|
if let Some(pointer_pos) = pointer_pos {
|
||||||
if let Some(rects) = ctx.layer_rects_prev_frame.get(&layer_id) {
|
if let Some(rects) =
|
||||||
|
ctx.layer_rects_prev_frame[&ctx.viewport_id()].get(&layer_id)
|
||||||
|
{
|
||||||
for &(prev_id, prev_rect) in rects.iter().rev() {
|
for &(prev_id, prev_rect) in rects.iter().rev() {
|
||||||
if prev_id == id {
|
if prev_id == id {
|
||||||
break; // there is no other interactive widget covering us at the pointer position.
|
break; // there is no other interactive widget covering us at the pointer position.
|
||||||
@@ -1486,9 +1475,11 @@ impl Context {
|
|||||||
crate::profile_function!();
|
crate::profile_function!();
|
||||||
|
|
||||||
let mut viewports: Vec<ViewportId> = self.write(|ctx| {
|
let mut viewports: Vec<ViewportId> = self.write(|ctx| {
|
||||||
ctx.layer_rects_prev_viewports.insert(
|
ctx.layer_rects_prev_frame.insert(
|
||||||
ctx.viewport_id(),
|
ctx.viewport_id(),
|
||||||
std::mem::take(&mut ctx.layer_rects_this_frame),
|
ctx.layer_rects_this_frame
|
||||||
|
.remove(&ctx.viewport_id())
|
||||||
|
.unwrap(),
|
||||||
);
|
);
|
||||||
ctx.viewports.values().map(|vp| vp.id_pair.this).collect()
|
ctx.viewports.values().map(|vp| vp.id_pair.this).collect()
|
||||||
});
|
});
|
||||||
@@ -1594,9 +1585,9 @@ impl Context {
|
|||||||
// Context Cleanup
|
// Context Cleanup
|
||||||
self.write(|ctx| {
|
self.write(|ctx| {
|
||||||
ctx.input.retain(|id, _| available_viewports.contains(id));
|
ctx.input.retain(|id, _| available_viewports.contains(id));
|
||||||
ctx.layer_rects_prev_viewports
|
ctx.layer_rects_prev_frame
|
||||||
.retain(|id, _| available_viewports.contains(id));
|
.retain(|id, _| available_viewports.contains(id));
|
||||||
ctx.layer_rects_this_viewports
|
ctx.layer_rects_this_frame
|
||||||
.retain(|id, _| available_viewports.contains(id));
|
.retain(|id, _| available_viewports.contains(id));
|
||||||
ctx.output.retain(|id, _| available_viewports.contains(id));
|
ctx.output.retain(|id, _| available_viewports.contains(id));
|
||||||
ctx.frame_state
|
ctx.frame_state
|
||||||
@@ -1607,10 +1598,6 @@ impl Context {
|
|||||||
} else {
|
} else {
|
||||||
let viewport_id = self.viewport_id();
|
let viewport_id = self.viewport_id();
|
||||||
self.write(|ctx| {
|
self.write(|ctx| {
|
||||||
ctx.layer_rects_prev_frame =
|
|
||||||
ctx.layer_rects_prev_viewports.remove(&viewport_id).unwrap();
|
|
||||||
ctx.layer_rects_this_frame =
|
|
||||||
ctx.layer_rects_this_viewports.remove(&viewport_id).unwrap();
|
|
||||||
ctx.memory.resume_frame(viewport_id);
|
ctx.memory.resume_frame(viewport_id);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user