diff --git a/doc/classes/EditorSpinSlider.xml b/doc/classes/EditorSpinSlider.xml index 6cd375a46de9..b0b3f0faf76c 100644 --- a/doc/classes/EditorSpinSlider.xml +++ b/doc/classes/EditorSpinSlider.xml @@ -10,6 +10,9 @@ + + If [code]true[/code], the [EditorSpinSlider] is considered to be editing an integer value. If [code]false[/code], the [EditorSpinSlider] is considered to be editing a floating-point value. This is used to determine whether a slider should be drawn. The slider is only drawn for floats; integers use up-down arrows similar to [SpinBox] instead. + If [code]true[/code], the slider will not draw background. diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index b1a4bb76f325..73f6c70f3423 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -1343,6 +1343,7 @@ void EditorPropertyInteger::setup(int64_t p_min, int64_t p_max, int64_t p_step, EditorPropertyInteger::EditorPropertyInteger() { spin = memnew(EditorSpinSlider); spin->set_flat(true); + spin->set_editing_integer(true); add_child(spin); add_focusable(spin); spin->connect(SceneStringName(value_changed), callable_mp(this, &EditorPropertyInteger::_value_changed)); diff --git a/editor/gui/editor_spin_slider.cpp b/editor/gui/editor_spin_slider.cpp index cef23fdda1f1..a9d8e3ae6c6e 100644 --- a/editor/gui/editor_spin_slider.cpp +++ b/editor/gui/editor_spin_slider.cpp @@ -376,7 +376,7 @@ void EditorSpinSlider::_draw_spin_slider() { TS->free_rid(num_rid); if (!hide_slider) { - if (get_step() == 1) { + if (editing_integer) { Ref updown2 = read_only ? theme_cache.updown_disabled_icon : theme_cache.updown_icon; int updown_vofs = (size.height - updown2->get_height()) / 2; if (rtl) { @@ -530,6 +530,19 @@ bool EditorSpinSlider::is_hiding_slider() const { return hide_slider; } +void EditorSpinSlider::set_editing_integer(bool p_editing_integer) { + if (p_editing_integer == editing_integer) { + return; + } + + editing_integer = p_editing_integer; + queue_redraw(); +} + +bool EditorSpinSlider::is_editing_integer() const { + return editing_integer; +} + void EditorSpinSlider::set_label(const String &p_label) { label = p_label; queue_redraw(); @@ -689,11 +702,15 @@ void EditorSpinSlider::_bind_methods() { ClassDB::bind_method(D_METHOD("set_hide_slider", "hide_slider"), &EditorSpinSlider::set_hide_slider); ClassDB::bind_method(D_METHOD("is_hiding_slider"), &EditorSpinSlider::is_hiding_slider); + ClassDB::bind_method(D_METHOD("set_editing_integer", "editing_integer"), &EditorSpinSlider::set_editing_integer); + ClassDB::bind_method(D_METHOD("is_editing_integer"), &EditorSpinSlider::is_editing_integer); + ADD_PROPERTY(PropertyInfo(Variant::STRING, "label"), "set_label", "get_label"); ADD_PROPERTY(PropertyInfo(Variant::STRING, "suffix"), "set_suffix", "get_suffix"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "read_only"), "set_read_only", "is_read_only"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "flat"), "set_flat", "is_flat"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "hide_slider"), "set_hide_slider", "is_hiding_slider"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "editing_integer"), "set_editing_integer", "is_editing_integer"); ADD_SIGNAL(MethodInfo("grabbed")); ADD_SIGNAL(MethodInfo("ungrabbed")); diff --git a/editor/gui/editor_spin_slider.h b/editor/gui/editor_spin_slider.h index dfc50878dd22..f3fe6e2145ea 100644 --- a/editor/gui/editor_spin_slider.h +++ b/editor/gui/editor_spin_slider.h @@ -71,6 +71,7 @@ class EditorSpinSlider : public Range { bool hide_slider = false; bool flat = false; + bool editing_integer = false; void _grab_start(); void _grab_end(); @@ -113,6 +114,9 @@ class EditorSpinSlider : public Range { void set_hide_slider(bool p_hide); bool is_hiding_slider() const; + void set_editing_integer(bool p_editing_integer); + bool is_editing_integer() const; + void set_read_only(bool p_enable); bool is_read_only() const;