This commit is contained in:
2026-05-13 18:52:00 +02:00
commit 2bb1acbece
404 changed files with 33353 additions and 0 deletions

View File

@@ -0,0 +1,95 @@
@tool
extends PopupPanel
var rx_input : EditorSpinSlider
var ry_input : EditorSpinSlider
var rotation_input : EditorSpinSlider
var _arc_under_edit : ScalableArc
var _dragging := false
var _drag_start := Vector2.ZERO
func _enter_tree() -> void:
visible = false
rx_input = _mk_input()
ry_input = _mk_input()
rotation_input = _mk_input(1.0)
%RxInputContainer.add_child(rx_input)
%RyInputContainer.add_child(ry_input)
%RotationInputContainer.add_child(rotation_input)
if not rx_input.value_changed.is_connected(_on_radius_changed):
rx_input.value_changed.connect(_on_radius_changed)
if not ry_input.value_changed.is_connected(_on_radius_changed):
ry_input.value_changed.connect(_on_radius_changed)
if not rotation_input.value_changed.is_connected(_on_rotation_changed):
rotation_input.value_changed.connect(_on_rotation_changed)
func _on_button_pressed() -> void:
hide()
func _on_rotation_changed(new_rot : float) -> void:
var undo_redo := EditorInterface.get_editor_undo_redo()
undo_redo.create_action("Update arc rotation")
undo_redo.add_do_property(_arc_under_edit, 'rotation_deg', new_rot)
undo_redo.add_undo_property(_arc_under_edit, 'rotation_deg', _arc_under_edit.rotation_deg)
undo_redo.commit_action()
func _on_radius_changed(_v : float) -> void:
var undo_redo := EditorInterface.get_editor_undo_redo()
undo_redo.create_action("Update arc radius")
undo_redo.add_do_property(_arc_under_edit, 'radius', Vector2(rx_input.value, ry_input.value))
undo_redo.add_undo_property(_arc_under_edit, 'radius', _arc_under_edit.radius)
undo_redo.commit_action()
func _on_sweep_check_box_toggled(toggled_on: bool) -> void:
var undo_redo := EditorInterface.get_editor_undo_redo()
undo_redo.create_action("Update arc sweep flag")
undo_redo.add_do_property(_arc_under_edit, 'sweep_flag', toggled_on)
undo_redo.add_undo_property(_arc_under_edit, 'sweep_flag', _arc_under_edit.sweep_flag)
undo_redo.commit_action()
func _on_large_arc_check_box_toggled(toggled_on: bool) -> void:
var undo_redo := EditorInterface.get_editor_undo_redo()
undo_redo.create_action("Update arc large arc flag")
undo_redo.add_do_property(_arc_under_edit, 'large_arc_flag', toggled_on)
undo_redo.add_undo_property(_arc_under_edit, 'large_arc_flag', _arc_under_edit.large_arc_flag)
undo_redo.commit_action()
func popup_with_value(arc : ScalableArc):
_arc_under_edit = arc
rx_input.set_value_no_signal(arc.radius.x)
ry_input.set_value_no_signal(arc.radius.y)
rotation_input.set_value_no_signal(arc.rotation_deg)
%LargeArcCheckBox.set_pressed_no_signal(arc.large_arc_flag)
%SweepCheckBox.set_pressed_no_signal(arc.sweep_flag)
popup_centered()
func _mk_input(step := 0.001) -> EditorSpinSlider:
var num_input := EditorSpinSlider.new()
num_input.suffix = "px"
num_input.hide_slider = true
num_input.value = 0.0
num_input.editing_integer = false
num_input.allow_lesser = true
num_input.allow_greater = true
num_input.step = 0.001
return num_input
func _on_label_gui_input(event: InputEvent) -> void:
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
if Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT):
if not _dragging:
_dragging = true
_drag_start = EditorInterface.get_base_control().get_local_mouse_position()
else:
_dragging = false
if event is InputEventMouseMotion and _dragging:
position += Vector2i(EditorInterface.get_base_control().get_local_mouse_position() - _drag_start)
_drag_start = EditorInterface.get_base_control().get_local_mouse_position()