mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-02-12 16:53:07 +00:00
78 lines
2.1 KiB
GDScript
78 lines
2.1 KiB
GDScript
extends ImageEffect
|
|
|
|
var color := Color.red
|
|
var thickness := 1
|
|
var pattern := 0
|
|
var inside_image := 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")
|
|
var sm := ShaderMaterial.new()
|
|
sm.shader = shader
|
|
preview.set_material(sm)
|
|
outline_color.get_picker().presets_visible = false
|
|
color = outline_color.color
|
|
|
|
|
|
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)
|
|
|
|
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:
|
|
for param in params:
|
|
preview.material.set_shader_param(param, params[param])
|
|
else:
|
|
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()
|