summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/layout/layout_text_control_single_line.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/layout/layout_text_control_single_line.cc')
-rw-r--r--chromium/third_party/blink/renderer/core/layout/layout_text_control_single_line.cc32
1 files changed, 18 insertions, 14 deletions
diff --git a/chromium/third_party/blink/renderer/core/layout/layout_text_control_single_line.cc b/chromium/third_party/blink/renderer/core/layout/layout_text_control_single_line.cc
index 9173e224134..135c0ce4703 100644
--- a/chromium/third_party/blink/renderer/core/layout/layout_text_control_single_line.cc
+++ b/chromium/third_party/blink/renderer/core/layout/layout_text_control_single_line.cc
@@ -138,13 +138,17 @@ void LayoutTextControlSingleLine::UpdateLayout() {
bool LayoutTextControlSingleLine::NodeAtPoint(
HitTestResult& result,
- const HitTestLocation& location_in_container,
- const LayoutPoint& accumulated_offset,
+ const HitTestLocation& hit_test_location,
+ const PhysicalOffset& accumulated_offset,
HitTestAction hit_test_action) {
- if (!LayoutTextControl::NodeAtPoint(result, location_in_container,
+ if (!LayoutTextControl::NodeAtPoint(result, hit_test_location,
accumulated_offset, hit_test_action))
return false;
+ const LayoutObject* stop_node = result.GetHitTestRequest().GetStopNode();
+ if (stop_node && stop_node->NodeForHitTest() == result.InnerNode())
+ return true;
+
// Say that we hit the inner text element if
// - we hit a node inside the inner text element,
// - we hit the <input> element (e.g. we're over the border or padding), or
@@ -153,18 +157,18 @@ bool LayoutTextControlSingleLine::NodeAtPoint(
if (result.InnerNode()->IsDescendantOf(InnerEditorElement()) ||
result.InnerNode() == GetNode() ||
(container && container == result.InnerNode())) {
- LayoutPoint point_in_parent = location_in_container.Point();
+ PhysicalOffset inner_editor_accumulated_offset = accumulated_offset;
if (container && EditingViewPortElement()) {
- if (EditingViewPortElement()->GetLayoutBox())
- point_in_parent -=
- ToLayoutSize(EditingViewPortElement()->GetLayoutBox()->Location());
- if (container->GetLayoutBox())
- point_in_parent -= ToLayoutSize(container->GetLayoutBox()->Location());
- }
- const LayoutObject* stop_node = result.GetHitTestRequest().GetStopNode();
- if (!stop_node || stop_node->NodeForHitTest() != result.InnerNode()) {
- HitInnerEditorElement(result, point_in_parent, accumulated_offset);
+ if (EditingViewPortElement()->GetLayoutBox()) {
+ inner_editor_accumulated_offset +=
+ EditingViewPortElement()->GetLayoutBox()->PhysicalLocation();
+ }
+ if (container->GetLayoutBox()) {
+ inner_editor_accumulated_offset +=
+ container->GetLayoutBox()->PhysicalLocation();
+ }
}
+ HitInnerEditorElement(result, hit_test_location, accumulated_offset);
}
return true;
}
@@ -263,7 +267,7 @@ LayoutUnit LayoutTextControlSingleLine::ComputeControlLogicalHeight(
return line_height + non_content_height;
}
-void LayoutTextControlSingleLine::Autoscroll(const LayoutPoint& position) {
+void LayoutTextControlSingleLine::Autoscroll(const PhysicalOffset& position) {
LayoutBox* layout_object = InnerEditorElement()->GetLayoutBox();
if (!layout_object)
return;