diff options
Diffstat (limited to 'scene/gui/control.cpp')
-rw-r--r-- | scene/gui/control.cpp | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp index 6ef39c88d8..39bfa556e5 100644 --- a/scene/gui/control.cpp +++ b/scene/gui/control.cpp @@ -187,6 +187,7 @@ Size2 Control::_edit_get_minimum_size() const { #endif void Control::reparent(Node *p_parent, bool p_keep_global_transform) { + ERR_MAIN_THREAD_GUARD; Transform2D temp = get_global_transform(); Node::reparent(p_parent); if (p_keep_global_transform) { @@ -197,6 +198,7 @@ void Control::reparent(Node *p_parent, bool p_keep_global_transform) { // Editor integration. void Control::get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const { + ERR_READ_THREAD_GUARD; Node::get_argument_options(p_function, p_idx, r_options); if (p_idx == 0) { @@ -222,6 +224,7 @@ void Control::get_argument_options(const StringName &p_function, int p_idx, List } PackedStringArray Control::get_configuration_warnings() const { + ERR_READ_THREAD_GUARD_V(PackedStringArray()); PackedStringArray warnings = Node::get_configuration_warnings(); if (data.mouse_filter == MOUSE_FILTER_IGNORE && !data.tooltip.is_empty()) { @@ -236,6 +239,7 @@ PackedStringArray Control::get_configuration_warnings() const { } bool Control::is_text_field() const { + ERR_READ_THREAD_GUARD_V(false); return false; } @@ -257,6 +261,7 @@ String Control::properties_managed_by_container[] = { }; bool Control::_set(const StringName &p_name, const Variant &p_value) { + ERR_MAIN_THREAD_GUARD_V(false); String name = p_name; if (!name.begins_with("theme_override")) { return false; @@ -327,6 +332,7 @@ bool Control::_set(const StringName &p_name, const Variant &p_value) { } bool Control::_get(const StringName &p_name, Variant &r_ret) const { + ERR_MAIN_THREAD_GUARD_V(false); String sname = p_name; if (!sname.begins_with("theme_override")) { return false; @@ -358,6 +364,7 @@ bool Control::_get(const StringName &p_name, Variant &r_ret) const { } void Control::_get_property_list(List<PropertyInfo> *p_list) const { + ERR_MAIN_THREAD_GUARD; Ref<Theme> default_theme = ThemeDB::get_singleton()->get_default_theme(); p_list->push_back(PropertyInfo(Variant::NIL, GNAME("Theme Overrides", "theme_override_"), PROPERTY_HINT_NONE, "theme_override_", PROPERTY_USAGE_GROUP)); @@ -603,18 +610,22 @@ bool Control::_property_get_revert(const StringName &p_name, Variant &r_property // Global relations. bool Control::is_top_level_control() const { + ERR_READ_THREAD_GUARD_V(false); return is_inside_tree() && (!data.parent_canvas_item && !data.RI && is_set_as_top_level()); } Control *Control::get_parent_control() const { + ERR_READ_THREAD_GUARD_V(nullptr); return data.parent_control; } Window *Control::get_parent_window() const { + ERR_READ_THREAD_GUARD_V(nullptr); return data.parent_window; } Control *Control::get_root_parent_control() const { + ERR_READ_THREAD_GUARD_V(nullptr); const CanvasItem *ci = this; const Control *root = this; @@ -635,6 +646,7 @@ Control *Control::get_root_parent_control() const { } Rect2 Control::get_parent_anchorable_rect() const { + ERR_READ_THREAD_GUARD_V(Rect2()); if (!is_inside_tree()) { return Rect2(); } @@ -662,6 +674,7 @@ Rect2 Control::get_parent_anchorable_rect() const { } Size2 Control::get_parent_area_size() const { + ERR_READ_THREAD_GUARD_V(Size2()); return get_parent_anchorable_rect().size; } @@ -689,6 +702,7 @@ void Control::_update_canvas_item_transform() { } Transform2D Control::get_transform() const { + ERR_READ_THREAD_GUARD_V(Transform2D()); Transform2D xform = _get_internal_transform(); xform[2] += get_position(); return xform; @@ -707,6 +721,7 @@ void Control::_set_anchor(Side p_side, real_t p_anchor) { } void Control::set_anchor(Side p_side, real_t p_anchor, bool p_keep_offset, bool p_push_opposite_anchor) { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_INDEX((int)p_side, 4); Rect2 parent_rect = get_parent_anchorable_rect(); @@ -739,12 +754,14 @@ void Control::set_anchor(Side p_side, real_t p_anchor, bool p_keep_offset, bool } real_t Control::get_anchor(Side p_side) const { + ERR_READ_THREAD_GUARD_V(0); ERR_FAIL_INDEX_V(int(p_side), 4, 0.0); return data.anchor[p_side]; } void Control::set_offset(Side p_side, real_t p_value) { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_INDEX((int)p_side, 4); if (data.offset[p_side] == p_value) { return; @@ -755,17 +772,20 @@ void Control::set_offset(Side p_side, real_t p_value) { } real_t Control::get_offset(Side p_side) const { + ERR_READ_THREAD_GUARD_V(0); ERR_FAIL_INDEX_V((int)p_side, 4, 0); return data.offset[p_side]; } void Control::set_anchor_and_offset(Side p_side, real_t p_anchor, real_t p_pos, bool p_push_opposite_anchor) { + ERR_MAIN_THREAD_GUARD; set_anchor(p_side, p_anchor, false, p_push_opposite_anchor); set_offset(p_side, p_pos); } void Control::set_begin(const Point2 &p_point) { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_COND(!isfinite(p_point.x) || !isfinite(p_point.y)); if (data.offset[0] == p_point.x && data.offset[1] == p_point.y) { return; @@ -777,10 +797,12 @@ void Control::set_begin(const Point2 &p_point) { } Point2 Control::get_begin() const { + ERR_READ_THREAD_GUARD_V(Vector2()); return Point2(data.offset[0], data.offset[1]); } void Control::set_end(const Point2 &p_point) { + ERR_MAIN_THREAD_GUARD; if (data.offset[2] == p_point.x && data.offset[3] == p_point.y) { return; } @@ -791,10 +813,12 @@ void Control::set_end(const Point2 &p_point) { } Point2 Control::get_end() const { + ERR_READ_THREAD_GUARD_V(Point2()); return Point2(data.offset[2], data.offset[3]); } void Control::set_h_grow_direction(GrowDirection p_direction) { + ERR_MAIN_THREAD_GUARD; if (data.h_grow == p_direction) { return; } @@ -806,10 +830,12 @@ void Control::set_h_grow_direction(GrowDirection p_direction) { } Control::GrowDirection Control::get_h_grow_direction() const { + ERR_READ_THREAD_GUARD_V(GROW_DIRECTION_BEGIN); return data.h_grow; } void Control::set_v_grow_direction(GrowDirection p_direction) { + ERR_MAIN_THREAD_GUARD; if (data.v_grow == p_direction) { return; } @@ -821,6 +847,7 @@ void Control::set_v_grow_direction(GrowDirection p_direction) { } Control::GrowDirection Control::get_v_grow_direction() const { + ERR_READ_THREAD_GUARD_V(GROW_DIRECTION_BEGIN); return data.v_grow; } @@ -1045,6 +1072,7 @@ int Control::_get_anchors_layout_preset() const { } void Control::set_anchors_preset(LayoutPreset p_preset, bool p_keep_offsets) { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_INDEX((int)p_preset, 16); //Left @@ -1161,6 +1189,7 @@ void Control::set_anchors_preset(LayoutPreset p_preset, bool p_keep_offsets) { } void Control::set_offsets_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode, int p_margin) { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_INDEX((int)p_preset, 16); ERR_FAIL_INDEX((int)p_resize_mode, 4); @@ -1296,11 +1325,13 @@ void Control::set_offsets_preset(LayoutPreset p_preset, LayoutPresetMode p_resiz } void Control::set_anchors_and_offsets_preset(LayoutPreset p_preset, LayoutPresetMode p_resize_mode, int p_margin) { + ERR_MAIN_THREAD_GUARD; set_anchors_preset(p_preset); set_offsets_preset(p_preset, p_resize_mode, p_margin); } void Control::set_grow_direction_preset(LayoutPreset p_preset) { + ERR_MAIN_THREAD_GUARD; // Select correct horizontal grow direction. switch (p_preset) { case PRESET_TOP_LEFT: @@ -1363,6 +1394,7 @@ void Control::_set_position(const Point2 &p_point) { } void Control::set_position(const Point2 &p_point, bool p_keep_offsets) { + ERR_MAIN_THREAD_GUARD; if (p_keep_offsets) { _compute_anchors(Rect2(p_point, data.size_cache), data.offset, data.anchor); } else { @@ -1372,6 +1404,7 @@ void Control::set_position(const Point2 &p_point, bool p_keep_offsets) { } Size2 Control::get_position() const { + ERR_READ_THREAD_GUARD_V(Size2()); return data.pos_cache; } @@ -1380,6 +1413,7 @@ void Control::_set_global_position(const Point2 &p_point) { } void Control::set_global_position(const Point2 &p_point, bool p_keep_offsets) { + ERR_MAIN_THREAD_GUARD; Transform2D inv; if (data.parent_canvas_item) { @@ -1390,10 +1424,12 @@ void Control::set_global_position(const Point2 &p_point, bool p_keep_offsets) { } Point2 Control::get_global_position() const { + ERR_READ_THREAD_GUARD_V(Point2()); return get_global_transform().get_origin(); } Point2 Control::get_screen_position() const { + ERR_READ_THREAD_GUARD_V(Point2()); ERR_FAIL_COND_V(!is_inside_tree(), Point2()); return get_screen_transform().get_origin(); } @@ -1408,6 +1444,7 @@ void Control::_set_size(const Size2 &p_size) { } void Control::set_size(const Size2 &p_size, bool p_keep_offsets) { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_COND(!isfinite(p_size.x) || !isfinite(p_size.y)); Size2 new_size = p_size; Size2 min = get_combined_minimum_size(); @@ -1427,14 +1464,17 @@ void Control::set_size(const Size2 &p_size, bool p_keep_offsets) { } Size2 Control::get_size() const { + ERR_READ_THREAD_GUARD_V(Size2()); return data.size_cache; } void Control::reset_size() { + ERR_MAIN_THREAD_GUARD; set_size(Size2()); } void Control::set_rect(const Rect2 &p_rect) { + ERR_MAIN_THREAD_GUARD; for (int i = 0; i < 4; i++) { data.anchor[i] = ANCHOR_BEGIN; } @@ -1446,16 +1486,19 @@ void Control::set_rect(const Rect2 &p_rect) { } Rect2 Control::get_rect() const { + ERR_READ_THREAD_GUARD_V(Rect2()); Transform2D xform = get_transform(); return Rect2(xform.get_origin(), xform.get_scale() * get_size()); } Rect2 Control::get_global_rect() const { + ERR_READ_THREAD_GUARD_V(Rect2()); Transform2D xform = get_global_transform(); return Rect2(xform.get_origin(), xform.get_scale() * get_size()); } Rect2 Control::get_screen_rect() const { + ERR_READ_THREAD_GUARD_V(Rect2()); ERR_FAIL_COND_V(!is_inside_tree(), Rect2()); Transform2D xform = get_screen_transform(); @@ -1463,10 +1506,12 @@ Rect2 Control::get_screen_rect() const { } Rect2 Control::get_anchorable_rect() const { + ERR_READ_THREAD_GUARD_V(Rect2()); return Rect2(Point2(), get_size()); } void Control::set_scale(const Vector2 &p_scale) { + ERR_MAIN_THREAD_GUARD; if (data.scale == p_scale) { return; } @@ -1484,10 +1529,12 @@ void Control::set_scale(const Vector2 &p_scale) { } Vector2 Control::get_scale() const { + ERR_READ_THREAD_GUARD_V(Vector2()); return data.scale; } void Control::set_rotation(real_t p_radians) { + ERR_MAIN_THREAD_GUARD; if (data.rotation == p_radians) { return; } @@ -1498,18 +1545,22 @@ void Control::set_rotation(real_t p_radians) { } void Control::set_rotation_degrees(real_t p_degrees) { + ERR_MAIN_THREAD_GUARD; set_rotation(Math::deg_to_rad(p_degrees)); } real_t Control::get_rotation() const { + ERR_READ_THREAD_GUARD_V(0); return data.rotation; } real_t Control::get_rotation_degrees() const { + ERR_READ_THREAD_GUARD_V(0); return Math::rad_to_deg(get_rotation()); } void Control::set_pivot_offset(const Vector2 &p_pivot) { + ERR_MAIN_THREAD_GUARD; if (data.pivot_offset == p_pivot) { return; } @@ -1520,6 +1571,7 @@ void Control::set_pivot_offset(const Vector2 &p_pivot) { } Vector2 Control::get_pivot_offset() const { + ERR_READ_THREAD_GUARD_V(Vector2()); return data.pivot_offset; } @@ -1541,6 +1593,7 @@ void Control::_update_minimum_size() { } void Control::update_minimum_size() { + ERR_MAIN_THREAD_GUARD; if (!is_inside_tree() || data.block_minimum_size_adjust) { return; } @@ -1577,16 +1630,19 @@ void Control::update_minimum_size() { } void Control::set_block_minimum_size_adjust(bool p_block) { + ERR_MAIN_THREAD_GUARD; data.block_minimum_size_adjust = p_block; } Size2 Control::get_minimum_size() const { + ERR_READ_THREAD_GUARD_V(Size2()); Vector2 ms; GDVIRTUAL_CALL(_get_minimum_size, ms); return ms; } void Control::set_custom_minimum_size(const Size2 &p_custom) { + ERR_MAIN_THREAD_GUARD; if (p_custom == data.custom_minimum_size) { return; } @@ -1601,6 +1657,7 @@ void Control::set_custom_minimum_size(const Size2 &p_custom) { } Size2 Control::get_custom_minimum_size() const { + ERR_READ_THREAD_GUARD_V(Size2()); return data.custom_minimum_size; } @@ -1623,6 +1680,7 @@ void Control::_update_minimum_size_cache() { } Size2 Control::get_combined_minimum_size() const { + ERR_READ_THREAD_GUARD_V(Size2()); if (!data.minimum_size_valid) { const_cast<Control *>(this)->_update_minimum_size_cache(); } @@ -1696,6 +1754,7 @@ void Control::_clear_size_warning() { // Container sizing. void Control::set_h_size_flags(BitField<SizeFlags> p_flags) { + ERR_MAIN_THREAD_GUARD; if ((int)data.h_size_flags == (int)p_flags) { return; } @@ -1704,10 +1763,12 @@ void Control::set_h_size_flags(BitField<SizeFlags> p_flags) { } BitField<Control::SizeFlags> Control::get_h_size_flags() const { + ERR_READ_THREAD_GUARD_V(SIZE_EXPAND_FILL); return data.h_size_flags; } void Control::set_v_size_flags(BitField<SizeFlags> p_flags) { + ERR_MAIN_THREAD_GUARD; if ((int)data.v_size_flags == (int)p_flags) { return; } @@ -1716,10 +1777,12 @@ void Control::set_v_size_flags(BitField<SizeFlags> p_flags) { } BitField<Control::SizeFlags> Control::get_v_size_flags() const { + ERR_READ_THREAD_GUARD_V(SIZE_EXPAND_FILL); return data.v_size_flags; } void Control::set_stretch_ratio(real_t p_ratio) { + ERR_MAIN_THREAD_GUARD; if (data.expand == p_ratio) { return; } @@ -1729,6 +1792,7 @@ void Control::set_stretch_ratio(real_t p_ratio) { } real_t Control::get_stretch_ratio() const { + ERR_READ_THREAD_GUARD_V(0); return data.expand; } @@ -1755,12 +1819,14 @@ void Control::gui_input(const Ref<InputEvent> &p_event) { } void Control::accept_event() { + ERR_MAIN_THREAD_GUARD; if (is_inside_tree()) { get_viewport()->_gui_accept_event(); } } bool Control::has_point(const Point2 &p_point) const { + ERR_READ_THREAD_GUARD_V(false); bool ret; if (GDVIRTUAL_CALL(_has_point, p_point, ret)) { return ret; @@ -1769,6 +1835,7 @@ bool Control::has_point(const Point2 &p_point) const { } void Control::set_mouse_filter(MouseFilter p_filter) { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_INDEX(p_filter, 3); data.mouse_filter = p_filter; notify_property_list_changed(); @@ -1776,23 +1843,28 @@ void Control::set_mouse_filter(MouseFilter p_filter) { } Control::MouseFilter Control::get_mouse_filter() const { + ERR_READ_THREAD_GUARD_V(MOUSE_FILTER_IGNORE); return data.mouse_filter; } void Control::set_force_pass_scroll_events(bool p_force_pass_scroll_events) { + ERR_MAIN_THREAD_GUARD; data.force_pass_scroll_events = p_force_pass_scroll_events; } bool Control::is_force_pass_scroll_events() const { + ERR_READ_THREAD_GUARD_V(false); return data.force_pass_scroll_events; } void Control::warp_mouse(const Point2 &p_position) { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_COND(!is_inside_tree()); get_viewport()->warp_mouse(get_global_transform_with_canvas().xform(p_position)); } void Control::set_shortcut_context(const Node *p_node) { + ERR_MAIN_THREAD_GUARD; if (p_node != nullptr) { data.shortcut_context = p_node->get_instance_id(); } else { @@ -1801,6 +1873,7 @@ void Control::set_shortcut_context(const Node *p_node) { } Node *Control::get_shortcut_context() const { + ERR_READ_THREAD_GUARD_V(nullptr); Object *ctx_obj = ObjectDB::get_instance(data.shortcut_context); Node *ctx_node = Object::cast_to<Node>(ctx_obj); @@ -1808,6 +1881,7 @@ Node *Control::get_shortcut_context() const { } bool Control::is_focus_owner_in_shortcut_context() const { + ERR_READ_THREAD_GUARD_V(false); if (data.shortcut_context == ObjectID()) { // No context, therefore global - always "in" context. return true; @@ -1823,12 +1897,14 @@ bool Control::is_focus_owner_in_shortcut_context() const { // Drag and drop handling. void Control::set_drag_forwarding(const Callable &p_drag, const Callable &p_can_drop, const Callable &p_drop) { + ERR_MAIN_THREAD_GUARD; data.forward_drag = p_drag; data.forward_can_drop = p_can_drop; data.forward_drop = p_drop; } Variant Control::get_drag_data(const Point2 &p_point) { + ERR_READ_THREAD_GUARD_V(Variant()); Variant ret; if (data.forward_drag.is_valid()) { Variant p = p_point; @@ -1846,6 +1922,7 @@ Variant Control::get_drag_data(const Point2 &p_point) { } bool Control::can_drop_data(const Point2 &p_point, const Variant &p_data) const { + ERR_READ_THREAD_GUARD_V(false); if (data.forward_can_drop.is_valid()) { Variant ret; Variant p = p_point; @@ -1864,6 +1941,7 @@ bool Control::can_drop_data(const Point2 &p_point, const Variant &p_data) const } void Control::drop_data(const Point2 &p_point, const Variant &p_data) { + ERR_READ_THREAD_GUARD; if (data.forward_drop.is_valid()) { Variant ret; Variant p = p_point; @@ -1880,6 +1958,7 @@ void Control::drop_data(const Point2 &p_point, const Variant &p_data) { } void Control::force_drag(const Variant &p_data, Control *p_control) { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_COND(!is_inside_tree()); ERR_FAIL_COND(p_data.get_type() == Variant::NIL); @@ -1887,18 +1966,21 @@ void Control::force_drag(const Variant &p_data, Control *p_control) { } void Control::set_drag_preview(Control *p_control) { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_COND(!is_inside_tree()); ERR_FAIL_COND(!get_viewport()->gui_is_dragging()); get_viewport()->_gui_set_drag_preview(this, p_control); } bool Control::is_drag_successful() const { + ERR_READ_THREAD_GUARD_V(false); return is_inside_tree() && get_viewport()->gui_is_drag_successful(); } // Focus. void Control::set_focus_mode(FocusMode p_focus_mode) { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_INDEX((int)p_focus_mode, 3); if (is_inside_tree() && p_focus_mode == FOCUS_NONE && data.focus_mode != FOCUS_NONE && has_focus()) { @@ -1909,14 +1991,17 @@ void Control::set_focus_mode(FocusMode p_focus_mode) { } Control::FocusMode Control::get_focus_mode() const { + ERR_READ_THREAD_GUARD_V(FOCUS_NONE); return data.focus_mode; } bool Control::has_focus() const { + ERR_READ_THREAD_GUARD_V(false); return is_inside_tree() && get_viewport()->_gui_control_has_focus(this); } void Control::grab_focus() { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_COND(!is_inside_tree()); if (data.focus_mode == FOCUS_NONE) { @@ -1928,12 +2013,14 @@ void Control::grab_focus() { } void Control::grab_click_focus() { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_COND(!is_inside_tree()); get_viewport()->_gui_grab_click_focus(this); } void Control::release_focus() { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_COND(!is_inside_tree()); if (!has_focus()) { @@ -1970,6 +2057,7 @@ static Control *_next_control(Control *p_from) { } Control *Control::find_next_valid_focus() const { + ERR_READ_THREAD_GUARD_V(nullptr); Control *from = const_cast<Control *>(this); while (true) { @@ -2060,6 +2148,7 @@ static Control *_prev_control(Control *p_from) { } Control *Control::find_prev_valid_focus() const { + ERR_READ_THREAD_GUARD_V(nullptr); Control *from = const_cast<Control *>(this); while (true) { @@ -2122,28 +2211,34 @@ Control *Control::find_prev_valid_focus() const { } void Control::set_focus_neighbor(Side p_side, const NodePath &p_neighbor) { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_INDEX((int)p_side, 4); data.focus_neighbor[p_side] = p_neighbor; } NodePath Control::get_focus_neighbor(Side p_side) const { + ERR_READ_THREAD_GUARD_V(NodePath()); ERR_FAIL_INDEX_V((int)p_side, 4, NodePath()); return data.focus_neighbor[p_side]; } void Control::set_focus_next(const NodePath &p_next) { + ERR_MAIN_THREAD_GUARD; data.focus_next = p_next; } NodePath Control::get_focus_next() const { + ERR_READ_THREAD_GUARD_V(NodePath()); return data.focus_next; } void Control::set_focus_previous(const NodePath &p_prev) { + ERR_MAIN_THREAD_GUARD; data.focus_prev = p_prev; } NodePath Control::get_focus_previous() const { + ERR_READ_THREAD_GUARD_V(NodePath()); return data.focus_prev; } @@ -2290,6 +2385,7 @@ void Control::_window_find_focus_neighbor(const Vector2 &p_dir, Node *p_at, cons // Rendering. void Control::set_default_cursor_shape(CursorShape p_shape) { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_INDEX(int(p_shape), CURSOR_MAX); if (data.default_cursor == p_shape) { @@ -2308,14 +2404,17 @@ void Control::set_default_cursor_shape(CursorShape p_shape) { } Control::CursorShape Control::get_default_cursor_shape() const { + ERR_READ_THREAD_GUARD_V(CURSOR_ARROW); return data.default_cursor; } Control::CursorShape Control::get_cursor_shape(const Point2 &p_pos) const { + ERR_READ_THREAD_GUARD_V(CURSOR_ARROW); return data.default_cursor; } void Control::set_disable_visibility_clip(bool p_ignore) { + ERR_MAIN_THREAD_GUARD; if (data.disable_visibility_clip == p_ignore) { return; } @@ -2324,10 +2423,12 @@ void Control::set_disable_visibility_clip(bool p_ignore) { } bool Control::is_visibility_clip_disabled() const { + ERR_READ_THREAD_GUARD_V(false); return data.disable_visibility_clip; } void Control::set_clip_contents(bool p_clip) { + ERR_MAIN_THREAD_GUARD; if (data.clip_contents == p_clip) { return; } @@ -2336,6 +2437,7 @@ void Control::set_clip_contents(bool p_clip) { } bool Control::is_clipping_contents() { + ERR_READ_THREAD_GUARD_V(false); return data.clip_contents; } @@ -2366,18 +2468,22 @@ void Control::_update_theme_item_cache() { } void Control::set_theme_owner_node(Node *p_node) { + ERR_MAIN_THREAD_GUARD; data.theme_owner->set_owner_node(p_node); } Node *Control::get_theme_owner_node() const { + ERR_READ_THREAD_GUARD_V(nullptr); return data.theme_owner->get_owner_node(); } bool Control::has_theme_owner_node() const { + ERR_READ_THREAD_GUARD_V(false); return data.theme_owner->has_owner_node(); } void Control::set_theme(const Ref<Theme> &p_theme) { + ERR_MAIN_THREAD_GUARD; if (data.theme == p_theme) { return; } @@ -2409,10 +2515,12 @@ void Control::set_theme(const Ref<Theme> &p_theme) { } Ref<Theme> Control::get_theme() const { + ERR_READ_THREAD_GUARD_V(Ref<Theme>()); return data.theme; } void Control::set_theme_type_variation(const StringName &p_theme_type) { + ERR_MAIN_THREAD_GUARD; if (data.theme_type_variation == p_theme_type) { return; } @@ -2423,12 +2531,14 @@ void Control::set_theme_type_variation(const StringName &p_theme_type) { } StringName Control::get_theme_type_variation() const { + ERR_READ_THREAD_GUARD_V(StringName()); return data.theme_type_variation; } /// Theme property lookup. Ref<Texture2D> Control::get_theme_icon(const StringName &p_name, const StringName &p_theme_type) const { + ERR_READ_THREAD_GUARD_V(Ref<Texture2D>()); if (!data.initialized) { WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED"); } @@ -2452,6 +2562,7 @@ Ref<Texture2D> Control::get_theme_icon(const StringName &p_name, const StringNam } Ref<StyleBox> Control::get_theme_stylebox(const StringName &p_name, const StringName &p_theme_type) const { + ERR_READ_THREAD_GUARD_V(Ref<StyleBox>()); if (!data.initialized) { WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED"); } @@ -2475,6 +2586,7 @@ Ref<StyleBox> Control::get_theme_stylebox(const StringName &p_name, const String } Ref<Font> Control::get_theme_font(const StringName &p_name, const StringName &p_theme_type) const { + ERR_READ_THREAD_GUARD_V(Ref<Font>()); if (!data.initialized) { WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED"); } @@ -2498,6 +2610,7 @@ Ref<Font> Control::get_theme_font(const StringName &p_name, const StringName &p_ } int Control::get_theme_font_size(const StringName &p_name, const StringName &p_theme_type) const { + ERR_READ_THREAD_GUARD_V(0); if (!data.initialized) { WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED"); } @@ -2521,6 +2634,7 @@ int Control::get_theme_font_size(const StringName &p_name, const StringName &p_t } Color Control::get_theme_color(const StringName &p_name, const StringName &p_theme_type) const { + ERR_READ_THREAD_GUARD_V(Color()); if (!data.initialized) { WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED"); } @@ -2544,6 +2658,7 @@ Color Control::get_theme_color(const StringName &p_name, const StringName &p_the } int Control::get_theme_constant(const StringName &p_name, const StringName &p_theme_type) const { + ERR_READ_THREAD_GUARD_V(0); if (!data.initialized) { WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED"); } @@ -2567,6 +2682,7 @@ int Control::get_theme_constant(const StringName &p_name, const StringName &p_th } bool Control::has_theme_icon(const StringName &p_name, const StringName &p_theme_type) const { + ERR_READ_THREAD_GUARD_V(false); if (!data.initialized) { WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED"); } @@ -2583,6 +2699,7 @@ bool Control::has_theme_icon(const StringName &p_name, const StringName &p_theme } bool Control::has_theme_stylebox(const StringName &p_name, const StringName &p_theme_type) const { + ERR_READ_THREAD_GUARD_V(false); if (!data.initialized) { WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED"); } @@ -2599,6 +2716,7 @@ bool Control::has_theme_stylebox(const StringName &p_name, const StringName &p_t } bool Control::has_theme_font(const StringName &p_name, const StringName &p_theme_type) const { + ERR_READ_THREAD_GUARD_V(false); if (!data.initialized) { WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED"); } @@ -2615,6 +2733,7 @@ bool Control::has_theme_font(const StringName &p_name, const StringName &p_theme } bool Control::has_theme_font_size(const StringName &p_name, const StringName &p_theme_type) const { + ERR_READ_THREAD_GUARD_V(false); if (!data.initialized) { WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED"); } @@ -2631,6 +2750,7 @@ bool Control::has_theme_font_size(const StringName &p_name, const StringName &p_ } bool Control::has_theme_color(const StringName &p_name, const StringName &p_theme_type) const { + ERR_READ_THREAD_GUARD_V(false); if (!data.initialized) { WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED"); } @@ -2647,6 +2767,7 @@ bool Control::has_theme_color(const StringName &p_name, const StringName &p_them } bool Control::has_theme_constant(const StringName &p_name, const StringName &p_theme_type) const { + ERR_READ_THREAD_GUARD_V(false); if (!data.initialized) { WARN_PRINT_ONCE("Attempting to access theme items too early; prefer NOTIFICATION_POSTINITIALIZE and NOTIFICATION_THEME_CHANGED"); } @@ -2665,6 +2786,7 @@ bool Control::has_theme_constant(const StringName &p_name, const StringName &p_t /// Local property overrides. void Control::add_theme_icon_override(const StringName &p_name, const Ref<Texture2D> &p_icon) { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_COND(!p_icon.is_valid()); if (data.theme_icon_override.has(p_name)) { @@ -2677,6 +2799,7 @@ void Control::add_theme_icon_override(const StringName &p_name, const Ref<Textur } void Control::add_theme_style_override(const StringName &p_name, const Ref<StyleBox> &p_style) { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_COND(!p_style.is_valid()); if (data.theme_style_override.has(p_name)) { @@ -2689,6 +2812,7 @@ void Control::add_theme_style_override(const StringName &p_name, const Ref<Style } void Control::add_theme_font_override(const StringName &p_name, const Ref<Font> &p_font) { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_COND(!p_font.is_valid()); if (data.theme_font_override.has(p_name)) { @@ -2701,21 +2825,25 @@ void Control::add_theme_font_override(const StringName &p_name, const Ref<Font> } void Control::add_theme_font_size_override(const StringName &p_name, int p_font_size) { + ERR_MAIN_THREAD_GUARD; data.theme_font_size_override[p_name] = p_font_size; _notify_theme_override_changed(); } void Control::add_theme_color_override(const StringName &p_name, const Color &p_color) { + ERR_MAIN_THREAD_GUARD; data.theme_color_override[p_name] = p_color; _notify_theme_override_changed(); } void Control::add_theme_constant_override(const StringName &p_name, int p_constant) { + ERR_MAIN_THREAD_GUARD; data.theme_constant_override[p_name] = p_constant; _notify_theme_override_changed(); } void Control::remove_theme_icon_override(const StringName &p_name) { + ERR_MAIN_THREAD_GUARD; if (data.theme_icon_override.has(p_name)) { data.theme_icon_override[p_name]->disconnect("changed", callable_mp(this, &Control::_notify_theme_override_changed)); } @@ -2725,6 +2853,7 @@ void Control::remove_theme_icon_override(const StringName &p_name) { } void Control::remove_theme_style_override(const StringName &p_name) { + ERR_MAIN_THREAD_GUARD; if (data.theme_style_override.has(p_name)) { data.theme_style_override[p_name]->disconnect("changed", callable_mp(this, &Control::_notify_theme_override_changed)); } @@ -2734,6 +2863,7 @@ void Control::remove_theme_style_override(const StringName &p_name) { } void Control::remove_theme_font_override(const StringName &p_name) { + ERR_MAIN_THREAD_GUARD; if (data.theme_font_override.has(p_name)) { data.theme_font_override[p_name]->disconnect("changed", callable_mp(this, &Control::_notify_theme_override_changed)); } @@ -2743,46 +2873,55 @@ void Control::remove_theme_font_override(const StringName &p_name) { } void Control::remove_theme_font_size_override(const StringName &p_name) { + ERR_MAIN_THREAD_GUARD; data.theme_font_size_override.erase(p_name); _notify_theme_override_changed(); } void Control::remove_theme_color_override(const StringName &p_name) { + ERR_MAIN_THREAD_GUARD; data.theme_color_override.erase(p_name); _notify_theme_override_changed(); } void Control::remove_theme_constant_override(const StringName &p_name) { + ERR_MAIN_THREAD_GUARD; data.theme_constant_override.erase(p_name); _notify_theme_override_changed(); } bool Control::has_theme_icon_override(const StringName &p_name) const { + ERR_READ_THREAD_GUARD_V(false); const Ref<Texture2D> *tex = data.theme_icon_override.getptr(p_name); return tex != nullptr; } bool Control::has_theme_stylebox_override(const StringName &p_name) const { + ERR_READ_THREAD_GUARD_V(false); const Ref<StyleBox> *style = data.theme_style_override.getptr(p_name); return style != nullptr; } bool Control::has_theme_font_override(const StringName &p_name) const { + ERR_READ_THREAD_GUARD_V(false); const Ref<Font> *font = data.theme_font_override.getptr(p_name); return font != nullptr; } bool Control::has_theme_font_size_override(const StringName &p_name) const { + ERR_READ_THREAD_GUARD_V(false); const int *font_size = data.theme_font_size_override.getptr(p_name); return font_size != nullptr; } bool Control::has_theme_color_override(const StringName &p_name) const { + ERR_READ_THREAD_GUARD_V(false); const Color *color = data.theme_color_override.getptr(p_name); return color != nullptr; } bool Control::has_theme_constant_override(const StringName &p_name) const { + ERR_READ_THREAD_GUARD_V(false); const int *constant = data.theme_constant_override.getptr(p_name); return constant != nullptr; } @@ -2790,24 +2929,29 @@ bool Control::has_theme_constant_override(const StringName &p_name) const { /// Default theme properties. float Control::get_theme_default_base_scale() const { + ERR_READ_THREAD_GUARD_V(0); return data.theme_owner->get_theme_default_base_scale(); } Ref<Font> Control::get_theme_default_font() const { + ERR_READ_THREAD_GUARD_V(Ref<Font>()); return data.theme_owner->get_theme_default_font(); } int Control::get_theme_default_font_size() const { + ERR_READ_THREAD_GUARD_V(0); return data.theme_owner->get_theme_default_font_size(); } /// Bulk actions. void Control::begin_bulk_theme_override() { + ERR_MAIN_THREAD_GUARD; data.bulk_theme_override = true; } void Control::end_bulk_theme_override() { + ERR_MAIN_THREAD_GUARD; ERR_FAIL_COND(!data.bulk_theme_override); data.bulk_theme_override = false; @@ -2817,6 +2961,7 @@ void Control::end_bulk_theme_override() { // Internationalization. TypedArray<Vector3i> Control::structured_text_parser(TextServer::StructuredTextParser p_parser_type, const Array &p_args, const String &p_text) const { + ERR_READ_THREAD_GUARD_V(TypedArray<Vector3i>()); if (p_parser_type == TextServer::STRUCTURED_TEXT_CUSTOM) { TypedArray<Vector3i> ret; GDVIRTUAL_CALL(_structured_text_parser, p_args, p_text, ret); @@ -2827,6 +2972,7 @@ TypedArray<Vector3i> Control::structured_text_parser(TextServer::StructuredTextP } void Control::set_layout_direction(Control::LayoutDirection p_direction) { + ERR_MAIN_THREAD_GUARD; if (data.layout_dir == p_direction) { return; } @@ -2839,10 +2985,12 @@ void Control::set_layout_direction(Control::LayoutDirection p_direction) { } Control::LayoutDirection Control::get_layout_direction() const { + ERR_READ_THREAD_GUARD_V(LAYOUT_DIRECTION_INHERITED); return data.layout_dir; } bool Control::is_layout_rtl() const { + ERR_READ_THREAD_GUARD_V(false); if (data.is_rtl_dirty) { const_cast<Control *>(this)->data.is_rtl_dirty = false; if (data.layout_dir == LAYOUT_DIRECTION_INHERITED) { @@ -2890,6 +3038,7 @@ bool Control::is_layout_rtl() const { } void Control::set_localize_numeral_system(bool p_enable) { + ERR_MAIN_THREAD_GUARD; if (p_enable == data.localize_numeral_system) { return; } @@ -2900,10 +3049,12 @@ void Control::set_localize_numeral_system(bool p_enable) { } bool Control::is_localizing_numeral_system() const { + ERR_READ_THREAD_GUARD_V(false); return data.localize_numeral_system; } void Control::set_auto_translate(bool p_enable) { + ERR_MAIN_THREAD_GUARD; if (p_enable == data.auto_translate) { return; } @@ -2914,21 +3065,25 @@ void Control::set_auto_translate(bool p_enable) { } bool Control::is_auto_translating() const { + ERR_READ_THREAD_GUARD_V(false); return data.auto_translate; } // Extra properties. void Control::set_tooltip_text(const String &p_hint) { + ERR_MAIN_THREAD_GUARD; data.tooltip = p_hint; update_configuration_warnings(); } String Control::get_tooltip_text() const { + ERR_READ_THREAD_GUARD_V(String()); return data.tooltip; } String Control::get_tooltip(const Point2 &p_pos) const { + ERR_READ_THREAD_GUARD_V(String()); String ret; if (GDVIRTUAL_CALL(_get_tooltip, p_pos, ret)) { return ret; @@ -2937,6 +3092,7 @@ String Control::get_tooltip(const Point2 &p_pos) const { } Control *Control::make_custom_tooltip(const String &p_text) const { + ERR_READ_THREAD_GUARD_V(nullptr); Object *ret = nullptr; GDVIRTUAL_CALL(_make_custom_tooltip, p_text, ret); return Object::cast_to<Control>(ret); @@ -2945,6 +3101,7 @@ Control *Control::make_custom_tooltip(const String &p_text) const { // Base object overrides. void Control::_notification(int p_notification) { + ERR_MAIN_THREAD_GUARD; switch (p_notification) { case NOTIFICATION_POSTINITIALIZE: { data.initialized = true; |