mirror of
https://github.com/Redot-Engine/redot-engine.git
synced 2025-12-06 07:17:42 -05:00
Merge commit godotengine/godot@b15b24b087
This commit is contained in:
@@ -8153,6 +8153,93 @@ TEST_CASE("[SceneTree][TextEdit] gutters") {
|
||||
// Merging tested via CodeEdit gutters.
|
||||
}
|
||||
|
||||
SUBCASE("[TextEdit] gutter mouse") {
|
||||
DisplayServerMock *DS = (DisplayServerMock *)(DisplayServer::get_singleton());
|
||||
// Set size for mouse input.
|
||||
text_edit->set_size(Size2(200, 200));
|
||||
|
||||
text_edit->set_text("test1\ntest2\ntest3\ntest4");
|
||||
text_edit->grab_focus();
|
||||
|
||||
text_edit->add_gutter();
|
||||
text_edit->set_gutter_name(0, "test_gutter");
|
||||
text_edit->set_gutter_width(0, 10);
|
||||
text_edit->set_gutter_clickable(0, true);
|
||||
|
||||
text_edit->add_gutter();
|
||||
text_edit->set_gutter_name(1, "test_gutter_not_clickable");
|
||||
text_edit->set_gutter_width(1, 10);
|
||||
text_edit->set_gutter_clickable(1, false);
|
||||
|
||||
text_edit->add_gutter();
|
||||
CHECK(text_edit->get_gutter_count() == 3);
|
||||
text_edit->set_gutter_name(2, "test_gutter_3");
|
||||
text_edit->set_gutter_width(2, 10);
|
||||
text_edit->set_gutter_clickable(2, true);
|
||||
|
||||
MessageQueue::get_singleton()->flush();
|
||||
const int line_height = text_edit->get_line_height();
|
||||
|
||||
// Defaults to none.
|
||||
CHECK(text_edit->get_hovered_gutter() == Vector2i(-1, -1));
|
||||
CHECK(DS->get_cursor_shape() == DisplayServer::CURSOR_ARROW);
|
||||
|
||||
// Hover over gutter.
|
||||
SEND_GUI_MOUSE_MOTION_EVENT(Point2(5, line_height + line_height / 2), MouseButtonMask::NONE, Key::NONE);
|
||||
CHECK(text_edit->get_hovered_gutter() == Vector2i(0, 1));
|
||||
SIGNAL_CHECK_FALSE("gutter_clicked");
|
||||
CHECK(DS->get_cursor_shape() == DisplayServer::CURSOR_POINTING_HAND);
|
||||
|
||||
// Click on gutter.
|
||||
SEND_GUI_MOUSE_BUTTON_EVENT(Point2(5, line_height / 2), MouseButton::LEFT, MouseButtonMask::LEFT, Key::NONE);
|
||||
CHECK(text_edit->get_hovered_gutter() == Vector2i(0, 0));
|
||||
SIGNAL_CHECK("gutter_clicked", build_array(build_array(0, 0)));
|
||||
|
||||
// Click on gutter on another line.
|
||||
SEND_GUI_MOUSE_BUTTON_EVENT(Point2(5, line_height * 3 + line_height / 2), MouseButton::LEFT, MouseButtonMask::LEFT, Key::NONE);
|
||||
CHECK(text_edit->get_hovered_gutter() == Vector2i(0, 3));
|
||||
SIGNAL_CHECK("gutter_clicked", build_array(build_array(3, 0)));
|
||||
|
||||
// Unclickable gutter can be hovered.
|
||||
SEND_GUI_MOUSE_MOTION_EVENT(Point2(15, line_height + line_height / 2), MouseButtonMask::NONE, Key::NONE);
|
||||
CHECK(text_edit->get_hovered_gutter() == Vector2i(1, 1));
|
||||
SIGNAL_CHECK_FALSE("gutter_clicked");
|
||||
CHECK(DS->get_cursor_shape() == DisplayServer::CURSOR_ARROW);
|
||||
|
||||
// Unclickable gutter can be clicked.
|
||||
SEND_GUI_MOUSE_BUTTON_EVENT(Point2(15, line_height * 2 + line_height / 2), MouseButton::LEFT, MouseButtonMask::LEFT, Key::NONE);
|
||||
CHECK(text_edit->get_hovered_gutter() == Vector2i(1, 2));
|
||||
SIGNAL_CHECK("gutter_clicked", build_array(build_array(2, 1)));
|
||||
CHECK(DS->get_cursor_shape() == DisplayServer::CURSOR_ARROW);
|
||||
|
||||
// Hover past last line.
|
||||
SEND_GUI_MOUSE_MOTION_EVENT(Point2(5, line_height * 5), MouseButtonMask::NONE, Key::NONE);
|
||||
CHECK(text_edit->get_hovered_gutter() == Vector2i(-1, -1));
|
||||
SIGNAL_CHECK_FALSE("gutter_clicked");
|
||||
CHECK(DS->get_cursor_shape() == DisplayServer::CURSOR_ARROW);
|
||||
|
||||
// Click on gutter past last line.
|
||||
SEND_GUI_MOUSE_BUTTON_EVENT(Point2(5, line_height * 5), MouseButton::LEFT, MouseButtonMask::LEFT, Key::NONE);
|
||||
CHECK(text_edit->get_hovered_gutter() == Vector2i(-1, -1));
|
||||
SIGNAL_CHECK_FALSE("gutter_clicked");
|
||||
|
||||
// Mouse exit resets hover.
|
||||
SEND_GUI_MOUSE_MOTION_EVENT(Point2(5, line_height + line_height / 2), MouseButtonMask::NONE, Key::NONE);
|
||||
CHECK(text_edit->get_hovered_gutter() == Vector2i(0, 1));
|
||||
SEND_GUI_MOUSE_MOTION_EVENT(Point2(-1, -1), MouseButtonMask::NONE, Key::NONE);
|
||||
CHECK(text_edit->get_hovered_gutter() == Vector2i(-1, -1));
|
||||
|
||||
// Removing gutter updates hover.
|
||||
SEND_GUI_MOUSE_MOTION_EVENT(Point2(25, line_height + line_height / 2), MouseButtonMask::NONE, Key::NONE);
|
||||
CHECK(text_edit->get_hovered_gutter() == Vector2i(2, 1));
|
||||
text_edit->remove_gutter(2);
|
||||
CHECK(text_edit->get_hovered_gutter() == Vector2i(-1, -1));
|
||||
|
||||
// Updating size updates hover.
|
||||
text_edit->set_gutter_width(1, 20);
|
||||
CHECK(text_edit->get_hovered_gutter() == Vector2i(1, 1));
|
||||
}
|
||||
|
||||
SIGNAL_UNWATCH(text_edit, "gutter_clicked");
|
||||
SIGNAL_UNWATCH(text_edit, "gutter_added");
|
||||
SIGNAL_UNWATCH(text_edit, "gutter_removed");
|
||||
|
||||
Reference in New Issue
Block a user