extends ImageEffect 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 func _ready() -> void: 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") 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() func set_nodes() -> void: preview = $VBoxContainer/AspectRatioContainer/Preview selection_checkbox = $VBoxContainer/OptionsContainer/SelectionCheckBox affect_option_button = $VBoxContainer/OptionsContainer/AffectOptionButton 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") func _on_ThickValue_value_changed(value: int) -> void: thickness = value update_preview() func _on_OutlineColor_color_changed(_color: Color) -> void: color = _color update_preview() func _on_InsideImageCheckBox_toggled(button_pressed: bool) -> void: inside_image = button_pressed update_preview() func _on_PatternOptionButton_item_selected(index: int) -> void: pattern = index update_preview()