diff options
Diffstat (limited to 'scene')
-rw-r--r-- | scene/gui/spin_box.cpp | 2 | ||||
-rw-r--r-- | scene/gui/text_edit.cpp | 14 | ||||
-rw-r--r-- | scene/gui/text_edit.h | 4 | ||||
-rwxr-xr-x | scene/main/node.cpp | 18 | ||||
-rw-r--r-- | scene/main/node.h | 2 | ||||
-rw-r--r-- | scene/main/viewport.cpp | 4 | ||||
-rw-r--r-- | scene/resources/color_ramp.cpp | 4 |
7 files changed, 44 insertions, 4 deletions
diff --git a/scene/gui/spin_box.cpp b/scene/gui/spin_box.cpp index c5b9df15b9..751edc5a43 100644 --- a/scene/gui/spin_box.cpp +++ b/scene/gui/spin_box.cpp @@ -192,7 +192,7 @@ void SpinBox::_notification(int p_what) { int w = updown->get_width(); if (w != last_w) { - line_edit->set_margin(MARGIN_RIGHT, w); + line_edit->set_margin(MARGIN_RIGHT, -w); last_w = w; } diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index f99cbbad89..fa51099411 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -429,7 +429,7 @@ void TextEdit::_notification(int p_what) { if (scrolling && v_scroll->get_value() != target_v_scroll) { double target_y = target_v_scroll - v_scroll->get_value(); double dist = sqrt(target_y * target_y); - double vel = ((target_y / dist) * 50) * get_fixed_process_delta_time(); + double vel = ((target_y / dist) * v_scroll_speed) * get_fixed_process_delta_time(); if (vel >= dist) { v_scroll->set_value(target_v_scroll); @@ -4264,6 +4264,14 @@ bool TextEdit::is_smooth_scroll_enabled() const { return smooth_scroll_enabled; } +void TextEdit::set_v_scroll_speed(float p_speed) { + v_scroll_speed = p_speed; +} + +float TextEdit::get_v_scroll_speed() const { + return v_scroll_speed; +} + void TextEdit::set_completion(bool p_enabled, const Vector<String> &p_prefixes) { completion_prefixes.clear(); @@ -4766,6 +4774,8 @@ void TextEdit::_bind_methods() { ClassDB::bind_method(D_METHOD("set_smooth_scroll_enable", "enable"), &TextEdit::set_smooth_scroll_enabled); ClassDB::bind_method(D_METHOD("is_smooth_scroll_enabled"), &TextEdit::is_smooth_scroll_enabled); + ClassDB::bind_method(D_METHOD("set_v_scroll_speed", "speed"), &TextEdit::set_v_scroll_speed); + ClassDB::bind_method(D_METHOD("get_v_scroll_speed"), &TextEdit::get_v_scroll_speed); ClassDB::bind_method(D_METHOD("add_keyword_color", "keyword", "color"), &TextEdit::add_keyword_color); ClassDB::bind_method(D_METHOD("add_color_region", "begin_key", "end_key", "color", "line_only"), &TextEdit::add_color_region, DEFVAL(false)); @@ -4777,6 +4787,7 @@ void TextEdit::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::BOOL, "show_line_numbers"), "set_show_line_numbers", "is_show_line_numbers_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "highlight_all_occurrences"), "set_highlight_all_occurrences", "is_highlight_all_occurrences_enabled"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "smooth_scrolling"), "set_smooth_scroll_enable", "is_smooth_scroll_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::REAL, "v_scroll_speed"), "set_v_scroll_speed", "get_v_scroll_speed"); ADD_GROUP("Caret", "caret_"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "caret_block_mode"), "cursor_set_block_mode", "cursor_is_block_mode"); @@ -4916,6 +4927,7 @@ TextEdit::TextEdit() { smooth_scroll_enabled = false; scrolling = false; target_v_scroll = 0; + v_scroll_speed = 80; raised_from_completion = false; diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h index c4e0700531..d942f521cd 100644 --- a/scene/gui/text_edit.h +++ b/scene/gui/text_edit.h @@ -259,6 +259,7 @@ class TextEdit : public Control { bool smooth_scroll_enabled; bool scrolling; float target_v_scroll; + float v_scroll_speed; bool raised_from_completion; @@ -494,6 +495,9 @@ public: void set_smooth_scroll_enabled(bool p_enable); bool is_smooth_scroll_enabled() const; + void set_v_scroll_speed(float p_speed); + float get_v_scroll_speed() const; + uint32_t get_version() const; uint32_t get_saved_version() const; void tag_saved_version(); diff --git a/scene/main/node.cpp b/scene/main/node.cpp index 0474c6fd26..8a31b1ef01 100755 --- a/scene/main/node.cpp +++ b/scene/main/node.cpp @@ -1954,6 +1954,23 @@ void Node::propagate_notification(int p_notification) { data.blocked--; } +void Node::propagate_call(const StringName &p_method, const Array &p_args, const bool p_parent_first) { + + data.blocked++; + + if (p_parent_first && has_method(p_method)) + callv(p_method, p_args); + + for (int i = 0; i < data.children.size(); i++) { + data.children[i]->propagate_call(p_method, p_args, p_parent_first); + } + + if (!p_parent_first && has_method(p_method)) + callv(p_method, p_args); + + data.blocked--; +} + void Node::_propagate_replace_owner(Node *p_owner, Node *p_by_owner) { if (get_owner() == p_owner) set_owner(p_by_owner); @@ -2761,6 +2778,7 @@ void Node::_bind_methods() { ClassDB::bind_method(D_METHOD("set_filename", "filename"), &Node::set_filename); ClassDB::bind_method(D_METHOD("get_filename"), &Node::get_filename); ClassDB::bind_method(D_METHOD("propagate_notification", "what"), &Node::propagate_notification); + ClassDB::bind_method(D_METHOD("propagate_call", "method", "args", "parent_first"), &Node::propagate_call, DEFVAL(Array()), DEFVAL(false)); ClassDB::bind_method(D_METHOD("set_fixed_process", "enable"), &Node::set_fixed_process); ClassDB::bind_method(D_METHOD("get_fixed_process_delta_time"), &Node::get_fixed_process_delta_time); ClassDB::bind_method(D_METHOD("is_fixed_processing"), &Node::is_fixed_processing); diff --git a/scene/main/node.h b/scene/main/node.h index bb8d80a0c8..180ec05773 100644 --- a/scene/main/node.h +++ b/scene/main/node.h @@ -298,6 +298,8 @@ public: void propagate_notification(int p_notification); + void propagate_call(const StringName &p_method, const Array &p_args = Array(), const bool p_parent_first = false); + /* PROCESSING */ void set_fixed_process(bool p_process); float get_fixed_process_delta_time() const; diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 7148cda5c4..e19e069282 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -1456,6 +1456,10 @@ void Viewport::_gui_show_tooltip() { gui.tooltip_popup = NULL; } + if (!gui.tooltip) { + return; + } + Control *rp = gui.tooltip->get_root_parent_control(); if (!rp) return; diff --git a/scene/resources/color_ramp.cpp b/scene/resources/color_ramp.cpp index 1825225abd..68f707220f 100644 --- a/scene/resources/color_ramp.cpp +++ b/scene/resources/color_ramp.cpp @@ -149,7 +149,7 @@ void Gradient::set_offset(int pos, const float offset) { } float Gradient::get_offset(int pos) const { - if (points.size() > pos) + if (points.size() && points.size() > pos) return points[pos].offset; return 0; //TODO: Maybe throw some error instead? } @@ -164,7 +164,7 @@ void Gradient::set_color(int pos, const Color &color) { } Color Gradient::get_color(int pos) const { - if (points.size() > pos) + if (points.size() && points.size() > pos) return points[pos].color; return Color(0, 0, 0, 1); //TODO: Maybe throw some error instead? } |