summaryrefslogtreecommitdiffstats
path: root/scene/gui
diff options
context:
space:
mode:
Diffstat (limited to 'scene/gui')
-rw-r--r--scene/gui/code_edit.cpp15
-rw-r--r--scene/gui/file_dialog.cpp2
-rw-r--r--scene/gui/graph_element.cpp2
-rw-r--r--scene/gui/line_edit.cpp1
-rw-r--r--scene/gui/popup_menu.cpp18
-rw-r--r--scene/gui/rich_text_label.cpp5
-rw-r--r--scene/gui/text_edit.cpp3
-rw-r--r--scene/gui/tree.cpp26
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 */