mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 23:48:11 +00:00
LibWeb: Give MouseEvents the correct offsetX and offsetY values
This commit is contained in:
parent
4dde36844b
commit
55c845713a
2 changed files with 20 additions and 4 deletions
|
@ -185,7 +185,8 @@ void HtmlView::mousemove_event(GUI::MouseEvent& event)
|
|||
#endif
|
||||
is_hovering_link = true;
|
||||
}
|
||||
const_cast<Node*>(node)->dispatch_event(MouseEvent::create("mousemove", 2, 3));
|
||||
auto offset = compute_mouse_event_offset(event.position(), *result.layout_node);
|
||||
const_cast<Node*>(node)->dispatch_event(MouseEvent::create("mousemove", offset.x(), offset.y()));
|
||||
}
|
||||
if (m_in_mouse_selection) {
|
||||
layout_root()->selection().set_end({ result.layout_node, result.index_in_node });
|
||||
|
@ -236,7 +237,8 @@ void HtmlView::mousedown_event(GUI::MouseEvent& event)
|
|||
m_in_mouse_selection = true;
|
||||
}
|
||||
}
|
||||
const_cast<Node*>(node)->dispatch_event(MouseEvent::create("mousedown", 2, 3));
|
||||
auto offset = compute_mouse_event_offset(event.position(), *result.layout_node);
|
||||
const_cast<Node*>(node)->dispatch_event(MouseEvent::create("mousedown", offset.x(), offset.y()));
|
||||
}
|
||||
}
|
||||
if (hovered_node_changed)
|
||||
|
@ -251,8 +253,10 @@ void HtmlView::mouseup_event(GUI::MouseEvent& event)
|
|||
|
||||
auto result = layout_root()->hit_test(to_content_position(event.position()));
|
||||
if (result.layout_node) {
|
||||
if (auto* node = result.layout_node->node())
|
||||
const_cast<Node*>(node)->dispatch_event(MouseEvent::create("mouseup", 2, 3));
|
||||
if (auto* node = result.layout_node->node()) {
|
||||
auto offset = compute_mouse_event_offset(event.position(), *result.layout_node);
|
||||
const_cast<Node*>(node)->dispatch_event(MouseEvent::create("mouseup", offset.x(), offset.y()));
|
||||
}
|
||||
}
|
||||
|
||||
if (event.button() == GUI::MouseButton::Left) {
|
||||
|
@ -423,4 +427,15 @@ void HtmlView::did_scroll()
|
|||
main_frame().set_viewport_rect(visible_content_rect());
|
||||
}
|
||||
|
||||
Gfx::Point HtmlView::compute_mouse_event_offset(const Gfx::Point& event_position, const LayoutNode& layout_node) const
|
||||
{
|
||||
auto content_event_position = to_content_position(event_position);
|
||||
auto top_left_of_layout_node = layout_node.box_type_agnostic_position();
|
||||
|
||||
return {
|
||||
content_event_position.x() - static_cast<int>(top_left_of_layout_node.x()),
|
||||
content_event_position.y() - static_cast<int>(top_left_of_layout_node.y())
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -78,6 +78,7 @@ private:
|
|||
|
||||
void layout_and_sync_size();
|
||||
void dump_selection(const char* event_name);
|
||||
Gfx::Point compute_mouse_event_offset(const Gfx::Point&, const LayoutNode&) const;
|
||||
|
||||
RefPtr<Web::Frame> m_main_frame;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue