aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/gfx/display_list/mod.rs39
-rw-r--r--tests/html/shadow-hit-test.html24
2 files changed, 47 insertions, 16 deletions
diff --git a/components/gfx/display_list/mod.rs b/components/gfx/display_list/mod.rs
index e7d24843f25..b6565753f36 100644
--- a/components/gfx/display_list/mod.rs
+++ b/components/gfx/display_list/mod.rs
@@ -390,23 +390,30 @@ impl DisplayList {
return;
}
- if let DisplayItem::BorderClass(ref border) = *item {
- // If the point is inside the border, it didn't hit the border!
- let interior_rect =
- Rect::new(
- Point2D::new(border.base.bounds.origin.x +
- border.border_widths.left,
- border.base.bounds.origin.y +
- border.border_widths.top),
- Size2D::new(border.base.bounds.size.width -
- (border.border_widths.left +
- border.border_widths.right),
- border.base.bounds.size.height -
- (border.border_widths.top +
- border.border_widths.bottom)));
- if interior_rect.contains(&point) {
- return;
+ match *item {
+ DisplayItem::BorderClass(ref border) => {
+ // If the point is inside the border, it didn't hit the border!
+ let interior_rect =
+ Rect::new(
+ Point2D::new(border.base.bounds.origin.x +
+ border.border_widths.left,
+ border.base.bounds.origin.y +
+ border.border_widths.top),
+ Size2D::new(border.base.bounds.size.width -
+ (border.border_widths.left +
+ border.border_widths.right),
+ border.base.bounds.size.height -
+ (border.border_widths.top +
+ border.border_widths.bottom)));
+ if interior_rect.contains(&point) {
+ return;
+ }
}
+ DisplayItem::BoxShadowClass(_) => {
+ // Box shadows can never be hit.
+ return
+ }
+ _ => {}
}
// We found a hit!
diff --git a/tests/html/shadow-hit-test.html b/tests/html/shadow-hit-test.html
new file mode 100644
index 00000000000..fc9e5d31d7e
--- /dev/null
+++ b/tests/html/shadow-hit-test.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<!-- Clicking under the shadow should still activate the green div. -->
+<style>
+ .green {
+ background: green;
+ position: absolute;
+ top: 45px;
+ left: 170px;
+ width: 100px;
+ height: 50px;
+ }
+ .red {
+ background: red;
+ position: absolute;
+ top: 20px;
+ left: 20px;
+ width: 100px;
+ height: 100px;
+ box-shadow: 100px 0 0 rgba(0,0,0,0.1);
+ transform: translateX(1px);
+ }
+</style>
+<div class="green" onclick="console.log('You clicked me!')"></div>
+<div class="red"></div>