Add an outline to the result preview

This commit is contained in:
ChaoticByte 2024-12-21 15:38:07 +01:00
parent 815ec239f6
commit f069f2911f
No known key found for this signature in database
8 changed files with 37 additions and 6 deletions

View file

@ -29,17 +29,21 @@ func fit_image():
zoom = Vector2(zoomf, zoomf)
global_position = Vector2(-((ui_container_size.x) / 2 / zoom.x), 0)
func update_viewport_display():
image_viewport_display.update_zoom_texture_filter(zoom)
image_viewport_display.material.set_shader_parameter("zoom_level", zoom)
func zoom_in():
var old_mouse_pos = get_global_mouse_position()
zoom *= 1.2
global_position += old_mouse_pos - get_global_mouse_position()
image_viewport_display.update_zoom_texture_filter(zoom)
update_viewport_display()
func zoom_out():
var old_mouse_pos = get_global_mouse_position()
zoom *= 1/1.2
global_position += old_mouse_pos - get_global_mouse_position()
image_viewport_display.update_zoom_texture_filter(zoom)
update_viewport_display()
func _on_fit_image_button_pressed():
fit_image()

View file

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

View file

@ -2,6 +2,7 @@ extends SubViewport
@onready var camera = %Camera
@onready var image_sprite = %ImageSprite
@onready var image_viewport_display = %ImageViewportDisplay
var image_original_tex: ImageTexture
var image_result: Image
@ -36,7 +37,7 @@ func update():
# load images from //!load directive -> TEXTURE
var regex_match = load_regex.search(Globals.shader.code)
if regex_match == null: # Error!
print("Didn't find any load directives!")
printerr("Didn't find any load directives!")
return
var tex_path = get_absolute_path(regex_match.strings[1])
load_texture(tex_path) # load every time
@ -66,6 +67,7 @@ func update():
image_result = get_texture().get_image()
image_sprite.material = null
image_sprite.texture = ImageTexture.create_from_image(image_result)
image_viewport_display.show()
func get_result():
return image_result

View file

@ -1,5 +1,8 @@
extends Sprite2D
func _ready() -> void:
hide()
func update_zoom_texture_filter(zoom: Vector2):
if zoom.x >= 1.5:
texture_filter = TEXTURE_FILTER_NEAREST_WITH_MIPMAPS

View file

@ -0,0 +1,16 @@
shader_type canvas_item;
uniform vec2 zoom_level = vec2(1.0);
const float thickness = 3.0;
void fragment() {
vec2 t = thickness * TEXTURE_PIXEL_SIZE / zoom_level;
if (
UV.x < t.x ||
UV.y < t.y ||
UV.x > 1.0-t.x ||
UV.y > 1.0-t.y
) {
COLOR = mix(COLOR, vec4(1.0), 0.5);
}
}