Commit 50dc5f2b authored by Morten Stenshorne's avatar Morten Stenshorne Committed by Commit Bot

[LayoutNG] Hit-test floats by traversing backwards.

Hit-testing must always traverse the layout tree backwards, since we
want to hit whatever was painted last.

Change-Id: I7029c0292fe09e47830bc30b555c42f8f4bca79c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2033077
Commit-Queue: Morten Stenshorne <mstensho@chromium.org>
Reviewed-by: default avatarIan Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: default avatarKoji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#738136}
parent e9652664
......@@ -4,6 +4,7 @@
#include "third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h"
#include "base/containers/adapters.h"
#include "third_party/blink/renderer/core/editing/drag_caret.h"
#include "third_party/blink/renderer/core/editing/frame_selection.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
......@@ -2007,7 +2008,8 @@ bool NGBoxFragmentPainter::HitTestFloatingChildren(
const PhysicalOffset& accumulated_offset) {
DCHECK_EQ(hit_test.action, kHitTestFloat);
DCHECK(container.HasFloatingDescendantsForPaint());
for (const NGLink& child : container.Children()) {
auto children = container.Children();
for (const NGLink& child : base::Reversed(children)) {
if (child->IsFloating()) {
if (HitTestAllPhases(hit_test, *child,
accumulated_offset + child.Offset()))
......
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://www.w3.org/TR/CSS22/visuren.html#floats">
<link rel="help" href="https://www.w3.org/TR/CSS22/zindex.html">
<div id="f1" style="float:left; width:100px; height:100px;"></div>
<div id="f2" style="float:left; width:100px; height:100px; margin-top:50px; margin-left:-50px;"></div>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
test(()=> {
var elm = document.elementFromPoint(70, 70);
assert_equals(elm.id, "f2");
}, "Hit test float");
</script>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment