mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-01-18 17:19:50 +00:00
Create ValueSlider and CollapsibleContainer child nodes through code
This lets us create ValueSlider and CollapsibleContainer nodes properly via the add node button, instead of instancing their scenes. They have also become more a bit more themeable. Eventually, ValueSlider.tscn and CollapsibleContainer.tscn will be deleted.
This commit is contained in:
parent
20db211c13
commit
7dc0af21e7
|
@ -1,7 +1,11 @@
|
|||
[gd_resource type="Theme" load_steps=171 format=2]
|
||||
[gd_resource type="Theme" load_steps=175 format=2]
|
||||
|
||||
[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=1]
|
||||
[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=2]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=3]
|
||||
[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=4]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=5]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=6]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id=2]
|
||||
content_margin_left = 6.0
|
||||
|
@ -1493,6 +1497,7 @@ CheckButton/styles/disabled = SubResource( 22 )
|
|||
CheckButton/styles/hover = SubResource( 22 )
|
||||
CheckButton/styles/normal = SubResource( 22 )
|
||||
CheckButton/styles/pressed = SubResource( 22 )
|
||||
CollapsibleContainer/icons/arrow_normal = ExtResource( 6 )
|
||||
ColorPicker/constants/h_width = 30
|
||||
ColorPicker/constants/label_width = 10
|
||||
ColorPicker/constants/margin = 8
|
||||
|
@ -1783,6 +1788,12 @@ VSplitContainer/icons/grabber = SubResource( 164 )
|
|||
VSplitContainer/styles/bg = SubResource( 167 )
|
||||
ValueSlider/colors/progress_color = Color( 0.4, 0.423529, 0.482353, 1 )
|
||||
ValueSlider/colors/under_color = Color( 0.101961, 0.113725, 0.156863, 1 )
|
||||
ValueSlider/icons/arrow_hover = ExtResource( 3 )
|
||||
ValueSlider/icons/arrow_normal = ExtResource( 6 )
|
||||
ValueSlider/icons/arrow_pressed = ExtResource( 5 )
|
||||
ValueSlider/icons/texture_over = null
|
||||
ValueSlider/icons/texture_progress = ExtResource( 4 )
|
||||
ValueSlider/icons/texture_under = ExtResource( 4 )
|
||||
WindowDialog/colors/title_color = Color( 0.8, 0.8075, 0.8275, 1 )
|
||||
WindowDialog/constants/close_h_ofs = 22
|
||||
WindowDialog/constants/close_v_ofs = 20
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
[gd_resource type="Theme" load_steps=174 format=2]
|
||||
[gd_resource type="Theme" load_steps=178 format=2]
|
||||
|
||||
[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=1]
|
||||
[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=2]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=3]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=4]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=5]
|
||||
[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=6]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id=2]
|
||||
content_margin_left = 6.0
|
||||
|
@ -1518,6 +1522,7 @@ CheckButton/styles/disabled = SubResource( 23 )
|
|||
CheckButton/styles/hover = SubResource( 23 )
|
||||
CheckButton/styles/normal = SubResource( 23 )
|
||||
CheckButton/styles/pressed = SubResource( 23 )
|
||||
CollapsibleContainer/icons/arrow_normal = ExtResource( 5 )
|
||||
ColorPicker/constants/h_width = 30
|
||||
ColorPicker/constants/label_width = 10
|
||||
ColorPicker/constants/margin = 8
|
||||
|
@ -1876,6 +1881,12 @@ VSplitContainer/icons/grabber = SubResource( 167 )
|
|||
VSplitContainer/styles/bg = SubResource( 170 )
|
||||
ValueSlider/colors/progress_color = Color( 0.713726, 0.580392, 0.423529, 1 )
|
||||
ValueSlider/colors/under_color = Color( 0.47451, 0.388235, 0.282353, 1 )
|
||||
ValueSlider/icons/arrow_hover = ExtResource( 3 )
|
||||
ValueSlider/icons/arrow_normal = ExtResource( 5 )
|
||||
ValueSlider/icons/arrow_pressed = ExtResource( 4 )
|
||||
ValueSlider/icons/texture_over = null
|
||||
ValueSlider/icons/texture_progress = ExtResource( 6 )
|
||||
ValueSlider/icons/texture_under = ExtResource( 6 )
|
||||
WindowDialog/colors/title_color = Color( 0.237305, 0.193295, 0.141827, 1 )
|
||||
WindowDialog/constants/close_h_ofs = 22
|
||||
WindowDialog/constants/close_v_ofs = 20
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
[gd_resource type="Theme" load_steps=178 format=2]
|
||||
[gd_resource type="Theme" load_steps=182 format=2]
|
||||
|
||||
[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=1]
|
||||
[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=2]
|
||||
[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=3]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=4]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=5]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=6]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id=2]
|
||||
content_margin_left = 6.0
|
||||
|
@ -1545,6 +1549,7 @@ CheckButton/styles/hover = SubResource( 23 )
|
|||
CheckButton/styles/hover_pressed = SubResource( 24 )
|
||||
CheckButton/styles/normal = SubResource( 23 )
|
||||
CheckButton/styles/pressed = SubResource( 23 )
|
||||
CollapsibleContainer/icons/arrow_normal = ExtResource( 6 )
|
||||
ColorPicker/constants/h_width = 30
|
||||
ColorPicker/constants/label_width = 10
|
||||
ColorPicker/constants/margin = 8
|
||||
|
@ -1912,6 +1917,12 @@ VSplitContainer/icons/grabber = SubResource( 172 )
|
|||
VSplitContainer/styles/bg = SubResource( 175 )
|
||||
ValueSlider/colors/progress_color = Color( 0.333333, 0.333333, 0.333333, 1 )
|
||||
ValueSlider/colors/under_color = Color( 0.0666667, 0.0666667, 0.0666667, 1 )
|
||||
ValueSlider/icons/arrow_hover = ExtResource( 4 )
|
||||
ValueSlider/icons/arrow_normal = ExtResource( 6 )
|
||||
ValueSlider/icons/arrow_pressed = ExtResource( 5 )
|
||||
ValueSlider/icons/texture_over = null
|
||||
ValueSlider/icons/texture_progress = ExtResource( 3 )
|
||||
ValueSlider/icons/texture_under = ExtResource( 3 )
|
||||
WindowDialog/colors/title_color = Color( 0.77832, 0.77832, 0.77832, 1 )
|
||||
WindowDialog/constants/close_h_ofs = 22
|
||||
WindowDialog/constants/close_v_ofs = 20
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
[gd_resource type="Theme" load_steps=178 format=2]
|
||||
[gd_resource type="Theme" load_steps=182 format=2]
|
||||
|
||||
[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=1]
|
||||
[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=2]
|
||||
[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=3]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=4]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=5]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=6]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id=2]
|
||||
content_margin_left = 6.0
|
||||
|
@ -1557,6 +1561,7 @@ CheckButton/styles/disabled = SubResource( 23 )
|
|||
CheckButton/styles/hover = SubResource( 23 )
|
||||
CheckButton/styles/normal = SubResource( 23 )
|
||||
CheckButton/styles/pressed = SubResource( 23 )
|
||||
CollapsibleContainer/icons/arrow_normal = ExtResource( 6 )
|
||||
ColorPicker/constants/h_width = 30
|
||||
ColorPicker/constants/label_width = 10
|
||||
ColorPicker/constants/margin = 8
|
||||
|
@ -1920,6 +1925,12 @@ VSplitContainer/icons/grabber = SubResource( 171 )
|
|||
VSplitContainer/styles/bg = SubResource( 174 )
|
||||
ValueSlider/colors/progress_color = Color( 0.545098, 0.545098, 0.545098, 1 )
|
||||
ValueSlider/colors/under_color = Color( 0.235294, 0.235294, 0.235294, 1 )
|
||||
ValueSlider/icons/arrow_hover = ExtResource( 4 )
|
||||
ValueSlider/icons/arrow_normal = ExtResource( 6 )
|
||||
ValueSlider/icons/arrow_pressed = ExtResource( 5 )
|
||||
ValueSlider/icons/texture_over = null
|
||||
ValueSlider/icons/texture_progress = ExtResource( 3 )
|
||||
ValueSlider/icons/texture_under = ExtResource( 3 )
|
||||
WindowDialog/colors/title_color = Color( 0.848039, 0.848039, 0.848039, 1 )
|
||||
WindowDialog/constants/close_h_ofs = 22
|
||||
WindowDialog/constants/close_v_ofs = 20
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
[gd_resource type="Theme" load_steps=178 format=2]
|
||||
[gd_resource type="Theme" load_steps=182 format=2]
|
||||
|
||||
[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=1]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=2]
|
||||
[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=3]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=4]
|
||||
[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=5]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=6]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id=2]
|
||||
content_margin_left = 6.0
|
||||
|
@ -1557,6 +1561,7 @@ CheckButton/styles/disabled = SubResource( 23 )
|
|||
CheckButton/styles/hover = SubResource( 23 )
|
||||
CheckButton/styles/normal = SubResource( 23 )
|
||||
CheckButton/styles/pressed = SubResource( 23 )
|
||||
CollapsibleContainer/icons/arrow_normal = ExtResource( 6 )
|
||||
ColorPicker/constants/h_width = 30
|
||||
ColorPicker/constants/label_width = 10
|
||||
ColorPicker/constants/margin = 8
|
||||
|
@ -1924,6 +1929,12 @@ VSplitContainer/icons/grabber = SubResource( 171 )
|
|||
VSplitContainer/styles/bg = SubResource( 174 )
|
||||
ValueSlider/colors/progress_color = Color( 0.74902, 0.74902, 0.74902, 1 )
|
||||
ValueSlider/colors/under_color = Color( 0.839216, 0.839216, 0.839216, 1 )
|
||||
ValueSlider/icons/arrow_hover = ExtResource( 2 )
|
||||
ValueSlider/icons/arrow_normal = ExtResource( 6 )
|
||||
ValueSlider/icons/arrow_pressed = ExtResource( 4 )
|
||||
ValueSlider/icons/texture_over = null
|
||||
ValueSlider/icons/texture_progress = ExtResource( 3 )
|
||||
ValueSlider/icons/texture_under = ExtResource( 3 )
|
||||
WindowDialog/colors/title_color = Color( 0.25, 0.25, 0.25, 1 )
|
||||
WindowDialog/constants/close_h_ofs = 22
|
||||
WindowDialog/constants/close_v_ofs = 20
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
[gd_resource type="Theme" load_steps=173 format=2]
|
||||
[gd_resource type="Theme" load_steps=177 format=2]
|
||||
|
||||
[ext_resource path="res://assets/fonts/Roboto-Regular.tres" type="DynamicFont" id=1]
|
||||
[ext_resource path="res://assets/fonts/Roboto-Big.tres" type="DynamicFont" id=2]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=3]
|
||||
[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=4]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=5]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=6]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id=2]
|
||||
content_margin_left = 6.0
|
||||
|
@ -1504,6 +1508,7 @@ CheckButton/styles/disabled = SubResource( 22 )
|
|||
CheckButton/styles/hover = SubResource( 22 )
|
||||
CheckButton/styles/normal = SubResource( 22 )
|
||||
CheckButton/styles/pressed = SubResource( 22 )
|
||||
CollapsibleContainer/icons/arrow_normal = ExtResource( 6 )
|
||||
ColorPicker/constants/h_width = 30
|
||||
ColorPicker/constants/label_width = 10
|
||||
ColorPicker/constants/margin = 8
|
||||
|
@ -1787,6 +1792,12 @@ VSplitContainer/icons/grabber = SubResource( 166 )
|
|||
VSplitContainer/styles/bg = SubResource( 169 )
|
||||
ValueSlider/colors/progress_color = Color( 0.396078, 0.341176, 0.462745, 1 )
|
||||
ValueSlider/colors/under_color = Color( 0.0980392, 0.0588235, 0.141176, 1 )
|
||||
ValueSlider/icons/arrow_hover = ExtResource( 3 )
|
||||
ValueSlider/icons/arrow_normal = ExtResource( 6 )
|
||||
ValueSlider/icons/arrow_pressed = ExtResource( 5 )
|
||||
ValueSlider/icons/texture_over = null
|
||||
ValueSlider/icons/texture_progress = ExtResource( 4 )
|
||||
ValueSlider/icons/texture_under = ExtResource( 4 )
|
||||
WindowDialog/colors/title_color = Color( 0.79902, 0.780392, 0.820588, 1 )
|
||||
WindowDialog/constants/close_h_ofs = 22
|
||||
WindowDialog/constants/close_v_ofs = 20
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
[ext_resource path="res://src/UI/Dialogs/ExportDialog.gd" type="Script" id=1]
|
||||
[ext_resource path="res://src/UI/Nodes/TransparentChecker.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://src/UI/Nodes/CollapsibleContainer.tscn" type="PackedScene" id=3]
|
||||
[ext_resource path="res://src/UI/Nodes/CollapsibleContainer.gd" type="Script" id=3]
|
||||
|
||||
[node name="ExportDialog" type="ConfirmationDialog"]
|
||||
margin_right = 532.0
|
||||
|
@ -281,10 +281,12 @@ margin_top = 234.0
|
|||
margin_right = 516.0
|
||||
margin_bottom = 238.0
|
||||
|
||||
[node name="CollapsibleContainer" parent="VBoxContainer/VSplitContainer/VBoxContainer" instance=ExtResource( 3 )]
|
||||
[node name="CollapsibleContainer" type="VBoxContainer" parent="VBoxContainer/VSplitContainer/VBoxContainer"]
|
||||
margin_top = 242.0
|
||||
margin_right = 516.0
|
||||
margin_bottom = 262.0
|
||||
theme_type_variation = "CollapsibleContainer"
|
||||
script = ExtResource( 3 )
|
||||
text = "Advanced options"
|
||||
|
||||
[node name="GridContainer" type="GridContainer" parent="VBoxContainer/VSplitContainer/VBoxContainer/CollapsibleContainer"]
|
||||
|
|
|
@ -5,25 +5,55 @@ extends VBoxContainer
|
|||
export var text := "" setget _set_text
|
||||
export var visible_content := false setget _set_visible_content
|
||||
|
||||
onready var texture_rect: TextureRect = $Button/TextureRect
|
||||
var _button := Button.new()
|
||||
var _texture_rect := TextureRect.new()
|
||||
var _label := Label.new()
|
||||
|
||||
|
||||
func _init() -> void:
|
||||
theme_type_variation = "CollapsibleContainer"
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_set_visible($Button.pressed)
|
||||
_button.toggle_mode = true
|
||||
_button.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND
|
||||
_button.connect("toggled", self, "_on_Button_toggled")
|
||||
add_child(_button)
|
||||
move_child(_button, 0)
|
||||
_texture_rect.anchor_top = 0.5
|
||||
_texture_rect.anchor_bottom = 0.5
|
||||
_texture_rect.margin_left = 2
|
||||
_texture_rect.margin_top = -6
|
||||
_texture_rect.margin_right = 14
|
||||
_texture_rect.margin_bottom = 6
|
||||
_texture_rect.rect_rotation = -90
|
||||
_texture_rect.rect_pivot_offset = Vector2(6, 6)
|
||||
_texture_rect.add_to_group("UIButtons")
|
||||
_button.add_child(_texture_rect)
|
||||
_label.valign = Label.VALIGN_CENTER
|
||||
_label.rect_position = Vector2(14, 0)
|
||||
_label.size_flags_vertical = Control.SIZE_SHRINK_CENTER
|
||||
_button.add_child(_label)
|
||||
_button.pressed = visible_content
|
||||
for child in get_children():
|
||||
if not child is CanvasItem or child == $Button:
|
||||
if not child is CanvasItem or child == _button:
|
||||
continue
|
||||
child.connect("visibility_changed", self, "_child_visibility_changed", [child])
|
||||
|
||||
|
||||
func _notification(what: int) -> void:
|
||||
if what == NOTIFICATION_THEME_CHANGED:
|
||||
_texture_rect.texture = get_icon("arrow_normal", "CollapsibleContainer")
|
||||
|
||||
|
||||
func _set_text(value: String) -> void:
|
||||
text = value
|
||||
$Button/Label.text = value
|
||||
_label.text = value
|
||||
|
||||
|
||||
func _set_visible_content(value: bool) -> void:
|
||||
visible_content = value
|
||||
$Button.pressed = value
|
||||
_button.pressed = value
|
||||
|
||||
|
||||
func _on_Button_toggled(button_pressed: bool) -> void:
|
||||
|
@ -33,9 +63,9 @@ func _on_Button_toggled(button_pressed: bool) -> void:
|
|||
func _set_visible(pressed: bool) -> void:
|
||||
var angle := 0.0 if pressed else -90.0
|
||||
var tween := create_tween()
|
||||
tween.tween_property(texture_rect, "rect_rotation", angle, 0.05)
|
||||
tween.tween_property(_texture_rect, "rect_rotation", angle, 0.05)
|
||||
for child in get_children():
|
||||
if not child is CanvasItem or child == $Button:
|
||||
if not child is CanvasItem or child == _button:
|
||||
continue
|
||||
child.visible = pressed
|
||||
|
||||
|
@ -43,5 +73,5 @@ func _set_visible(pressed: bool) -> void:
|
|||
# Checks if a child becomes visible from another sure and ensures
|
||||
# it remains invisible if the button is not pressed
|
||||
func _child_visibility_changed(child: CanvasItem) -> void:
|
||||
if not $Button.pressed:
|
||||
if not _button.pressed:
|
||||
child.visible = false
|
||||
|
|
|
@ -1,35 +1,9 @@
|
|||
[gd_scene load_steps=3 format=2]
|
||||
[gd_scene load_steps=2 format=2]
|
||||
|
||||
[ext_resource path="res://src/UI/Nodes/CollapsibleContainer.gd" type="Script" id=2]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=3]
|
||||
|
||||
[node name="CollapsibleContainer" type="VBoxContainer"]
|
||||
margin_right = 40.0
|
||||
margin_bottom = 20.0
|
||||
theme_type_variation = "CollapsibleContainer"
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="Button" type="Button" parent="."]
|
||||
margin_right = 40.0
|
||||
margin_bottom = 20.0
|
||||
mouse_default_cursor_shape = 2
|
||||
theme_type_variation = "CollapsibleCheckBox"
|
||||
toggle_mode = true
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="Button" groups=["UIButtons"]]
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
margin_left = 2.0
|
||||
margin_top = -6.0
|
||||
margin_right = 14.0
|
||||
margin_bottom = 6.0
|
||||
rect_rotation = -90.0
|
||||
rect_pivot_offset = Vector2( 6, 6 )
|
||||
texture = ExtResource( 3 )
|
||||
|
||||
[node name="Label" type="Label" parent="Button"]
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
margin_left = 14.0
|
||||
valign = 1
|
||||
|
||||
[connection signal="toggled" from="Button" to="." method="_on_Button_toggled"]
|
||||
|
|
|
@ -29,21 +29,36 @@ export var is_global := false
|
|||
var state := NORMAL
|
||||
var arrow_is_held := 0 # Used for arrow button echo behavior. Is 1 for ValueUp, -1 for ValueDown.
|
||||
|
||||
onready var line_edit: LineEdit = $LineEdit
|
||||
onready var timer: Timer = $Timer
|
||||
var _line_edit := LineEdit.new()
|
||||
var _value_up_button := TextureButton.new()
|
||||
var _value_down_button := TextureButton.new()
|
||||
var _timer := Timer.new()
|
||||
|
||||
|
||||
func _init() -> void:
|
||||
nine_patch_stretch = true
|
||||
stretch_margin_left = 3
|
||||
stretch_margin_top = 3
|
||||
stretch_margin_right = 3
|
||||
stretch_margin_bottom = 3
|
||||
theme_type_variation = "ValueSlider"
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
connect("value_changed", self, "_on_value_changed")
|
||||
_setup_nodes()
|
||||
set_process_input(is_global)
|
||||
_reset_display()
|
||||
_reset_display(true)
|
||||
if not Engine.editor_hint: # Pixelorama specific code
|
||||
$ValueUp.modulate = Global.modulate_icon_color
|
||||
$ValueDown.modulate = Global.modulate_icon_color
|
||||
_value_up_button.modulate = Global.modulate_icon_color
|
||||
_value_down_button.modulate = Global.modulate_icon_color
|
||||
|
||||
|
||||
func _notification(what: int) -> void:
|
||||
if what == NOTIFICATION_THEME_CHANGED or what == NOTIFICATION_TRANSLATION_CHANGED:
|
||||
_reset_display()
|
||||
if what == NOTIFICATION_THEME_CHANGED:
|
||||
_reset_display(true)
|
||||
elif what == NOTIFICATION_TRANSLATION_CHANGED:
|
||||
_reset_display(false)
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
|
@ -90,12 +105,12 @@ func _gui_input(event: InputEvent) -> void:
|
|||
elif state == HELD:
|
||||
if event.is_action_released("left_mouse"):
|
||||
state = TYPING
|
||||
line_edit.text = str(value)
|
||||
line_edit.editable = true
|
||||
line_edit.grab_focus()
|
||||
line_edit.selecting_enabled = true
|
||||
line_edit.select_all()
|
||||
line_edit.caret_position = line_edit.text.length()
|
||||
_line_edit.text = str(value)
|
||||
_line_edit.editable = true
|
||||
_line_edit.grab_focus()
|
||||
_line_edit.selecting_enabled = true
|
||||
_line_edit.select_all()
|
||||
_line_edit.caret_position = _line_edit.text.length()
|
||||
tint_progress = Color.transparent
|
||||
elif event is InputEventMouseMotion:
|
||||
if get_meta("mouse_start_position").distance_to(get_local_mouse_position()) > 2:
|
||||
|
@ -134,6 +149,47 @@ func _gui_input(event: InputEvent) -> void:
|
|||
value = round(value / snap_step) * snap_step
|
||||
|
||||
|
||||
func _setup_nodes() -> void: # Only called once on _ready()
|
||||
_line_edit.align = LineEdit.ALIGN_CENTER
|
||||
_line_edit.anchor_right = 1
|
||||
_line_edit.anchor_bottom = 1
|
||||
_line_edit.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
_line_edit.add_stylebox_override("read_only", StyleBoxEmpty.new())
|
||||
_line_edit.add_stylebox_override("normal", StyleBoxEmpty.new())
|
||||
_line_edit.connect("text_entered", self, "_on_LineEdit_text_entered")
|
||||
_line_edit.connect("focus_exited", self, "_confirm_text")
|
||||
_line_edit.connect("gui_input", self, "_on_LineEdit_gui_input")
|
||||
add_child(_line_edit)
|
||||
|
||||
_value_up_button.rect_scale.y = -1
|
||||
_value_up_button.anchor_left = 1
|
||||
_value_up_button.anchor_right = 1
|
||||
_value_up_button.margin_left = -15
|
||||
_value_up_button.margin_top = 12
|
||||
_value_up_button.margin_right = -3
|
||||
_value_up_button.margin_bottom = 24
|
||||
_value_up_button.add_to_group("UIButtons")
|
||||
_value_up_button.connect("button_down", self, "_on_Value_button_down", [1])
|
||||
_value_up_button.connect("button_up", self, "_on_Value_button_up")
|
||||
add_child(_value_up_button)
|
||||
|
||||
_value_down_button.anchor_left = 1
|
||||
_value_down_button.anchor_top = 1
|
||||
_value_down_button.anchor_right = 1
|
||||
_value_down_button.anchor_bottom = 1
|
||||
_value_down_button.margin_left = -15
|
||||
_value_down_button.margin_top = -12
|
||||
_value_down_button.margin_right = -3
|
||||
_value_down_button.margin_bottom = 0
|
||||
_value_down_button.add_to_group("UIButtons")
|
||||
_value_down_button.connect("button_down", self, "_on_Value_button_down", [-1])
|
||||
_value_down_button.connect("button_up", self, "_on_Value_button_up")
|
||||
add_child(_value_down_button)
|
||||
|
||||
_timer.connect("timeout", self, "_on_Timer_timeout")
|
||||
add_child(_timer)
|
||||
|
||||
|
||||
func _prefix_changed(v: String) -> void:
|
||||
prefix = v
|
||||
_reset_display()
|
||||
|
@ -146,17 +202,17 @@ func _suffix_changed(v: String) -> void:
|
|||
|
||||
func _show_arrows_changed(v: bool) -> void:
|
||||
show_arrows = v
|
||||
if not line_edit:
|
||||
if not _line_edit:
|
||||
return
|
||||
$ValueUp.visible = v
|
||||
$ValueDown.visible = v
|
||||
_value_up_button.visible = v
|
||||
_value_down_button.visible = v
|
||||
|
||||
|
||||
func _on_LineEdit_gui_input(event: InputEvent) -> void:
|
||||
if state == TYPING:
|
||||
if event is InputEventKey and event.scancode == KEY_ESCAPE:
|
||||
_confirm_text(false) # Cancel
|
||||
line_edit.release_focus()
|
||||
_line_edit.release_focus()
|
||||
|
||||
|
||||
func _on_value_changed(_value: float) -> void:
|
||||
|
@ -165,7 +221,7 @@ func _on_value_changed(_value: float) -> void:
|
|||
|
||||
func _on_LineEdit_text_entered(_new_text) -> void:
|
||||
# When pressing enter, release focus, which will call _confirm_text on focus_exited signal
|
||||
line_edit.release_focus()
|
||||
_line_edit.release_focus()
|
||||
|
||||
|
||||
# Called on LineEdit's focus_exited signal
|
||||
|
@ -176,7 +232,7 @@ func _confirm_text(confirm := true) -> void:
|
|||
state = NORMAL
|
||||
if confirm:
|
||||
var expression := Expression.new()
|
||||
var error := expression.parse(line_edit.text, [])
|
||||
var error := expression.parse(_line_edit.text, [])
|
||||
if error != OK:
|
||||
_reset_display()
|
||||
return
|
||||
|
@ -188,24 +244,33 @@ func _confirm_text(confirm := true) -> void:
|
|||
_reset_display()
|
||||
|
||||
|
||||
func _reset_display() -> void:
|
||||
if not line_edit:
|
||||
return
|
||||
line_edit.selecting_enabled = false # Remove the selection
|
||||
line_edit.editable = false
|
||||
if not Engine.editor_hint: # Pixelorama specific code
|
||||
var line_edit_color := line_edit.get_color("font_color")
|
||||
var line_edit_disabled_col: Color = Global.control.theme.get_color("read_only", "LineEdit")
|
||||
func _reset_display(theme_changed := false) -> void:
|
||||
_line_edit.selecting_enabled = false # Remove the selection
|
||||
_line_edit.editable = false
|
||||
if theme_changed and not Engine.editor_hint:
|
||||
texture_under = get_icon("texture_under", "ValueSlider")
|
||||
texture_over = get_icon("texture_over", "ValueSlider")
|
||||
texture_progress = get_icon("texture_progress", "ValueSlider")
|
||||
_value_up_button.texture_normal = get_icon("arrow_normal", "ValueSlider")
|
||||
_value_up_button.texture_pressed = get_icon("arrow_pressed", "ValueSlider")
|
||||
_value_up_button.texture_hover = get_icon("arrow_hover", "ValueSlider")
|
||||
|
||||
_value_down_button.texture_normal = get_icon("arrow_normal", "ValueSlider")
|
||||
_value_down_button.texture_pressed = get_icon("arrow_pressed", "ValueSlider")
|
||||
_value_down_button.texture_hover = get_icon("arrow_hover", "ValueSlider")
|
||||
|
||||
var line_edit_color := _line_edit.get_color("font_color")
|
||||
var line_edit_disabled_col: Color = get_color("read_only", "LineEdit")
|
||||
if editable:
|
||||
line_edit.add_color_override("font_color_uneditable", line_edit_color)
|
||||
_line_edit.add_color_override("font_color_uneditable", line_edit_color)
|
||||
else:
|
||||
line_edit.add_color_override("font_color_uneditable", line_edit_disabled_col)
|
||||
tint_under = get_color("under_color", "ValueSlider")
|
||||
if show_progress:
|
||||
tint_progress = get_color("progress_color", "ValueSlider")
|
||||
else:
|
||||
tint_progress = Color.transparent
|
||||
line_edit.text = str(tr(prefix), " ", value, " ", tr(suffix)).strip_edges()
|
||||
_line_edit.add_color_override("font_color_uneditable", line_edit_disabled_col)
|
||||
tint_under = get_color("under_color", "ValueSlider")
|
||||
if show_progress:
|
||||
tint_progress = get_color("progress_color", "ValueSlider")
|
||||
else:
|
||||
tint_progress = Color.transparent
|
||||
_line_edit.text = str(tr(prefix), " ", value, " ", tr(suffix)).strip_edges()
|
||||
|
||||
|
||||
func _on_Value_button_down(direction: int) -> void:
|
||||
|
@ -214,23 +279,23 @@ func _on_Value_button_down(direction: int) -> void:
|
|||
# Direction is either 1 or -1
|
||||
value += (snap_step if Input.is_action_pressed("ctrl") else step) * direction
|
||||
arrow_is_held = direction
|
||||
timer.wait_time = echo_arrow_time * 8 # 0.6 with the default value
|
||||
timer.one_shot = true
|
||||
timer.start()
|
||||
_timer.wait_time = echo_arrow_time * 8 # 0.6 with the default value
|
||||
_timer.one_shot = true
|
||||
_timer.start()
|
||||
|
||||
|
||||
func _on_Value_button_up() -> void:
|
||||
arrow_is_held = 0
|
||||
timer.stop()
|
||||
_timer.stop()
|
||||
|
||||
|
||||
# Echo behavior. If the user keeps pressing the button, the value keeps changing.
|
||||
func _on_Timer_timeout() -> void:
|
||||
if arrow_is_held == 0:
|
||||
timer.stop()
|
||||
_timer.stop()
|
||||
return
|
||||
value += (snap_step if Input.is_action_pressed("ctrl") else step) * arrow_is_held
|
||||
if timer.one_shot:
|
||||
timer.wait_time = echo_arrow_time
|
||||
timer.one_shot = false
|
||||
timer.start()
|
||||
if _timer.one_shot:
|
||||
_timer.wait_time = echo_arrow_time
|
||||
_timer.one_shot = false
|
||||
_timer.start()
|
||||
|
|
|
@ -1,12 +1,7 @@
|
|||
[gd_scene load_steps=7 format=2]
|
||||
[gd_scene load_steps=3 format=2]
|
||||
|
||||
[ext_resource path="res://src/UI/Nodes/ValueSlider.gd" type="Script" id=1]
|
||||
[ext_resource path="res://assets/graphics/misc/value_slider.png" type="Texture" id=2]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow.svg" type="Texture" id=3]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow_hover.svg" type="Texture" id=4]
|
||||
[ext_resource path="res://assets/graphics/misc/value_arrow_press.svg" type="Texture" id=5]
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id=1]
|
||||
|
||||
[node name="ValueSlider" type="TextureProgress"]
|
||||
margin_right = 24.0
|
||||
|
@ -26,56 +21,3 @@ stretch_margin_top = 3
|
|||
stretch_margin_right = 3
|
||||
stretch_margin_bottom = 3
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="LineEdit" type="LineEdit" parent="."]
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
mouse_filter = 2
|
||||
custom_styles/read_only = SubResource( 1 )
|
||||
custom_styles/normal = SubResource( 1 )
|
||||
text = "0"
|
||||
align = 1
|
||||
editable = false
|
||||
selecting_enabled = false
|
||||
|
||||
[node name="ValueUp" type="TextureButton" parent="." groups=["UIButtons"]]
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
margin_left = -15.0
|
||||
margin_top = 12.0
|
||||
margin_right = -3.0
|
||||
margin_bottom = 24.0
|
||||
rect_scale = Vector2( 1, -1 )
|
||||
mouse_default_cursor_shape = 2
|
||||
size_flags_vertical = 3
|
||||
texture_normal = ExtResource( 3 )
|
||||
texture_pressed = ExtResource( 5 )
|
||||
texture_hover = ExtResource( 4 )
|
||||
stretch_mode = 3
|
||||
|
||||
[node name="ValueDown" type="TextureButton" parent="." groups=["UIButtons"]]
|
||||
anchor_left = 1.0
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
margin_left = -15.0
|
||||
margin_top = -12.0
|
||||
margin_right = -3.0
|
||||
mouse_default_cursor_shape = 2
|
||||
size_flags_vertical = 3
|
||||
texture_normal = ExtResource( 3 )
|
||||
texture_pressed = ExtResource( 5 )
|
||||
texture_hover = ExtResource( 4 )
|
||||
stretch_mode = 3
|
||||
|
||||
[node name="Timer" type="Timer" parent="."]
|
||||
|
||||
[connection signal="value_changed" from="." to="." method="_on_value_changed"]
|
||||
[connection signal="focus_exited" from="LineEdit" to="." method="_confirm_text"]
|
||||
[connection signal="gui_input" from="LineEdit" to="." method="_on_LineEdit_gui_input"]
|
||||
[connection signal="text_entered" from="LineEdit" to="." method="_on_LineEdit_text_entered"]
|
||||
[connection signal="button_down" from="ValueUp" to="." method="_on_Value_button_down" binds= [ 1 ]]
|
||||
[connection signal="button_up" from="ValueUp" to="." method="_on_Value_button_up"]
|
||||
[connection signal="button_down" from="ValueDown" to="." method="_on_Value_button_down" binds= [ -1 ]]
|
||||
[connection signal="button_up" from="ValueDown" to="." method="_on_Value_button_up"]
|
||||
[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"]
|
||||
|
|
Loading…
Reference in a new issue