mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-01-18 17:19:50 +00:00
Move the dynamics-related code into a new script
This also fixes the dynamics previews not working, as `_input()` is now handled locally in the dynamics popup panel.
This commit is contained in:
parent
506004b2a3
commit
64ced35bac
|
@ -39,7 +39,7 @@ var _circle_tool_shortcut: Array[Vector2i]
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
super._ready()
|
super._ready()
|
||||||
Global.global_tool_options.dynamics_changed.connect(_reset_dynamics)
|
Global.global_tool_options.dynamics_panel.dynamics_changed.connect(_reset_dynamics)
|
||||||
Tools.color_changed.connect(_on_Color_changed)
|
Tools.color_changed.connect(_on_Color_changed)
|
||||||
Global.brushes_popup.brush_removed.connect(_on_Brush_removed)
|
Global.brushes_popup.brush_removed.connect(_on_Brush_removed)
|
||||||
|
|
||||||
|
|
112
src/UI/GlobalToolOptions/DynamicsPanel.gd
Normal file
112
src/UI/GlobalToolOptions/DynamicsPanel.gd
Normal file
|
@ -0,0 +1,112 @@
|
||||||
|
extends PopupPanel
|
||||||
|
|
||||||
|
signal dynamics_changed
|
||||||
|
|
||||||
|
enum { ALPHA, SIZE }
|
||||||
|
|
||||||
|
@onready var alpha_pressure_button: Button = $"%AlphaPressureButton"
|
||||||
|
@onready var alpha_velocity_button: Button = $"%AlphaVelocityButton"
|
||||||
|
@onready var size_pressure_button: Button = $"%SizePressureButton"
|
||||||
|
@onready var size_velocity_button: Button = $"%SizeVelocityButton"
|
||||||
|
@onready var pressure_preview: ProgressBar = $"%PressurePreview"
|
||||||
|
@onready var velocity_preview: ProgressBar = $"%VelocityPreview"
|
||||||
|
@onready var limits_header: HBoxContainer = %LimitsHeader
|
||||||
|
@onready var thresholds_header: HBoxContainer = %ThresholdsHeader
|
||||||
|
@onready var alpha_group := alpha_pressure_button.button_group
|
||||||
|
@onready var size_group := size_pressure_button.button_group
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
alpha_pressure_button.toggled.connect(
|
||||||
|
_on_dynamics_toggled.bind(alpha_pressure_button, ALPHA, Tools.Dynamics.PRESSURE)
|
||||||
|
)
|
||||||
|
alpha_velocity_button.toggled.connect(
|
||||||
|
_on_dynamics_toggled.bind(alpha_velocity_button, ALPHA, Tools.Dynamics.VELOCITY)
|
||||||
|
)
|
||||||
|
size_pressure_button.toggled.connect(
|
||||||
|
_on_dynamics_toggled.bind(size_pressure_button, SIZE, Tools.Dynamics.PRESSURE)
|
||||||
|
)
|
||||||
|
size_velocity_button.toggled.connect(
|
||||||
|
_on_dynamics_toggled.bind(size_velocity_button, SIZE, Tools.Dynamics.VELOCITY)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
func _input(event: InputEvent) -> void:
|
||||||
|
pressure_preview.value = 0
|
||||||
|
velocity_preview.value = 0
|
||||||
|
if event is InputEventMouseMotion:
|
||||||
|
pressure_preview.value = event.pressure
|
||||||
|
velocity_preview.value = event.velocity.length() / Tools.mouse_velocity_max
|
||||||
|
|
||||||
|
|
||||||
|
func _on_dynamics_toggled(
|
||||||
|
button_pressed: bool, button: BaseButton, property: int, dynamic: Tools.Dynamics
|
||||||
|
) -> void:
|
||||||
|
var final_dynamic := dynamic
|
||||||
|
if not button.button_pressed:
|
||||||
|
final_dynamic = Tools.Dynamics.NONE
|
||||||
|
match property:
|
||||||
|
ALPHA:
|
||||||
|
Tools.dynamics_alpha = final_dynamic
|
||||||
|
SIZE:
|
||||||
|
Tools.dynamics_size = final_dynamic
|
||||||
|
var has_alpha_dynamic := Tools.dynamics_alpha != Tools.Dynamics.NONE
|
||||||
|
var has_size_dynamic := Tools.dynamics_size != Tools.Dynamics.NONE
|
||||||
|
var has_pressure_dynamic := (
|
||||||
|
Tools.dynamics_alpha == Tools.Dynamics.PRESSURE
|
||||||
|
or Tools.dynamics_size == Tools.Dynamics.PRESSURE
|
||||||
|
)
|
||||||
|
var has_velocity_dynamic := (
|
||||||
|
Tools.dynamics_alpha == Tools.Dynamics.VELOCITY
|
||||||
|
or Tools.dynamics_size == Tools.Dynamics.VELOCITY
|
||||||
|
)
|
||||||
|
limits_header.visible = has_alpha_dynamic or has_size_dynamic
|
||||||
|
thresholds_header.visible = limits_header.visible
|
||||||
|
get_tree().set_group(&"VisibleOnAlpha", "visible", has_alpha_dynamic)
|
||||||
|
get_tree().set_group(&"VisibleOnSize", "visible", has_size_dynamic)
|
||||||
|
get_tree().set_group(&"VisibleOnPressure", "visible", has_pressure_dynamic)
|
||||||
|
get_tree().set_group(&"VisibleOnVelocity", "visible", has_velocity_dynamic)
|
||||||
|
var texture_button: TextureRect = button.get_node("TextureRect")
|
||||||
|
var file_name := "check.png"
|
||||||
|
if !button.button_pressed:
|
||||||
|
file_name = "uncheck.png"
|
||||||
|
Global.change_button_texturerect(texture_button, file_name)
|
||||||
|
dynamics_changed.emit()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_threshold_pressure_updated(value_1: float, value_2: float) -> void:
|
||||||
|
Tools.pen_pressure_min = minf(value_1, value_2)
|
||||||
|
Tools.pen_pressure_max = maxf(value_1, value_2)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_threshold_velocity_updated(value_1: float, value_2: float) -> void:
|
||||||
|
Tools.mouse_velocity_min_thres = minf(value_1, value_2)
|
||||||
|
Tools.mouse_velocity_max_thres = maxf(value_1, value_2)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_alpha_min_value_changed(value: float) -> void:
|
||||||
|
Tools.alpha_min = value
|
||||||
|
dynamics_changed.emit()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_alpha_max_value_changed(value: float) -> void:
|
||||||
|
Tools.alpha_max = value
|
||||||
|
dynamics_changed.emit()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_size_min_value_changed(value: float) -> void:
|
||||||
|
Tools.brush_size_min = int(value)
|
||||||
|
dynamics_changed.emit()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_size_max_value_changed(value: float) -> void:
|
||||||
|
Tools.brush_size_max = int(value)
|
||||||
|
dynamics_changed.emit()
|
||||||
|
|
||||||
|
|
||||||
|
func _on_enable_stabilizer_toggled(toggled_on: bool) -> void:
|
||||||
|
Tools.stabilizer_enabled = toggled_on
|
||||||
|
|
||||||
|
|
||||||
|
func _on_stabilizer_value_value_changed(value: float) -> void:
|
||||||
|
Tools.stabilizer_value = value
|
|
@ -1,27 +1,12 @@
|
||||||
extends PanelContainer
|
extends PanelContainer
|
||||||
|
|
||||||
signal dynamics_changed
|
|
||||||
|
|
||||||
enum { ALPHA, SIZE }
|
|
||||||
|
|
||||||
@onready var grid_container: GridContainer = find_child("GridContainer")
|
@onready var grid_container: GridContainer = find_child("GridContainer")
|
||||||
@onready var horizontal_mirror: BaseButton = grid_container.get_node("Horizontal")
|
@onready var horizontal_mirror: BaseButton = grid_container.get_node("Horizontal")
|
||||||
@onready var vertical_mirror: BaseButton = grid_container.get_node("Vertical")
|
@onready var vertical_mirror: BaseButton = grid_container.get_node("Vertical")
|
||||||
@onready var pixel_perfect: BaseButton = grid_container.get_node("PixelPerfect")
|
@onready var pixel_perfect: BaseButton = grid_container.get_node("PixelPerfect")
|
||||||
@onready var alpha_lock: BaseButton = grid_container.get_node("AlphaLock")
|
@onready var alpha_lock: BaseButton = grid_container.get_node("AlphaLock")
|
||||||
@onready var dynamics: Button = $"%Dynamics"
|
@onready var dynamics: Button = $"%Dynamics"
|
||||||
|
|
||||||
@onready var dynamics_panel: PopupPanel = $DynamicsPanel
|
@onready var dynamics_panel: PopupPanel = $DynamicsPanel
|
||||||
@onready var alpha_pressure_button: Button = $"%AlphaPressureButton"
|
|
||||||
@onready var alpha_velocity_button: Button = $"%AlphaVelocityButton"
|
|
||||||
@onready var size_pressure_button: Button = $"%SizePressureButton"
|
|
||||||
@onready var size_velocity_button: Button = $"%SizeVelocityButton"
|
|
||||||
@onready var pressure_preview: ProgressBar = $"%PressurePreview"
|
|
||||||
@onready var velocity_preview: ProgressBar = $"%VelocityPreview"
|
|
||||||
@onready var limits_header: HBoxContainer = %LimitsHeader
|
|
||||||
@onready var thresholds_header: HBoxContainer = %ThresholdsHeader
|
|
||||||
@onready var alpha_group := alpha_pressure_button.button_group
|
|
||||||
@onready var size_group := size_pressure_button.button_group
|
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
|
@ -31,27 +16,6 @@ func _ready() -> void:
|
||||||
vertical_mirror.button_pressed = Tools.vertical_mirror
|
vertical_mirror.button_pressed = Tools.vertical_mirror
|
||||||
pixel_perfect.button_pressed = Tools.pixel_perfect
|
pixel_perfect.button_pressed = Tools.pixel_perfect
|
||||||
|
|
||||||
alpha_pressure_button.toggled.connect(
|
|
||||||
_on_Dynamics_toggled.bind(alpha_pressure_button, ALPHA, Tools.Dynamics.PRESSURE)
|
|
||||||
)
|
|
||||||
alpha_velocity_button.toggled.connect(
|
|
||||||
_on_Dynamics_toggled.bind(alpha_velocity_button, ALPHA, Tools.Dynamics.VELOCITY)
|
|
||||||
)
|
|
||||||
size_pressure_button.toggled.connect(
|
|
||||||
_on_Dynamics_toggled.bind(size_pressure_button, SIZE, Tools.Dynamics.PRESSURE)
|
|
||||||
)
|
|
||||||
size_velocity_button.toggled.connect(
|
|
||||||
_on_Dynamics_toggled.bind(size_velocity_button, SIZE, Tools.Dynamics.VELOCITY)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
func _input(event: InputEvent) -> void:
|
|
||||||
pressure_preview.value = 0
|
|
||||||
velocity_preview.value = 0
|
|
||||||
if event is InputEventMouseMotion:
|
|
||||||
pressure_preview.value = event.pressure
|
|
||||||
velocity_preview.value = event.velocity.length() / Tools.mouse_velocity_max
|
|
||||||
|
|
||||||
|
|
||||||
func _on_resized() -> void:
|
func _on_resized() -> void:
|
||||||
var tool_panel_size := size
|
var tool_panel_size := size
|
||||||
|
@ -116,76 +80,3 @@ func _on_alpha_lock_toggled(toggled_on: bool) -> void:
|
||||||
func _on_Dynamics_pressed() -> void:
|
func _on_Dynamics_pressed() -> void:
|
||||||
var pos := dynamics.global_position + Vector2(0, 32)
|
var pos := dynamics.global_position + Vector2(0, 32)
|
||||||
dynamics_panel.popup(Rect2(pos, dynamics_panel.size))
|
dynamics_panel.popup(Rect2(pos, dynamics_panel.size))
|
||||||
|
|
||||||
|
|
||||||
func _on_Dynamics_toggled(
|
|
||||||
button_pressed: bool, button: BaseButton, property: int, dynamic: Tools.Dynamics
|
|
||||||
) -> void:
|
|
||||||
var final_dynamic := dynamic
|
|
||||||
if not button.button_pressed:
|
|
||||||
final_dynamic = Tools.Dynamics.NONE
|
|
||||||
match property:
|
|
||||||
ALPHA:
|
|
||||||
Tools.dynamics_alpha = final_dynamic
|
|
||||||
SIZE:
|
|
||||||
Tools.dynamics_size = final_dynamic
|
|
||||||
var has_alpha_dynamic := Tools.dynamics_alpha != Tools.Dynamics.NONE
|
|
||||||
var has_size_dynamic := Tools.dynamics_size != Tools.Dynamics.NONE
|
|
||||||
var has_pressure_dynamic := (
|
|
||||||
Tools.dynamics_alpha == Tools.Dynamics.PRESSURE
|
|
||||||
or Tools.dynamics_size == Tools.Dynamics.PRESSURE
|
|
||||||
)
|
|
||||||
var has_velocity_dynamic := (
|
|
||||||
Tools.dynamics_alpha == Tools.Dynamics.VELOCITY
|
|
||||||
or Tools.dynamics_size == Tools.Dynamics.VELOCITY
|
|
||||||
)
|
|
||||||
limits_header.visible = has_alpha_dynamic or has_size_dynamic
|
|
||||||
thresholds_header.visible = limits_header.visible
|
|
||||||
get_tree().set_group(&"VisibleOnAlpha", "visible", has_alpha_dynamic)
|
|
||||||
get_tree().set_group(&"VisibleOnSize", "visible", has_size_dynamic)
|
|
||||||
get_tree().set_group(&"VisibleOnPressure", "visible", has_pressure_dynamic)
|
|
||||||
get_tree().set_group(&"VisibleOnVelocity", "visible", has_velocity_dynamic)
|
|
||||||
var texture_button: TextureRect = button.get_node("TextureRect")
|
|
||||||
var file_name := "check.png"
|
|
||||||
if !button.button_pressed:
|
|
||||||
file_name = "uncheck.png"
|
|
||||||
Global.change_button_texturerect(texture_button, file_name)
|
|
||||||
dynamics_changed.emit()
|
|
||||||
|
|
||||||
|
|
||||||
func _on_ThresholdPressure_updated(value_1: float, value_2: float) -> void:
|
|
||||||
Tools.pen_pressure_min = minf(value_1, value_2)
|
|
||||||
Tools.pen_pressure_max = maxf(value_1, value_2)
|
|
||||||
|
|
||||||
|
|
||||||
func _on_ThresholdVelocity_updated(value_1: float, value_2: float) -> void:
|
|
||||||
Tools.mouse_velocity_min_thres = minf(value_1, value_2)
|
|
||||||
Tools.mouse_velocity_max_thres = maxf(value_1, value_2)
|
|
||||||
|
|
||||||
|
|
||||||
func _on_AlphaMin_value_changed(value: float) -> void:
|
|
||||||
Tools.alpha_min = value
|
|
||||||
dynamics_changed.emit()
|
|
||||||
|
|
||||||
|
|
||||||
func _on_AlphaMax_value_changed(value: float) -> void:
|
|
||||||
Tools.alpha_max = value
|
|
||||||
dynamics_changed.emit()
|
|
||||||
|
|
||||||
|
|
||||||
func _on_SizeMin_value_changed(value: float) -> void:
|
|
||||||
Tools.brush_size_min = int(value)
|
|
||||||
dynamics_changed.emit()
|
|
||||||
|
|
||||||
|
|
||||||
func _on_SizeMax_value_changed(value: float) -> void:
|
|
||||||
Tools.brush_size_max = int(value)
|
|
||||||
dynamics_changed.emit()
|
|
||||||
|
|
||||||
|
|
||||||
func _on_enable_stabilizer_toggled(toggled_on: bool) -> void:
|
|
||||||
Tools.stabilizer_enabled = toggled_on
|
|
||||||
|
|
||||||
|
|
||||||
func _on_stabilizer_value_value_changed(value: float) -> void:
|
|
||||||
Tools.stabilizer_value = value
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=23 format=3 uid="uid://wo0hqxkst808"]
|
[gd_scene load_steps=24 format=3 uid="uid://wo0hqxkst808"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://cjrokejjsp5dm" path="res://assets/graphics/misc/horizontal_mirror_off.png" id="1"]
|
[ext_resource type="Texture2D" uid="uid://cjrokejjsp5dm" path="res://assets/graphics/misc/horizontal_mirror_off.png" id="1"]
|
||||||
[ext_resource type="Texture2D" uid="uid://hiduvaa73fr6" path="res://assets/graphics/misc/vertical_mirror_off.png" id="2"]
|
[ext_resource type="Texture2D" uid="uid://hiduvaa73fr6" path="res://assets/graphics/misc/vertical_mirror_off.png" id="2"]
|
||||||
|
@ -8,6 +8,7 @@
|
||||||
[ext_resource type="Texture2D" uid="uid://j8eywwy082a4" path="res://assets/graphics/misc/alpha_lock_off.png" id="5_jv20x"]
|
[ext_resource type="Texture2D" uid="uid://j8eywwy082a4" path="res://assets/graphics/misc/alpha_lock_off.png" id="5_jv20x"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dg3dumyfj1682" path="res://assets/graphics/misc/dynamics.png" id="6"]
|
[ext_resource type="Texture2D" uid="uid://dg3dumyfj1682" path="res://assets/graphics/misc/dynamics.png" id="6"]
|
||||||
[ext_resource type="Texture2D" uid="uid://di8au2u87jgv5" path="res://assets/graphics/misc/uncheck.png" id="7"]
|
[ext_resource type="Texture2D" uid="uid://di8au2u87jgv5" path="res://assets/graphics/misc/uncheck.png" id="7"]
|
||||||
|
[ext_resource type="Script" path="res://src/UI/GlobalToolOptions/DynamicsPanel.gd" id="7_iqcw1"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bmsc0s03pwji4" path="res://src/UI/Nodes/MaxMinEdit.tscn" id="8"]
|
[ext_resource type="PackedScene" uid="uid://bmsc0s03pwji4" path="res://src/UI/Nodes/MaxMinEdit.tscn" id="8"]
|
||||||
|
|
||||||
[sub_resource type="InputEventAction" id="InputEventAction_4k08w"]
|
[sub_resource type="InputEventAction" id="InputEventAction_4k08w"]
|
||||||
|
@ -174,6 +175,7 @@ texture = ExtResource("6")
|
||||||
[node name="DynamicsPanel" type="PopupPanel" parent="."]
|
[node name="DynamicsPanel" type="PopupPanel" parent="."]
|
||||||
canvas_item_default_texture_filter = 0
|
canvas_item_default_texture_filter = 0
|
||||||
size = Vector2i(300, 334)
|
size = Vector2i(300, 334)
|
||||||
|
script = ExtResource("7_iqcw1")
|
||||||
|
|
||||||
[node name="VBoxContainer" type="VBoxContainer" parent="DynamicsPanel"]
|
[node name="VBoxContainer" type="VBoxContainer" parent="DynamicsPanel"]
|
||||||
offset_left = 4.0
|
offset_left = 4.0
|
||||||
|
@ -480,14 +482,14 @@ offset_bottom = 23.0
|
||||||
[connection signal="toggled" from="ScrollContainer/CenterContainer/GridContainer/PixelPerfect" to="." method="_on_PixelPerfect_toggled"]
|
[connection signal="toggled" from="ScrollContainer/CenterContainer/GridContainer/PixelPerfect" to="." method="_on_PixelPerfect_toggled"]
|
||||||
[connection signal="toggled" from="ScrollContainer/CenterContainer/GridContainer/AlphaLock" to="." method="_on_alpha_lock_toggled"]
|
[connection signal="toggled" from="ScrollContainer/CenterContainer/GridContainer/AlphaLock" to="." method="_on_alpha_lock_toggled"]
|
||||||
[connection signal="pressed" from="ScrollContainer/CenterContainer/GridContainer/Dynamics" to="." method="_on_Dynamics_pressed"]
|
[connection signal="pressed" from="ScrollContainer/CenterContainer/GridContainer/Dynamics" to="." method="_on_Dynamics_pressed"]
|
||||||
[connection signal="toggled" from="DynamicsPanel/VBoxContainer/StabilizerContainer/EnableStabilizer" to="." method="_on_enable_stabilizer_toggled"]
|
[connection signal="toggled" from="DynamicsPanel/VBoxContainer/StabilizerContainer/EnableStabilizer" to="DynamicsPanel" method="_on_enable_stabilizer_toggled"]
|
||||||
[connection signal="value_changed" from="DynamicsPanel/VBoxContainer/StabilizerContainer/StabilizerValue" to="." method="_on_stabilizer_value_value_changed"]
|
[connection signal="value_changed" from="DynamicsPanel/VBoxContainer/StabilizerContainer/StabilizerValue" to="DynamicsPanel" method="_on_stabilizer_value_value_changed"]
|
||||||
[connection signal="value_changed" from="DynamicsPanel/VBoxContainer/LimitContainer/AlphaMin" to="." method="_on_AlphaMin_value_changed"]
|
[connection signal="value_changed" from="DynamicsPanel/VBoxContainer/LimitContainer/AlphaMin" to="DynamicsPanel" method="_on_alpha_min_value_changed"]
|
||||||
[connection signal="value_changed" from="DynamicsPanel/VBoxContainer/LimitContainer/AlphaMax" to="." method="_on_AlphaMax_value_changed"]
|
[connection signal="value_changed" from="DynamicsPanel/VBoxContainer/LimitContainer/AlphaMax" to="DynamicsPanel" method="_on_alpha_max_value_changed"]
|
||||||
[connection signal="value_changed" from="DynamicsPanel/VBoxContainer/LimitContainer/SizeMin" to="." method="_on_SizeMin_value_changed"]
|
[connection signal="value_changed" from="DynamicsPanel/VBoxContainer/LimitContainer/SizeMin" to="DynamicsPanel" method="_on_size_min_value_changed"]
|
||||||
[connection signal="value_changed" from="DynamicsPanel/VBoxContainer/LimitContainer/SizeMax" to="." method="_on_SizeMax_value_changed"]
|
[connection signal="value_changed" from="DynamicsPanel/VBoxContainer/LimitContainer/SizeMax" to="DynamicsPanel" method="_on_size_max_value_changed"]
|
||||||
[connection signal="updated" from="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdPressure" to="." method="_on_ThresholdPressure_updated"]
|
[connection signal="updated" from="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdPressure" to="DynamicsPanel" method="_on_threshold_pressure_updated"]
|
||||||
[connection signal="updated" from="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdVelocity" to="." method="_on_ThresholdVelocity_updated"]
|
[connection signal="updated" from="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdVelocity" to="DynamicsPanel" method="_on_threshold_velocity_updated"]
|
||||||
|
|
||||||
[editable path="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdPressure"]
|
[editable path="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdPressure"]
|
||||||
[editable path="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdVelocity"]
|
[editable path="DynamicsPanel/VBoxContainer/ThresholdContainer/ThresholdVelocity"]
|
||||||
|
|
Loading…
Reference in a new issue