mirror of
https://github.com/Redot-Engine/redot-engine.git
synced 2025-12-06 07:17:42 -05:00
Fix and rename mouse filter recursive behavior
and focus mode recursive behavior.
This commit is contained in:
@@ -138,6 +138,62 @@ TEST_CASE("[SceneTree][Control] Focus") {
|
||||
memdelete(child_ctrl);
|
||||
}
|
||||
|
||||
SUBCASE("[SceneTree][Control] Grab focus with focus behavior recursive") {
|
||||
CHECK_UNARY_FALSE(ctrl->has_focus());
|
||||
|
||||
// Cannot grab focus if focus behavior is disabled.
|
||||
ctrl->set_focus_mode(Control::FocusMode::FOCUS_ALL);
|
||||
ctrl->set_focus_behavior_recursive(Control::FOCUS_BEHAVIOR_DISABLED);
|
||||
|
||||
ERR_PRINT_OFF
|
||||
ctrl->grab_focus();
|
||||
ERR_PRINT_ON
|
||||
CHECK_UNARY_FALSE(ctrl->has_focus());
|
||||
|
||||
// Cannot grab focus if focus behavior is enabled but focus mode is none.
|
||||
ctrl->set_focus_mode(Control::FocusMode::FOCUS_NONE);
|
||||
ctrl->set_focus_behavior_recursive(Control::FOCUS_BEHAVIOR_ENABLED);
|
||||
|
||||
ERR_PRINT_OFF
|
||||
ctrl->grab_focus();
|
||||
ERR_PRINT_ON
|
||||
CHECK_UNARY_FALSE(ctrl->has_focus());
|
||||
|
||||
// Can grab focus if focus behavior is enabled and focus mode is all.
|
||||
ctrl->set_focus_mode(Control::FocusMode::FOCUS_ALL);
|
||||
ctrl->set_focus_behavior_recursive(Control::FOCUS_BEHAVIOR_ENABLED);
|
||||
|
||||
ctrl->grab_focus();
|
||||
CHECK_UNARY(ctrl->has_focus());
|
||||
}
|
||||
|
||||
SUBCASE("[SceneTree][Control] Children focus with focus behavior recursive") {
|
||||
Control *child_control = memnew(Control);
|
||||
ctrl->add_child(child_control);
|
||||
|
||||
// Can grab focus on child if parent focus behavior is inherit.
|
||||
ctrl->set_focus_mode(Control::FocusMode::FOCUS_ALL);
|
||||
ctrl->set_focus_behavior_recursive(Control::FOCUS_BEHAVIOR_INHERITED);
|
||||
child_control->set_focus_mode(Control::FocusMode::FOCUS_ALL);
|
||||
child_control->set_focus_behavior_recursive(Control::FOCUS_BEHAVIOR_INHERITED);
|
||||
|
||||
child_control->grab_focus();
|
||||
CHECK_UNARY(child_control->has_focus());
|
||||
|
||||
// Cannot grab focus on child if parent focus behavior is disabled.
|
||||
ctrl->set_focus_mode(Control::FocusMode::FOCUS_ALL);
|
||||
ctrl->set_focus_behavior_recursive(Control::FOCUS_BEHAVIOR_DISABLED);
|
||||
child_control->set_focus_mode(Control::FocusMode::FOCUS_ALL);
|
||||
child_control->set_focus_behavior_recursive(Control::FOCUS_BEHAVIOR_INHERITED);
|
||||
|
||||
ERR_PRINT_OFF
|
||||
child_control->grab_focus();
|
||||
ERR_PRINT_ON
|
||||
CHECK_UNARY_FALSE(child_control->has_focus());
|
||||
|
||||
memdelete(child_control);
|
||||
}
|
||||
|
||||
memdelete(ctrl);
|
||||
}
|
||||
|
||||
|
||||
@@ -512,6 +512,45 @@ TEST_CASE("[SceneTree][Viewport] Controls and InputEvent handling") {
|
||||
CHECK_FALSE(node_d->invalid_order);
|
||||
}
|
||||
|
||||
SUBCASE("[Viewport][GuiInputEvent] Mouse behavior recursive disables mouse motion events.") {
|
||||
node_i->set_mouse_filter(Control::MOUSE_FILTER_PASS);
|
||||
|
||||
// Enabled when parent is set to inherit.
|
||||
node_h->set_mouse_behavior_recursive(Control::MOUSE_BEHAVIOR_INHERITED);
|
||||
node_i->set_mouse_behavior_recursive(Control::MOUSE_BEHAVIOR_INHERITED);
|
||||
SEND_GUI_MOUSE_MOTION_EVENT(on_i, MouseButtonMask::NONE, Key::NONE);
|
||||
CHECK(node_i->mouse_over);
|
||||
CHECK(node_i->mouse_over_self);
|
||||
|
||||
// Enabled when parent is set to enabled.
|
||||
node_h->set_mouse_behavior_recursive(Control::MOUSE_BEHAVIOR_ENABLED);
|
||||
node_i->set_mouse_behavior_recursive(Control::MOUSE_BEHAVIOR_INHERITED);
|
||||
SEND_GUI_MOUSE_MOTION_EVENT(on_i, MouseButtonMask::NONE, Key::NONE);
|
||||
CHECK(node_i->mouse_over);
|
||||
CHECK(node_i->mouse_over_self);
|
||||
|
||||
// Disabled when parent is set to disabled.
|
||||
node_h->set_mouse_behavior_recursive(Control::MOUSE_BEHAVIOR_DISABLED);
|
||||
node_i->set_mouse_behavior_recursive(Control::MOUSE_BEHAVIOR_INHERITED);
|
||||
SEND_GUI_MOUSE_MOTION_EVENT(on_i, MouseButtonMask::NONE, Key::NONE);
|
||||
CHECK_FALSE(node_i->mouse_over);
|
||||
CHECK_FALSE(node_i->mouse_over_self);
|
||||
|
||||
// Enabled when set to enabled and parent is set to disabled.
|
||||
node_h->set_mouse_behavior_recursive(Control::MOUSE_BEHAVIOR_DISABLED);
|
||||
node_i->set_mouse_behavior_recursive(Control::MOUSE_BEHAVIOR_ENABLED);
|
||||
SEND_GUI_MOUSE_MOTION_EVENT(on_i, MouseButtonMask::NONE, Key::NONE);
|
||||
CHECK(node_i->mouse_over);
|
||||
CHECK(node_i->mouse_over_self);
|
||||
|
||||
// Disabled when it is set to disabled.
|
||||
node_h->set_mouse_behavior_recursive(Control::MOUSE_BEHAVIOR_ENABLED);
|
||||
node_i->set_mouse_behavior_recursive(Control::MOUSE_BEHAVIOR_DISABLED);
|
||||
SEND_GUI_MOUSE_MOTION_EVENT(on_i, MouseButtonMask::NONE, Key::NONE);
|
||||
CHECK_FALSE(node_i->mouse_over);
|
||||
CHECK_FALSE(node_i->mouse_over_self);
|
||||
}
|
||||
|
||||
SUBCASE("[Viewport][GuiInputEvent] Mouse Enter/Exit notification propagation.") {
|
||||
node_d->set_mouse_filter(Control::MOUSE_FILTER_PASS);
|
||||
node_g->set_mouse_filter(Control::MOUSE_FILTER_PASS);
|
||||
|
||||
Reference in New Issue
Block a user