mirror of
https://github.com/tonytins/CozyPixelStudio.git
synced 2025-06-25 09:24:44 -04:00
Having no active selection no longer treats all the pixels of the canvas as selected
A performance boost for when opening large images. Also fixed an issue with pixels being selected outside of the canvas boundaries, when the selection rectangle was outside the canvas and its size got reduced.
This commit is contained in:
parent
7f1594e1bc
commit
c54b74f829
9 changed files with 31 additions and 19 deletions
|
@ -75,7 +75,7 @@ func set_pixel(image: Image, position: Vector2, color: Color) -> void:
|
|||
var mirror_y = project.y_symmetry_point - position.y
|
||||
var mirror_x_inside : bool
|
||||
var mirror_y_inside : bool
|
||||
var entire_image_selected : bool = project.selected_pixels.size() == project.size.x * project.size.y
|
||||
var entire_image_selected : bool = project.selected_pixels.empty()
|
||||
if entire_image_selected:
|
||||
mirror_x_inside = mirror_x >= 0 and mirror_x < project.size.x
|
||||
mirror_y_inside = mirror_y >= 0 and mirror_y < project.size.y
|
||||
|
|
|
@ -66,7 +66,7 @@ func _confirmed() -> void:
|
|||
elif affect == ALL_PROJECTS:
|
||||
for project in Global.projects:
|
||||
var _pixels := []
|
||||
if selection_checkbox.pressed:
|
||||
if selection_checkbox.pressed and project.selected_pixels:
|
||||
_pixels = project.selected_pixels.duplicate()
|
||||
else:
|
||||
for x in project.size.x:
|
||||
|
@ -90,7 +90,7 @@ func set_nodes() -> void:
|
|||
|
||||
func _on_SelectionCheckBox_toggled(button_pressed : bool) -> void:
|
||||
pixels.clear()
|
||||
if button_pressed:
|
||||
if button_pressed and Global.current_project.selected_pixels:
|
||||
pixels = Global.current_project.selected_pixels.duplicate()
|
||||
else:
|
||||
for x in Global.current_project.size.x:
|
||||
|
|
|
@ -42,7 +42,6 @@ func _init(_frames := [], _name := tr("untitled"), _size := Vector2(64, 64)) ->
|
|||
name = _name
|
||||
size = _size
|
||||
update_tile_mode_rects()
|
||||
select_all_pixels()
|
||||
|
||||
undo_redo = UndoRedo.new()
|
||||
|
||||
|
@ -295,7 +294,6 @@ func deserialize(dict : Dictionary) -> void:
|
|||
size.x = dict.size_x
|
||||
size.y = dict.size_y
|
||||
update_tile_mode_rects()
|
||||
select_all_pixels()
|
||||
if dict.has("save_path"):
|
||||
OpenSave.current_save_paths[Global.projects.find(self)] = dict.save_path
|
||||
if dict.has("frames"):
|
||||
|
@ -366,8 +364,7 @@ func name_changed(value : String) -> void:
|
|||
func size_changed(value : Vector2) -> void:
|
||||
size = value
|
||||
update_tile_mode_rects()
|
||||
if Global.selection_rectangle._selected_rect.has_no_area():
|
||||
select_all_pixels()
|
||||
Global.selection_rectangle.set_rect(Global.selection_rectangle.get_rect())
|
||||
|
||||
|
||||
func frames_changed(value : Array) -> void:
|
||||
|
|
|
@ -204,7 +204,7 @@ func create_palette_from_sprite() -> void:
|
|||
var palette : Palette = Global.palettes[current_palette]
|
||||
var pixels := []
|
||||
|
||||
if selection_checkbox.pressed:
|
||||
if selection_checkbox.pressed and current_project.selected_pixels:
|
||||
pixels = current_project.selected_pixels.duplicate()
|
||||
else:
|
||||
for x in current_project.size.x:
|
||||
|
|
|
@ -39,7 +39,7 @@ func set_rect(rect : Rect2) -> void:
|
|||
|
||||
var project : Project = Global.current_project
|
||||
if rect.has_no_area():
|
||||
project.select_all_pixels()
|
||||
project.selected_pixels = []
|
||||
else:
|
||||
project.clear_selection()
|
||||
for x in range(rect.position.x, rect.end.x):
|
||||
|
|
|
@ -77,8 +77,11 @@ func draw_indicator() -> void:
|
|||
|
||||
|
||||
func _get_draw_rect() -> Rect2:
|
||||
var selected_pixels = Global.current_project.selected_pixels
|
||||
return Rect2(selected_pixels[0].x, selected_pixels[0].y, selected_pixels[-1].x - selected_pixels[0].x + 1, selected_pixels[-1].y - selected_pixels[0].y + 1)
|
||||
if Global.current_project.selected_pixels.empty():
|
||||
return Global.current_project.tile_mode_rects[Global.TileMode.NONE]
|
||||
else:
|
||||
var selected_pixels = Global.current_project.selected_pixels
|
||||
return Rect2(selected_pixels[0].x, selected_pixels[0].y, selected_pixels[-1].x - selected_pixels[0].x + 1, selected_pixels[-1].y - selected_pixels[0].y + 1)
|
||||
|
||||
|
||||
func _get_draw_image() -> Image:
|
||||
|
|
|
@ -94,7 +94,9 @@ func update_pattern() -> void:
|
|||
|
||||
|
||||
func draw_start(position : Vector2) -> void:
|
||||
if not position in Global.current_project.selected_pixels or Global.current_project.layers[Global.current_project.current_layer].locked:
|
||||
if Global.current_project.layers[Global.current_project.current_layer].locked or !Global.current_project.tile_mode_rects[Global.TileMode.NONE].has_point(position):
|
||||
return
|
||||
if Global.current_project.selected_pixels and not position in Global.current_project.selected_pixels:
|
||||
return
|
||||
var undo_data = _get_undo_data()
|
||||
if _fill_area == 0:
|
||||
|
@ -121,7 +123,15 @@ func fill_in_color(position : Vector2) -> void:
|
|||
return
|
||||
|
||||
image.lock()
|
||||
for i in project.selected_pixels:
|
||||
var pixels := []
|
||||
if project.selected_pixels:
|
||||
pixels = project.selected_pixels.duplicate()
|
||||
else:
|
||||
for x in Global.current_project.size.x:
|
||||
for y in Global.current_project.size.y:
|
||||
pixels.append(Vector2(x, y))
|
||||
|
||||
for i in pixels:
|
||||
if image.get_pixelv(i).is_equal_approx(color):
|
||||
_set_pixel(image, i.x, i.y, tool_slot.color)
|
||||
|
||||
|
@ -135,7 +145,7 @@ func fill_in_area(position : Vector2) -> void:
|
|||
var mirror_y = project.y_symmetry_point - position.y
|
||||
var mirror_x_inside : bool
|
||||
var mirror_y_inside : bool
|
||||
var entire_image_selected : bool = project.selected_pixels.size() == project.size.x * project.size.y
|
||||
var entire_image_selected : bool = project.selected_pixels.empty()
|
||||
if entire_image_selected:
|
||||
mirror_x_inside = mirror_x >= 0 and mirror_x < project.size.x
|
||||
mirror_y_inside = mirror_y >= 0 and mirror_y < project.size.y
|
||||
|
@ -192,7 +202,7 @@ func _flood_fill(position : Vector2) -> void:
|
|||
|
||||
func _set_pixel(image : Image, x : int, y : int, color : Color) -> void:
|
||||
var project : Project = Global.current_project
|
||||
var entire_image_selected : bool = project.selected_pixels.size() == project.size.x * project.size.y
|
||||
var entire_image_selected : bool = project.selected_pixels.empty()
|
||||
if entire_image_selected:
|
||||
if not _get_draw_rect().has_point(Vector2(x, y)):
|
||||
return
|
||||
|
|
|
@ -281,7 +281,7 @@ func draw_tool_brush(position : Vector2) -> void:
|
|||
var mirror_y = (project.y_symmetry_point + 1) - dst.y - src_rect.size.y
|
||||
var mirror_x_inside : bool
|
||||
var mirror_y_inside : bool
|
||||
var entire_image_selected : bool = project.selected_pixels.size() == project.size.x * project.size.y
|
||||
var entire_image_selected : bool = project.selected_pixels.empty()
|
||||
if entire_image_selected:
|
||||
mirror_x_inside = mirror_x >= 0 and mirror_x < project.size.x
|
||||
mirror_y_inside = mirror_y >= 0 and mirror_y < project.size.y
|
||||
|
@ -307,7 +307,7 @@ func draw_indicator() -> void:
|
|||
draw_indicator_at(_cursor, Vector2.ZERO, Color.blue)
|
||||
if Global.current_project.tile_mode and Global.current_project.get_tile_mode_rect().has_point(_cursor):
|
||||
var tile := _line_start if _draw_line else _cursor
|
||||
if not tile in Global.current_project.selected_pixels:
|
||||
if not Global.current_project.tile_mode_rects[Global.TileMode.NONE].has_point(tile):
|
||||
var offset := tile - tile.posmodv(Global.current_project.size)
|
||||
draw_indicator_at(_cursor, offset, Color.green)
|
||||
|
||||
|
@ -339,7 +339,7 @@ func _set_pixel(position : Vector2) -> void:
|
|||
if project.tile_mode and project.get_tile_mode_rect().has_point(position):
|
||||
position = position.posmodv(project.size)
|
||||
|
||||
var entire_image_selected : bool = project.selected_pixels.size() == project.size.x * project.size.y
|
||||
var entire_image_selected : bool = project.selected_pixels.empty()
|
||||
if entire_image_selected:
|
||||
if not _get_draw_rect().has_point(position):
|
||||
return
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue