From 7b067de20e26b8b36de561f47603dadf3ec0cc1c Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas Date: Sun, 12 Jun 2022 00:27:59 +0300 Subject: [PATCH] Image effect refactors --- src/Classes/ImageEffect.gd | 3 ++ src/Shaders/GradientMap.gdshader | 1 + .../Dialogs/ImageEffects/DesaturateDialog.gd | 38 ++++++---------- .../Dialogs/ImageEffects/DropShadowDialog.gd | 26 +++-------- src/UI/Dialogs/ImageEffects/GradientDialog.gd | 11 ----- .../Dialogs/ImageEffects/GradientMapDialog.gd | 13 ------ src/UI/Dialogs/ImageEffects/HSVDialog.gd | 38 +++++++--------- .../ImageEffects/InvertColorsDialog.gd | 39 ++++++----------- src/UI/Dialogs/ImageEffects/OutlineDialog.gd | 43 ++++++------------- src/UI/Dialogs/ImageEffects/RotateImage.gd | 7 --- 10 files changed, 64 insertions(+), 155 deletions(-) diff --git a/src/Classes/ImageEffect.gd b/src/Classes/ImageEffect.gd index 4635faf49..3925107b0 100644 --- a/src/Classes/ImageEffect.gd +++ b/src/Classes/ImageEffect.gd @@ -13,6 +13,7 @@ var preview_texture := ImageTexture.new() var preview: TextureRect var selection_checkbox: CheckBox var affect_option_button: OptionButton +var confirmed := false func _ready() -> void: @@ -30,6 +31,7 @@ func _ready() -> void: func _about_to_show() -> void: + confirmed = false Global.canvas.selection.transform_content_confirm() var frame: Frame = Global.current_project.frames[Global.current_project.current_frame] current_cel = frame.cels[Global.current_project.current_layer].image @@ -41,6 +43,7 @@ func _about_to_show() -> void: func _confirmed() -> void: + confirmed = true var project: Project = Global.current_project if affect == CEL: var undo_data := _get_undo_data(project) diff --git a/src/Shaders/GradientMap.gdshader b/src/Shaders/GradientMap.gdshader index 8a7a216e3..74902b4d0 100644 --- a/src/Shaders/GradientMap.gdshader +++ b/src/Shaders/GradientMap.gdshader @@ -1,4 +1,5 @@ shader_type canvas_item; +render_mode unshaded; uniform sampler2D map; // GradientTexture uniform sampler2D selection; diff --git a/src/UI/Dialogs/ImageEffects/DesaturateDialog.gd b/src/UI/Dialogs/ImageEffects/DesaturateDialog.gd index 3964963d9..7b14b1333 100644 --- a/src/UI/Dialogs/ImageEffects/DesaturateDialog.gd +++ b/src/UI/Dialogs/ImageEffects/DesaturateDialog.gd @@ -7,15 +7,11 @@ var alpha := false var shader: Shader = preload("res://src/Shaders/Desaturate.shader") -var confirmed: bool = false - -func _about_to_show() -> void: - confirmed = false +func _ready() -> void: var sm := ShaderMaterial.new() sm.shader = shader preview.set_material(sm) - ._about_to_show() func set_nodes() -> void: @@ -24,35 +20,25 @@ func set_nodes() -> void: affect_option_button = $VBoxContainer/OptionsContainer/AffectOptionButton -func _confirmed() -> void: - confirmed = true - ._confirmed() - - func commit_action(cel: Image, project: Project = Global.current_project) -> void: var selection_tex := ImageTexture.new() if selection_checkbox.pressed and project.has_selection: var selection: Image = project.bitmap_to_image(project.selection_bitmap) selection_tex.create_from_image(selection, 0) + var params := { + "red": red, + "blue": blue, + "green": green, + "alpha": alpha, + "selection": selection_tex, + "affect_selection": selection_checkbox.pressed, + "has_selection": project.has_selection + } if !confirmed: - preview.material.set_shader_param("red", red) - preview.material.set_shader_param("blue", blue) - preview.material.set_shader_param("green", green) - preview.material.set_shader_param("alpha", alpha) - preview.material.set_shader_param("selection", selection_tex) - preview.material.set_shader_param("affect_selection", selection_checkbox.pressed) - preview.material.set_shader_param("has_selection", project.has_selection) + for param in params: + preview.material.set_shader_param(param, params[param]) else: - var params := { - "red": red, - "blue": blue, - "green": green, - "alpha": alpha, - "selection": selection_tex, - "affect_selection": selection_checkbox.pressed, - "has_selection": project.has_selection - } var gen := ShaderImageEffect.new() gen.generate_image(cel, shader, params, project.size) yield(gen, "done") diff --git a/src/UI/Dialogs/ImageEffects/DropShadowDialog.gd b/src/UI/Dialogs/ImageEffects/DropShadowDialog.gd index 996a2ec25..8cb04fda6 100644 --- a/src/UI/Dialogs/ImageEffects/DropShadowDialog.gd +++ b/src/UI/Dialogs/ImageEffects/DropShadowDialog.gd @@ -2,7 +2,6 @@ extends ImageEffect var offset := Vector2(5, 5) var color := Color.black -var confirmed := false var shader: Shader = load("res://src/Shaders/DropShadow.tres") onready var x_spinbox: SpinBox = $VBoxContainer/OptionsContainer/XSpinBox @@ -13,19 +12,9 @@ onready var shadow_color = $VBoxContainer/OptionsContainer/ShadowColor func _ready() -> void: shadow_color.get_picker().presets_visible = false color = shadow_color.color - - -func _about_to_show() -> void: - confirmed = false var sm := ShaderMaterial.new() sm.shader = shader preview.set_material(sm) - ._about_to_show() - - -func _confirmed() -> void: - confirmed = true - ._confirmed() func set_nodes() -> void: @@ -40,16 +29,15 @@ func commit_action(cel: Image, project: Project = Global.current_project) -> voi var selection: Image = project.bitmap_to_image(project.selection_bitmap) selection_tex.create_from_image(selection, 0) + var params := { + "shadow_offset": offset, + "shadow_color": color, + "selection": selection_tex, + } if !confirmed: - preview.material.set_shader_param("shadow_offset", offset) - preview.material.set_shader_param("shadow_color", color) - preview.material.set_shader_param("selection", selection_tex) + for param in params: + preview.material.set_shader_param(param, params[param]) else: - var params := { - "shadow_offset": offset, - "shadow_color": color, - "selection": selection_tex, - } var gen := ShaderImageEffect.new() gen.generate_image(cel, shader, params, project.size) yield(gen, "done") diff --git a/src/UI/Dialogs/ImageEffects/GradientDialog.gd b/src/UI/Dialogs/ImageEffects/GradientDialog.gd index 360efe1ec..09350ee0c 100644 --- a/src/UI/Dialogs/ImageEffects/GradientDialog.gd +++ b/src/UI/Dialogs/ImageEffects/GradientDialog.gd @@ -9,7 +9,6 @@ var shader_radial_step: Shader = preload("res://src/Shaders/Gradients/RadialStep var shader_linear_dither: Shader = preload("res://src/Shaders/Gradients/LinearDithering.gdshader") var shader_radial_dither: Shader = preload("res://src/Shaders/Gradients/RadialDithering.gdshader") -var confirmed := false var shader: Shader = shader_linear var dither_matrices := [ DitherMatrix.new(preload("res://assets/dither-matrices/bayer2.png"), "Bayer 2x2"), @@ -56,16 +55,6 @@ func _ready() -> void: dithering_option_button.add_item(matrix.name) -func _about_to_show() -> void: - confirmed = false - ._about_to_show() - - -func _confirmed() -> void: - confirmed = true - ._confirmed() - - func set_nodes() -> void: preview = $VBoxContainer/AspectRatioContainer/Preview selection_checkbox = $VBoxContainer/OptionsContainer/SelectionCheckBox diff --git a/src/UI/Dialogs/ImageEffects/GradientMapDialog.gd b/src/UI/Dialogs/ImageEffects/GradientMapDialog.gd index 98a339efb..dbc09590d 100644 --- a/src/UI/Dialogs/ImageEffects/GradientMapDialog.gd +++ b/src/UI/Dialogs/ImageEffects/GradientMapDialog.gd @@ -1,10 +1,8 @@ extends ImageEffect var shader: Shader = preload("res://src/Shaders/GradientMap.gdshader") -var confirmed := false -# Called when the node enters the scene tree for the first time. func _ready() -> void: var sm := ShaderMaterial.new() sm.shader = shader @@ -17,16 +15,6 @@ func set_nodes() -> void: affect_option_button = $VBoxContainer/OptionsContainer/AffectOptionButton -func _about_to_show() -> void: - confirmed = false - ._about_to_show() - - -func _confirmed() -> void: - confirmed = true - ._confirmed() - - func commit_action(cel: Image, project: Project = Global.current_project) -> void: var selection_tex := ImageTexture.new() if selection_checkbox.pressed and project.has_selection: @@ -36,7 +24,6 @@ func commit_action(cel: Image, project: Project = Global.current_project) -> voi var params := {"selection": selection_tex, "map": $VBoxContainer/GradientEdit.texture} if !confirmed: - preview.material.shader = shader for param in params: preview.material.set_shader_param(param, params[param]) else: diff --git a/src/UI/Dialogs/ImageEffects/HSVDialog.gd b/src/UI/Dialogs/ImageEffects/HSVDialog.gd index 2025d7f06..576a79c6b 100644 --- a/src/UI/Dialogs/ImageEffects/HSVDialog.gd +++ b/src/UI/Dialogs/ImageEffects/HSVDialog.gd @@ -3,7 +3,6 @@ extends ImageEffect var shader: Shader = preload("res://src/Shaders/HSV.shader") var live_preview: bool = true -var confirmed: bool = false onready var hue_slider = $VBoxContainer/HBoxContainer/Sliders/Hue onready var sat_slider = $VBoxContainer/HBoxContainer/Sliders/Saturation @@ -16,11 +15,14 @@ onready var wait_apply_timer = $WaitApply onready var wait_time_spinbox = $VBoxContainer/WaitSettings/WaitTime -func _about_to_show() -> void: - reset() +func _ready() -> void: var sm := ShaderMaterial.new() sm.shader = shader preview.set_material(sm) + + +func _about_to_show() -> void: + reset() ._about_to_show() @@ -30,34 +32,24 @@ func set_nodes() -> void: affect_option_button = $VBoxContainer/AffectHBoxContainer/AffectOptionButton -func _confirmed() -> void: - confirmed = true - ._confirmed() - reset() - - func commit_action(cel: Image, project: Project = Global.current_project) -> void: var selection_tex := ImageTexture.new() if selection_checkbox.pressed and project.has_selection: var selection: Image = project.bitmap_to_image(project.selection_bitmap) selection_tex.create_from_image(selection, 0) + var params := { + "hue_shift_amount": hue_slider.value / 360, + "sat_shift_amount": sat_slider.value / 100, + "val_shift_amount": val_slider.value / 100, + "selection": selection_tex, + "affect_selection": selection_checkbox.pressed, + "has_selection": project.has_selection + } if !confirmed: - preview.material.set_shader_param("hue_shift_amount", hue_slider.value / 360) - preview.material.set_shader_param("sat_shift_amount", sat_slider.value / 100) - preview.material.set_shader_param("val_shift_amount", val_slider.value / 100) - preview.material.set_shader_param("selection", selection_tex) - preview.material.set_shader_param("affect_selection", selection_checkbox.pressed) - preview.material.set_shader_param("has_selection", project.has_selection) + for param in params: + preview.material.set_shader_param(param, params[param]) else: - var params := { - "hue_shift_amount": hue_slider.value / 360, - "sat_shift_amount": sat_slider.value / 100, - "val_shift_amount": val_slider.value / 100, - "selection": selection_tex, - "affect_selection": selection_checkbox.pressed, - "has_selection": project.has_selection - } var gen := ShaderImageEffect.new() gen.generate_image(cel, shader, params, project.size) yield(gen, "done") diff --git a/src/UI/Dialogs/ImageEffects/InvertColorsDialog.gd b/src/UI/Dialogs/ImageEffects/InvertColorsDialog.gd index 61a7dd223..bb44bcfbf 100644 --- a/src/UI/Dialogs/ImageEffects/InvertColorsDialog.gd +++ b/src/UI/Dialogs/ImageEffects/InvertColorsDialog.gd @@ -7,15 +7,11 @@ var alpha := false var shader: Shader = preload("res://src/Shaders/Invert.shader") -var confirmed: bool = false - -func _about_to_show() -> void: - confirmed = false +func _ready() -> void: var sm := ShaderMaterial.new() sm.shader = shader preview.set_material(sm) - ._about_to_show() func set_nodes() -> void: @@ -24,35 +20,26 @@ func set_nodes() -> void: affect_option_button = $VBoxContainer/OptionsContainer/AffectOptionButton -func _confirmed() -> void: - confirmed = true - ._confirmed() - - func commit_action(cel: Image, project: Project = Global.current_project) -> void: var selection_tex := ImageTexture.new() if selection_checkbox.pressed and project.has_selection: var selection: Image = project.bitmap_to_image(project.selection_bitmap) selection_tex.create_from_image(selection, 0) + var params := { + "red": red, + "blue": blue, + "green": green, + "alpha": alpha, + "selection": selection_tex, + "affect_selection": selection_checkbox.pressed, + "has_selection": project.has_selection + } + if !confirmed: - preview.material.set_shader_param("red", red) - preview.material.set_shader_param("blue", blue) - preview.material.set_shader_param("green", green) - preview.material.set_shader_param("alpha", alpha) - preview.material.set_shader_param("selection", selection_tex) - preview.material.set_shader_param("affect_selection", selection_checkbox.pressed) - preview.material.set_shader_param("has_selection", project.has_selection) + for param in params: + preview.material.set_shader_param(param, params[param]) else: - var params := { - "red": red, - "blue": blue, - "green": green, - "alpha": alpha, - "selection": selection_tex, - "affect_selection": selection_checkbox.pressed, - "has_selection": project.has_selection - } var gen := ShaderImageEffect.new() gen.generate_image(cel, shader, params, project.size) yield(gen, "done") diff --git a/src/UI/Dialogs/ImageEffects/OutlineDialog.gd b/src/UI/Dialogs/ImageEffects/OutlineDialog.gd index ba811080f..c036ae1e9 100644 --- a/src/UI/Dialogs/ImageEffects/OutlineDialog.gd +++ b/src/UI/Dialogs/ImageEffects/OutlineDialog.gd @@ -4,7 +4,6 @@ var color := Color.red var thickness := 1 var pattern := 0 var inside_image := false -var confirmed := false var shader: Shader onready var outline_color = $VBoxContainer/OptionsContainer/OutlineColor @@ -15,22 +14,11 @@ func _ready() -> void: $VBoxContainer/OptionsContainer/PatternOptionButton.disabled = true else: shader = load("res://src/Shaders/OutlineInline.gdshader") - outline_color.get_picker().presets_visible = false - color = outline_color.color - - -func _about_to_show() -> void: - confirmed = false - if shader: var sm := ShaderMaterial.new() sm.shader = shader preview.set_material(sm) - ._about_to_show() - - -func _confirmed() -> void: - confirmed = true - ._confirmed() + outline_color.get_picker().presets_visible = false + color = outline_color.color func set_nodes() -> void: @@ -51,24 +39,19 @@ func commit_action(cel: Image, project: Project = Global.current_project) -> voi var selection: Image = project.bitmap_to_image(project.selection_bitmap) selection_tex.create_from_image(selection, 0) + var params := { + "color": color, + "width": thickness, + "pattern": pattern, + "inside": inside_image, + "selection": selection_tex, + "affect_selection": selection_checkbox.pressed, + "has_selection": project.has_selection + } if !confirmed: - preview.material.set_shader_param("color", color) - preview.material.set_shader_param("width", thickness) - preview.material.set_shader_param("pattern", pattern) - preview.material.set_shader_param("inside", inside_image) - preview.material.set_shader_param("selection", selection_tex) - preview.material.set_shader_param("affect_selection", selection_checkbox.pressed) - preview.material.set_shader_param("has_selection", project.has_selection) + for param in params: + preview.material.set_shader_param(param, params[param]) else: - var params := { - "color": color, - "width": thickness, - "pattern": pattern, - "inside": inside_image, - "selection": selection_tex, - "affect_selection": selection_checkbox.pressed, - "has_selection": project.has_selection - } var gen := ShaderImageEffect.new() gen.generate_image(cel, shader, params, project.size) yield(gen, "done") diff --git a/src/UI/Dialogs/ImageEffects/RotateImage.gd b/src/UI/Dialogs/ImageEffects/RotateImage.gd index c2961474f..596ca864a 100644 --- a/src/UI/Dialogs/ImageEffects/RotateImage.gd +++ b/src/UI/Dialogs/ImageEffects/RotateImage.gd @@ -1,7 +1,6 @@ extends ImageEffect var live_preview: bool = true -var confirmed := false var shader: Shader = preload("res://src/Shaders/Rotation.shader") onready var type_option_button: OptionButton = $VBoxContainer/HBoxContainer2/TypeOptionButton @@ -111,12 +110,6 @@ func commit_action(_cel: Image, _project: Project = Global.current_project) -> v _cel.blit_rect(image, Rect2(Vector2.ZERO, image.get_size()), Vector2.ZERO) -func _confirmed() -> void: - confirmed = true - ._confirmed() - angle_hslider.value = 0 - - func _on_HSlider_value_changed(_value: float) -> void: angle_spinbox.value = angle_hslider.value if live_preview: