Commit 61fb54cb authored by Morten Stenshorne's avatar Morten Stenshorne Committed by Commit Bot

[LayoutNG] Overflow control hit-testing.

This was missing when hit-testing a NG fragment (rather than the
LayoutObject).

I don't know how to write a WPT for this, but this fixes at least the
following tests with LayoutNGFragmentTraversal enabled:
  fast/events/scrollbar-double-click.html
  fast/events/touch/gesture/gesture-scrollbar-touchscreen-fling.html
  fast/events/touch/gesture/gesture-scrollbar.html

Bug: 1043787
Change-Id: I8669a16fe0d8762f29ba7a7600bcf7fa161e594f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2048084
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@{#740619}
parent a11bddc0
......@@ -1176,7 +1176,7 @@ bool LayoutBlock::IsPointInOverflowControl(
bool LayoutBlock::HitTestOverflowControl(
HitTestResult& result,
const HitTestLocation& hit_test_location,
const PhysicalOffset& adjusted_location) {
const PhysicalOffset& adjusted_location) const {
if (VisibleToHitTestRequest(result.GetHitTestRequest()) &&
IsPointInOverflowControl(result, hit_test_location.Point(),
adjusted_location)) {
......
......@@ -426,9 +426,10 @@ class CORE_EXPORT LayoutBlock : public LayoutBox {
return false;
}
bool HitTestOverflowControl(HitTestResult&,
const HitTestLocation&,
const PhysicalOffset& adjusted_location) override;
bool HitTestOverflowControl(
HitTestResult&,
const HitTestLocation&,
const PhysicalOffset& adjusted_location) const override;
bool HitTestChildren(HitTestResult&,
const HitTestLocation&,
const PhysicalOffset& accumulated_offset,
......
......@@ -1515,6 +1515,12 @@ class CORE_EXPORT LayoutBox : public LayoutBoxModelObject {
const HitTestLocation&,
const PhysicalOffset& border_box_location) const;
virtual bool HitTestOverflowControl(HitTestResult&,
const HitTestLocation&,
const PhysicalOffset&) const {
return false;
}
// Returns true if the box intersects the viewport visible to the user.
bool IntersectsVisibleViewport() const;
......@@ -1659,11 +1665,6 @@ class CORE_EXPORT LayoutBox : public LayoutBoxModelObject {
LayoutObject* SplitAnonymousBoxesAroundChild(LayoutObject* before_child);
virtual bool HitTestOverflowControl(HitTestResult&,
const HitTestLocation&,
const PhysicalOffset&) {
return false;
}
virtual bool HitTestChildren(HitTestResult&,
const HitTestLocation&,
const PhysicalOffset& accumulated_offset,
......
......@@ -1651,11 +1651,9 @@ bool NGBoxFragmentPainter::NodeAtPoint(const HitTestContext& hit_test,
bool hit_test_self = IsInSelfHitTestingPhase(hit_test.action);
// TODO(layout-dev): Add support for hit testing overflow controls once we
// overflow has been implemented.
// if (hit_test_self && HasOverflowClip() &&
// HitTestOverflowControl(result, hit_test_location, physical_offset))
// return true;
if (hit_test_self && box_fragment_.HasOverflowClip() &&
HitTestOverflowControl(hit_test, physical_offset))
return true;
bool skip_children = hit_test.result->GetHitTestRequest().GetStopNode() ==
PhysicalFragment().GetLayoutObject();
......@@ -2245,4 +2243,13 @@ bool NGBoxFragmentPainter::HitTestClippedOutByBorder(
rect.ToLayoutRect(), border_edges.line_left, border_edges.line_right));
}
bool NGBoxFragmentPainter::HitTestOverflowControl(
const HitTestContext& hit_test,
PhysicalOffset accumulated_offset) {
const auto* layout_box = ToLayoutBoxOrNull(box_fragment_.GetLayoutObject());
return layout_box &&
layout_box->HitTestOverflowControl(*hit_test.result, hit_test.location,
accumulated_offset);
}
} // namespace blink
......@@ -272,6 +272,9 @@ class NGBoxFragmentPainter : public BoxPainterBase {
const HitTestLocation&,
const PhysicalOffset& border_box_location) const;
bool HitTestOverflowControl(const HitTestContext&,
PhysicalOffset accumulated_offset);
const NGPhysicalBoxFragment& PhysicalFragment() const {
return box_fragment_;
}
......
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