diff options
Diffstat (limited to 'scene/gui')
| -rw-r--r-- | scene/gui/code_edit.cpp | 15 | ||||
| -rw-r--r-- | scene/gui/file_dialog.cpp | 2 | ||||
| -rw-r--r-- | scene/gui/graph_element.cpp | 2 | ||||
| -rw-r--r-- | scene/gui/line_edit.cpp | 1 | ||||
| -rw-r--r-- | scene/gui/popup_menu.cpp | 18 | ||||
| -rw-r--r-- | scene/gui/rich_text_label.cpp | 5 | ||||
| -rw-r--r-- | scene/gui/text_edit.cpp | 3 | ||||
| -rw-r--r-- | scene/gui/tree.cpp | 26 |
8 files changed, 30 insertions, 42 deletions
diff --git a/scene/gui/code_edit.cpp b/scene/gui/code_edit.cpp index 20fcf9cba7..40c276e4e0 100644 --- a/scene/gui/code_edit.cpp +++ b/scene/gui/code_edit.cpp @@ -479,19 +479,8 @@ void CodeEdit::gui_input(const Ref<InputEvent> &p_gui_input) { accept_event(); return; } - if (k->is_action("ui_home", true)) { - code_completion_current_selected = 0; - code_completion_force_item_center = -1; - queue_redraw(); - accept_event(); - return; - } - if (k->is_action("ui_end", true)) { - code_completion_current_selected = code_completion_options.size() - 1; - code_completion_force_item_center = -1; - queue_redraw(); - accept_event(); - return; + if (k->is_action("ui_text_caret_line_start", true) || k->is_action("ui_text_caret_line_end", true)) { + cancel_code_completion(); } if (k->is_action("ui_text_completion_replace", true) || k->is_action("ui_text_completion_accept", true)) { confirm_code_completion(k->is_action("ui_text_completion_replace", true)); diff --git a/scene/gui/file_dialog.cpp b/scene/gui/file_dialog.cpp index be05273a09..2d2e964449 100644 --- a/scene/gui/file_dialog.cpp +++ b/scene/gui/file_dialog.cpp @@ -676,7 +676,7 @@ void FileDialog::update_file_list() { files.pop_front(); } - if (mode != FILE_MODE_SAVE_FILE) { + if (mode != FILE_MODE_SAVE_FILE && mode != FILE_MODE_OPEN_DIR) { // Select the first file from list if nothing is selected. if (tree->get_root() && tree->get_root()->get_first_child() && tree->get_selected() == nullptr) { tree->get_root()->get_first_child()->select(0); diff --git a/scene/gui/graph_element.cpp b/scene/gui/graph_element.cpp index 5129fdd135..7fa5b0ceec 100644 --- a/scene/gui/graph_element.cpp +++ b/scene/gui/graph_element.cpp @@ -150,7 +150,7 @@ void GraphElement::gui_input(const Ref<InputEvent> &p_ev) { Ref<InputEventMouseButton> mb = p_ev; if (mb.is_valid()) { - ERR_FAIL_COND_MSG(get_parent_control() == nullptr, "GraphElement must be the child of a GraphEdit node."); + ERR_FAIL_NULL_MSG(get_parent_control(), "GraphElement must be the child of a GraphEdit node."); if (mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) { Vector2 mpos = mb->get_position(); diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp index ec6d5f01f1..9de86d1877 100644 --- a/scene/gui/line_edit.cpp +++ b/scene/gui/line_edit.cpp @@ -486,6 +486,7 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) { if (k->is_action("ui_cancel")) { callable_mp((Control *)this, &Control::release_focus).call_deferred(); + accept_event(); return; } diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp index e3b0a18325..2e4a35e1d3 100644 --- a/scene/gui/popup_menu.cpp +++ b/scene/gui/popup_menu.cpp @@ -2170,14 +2170,16 @@ int PopupMenu::get_item_count() const { void PopupMenu::scroll_to_item(int p_idx) { ERR_FAIL_INDEX(p_idx, items.size()); - // Scroll item into view (upwards). - if (items[p_idx]._ofs_cache - scroll_container->get_v_scroll() < -control->get_position().y) { - scroll_container->set_v_scroll(items[p_idx]._ofs_cache + control->get_position().y); - } - - // Scroll item into view (downwards). - if (items[p_idx]._ofs_cache + items[p_idx]._height_cache - scroll_container->get_v_scroll() > -control->get_position().y + scroll_container->get_size().height) { - scroll_container->set_v_scroll(items[p_idx]._ofs_cache + items[p_idx]._height_cache + control->get_position().y); + // Calculate the position of the item relative to the visible area. + int item_y = items[p_idx]._ofs_cache; + int visible_height = scroll_container->get_size().height; + int relative_y = item_y - scroll_container->get_v_scroll(); + + // If item is not fully visible, adjust scroll. + if (relative_y < 0) { + scroll_container->set_v_scroll(item_y); + } else if (relative_y + items[p_idx]._height_cache > visible_height) { + scroll_container->set_v_scroll(item_y + items[p_idx]._height_cache - visible_height); } } diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp index b4cd201e6a..7768c2d84e 100644 --- a/scene/gui/rich_text_label.cpp +++ b/scene/gui/rich_text_label.cpp @@ -1143,8 +1143,7 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o if (is_inside_tree() && get_viewport()->is_snap_2d_transforms_to_pixel_enabled()) { fx_offset = fx_offset.round(); } - - Vector2i char_off = char_xform.get_origin(); + Vector2 char_off = char_xform.get_origin(); // Draw glyph outlines. const Color modulated_outline_color = font_outline_color * Color(1, 1, 1, font_color.a); @@ -1389,8 +1388,8 @@ int RichTextLabel::_draw_line(ItemFrame *p_frame, int p_line, const Vector2 &p_o if (is_inside_tree() && get_viewport()->is_snap_2d_transforms_to_pixel_enabled()) { fx_offset = fx_offset.round(); } + Vector2 char_off = char_xform.get_origin(); - Vector2i char_off = char_xform.get_origin(); Transform2D char_reverse_xform; char_reverse_xform.set_origin(-char_off); char_xform = char_xform * char_reverse_xform; diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 2f5c05859f..073f164bdd 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -212,9 +212,6 @@ void TextEdit::Text::invalidate_cache(int p_line, int p_column, bool p_text_chan for (int i = 0; i < spans; i++) { TS->shaped_set_span_update_font(r, i, font->get_rids(), font_size, font->get_opentype_features()); } - for (int i = 0; i < TextServer::SPACING_MAX; i++) { - TS->shaped_text_set_spacing(r, TextServer::SpacingType(i), font->get_spacing(TextServer::SpacingType(i))); - } } // Apply tab align. diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index e78789edbd..2d3166270b 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -2770,21 +2770,9 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, int x -= theme_cache.h_separation; } - if (!p_item->disable_folding && !hide_folding && !p_item->cells[col].editable && !p_item->cells[col].selectable && p_item->get_first_child()) { - if (enable_recursive_folding && p_mod->is_shift_pressed()) { - p_item->set_collapsed_recursive(!p_item->is_collapsed()); - } else { - p_item->set_collapsed(!p_item->is_collapsed()); - } - return -1; //collapse/uncollapse because nothing can be done with item - } - const TreeItem::Cell &c = p_item->cells[col]; - bool already_selected = c.selected; - bool already_cursor = (p_item == selected_item) && col == selected_col; - - if (!cache.rtl && p_item->cells[col].buttons.size()) { + if (!cache.rtl && !p_item->cells[col].buttons.is_empty()) { int button_w = 0; for (int j = p_item->cells[col].buttons.size() - 1; j >= 0; j--) { Ref<Texture2D> b = p_item->cells[col].buttons[j].texture; @@ -2827,6 +2815,18 @@ int Tree::propagate_mouse_event(const Point2i &p_pos, int x_ofs, int y_ofs, int col_width -= w + theme_cache.button_margin; } + if (!p_item->disable_folding && !hide_folding && !p_item->cells[col].editable && !p_item->cells[col].selectable && p_item->get_first_child()) { + if (enable_recursive_folding && p_mod->is_shift_pressed()) { + p_item->set_collapsed_recursive(!p_item->is_collapsed()); + } else { + p_item->set_collapsed(!p_item->is_collapsed()); + } + return -1; // Collapse/uncollapse, because nothing can be done with the item. + } + + bool already_selected = c.selected; + bool already_cursor = (p_item == selected_item) && col == selected_col; + if (p_button == MouseButton::LEFT || (p_button == MouseButton::RIGHT && allow_rmb_select)) { /* process selection */ |
