Sort mouse regions by their stacking context's depth

This commit is contained in:
Antonio Scandurra 2022-05-28 08:45:10 +02:00
parent 44c8ee5709
commit fb26f8195b

View file

@ -20,6 +20,7 @@ pub struct Scene {
struct StackingContext {
layers: Vec<Layer>,
active_layer_stack: Vec<usize>,
depth: usize,
}
#[derive(Default)]
@ -187,7 +188,7 @@ pub struct Image {
impl Scene {
pub fn new(scale_factor: f32) -> Self {
let stacking_context = StackingContext::new(None);
let stacking_context = StackingContext::new(0, None);
Scene {
scale_factor,
stacking_contexts: vec![stacking_context],
@ -212,21 +213,23 @@ impl Scene {
pub fn mouse_regions(&self) -> Vec<(MouseRegion, usize)> {
let mut regions = Vec::new();
for (stacking_depth, stacking_context) in self.stacking_contexts.iter().enumerate() {
for stacking_context in self.stacking_contexts.iter() {
for layer in &stacking_context.layers {
for mouse_region in &layer.mouse_regions {
regions.push((mouse_region.clone(), stacking_depth));
regions.push((mouse_region.clone(), stacking_context.depth));
}
}
}
regions.sort_by_key(|(_, depth)| *depth);
regions
}
pub fn push_stacking_context(&mut self, clip_bounds: Option<RectF>) {
let depth = self.active_stacking_context().depth + 1;
self.active_stacking_context_stack
.push(self.stacking_contexts.len());
self.stacking_contexts
.push(StackingContext::new(clip_bounds))
.push(StackingContext::new(depth, clip_bounds))
}
pub fn pop_stacking_context(&mut self) {
@ -293,10 +296,11 @@ impl Scene {
}
impl StackingContext {
fn new(clip_bounds: Option<RectF>) -> Self {
fn new(depth: usize, clip_bounds: Option<RectF>) -> Self {
Self {
layers: vec![Layer::new(clip_bounds)],
active_layer_stack: vec![0],
depth,
}
}