2020-08-25 16:49:18 +00:00
|
|
|
extends ImageEffect
|
2019-12-29 22:24:37 +00:00
|
|
|
|
2020-07-27 01:36:00 +00:00
|
|
|
var color := Color.red
|
|
|
|
var thickness := 1
|
2022-04-22 18:11:02 +00:00
|
|
|
var pattern := 0
|
2020-07-27 01:36:00 +00:00
|
|
|
var inside_image := false
|
2022-04-22 18:11:02 +00:00
|
|
|
var confirmed := false
|
|
|
|
var shader: Shader
|
2020-07-27 01:36:00 +00:00
|
|
|
|
|
|
|
onready var outline_color = $VBoxContainer/OptionsContainer/OutlineColor
|
2020-07-27 01:11:46 +00:00
|
|
|
|
|
|
|
|
2020-02-15 05:34:42 +00:00
|
|
|
func _ready() -> void:
|
2022-04-22 18:11:02 +00:00
|
|
|
if OS.get_name() == "HTML5" and OS.get_current_video_driver() == OS.VIDEO_DRIVER_GLES2:
|
|
|
|
$VBoxContainer/OptionsContainer/PatternOptionButton.disabled = true
|
|
|
|
else:
|
|
|
|
shader = load("res://src/Shaders/OutlineInline.gdshader")
|
2020-07-27 01:11:46 +00:00
|
|
|
outline_color.get_picker().presets_visible = false
|
2020-07-27 01:36:00 +00:00
|
|
|
color = outline_color.color
|
2020-07-27 01:11:46 +00:00
|
|
|
|
|
|
|
|
2022-04-22 18:11:02 +00:00
|
|
|
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()
|
|
|
|
|
|
|
|
|
2020-08-25 16:49:18 +00:00
|
|
|
func set_nodes() -> void:
|
2021-08-31 12:38:11 +00:00
|
|
|
preview = $VBoxContainer/AspectRatioContainer/Preview
|
2020-08-25 16:49:18 +00:00
|
|
|
selection_checkbox = $VBoxContainer/OptionsContainer/SelectionCheckBox
|
|
|
|
affect_option_button = $VBoxContainer/OptionsContainer/AffectOptionButton
|
2020-02-15 05:34:42 +00:00
|
|
|
|
2020-05-01 17:47:10 +00:00
|
|
|
|
2022-04-22 18:11:02 +00:00
|
|
|
func commit_action(cel: Image, project: Project = Global.current_project) -> void:
|
|
|
|
if !shader: # Web version
|
|
|
|
DrawingAlgos.generate_outline(
|
|
|
|
cel, selection_checkbox.pressed, project, color, thickness, false, inside_image
|
|
|
|
)
|
|
|
|
return
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
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)
|
|
|
|
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")
|
2020-07-27 01:11:46 +00:00
|
|
|
|
|
|
|
|
2021-11-25 12:48:30 +00:00
|
|
|
func _on_ThickValue_value_changed(value: int) -> void:
|
2020-07-27 01:36:00 +00:00
|
|
|
thickness = value
|
|
|
|
update_preview()
|
|
|
|
|
|
|
|
|
2021-11-25 12:48:30 +00:00
|
|
|
func _on_OutlineColor_color_changed(_color: Color) -> void:
|
2020-07-27 01:36:00 +00:00
|
|
|
color = _color
|
|
|
|
update_preview()
|
|
|
|
|
|
|
|
|
2022-04-22 18:11:02 +00:00
|
|
|
func _on_InsideImageCheckBox_toggled(button_pressed: bool) -> void:
|
|
|
|
inside_image = button_pressed
|
2020-07-27 01:36:00 +00:00
|
|
|
update_preview()
|
|
|
|
|
|
|
|
|
2022-04-22 18:11:02 +00:00
|
|
|
func _on_PatternOptionButton_item_selected(index: int) -> void:
|
|
|
|
pattern = index
|
2020-07-27 01:36:00 +00:00
|
|
|
update_preview()
|