diff --git a/src/Classes/ImageEffect.gd b/src/Classes/ImageEffect.gd index e4a90b81c..2531bdb28 100644 --- a/src/Classes/ImageEffect.gd +++ b/src/Classes/ImageEffect.gd @@ -38,6 +38,8 @@ func _about_to_show() -> void: Export.blend_layers(current_frame, frame) if selection_checkbox: _on_SelectionCheckBox_toggled(selection_checkbox.pressed) + else: + update_preview() update_transparent_background_size() diff --git a/src/UI/Dialogs/ImageEffects/RotateImage.gd b/src/UI/Dialogs/ImageEffects/RotateImage.gd index d469cfbf6..757c9c502 100644 --- a/src/UI/Dialogs/ImageEffects/RotateImage.gd +++ b/src/UI/Dialogs/ImageEffects/RotateImage.gd @@ -1,64 +1,63 @@ -extends ConfirmationDialog +extends ImageEffect -var texture : ImageTexture -var aux_img : Image -var layer : Image func _ready() -> void: - texture = ImageTexture.new() - aux_img = Image.new() $VBoxContainer/HBoxContainer2/OptionButton.add_item("Rotxel") $VBoxContainer/HBoxContainer2/OptionButton.add_item("Upscale, Rotate and Downscale") $VBoxContainer/HBoxContainer2/OptionButton.add_item("Nearest neighbour") + +func set_nodes() -> void: + preview = $VBoxContainer/Preview + + func set_sprite(sprite : Image) -> void: - aux_img.copy_from(sprite) - layer = sprite - texture.create_from_image(aux_img, 0) - $VBoxContainer/TextureRect.texture = texture + preview_image.copy_from(sprite) + current_cel = sprite + preview_texture.create_from_image(preview_image, 0) + preview.texture = preview_texture -func _on_HSlider_value_changed(_value) -> void: - rotate() - $VBoxContainer/HBoxContainer/SpinBox.value = $VBoxContainer/HBoxContainer/HSlider.value +func _about_to_show() -> void: + ._about_to_show() + $VBoxContainer/HBoxContainer/HSlider.value = 0 +# set_sprite(current_cel) -func _on_SpinBox_value_changed(_value): - $VBoxContainer/HBoxContainer/HSlider.value = $VBoxContainer/HBoxContainer/SpinBox.value - - -func _on_RotateImage_confirmed() -> void: +func _confirmed() -> void: Global.canvas.handle_undo("Draw") match $VBoxContainer/HBoxContainer2/OptionButton.text: "Rotxel": - DrawingAlgos.rotxel(layer,$VBoxContainer/HBoxContainer/HSlider.value*PI/180) + DrawingAlgos.rotxel(current_cel,$VBoxContainer/HBoxContainer/HSlider.value*PI/180) "Nearest neighbour": - DrawingAlgos.nn_rotate(layer,$VBoxContainer/HBoxContainer/HSlider.value*PI/180) + DrawingAlgos.nn_rotate(current_cel,$VBoxContainer/HBoxContainer/HSlider.value*PI/180) "Upscale, Rotate and Downscale": - DrawingAlgos.fake_rotsprite(layer,$VBoxContainer/HBoxContainer/HSlider.value*PI/180) + DrawingAlgos.fake_rotsprite(current_cel,$VBoxContainer/HBoxContainer/HSlider.value*PI/180) Global.canvas.handle_redo("Draw") $VBoxContainer/HBoxContainer/HSlider.value = 0 -func rotate() -> void: - var sprite : Image = Image.new() - sprite.copy_from(aux_img) + +func _on_HSlider_value_changed(_value : float) -> void: + update_preview() + $VBoxContainer/HBoxContainer/SpinBox.value = $VBoxContainer/HBoxContainer/HSlider.value + + +func _on_SpinBox_value_changed(_value : float) -> void: + $VBoxContainer/HBoxContainer/HSlider.value = $VBoxContainer/HBoxContainer/SpinBox.value + + +func update_preview() -> void: + preview_image.copy_from(current_cel) match $VBoxContainer/HBoxContainer2/OptionButton.text: "Rotxel": - DrawingAlgos.rotxel(sprite,$VBoxContainer/HBoxContainer/HSlider.value*PI/180) + DrawingAlgos.rotxel(preview_image,$VBoxContainer/HBoxContainer/HSlider.value*PI/180) "Nearest neighbour": - DrawingAlgos.nn_rotate(sprite,$VBoxContainer/HBoxContainer/HSlider.value*PI/180) + DrawingAlgos.nn_rotate(preview_image,$VBoxContainer/HBoxContainer/HSlider.value*PI/180) "Upscale, Rotate and Downscale": - DrawingAlgos.fake_rotsprite(sprite,$VBoxContainer/HBoxContainer/HSlider.value*PI/180) - texture.create_from_image(sprite, 0) + DrawingAlgos.fake_rotsprite(preview_image,$VBoxContainer/HBoxContainer/HSlider.value*PI/180) + preview_texture.create_from_image(preview_image, 0) + preview.texture = preview_texture -func _on_OptionButton_item_selected(_id) -> void: - rotate() - - -func _on_RotateImage_about_to_show() -> void: - $VBoxContainer/HBoxContainer/HSlider.value = 0 - - -func _on_RotateImage_popup_hide() -> void: - Global.dialog_open(false) +func _on_OptionButton_item_selected(_id : int) -> void: + update_preview() diff --git a/src/UI/Dialogs/ImageEffects/RotateImage.tscn b/src/UI/Dialogs/ImageEffects/RotateImage.tscn index f0d7fce34..366d1c8eb 100644 --- a/src/UI/Dialogs/ImageEffects/RotateImage.tscn +++ b/src/UI/Dialogs/ImageEffects/RotateImage.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=3 format=2] [ext_resource path="res://src/UI/Dialogs/ImageEffects/RotateImage.gd" type="Script" id=1] +[ext_resource path="res://src/UI/TransparentChecker.tscn" type="PackedScene" id=2] [node name="RotateImage" type="ConfirmationDialog"] margin_right = 245.0 @@ -23,12 +24,15 @@ __meta__ = { "_edit_use_anchors_": false } -[node name="TextureRect" type="TextureRect" parent="VBoxContainer"] +[node name="Preview" type="TextureRect" parent="VBoxContainer"] margin_right = 229.0 margin_bottom = 145.0 -size_flags_vertical = 3 +rect_min_size = Vector2( 200, 200 ) expand = true -stretch_mode = 6 +stretch_mode = 5 + +[node name="TransparentChecker" parent="VBoxContainer/Preview" instance=ExtResource( 2 )] +show_behind_parent = true [node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer"] margin_top = 149.0 @@ -56,12 +60,12 @@ margin_bottom = 197.0 [node name="Label" type="Label" parent="VBoxContainer/HBoxContainer"] margin_top = 5.0 -margin_right = 44.0 +margin_right = 40.0 margin_bottom = 19.0 text = "Angle:" [node name="HSlider" type="HSlider" parent="VBoxContainer/HBoxContainer"] -margin_left = 48.0 +margin_left = 44.0 margin_right = 151.0 margin_bottom = 24.0 mouse_default_cursor_shape = 2 @@ -79,9 +83,6 @@ margin_bottom = 24.0 mouse_default_cursor_shape = 2 max_value = 359.0 suffix = "°" -[connection signal="about_to_show" from="." to="." method="_on_RotateImage_about_to_show"] -[connection signal="confirmed" from="." to="." method="_on_RotateImage_confirmed"] -[connection signal="popup_hide" from="." to="." method="_on_RotateImage_popup_hide"] [connection signal="item_selected" from="VBoxContainer/HBoxContainer2/OptionButton" to="." method="_on_OptionButton_item_selected"] [connection signal="value_changed" from="VBoxContainer/HBoxContainer/HSlider" to="." method="_on_HSlider_value_changed"] [connection signal="value_changed" from="VBoxContainer/HBoxContainer/SpinBox" to="." method="_on_SpinBox_value_changed"] diff --git a/src/UI/TopMenuContainer.gd b/src/UI/TopMenuContainer.gd index 0e9a8dbd5..8a842d064 100644 --- a/src/UI/TopMenuContainer.gd +++ b/src/UI/TopMenuContainer.gd @@ -352,8 +352,6 @@ func show_resize_canvas_popup() -> void: func show_rotate_image_popup() -> void: - var image : Image = Global.current_project.frames[Global.current_project.current_frame].cels[Global.current_project.current_layer].image - Global.control.get_node("Dialogs/ImageEffects/RotateImage").set_sprite(image) Global.control.get_node("Dialogs/ImageEffects/RotateImage").popup_centered() Global.dialog_open(true)