init
This commit is contained in:
95
addons/curved_lines_2d/arc_settings_popup_panel.gd
Normal file
95
addons/curved_lines_2d/arc_settings_popup_panel.gd
Normal 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()
|
||||
Reference in New Issue
Block a user