diff --git a/project.godot b/project.godot index b2492c8..90e6b9b 100644 --- a/project.godot +++ b/project.godot @@ -26,6 +26,7 @@ Globals="*res://src/Globals.gd" window/size/viewport_width=1280 window/size/viewport_height=720 +window/size/mode=2 window/energy_saving/keep_screen_on=false [editor_plugins] diff --git a/scenes/main.tscn b/scenes/main.tscn index 2472689..04ea7e8 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -58,15 +58,15 @@ grow_vertical = 2 focus_mode = 2 color = Color(1, 1, 1, 0) -[node name="OpenFileDialog" type="FileDialog" parent="UI_Layer/UserInterfaceContainer"] -title = "Open a File" +[node name="OpenImageDialog" type="FileDialog" parent="UI_Layer/UserInterfaceContainer"] +title = "Load Image" size = Vector2i(521, 159) ok_button_text = "Öffnen" file_mode = 0 access = 2 use_native_dialog = true -[node name="SaveFileDialog" type="FileDialog" parent="UI_Layer/UserInterfaceContainer"] +[node name="SaveImageDialog" type="FileDialog" parent="UI_Layer/UserInterfaceContainer"] title = "Export Image" size = Vector2i(661, 159) ok_button_text = "Speichern" @@ -84,17 +84,17 @@ text = "Load Image" [node name="SaveImageButton" type="Button" parent="UI_Layer/UserInterfaceContainer"] layout_mode = 0 -offset_left = 152.0 +offset_left = 144.0 offset_top = 24.0 -offset_right = 272.0 +offset_right = 264.0 offset_bottom = 56.0 text = "Export Image" [node name="FitImageButton" type="Button" parent="UI_Layer/UserInterfaceContainer"] -layout_mode = 0 -offset_left = 288.0 +layout_mode = 1 +offset_left = 272.0 offset_top = 24.0 -offset_right = 376.0 +offset_right = 360.0 offset_bottom = 56.0 text = "Fit Image" @@ -111,6 +111,23 @@ grow_horizontal = 2 grow_vertical = 2 script = ExtResource("7_g8bap") +[node name="OpenShaderDialog" type="FileDialog" parent="UI_Layer/UserInterfaceContainer/Editor"] +title = "Load Shader" +size = Vector2i(521, 159) +ok_button_text = "Öffnen" +file_mode = 0 +access = 2 +filters = PackedStringArray("*.gdshader") +use_native_dialog = true + +[node name="SaveShaderDialog" type="FileDialog" parent="UI_Layer/UserInterfaceContainer/Editor"] +title = "Save Shader" +size = Vector2i(661, 159) +ok_button_text = "Speichern" +access = 2 +filters = PackedStringArray("*.gdshader") +use_native_dialog = true + [node name="Label" type="Label" parent="UI_Layer/UserInterfaceContainer/Editor"] layout_mode = 0 offset_top = 8.0 @@ -124,7 +141,7 @@ layout_mode = 0 offset_left = 104.0 offset_top = 8.0 offset_right = 240.0 -offset_bottom = 32.0 +offset_bottom = 40.0 [node name="CodeEdit" type="CodeEdit" parent="UI_Layer/UserInterfaceContainer/Editor"] layout_mode = 1 @@ -150,14 +167,39 @@ indent_automatic = true auto_brace_completion_enabled = true auto_brace_completion_highlight_matching = true +[node name="OpenShaderButton" type="Button" parent="UI_Layer/UserInterfaceContainer/Editor"] +layout_mode = 1 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -120.0 +offset_right = -64.0 +offset_bottom = 32.0 +grow_horizontal = 0 +text = "Open" + +[node name="SaveShaderButton" type="Button" parent="UI_Layer/UserInterfaceContainer/Editor"] +layout_mode = 1 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -56.0 +offset_bottom = 32.0 +grow_horizontal = 0 +text = "Save" + [node name="Camera" type="Camera2D" parent="."] script = ExtResource("8_mls06") -[connection signal="file_selected" from="UI_Layer/UserInterfaceContainer/OpenFileDialog" to="." method="_on_open_file_dialog_file_selected"] -[connection signal="file_selected" from="UI_Layer/UserInterfaceContainer/SaveFileDialog" to="." method="_on_save_file_dialog_file_selected"] +[connection signal="file_selected" from="UI_Layer/UserInterfaceContainer/OpenImageDialog" to="." method="_on_open_image_dialog_file_selected"] +[connection signal="file_selected" from="UI_Layer/UserInterfaceContainer/SaveImageDialog" to="." method="_on_save_image_dialog_file_selected"] [connection signal="pressed" from="UI_Layer/UserInterfaceContainer/OpenImageButton" to="." method="_on_open_image_button_pressed"] [connection signal="pressed" from="UI_Layer/UserInterfaceContainer/SaveImageButton" to="." method="_on_save_image_button_pressed"] [connection signal="pressed" from="UI_Layer/UserInterfaceContainer/FitImageButton" to="Camera" method="_on_fit_image_button_pressed"] +[connection signal="file_selected" from="UI_Layer/UserInterfaceContainer/Editor/OpenShaderDialog" to="UI_Layer/UserInterfaceContainer/Editor" method="_on_open_shader_dialog_file_selected"] +[connection signal="file_selected" from="UI_Layer/UserInterfaceContainer/Editor/SaveShaderDialog" to="UI_Layer/UserInterfaceContainer/Editor" method="_on_save_shader_dialog_file_selected"] [connection signal="item_selected" from="UI_Layer/UserInterfaceContainer/Editor/PresetOptions" to="UI_Layer/UserInterfaceContainer/Editor" method="_on_preset_options_item_selected"] [connection signal="code_completion_requested" from="UI_Layer/UserInterfaceContainer/Editor/CodeEdit" to="UI_Layer/UserInterfaceContainer/Editor" method="_on_code_edit_code_completion_requested"] [connection signal="text_changed" from="UI_Layer/UserInterfaceContainer/Editor/CodeEdit" to="UI_Layer/UserInterfaceContainer/Editor" method="_on_code_edit_text_changed"] +[connection signal="pressed" from="UI_Layer/UserInterfaceContainer/Editor/OpenShaderButton" to="UI_Layer/UserInterfaceContainer/Editor" method="_on_open_shader_button_pressed"] +[connection signal="pressed" from="UI_Layer/UserInterfaceContainer/Editor/SaveShaderButton" to="UI_Layer/UserInterfaceContainer/Editor" method="_on_save_shader_button_pressed"] diff --git a/src/Camera.gd b/src/Camera.gd index 63caf93..231add8 100644 --- a/src/Camera.gd +++ b/src/Camera.gd @@ -18,14 +18,15 @@ func _input(event): global_position -= event.relative / zoom func fit_image(): - var ui_container_size = user_interface_container.size - var image_size = image_viewport.image_original_tex.get_size() - var viewport_size = get_viewport_rect().size - var zoomf = (viewport_size.x - ui_container_size.x) / image_size.x / 1.1 - if zoomf * image_size.y > viewport_size.y: - zoomf = viewport_size.y / image_size.y / 1.1 - zoom = Vector2(zoomf, zoomf) - global_position = Vector2(-((ui_container_size.x) / 2 / zoom.x), 0) + if image_viewport.image_original_tex != null: + var ui_container_size = user_interface_container.size + var image_size = image_viewport.image_original_tex.get_size() + var viewport_size = get_viewport_rect().size + var zoomf = (viewport_size.x - ui_container_size.x) / image_size.x / 1.1 + if zoomf * image_size.y > viewport_size.y: + zoomf = viewport_size.y / image_size.y / 1.1 + zoom = Vector2(zoomf, zoomf) + global_position = Vector2(-((ui_container_size.x) / 2 / zoom.x), 0) func zoom_in(): var old_mouse_pos = get_global_mouse_position() diff --git a/src/Editor.gd b/src/Editor.gd index cf2efff..3fa2c7b 100644 --- a/src/Editor.gd +++ b/src/Editor.gd @@ -2,6 +2,8 @@ extends Control @onready var preset_options = $PresetOptions @onready var code_editor = $CodeEdit +@onready var open_shader_dialog = $OpenShaderDialog +@onready var save_shader_dialog = $SaveShaderDialog var selected_preset_name = ShaderPresets.default_preset # # # # # # # # # # # @@ -210,3 +212,24 @@ func update(): preset_options.select(current_p_idx) # weirdness ends here code_editor.text = Globals.shader.code + +func _on_open_shader_button_pressed(): + open_shader_dialog.show() + +func _on_save_shader_button_pressed(): + save_shader_dialog.current_file = selected_preset_name + "_custom.gdshader" + save_shader_dialog.show() + +func _on_open_shader_dialog_file_selected(path): + var file = FileAccess.open(path, FileAccess.READ) + var shader_code = file.get_as_text() + var shader = Shader.new() + shader.code = shader_code + Globals.shader = shader + Globals.target_viewport.update() + update() + +func _on_save_shader_dialog_file_selected(path): + var file = FileAccess.open(path, FileAccess.WRITE) + var content = Globals.shader.code + file.store_string(content) diff --git a/src/Main.gd b/src/Main.gd index cbe2fac..ad7f97b 100644 --- a/src/Main.gd +++ b/src/Main.gd @@ -3,19 +3,16 @@ extends Node2D @onready var camera = $Camera @onready var image_viewport = $ImageViewport @onready var ui_container = $UI_Layer/UserInterfaceContainer -@onready var ui_control_fileopen = $UI_Layer/UserInterfaceContainer/OpenFileDialog -@onready var ui_control_filesave = $UI_Layer/UserInterfaceContainer/SaveFileDialog +@onready var ui_control_fileopen = $UI_Layer/UserInterfaceContainer/OpenImageDialog +@onready var ui_control_filesave = $UI_Layer/UserInterfaceContainer/SaveImageDialog func _ready(): Globals.target_viewport = image_viewport func _on_open_image_button_pressed(): - if OS.get_name() == "Android": - Engine.get_singleton("GodotGetImage").getGalleryImage() - else: - ui_control_fileopen.show() + ui_control_fileopen.show() -func _on_open_file_dialog_file_selected(path): +func _on_open_image_dialog_file_selected(path): var img = Image.new() var err = img.load(path) if err == OK: @@ -26,9 +23,11 @@ func _on_open_file_dialog_file_selected(path): print("An error occured!") func _on_save_image_button_pressed(): - ui_control_filesave.show() + if image_viewport.get_result() != null: + ui_control_filesave.current_file = "image.png" + ui_control_filesave.show() -func _on_save_file_dialog_file_selected(path): +func _on_save_image_dialog_file_selected(path): var err = image_viewport.get_result().save_png(path) if err != OK: print("An error occured!")