diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 7977d45d4..4b1d1690d 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -980,14 +980,18 @@ func undo_or_redo( ] ): if layer_index > -1 and frame_index > -1: - canvas.update_texture(layer_index, frame_index, project) var cel := project.frames[frame_index].cels[layer_index] + if action_name == "Scale": + cel.size_changed(project.size) + canvas.update_texture(layer_index, frame_index, project) cel.on_undo_redo(undo) else: for i in project.frames.size(): for j in project.layers.size(): - canvas.update_texture(j, i, project) var cel := project.frames[i].cels[j] + if action_name == "Scale": + cel.size_changed(project.size) + canvas.update_texture(j, i, project) cel.on_undo_redo(undo) canvas.selection.queue_redraw() @@ -995,9 +999,7 @@ func undo_or_redo( for i in project.frames.size(): for j in project.layers.size(): var current_cel := project.frames[i].cels[j] - if current_cel is Cel3D: - current_cel.size_changed(project.size) - else: + if current_cel is not Cel3D: current_cel.image_texture.set_image(current_cel.get_image()) canvas.camera_zoom() canvas.grid.queue_redraw() diff --git a/src/Classes/Cels/BaseCel.gd b/src/Classes/Cels/BaseCel.gd index e9455d338..2ac64dcab 100644 --- a/src/Classes/Cels/BaseCel.gd +++ b/src/Classes/Cels/BaseCel.gd @@ -96,6 +96,10 @@ func deserialize(dict: Dictionary) -> void: user_data = dict.get("user_data", user_data) +func size_changed(_new_size: Vector2i) -> void: + pass + + ## Used to perform cleanup after a cel is removed. func on_remove() -> void: pass diff --git a/src/Classes/Cels/CelTileMap.gd b/src/Classes/Cels/CelTileMap.gd index 6d77f5f8b..ef65f0109 100644 --- a/src/Classes/Cels/CelTileMap.gd +++ b/src/Classes/Cels/CelTileMap.gd @@ -238,6 +238,13 @@ func update_texture() -> void: super.update_texture() +func size_changed(new_size: Vector2i) -> void: + indices_x = ceili(float(new_size.x) / tileset.tile_size.x) + indices_y = ceili(float(new_size.y) / tileset.tile_size.y) + indices.resize(indices_x * indices_y) + re_index_all_tiles() + + func on_undo_redo(undo: bool) -> void: update_tileset(undo)