Place the viewer and editor in separate windows

This commit is contained in:
ChaoticByte 2024-12-21 17:07:18 +01:00
parent f069f2911f
commit 57328bc9a3
No known key found for this signature in database
8 changed files with 72 additions and 110 deletions

View file

@ -2,16 +2,15 @@ extends Camera2D
var drag = false
@onready var user_interface_container = %UserInterfaceContainer
@onready var image_viewport = %ImageViewport
@onready var image_viewport_display = %ImageViewportDisplay
func _input(event):
if event.is_action_pressed("zoom_out") && !Globals.camera_freeze:
if event.is_action_pressed("zoom_out"):
zoom_out()
elif event.is_action_pressed("zoom_in") && !Globals.camera_freeze:
elif event.is_action_pressed("zoom_in"):
zoom_in()
if event.is_action_pressed("drag") && !Globals.camera_freeze:
if event.is_action_pressed("drag"):
drag = true
elif event.is_action_released("drag"):
drag = false
@ -20,14 +19,13 @@ func _input(event):
func fit_image():
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
var zoomf = viewport_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)
global_position = Vector2(0, 0)
func update_viewport_display():
image_viewport_display.update_zoom_texture_filter(zoom)

View file

@ -4,6 +4,9 @@ extends Control
@onready var open_shader_dialog = %OpenShaderDialog
@onready var save_shader_dialog = %SaveShaderDialog
@onready var image_viewport = %ImageViewport
@onready var ui_control_filesave = %SaveImageDialog
# # # # # # # # # # #
# GDShader keywords #
# https://github.com/godotengine/godot/blob/e96ad5af98547df71b50c4c4695ac348638113e0/servers/rendering/shader_language.cpp
@ -165,18 +168,9 @@ func _on_code_edit_code_completion_requested():
#
# # # # # # # # # # # #
func _camera_freeze():
Globals.camera_freeze = true
func _camera_unfreeze():
Globals.camera_freeze = false
func _ready():
code_editor.code_completion_enabled = true
code_editor.syntax_highlighter = ShaderSyntaxHighlighter.new()
for c in get_children():
c.connect("mouse_entered", _camera_freeze)
c.connect("mouse_exited", _camera_unfreeze)
update()
func _input(event):
@ -208,7 +202,7 @@ func _on_open_shader_dialog_file_selected(path: String):
Globals.shader = shader
if "/" in path: # update current working directory
Globals.cwd = path.substr(0, path.rfind("/"))
Globals.target_viewport.update()
image_viewport.update()
update()
Globals.last_shader_savepath = path
@ -225,4 +219,17 @@ func _on_apply_shader_button_pressed():
var shader = Shader.new()
shader.code = code_editor.text
Globals.shader = shader
Globals.target_viewport.update()
image_viewport.update()
func _on_save_image_button_pressed():
if image_viewport.get_result() != null:
ui_control_filesave.current_path = Globals.last_image_savepath
ui_control_filesave.show()
func _on_save_image_dialog_file_selected(path):
print("Export ", path)
var err = image_viewport.get_result().save_png(path)
if err != OK:
print("An error occured!")
else:
Globals.last_image_savepath = path

View file

@ -1,8 +1,6 @@
extends Node
var camera_freeze = false
@onready var shader: Shader = load("res://src/shader/template.gdshader")
var target_viewport: SubViewport
var cwd = "."
var last_image_savepath = ""
var last_shader_savepath = ""

View file

@ -1,22 +1,11 @@
extends Node2D
@onready var image_viewport = %ImageViewport
@onready var ui_control_filesave = %SaveImageDialog
extends Node
@onready var editor_window = %EditorWindow
func _ready():
DisplayServer.window_set_min_size(Vector2i(900, 500))
Globals.target_viewport = image_viewport
func _on_save_image_button_pressed():
if image_viewport.get_result() != null:
ui_control_filesave.current_path = Globals.last_image_savepath
ui_control_filesave.show()
func _on_save_image_dialog_file_selected(path):
print("Export ", path)
var err = image_viewport.get_result().save_png(path)
if err != OK:
print("An error occured!")
else:
Globals.last_image_savepath = path
# position windows
get_window().position = Vector2i(
editor_window.position.x + editor_window.size.x + 50,
editor_window.position.y)
get_window().title = ProjectSettings.get_setting("application/config/name") + " - Viewer"
editor_window.title = ProjectSettings.get_setting("application/config/name") + " - Editor"

4
src/UIWindow.gd Normal file
View file

@ -0,0 +1,4 @@
extends Window
func _on_close_requested() -> void:
get_tree().quit()

View file

@ -1,17 +0,0 @@
shader_type canvas_item;
uniform sampler2D SCREEN_TEXTURE: hint_screen_texture, repeat_disable, filter_linear_mipmap_anisotropic;
float rand(vec2 uv) {
return fract(sin(dot(uv, vec2(12.9898, 78.233))) * 43758.5453123);
}
void fragment() {
vec2 new_uv;
new_uv.x = mix(SCREEN_UV.x, rand(UV), 0.2);
new_uv.y = mix(SCREEN_UV.y, rand(UV), 0.2);
new_uv.x = mix(new_uv.x, rand(UV), -0.2);
new_uv.y = mix(new_uv.y, rand(UV), -0.2);
COLOR.rgb = clamp(textureLod(SCREEN_TEXTURE, new_uv, 10.0).rgb, 0.05, 0.7);
COLOR.a = 1.0;
}