mirror of
https://github.com/tonytins/CozyPixelStudio.git
synced 2025-06-25 21:14:42 -04:00
Replaced the _min and _max Project variables with Project.selected_pixels
This will allow us to create more selection tools in the future, that aren't necessarily rectangular (See #129) and even enhance the current rectangle selection tool (See #56) Current issues spotted so far: Drawing is slower for large images, and bucket filling is also considerably slower even on a 64x64 image. Optimizations are required.
This commit is contained in:
parent
8c965c1858
commit
0f82be765e
10 changed files with 108 additions and 80 deletions
|
@ -71,8 +71,14 @@ func set_pixel(image: Image, position: Vector2, color: Color) -> void:
|
|||
|
||||
var mirror_x = project.x_symmetry_point - position.x
|
||||
var mirror_y = project.y_symmetry_point - position.y
|
||||
var mirror_x_inside : bool = mirror_x >= project.x_min and mirror_x <= project.x_max - 1
|
||||
var mirror_y_inside : bool = mirror_y >= project.y_min and mirror_y <= project.y_max - 1
|
||||
var selected_pixels_x := []
|
||||
var selected_pixels_y := []
|
||||
for i in project.selected_pixels:
|
||||
selected_pixels_x.append(i.x)
|
||||
selected_pixels_y.append(i.y)
|
||||
|
||||
var mirror_x_inside : bool = mirror_x in selected_pixels_x
|
||||
var mirror_y_inside : bool = mirror_y in selected_pixels_y
|
||||
|
||||
drawers[0].set_pixel(image, position, color, color_op)
|
||||
if horizontal_mirror and mirror_x_inside:
|
||||
|
|
|
@ -3,7 +3,7 @@ class_name Project extends Reference
|
|||
|
||||
|
||||
var name := "" setget name_changed
|
||||
var size := Vector2(64, 64)
|
||||
var size : Vector2 setget size_changed
|
||||
var undo_redo : UndoRedo
|
||||
var undos := 0 # The number of times we added undo properties
|
||||
var has_changed := false setget has_changed_changed
|
||||
|
@ -16,15 +16,12 @@ var guides := [] # Array of Guides
|
|||
|
||||
var brushes := [] # Array of Images
|
||||
|
||||
var x_symmetry_point := size.x / 2 + 1
|
||||
var y_symmetry_point := size.y / 2 + 1
|
||||
var x_symmetry_point
|
||||
var y_symmetry_point
|
||||
var x_symmetry_axis : SymmetryGuide
|
||||
var y_symmetry_axis : SymmetryGuide
|
||||
var x_min := 0
|
||||
var x_max := 64
|
||||
var y_min := 0
|
||||
var y_max := 64
|
||||
|
||||
var selected_pixels := []
|
||||
var selected_rect := Rect2(0, 0, 0, 0) setget _set_selected_rect
|
||||
|
||||
# For every camera (currently there are 3)
|
||||
|
@ -32,17 +29,21 @@ var cameras_zoom := [Vector2(0.15, 0.15), Vector2(0.15, 0.15), Vector2(0.15, 0.1
|
|||
var cameras_offset := [Vector2.ZERO, Vector2.ZERO, Vector2.ZERO] # Array of Vector2
|
||||
|
||||
|
||||
func _init(_frames := [], _name := tr("untitled")) -> void:
|
||||
func _init(_frames := [], _name := tr("untitled"), _size := Vector2(64, 64)) -> void:
|
||||
frames = _frames
|
||||
name = _name
|
||||
x_max = size.x
|
||||
y_max = size.y
|
||||
size = _size
|
||||
select_all_pixels()
|
||||
|
||||
undo_redo = UndoRedo.new()
|
||||
|
||||
Global.tabs.add_tab(name)
|
||||
OpenSave.current_save_paths.append("")
|
||||
OpenSave.backup_save_paths.append("")
|
||||
|
||||
x_symmetry_point = size.x / 2 + 1
|
||||
y_symmetry_point = size.y / 2 + 1
|
||||
|
||||
if !x_symmetry_axis:
|
||||
x_symmetry_axis = SymmetryGuide.new()
|
||||
x_symmetry_axis.type = x_symmetry_axis.Types.HORIZONTAL
|
||||
|
@ -60,6 +61,17 @@ func _init(_frames := [], _name := tr("untitled")) -> void:
|
|||
Global.canvas.add_child(y_symmetry_axis)
|
||||
|
||||
|
||||
func select_all_pixels() -> void:
|
||||
clear_selection()
|
||||
for x in size.x:
|
||||
for y in size.y:
|
||||
selected_pixels.append(Vector2(x, y))
|
||||
|
||||
|
||||
func clear_selection() -> void:
|
||||
selected_pixels.clear()
|
||||
|
||||
|
||||
func _set_selected_rect(value : Rect2) -> void:
|
||||
selected_rect = value
|
||||
Global.selection_rectangle.set_rect(value)
|
||||
|
@ -290,6 +302,12 @@ func name_changed(value : String) -> void:
|
|||
Global.tabs.set_tab_title(Global.tabs.current_tab, name)
|
||||
|
||||
|
||||
func size_changed(value : Vector2) -> void:
|
||||
size = value
|
||||
if Global.selection_rectangle._selected_rect.has_no_area():
|
||||
select_all_pixels()
|
||||
|
||||
|
||||
func frames_changed(value : Array) -> void:
|
||||
frames = value
|
||||
remove_cel_buttons()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue