1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-01-18 17:19:50 +00:00

Fix issue where shader-based effects were not respecting the selection bounds, when the selection was out of the canvas

This commit is contained in:
Emmanouil Papadeas 2024-04-13 19:51:12 +03:00
parent c3bb85f6c9
commit dc6efe02bb
15 changed files with 36 additions and 20 deletions

View file

@ -96,6 +96,17 @@ func invert() -> void:
func return_cropped_copy(size: Vector2i) -> SelectionMap:
var selection_map_copy := SelectionMap.new()
selection_map_copy.copy_from(self)
var diff := Vector2i.ZERO
var selection_position: Vector2i = Global.canvas.selection.big_bounding_rectangle.position
if selection_position.x < 0:
diff.x += selection_position.x
if selection_position.y < 0:
diff.y += selection_position.y
if diff != Vector2i.ZERO:
# If there are pixels out of bounds on the negative side (left & up),
# move them before resizing
selection_map_copy.fill(Color(0))
selection_map_copy.blit_rect(self, Rect2i(Vector2i.ZERO, get_size()), diff)
selection_map_copy.crop(size.x, size.y)
return selection_map_copy

View file

@ -199,7 +199,7 @@ func fill_in_color(pos: Vector2i) -> void:
var selection: Image
var selection_tex: ImageTexture
if project.has_selection:
selection = project.selection_map
selection = project.selection_map.return_cropped_copy(project.size)
else:
selection = Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
selection.fill(Color(1, 1, 1, 1))
@ -263,7 +263,7 @@ func fill_in_selection() -> void:
var selection: Image
var selection_tex: ImageTexture
if project.has_selection:
selection = project.selection_map
selection = project.selection_map.return_cropped_copy(project.size)
else:
selection = Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8)
selection.fill(Color(1, 1, 1, 1))

View file

@ -49,8 +49,6 @@ popup/item_2/id = 2
[node name="SimilaritySlider" parent="." index="4" instance=ExtResource("1")]
visible = false
layout_mode = 2
focus_mode = 2
theme_type_variation = &"ValueSlider"
value = 100.0
prefix = "Similarity:"
@ -96,14 +94,10 @@ stretch_mode = 6
[node name="OffsetX" parent="FillPattern" index="1" instance=ExtResource("1")]
layout_mode = 2
focus_mode = 2
theme_type_variation = &"ValueSlider"
prefix = "Offset X:"
[node name="OffsetY" parent="FillPattern" index="2" instance=ExtResource("1")]
layout_mode = 2
focus_mode = 2
theme_type_variation = &"ValueSlider"
prefix = "Offset Y:"
[connection signal="item_selected" from="FillAreaOptions" to="." method="_on_FillAreaOptions_item_selected"]

View file

@ -18,7 +18,8 @@ func _ready() -> void:
func commit_action(cel: Image, project := Global.current_project) -> void:
var selection_tex: ImageTexture
if selection_checkbox.button_pressed and project.has_selection:
selection_tex = ImageTexture.create_from_image(project.selection_map)
var selection := project.selection_map.return_cropped_copy(project.size)
selection_tex = ImageTexture.create_from_image(selection)
var params := {
"red": red, "blue": blue, "green": green, "alpha": alpha, "selection": selection_tex

View file

@ -29,7 +29,8 @@ func commit_action(cel: Image, project := Global.current_project) -> void:
var offset_y := animate_panel.get_animated_value(commit_idx, Animate.OFFSET_Y)
var selection_tex: ImageTexture
if selection_checkbox.button_pressed and project.has_selection:
selection_tex = ImageTexture.create_from_image(project.selection_map)
var selection := project.selection_map.return_cropped_copy(project.size)
selection_tex = ImageTexture.create_from_image(selection)
var params := {
"offset": Vector2(offset_x, offset_y), "shadow_color": color, "selection": selection_tex

View file

@ -58,7 +58,8 @@ func _ready() -> void:
func commit_action(cel: Image, project := Global.current_project) -> void:
var selection_tex: ImageTexture
if selection_checkbox.button_pressed and project.has_selection:
selection_tex = ImageTexture.create_from_image(project.selection_map)
var selection := project.selection_map.return_cropped_copy(project.size)
selection_tex = ImageTexture.create_from_image(selection)
var dither_texture := selected_dither_matrix.texture
var gradient := gradient_edit.gradient

View file

@ -13,7 +13,8 @@ func _ready() -> void:
func commit_action(cel: Image, project := Global.current_project) -> void:
var selection_tex: ImageTexture
if selection_checkbox.button_pressed and project.has_selection:
selection_tex = ImageTexture.create_from_image(project.selection_map)
var selection := project.selection_map.return_cropped_copy(project.size)
selection_tex = ImageTexture.create_from_image(selection)
var params := {"selection": selection_tex, "gradient_map": $VBoxContainer/GradientEdit.texture}

View file

@ -30,7 +30,8 @@ func commit_action(cel: Image, project := Global.current_project) -> void:
var val = animate_panel.get_animated_value(commit_idx, Animate.VALUE) / 100
var selection_tex: ImageTexture
if selection_checkbox.button_pressed and project.has_selection:
selection_tex = ImageTexture.create_from_image(project.selection_map)
var selection := project.selection_map.return_cropped_copy(project.size)
selection_tex = ImageTexture.create_from_image(selection)
var params := {"hue": hue, "saturation": sat, "value": val, "selection": selection_tex}
if !has_been_confirmed:

View file

@ -18,7 +18,8 @@ func _ready() -> void:
func commit_action(cel: Image, project := Global.current_project) -> void:
var selection_tex: ImageTexture
if selection_checkbox.button_pressed and project.has_selection:
selection_tex = ImageTexture.create_from_image(project.selection_map)
var selection := project.selection_map.return_cropped_copy(project.size)
selection_tex = ImageTexture.create_from_image(selection)
var params := {
"red": red, "blue": blue, "green": green, "alpha": alpha, "selection": selection_tex

View file

@ -34,7 +34,8 @@ func commit_action(cel: Image, project := Global.current_project) -> void:
var offset := Vector2(offset_x, offset_y)
var selection_tex: ImageTexture
if selection_checkbox.button_pressed and project.has_selection:
selection_tex = ImageTexture.create_from_image(project.selection_map)
var selection := project.selection_map.return_cropped_copy(project.size)
selection_tex = ImageTexture.create_from_image(selection)
var params := {"offset": offset, "wrap_around": wrap_around, "selection": selection_tex}
if !has_been_confirmed:

View file

@ -25,7 +25,8 @@ func commit_action(cel: Image, project := Global.current_project) -> void:
var anim_thickness := animate_panel.get_animated_value(commit_idx, Animate.THICKNESS)
var selection_tex: ImageTexture
if selection_checkbox.button_pressed and project.has_selection:
selection_tex = ImageTexture.create_from_image(project.selection_map)
var selection := project.selection_map.return_cropped_copy(project.size)
selection_tex = ImageTexture.create_from_image(selection)
var params := {
"color": color,

View file

@ -13,7 +13,8 @@ func _ready() -> void:
func commit_action(cel: Image, project := Global.current_project) -> void:
var selection_tex: ImageTexture
if selection_checkbox.button_pressed and project.has_selection:
selection_tex = ImageTexture.create_from_image(project.selection_map)
var selection := project.selection_map.return_cropped_copy(project.size)
selection_tex = ImageTexture.create_from_image(selection)
if not is_instance_valid(Palettes.current_palette):
return

View file

@ -14,7 +14,8 @@ func _ready() -> void:
func commit_action(cel: Image, project := Global.current_project) -> void:
var selection_tex: ImageTexture
if selection_checkbox.button_pressed and project.has_selection:
selection_tex = ImageTexture.create_from_image(project.selection_map)
var selection := project.selection_map.return_cropped_copy(project.size)
selection_tex = ImageTexture.create_from_image(selection)
var params := {"pixel_size": pixel_size, "selection": selection_tex}
if !has_been_confirmed:

View file

@ -15,7 +15,8 @@ func _ready() -> void:
func commit_action(cel: Image, project := Global.current_project) -> void:
var selection_tex: ImageTexture
if selection_checkbox.button_pressed and project.has_selection:
selection_tex = ImageTexture.create_from_image(project.selection_map)
var selection := project.selection_map.return_cropped_copy(project.size)
selection_tex = ImageTexture.create_from_image(selection)
var params := {"colors": levels, "dither_intensity": dither, "selection": selection_tex}

View file

@ -85,7 +85,7 @@ func commit_action(cel: Image, _project := Global.current_project) -> void:
var image := Image.new()
image.copy_from(cel)
if _project.has_selection and selection_checkbox.button_pressed:
var selection := _project.selection_map
var selection := _project.selection_map.return_cropped_copy(_project.size)
selection_tex = ImageTexture.create_from_image(selection)
if !_type_is_shader():