Allow transparent divs to be considered "top layers"
Max Brunsfeld
created
This changes the meaning of `was_top_layer` so that it is checking that
nothing opaque is on top of the given layer. The layer in question
need not be opaque.
@@ -942,16 +942,20 @@ impl<'a> WindowContext<'a> {
}
}
- /// Returns true if the top-most opaque layer painted over this point was part of the- /// same layer as the given stacking order.
+ /// Returns true if there is no opaque layer containing the given point
+ /// on top of the given level. Layers whose level is an extension of the
+ /// level are not considered to be on top of the level.
pub fn was_top_layer(&self, point: &Point<Pixels>, level: &StackingOrder) -> bool {
- for (stack, bounds) in self.window.rendered_frame.depth_map.iter() {- if bounds.contains(point) {- return level.starts_with(stack) || stack.starts_with(level);
+ for (opaque_level, bounds) in self.window.rendered_frame.depth_map.iter() {
+ if level >= opaque_level {
+ break;
}
- }- false
+ if bounds.contains(point) && !opaque_level.starts_with(level) {
+ return false;
+ }
+ }
+ true
}
pub fn was_top_layer_under_active_drag(
@@ -959,16 +963,19 @@ impl<'a> WindowContext<'a> {
point: &Point<Pixels>,
level: &StackingOrder,
) -> bool {
- for (stack, bounds) in self.window.rendered_frame.depth_map.iter() {- if stack.starts_with(&[ACTIVE_DRAG_Z_INDEX]) {
+ for (opaque_level, bounds) in self.window.rendered_frame.depth_map.iter() {
+ if level >= opaque_level {
+ break;
+ }
+ if opaque_level.starts_with(&[ACTIVE_DRAG_Z_INDEX]) {
continue;
}
- if bounds.contains(point) {- return level.starts_with(stack) || stack.starts_with(level);
+
+ if bounds.contains(point) && !opaque_level.starts_with(level) {
+ return false;
}
}
-- false
+ true
}
/// Called during painting to get the current stacking order.