From a712f822d708a1cb7089aeaf79583bbf8f61cddd Mon Sep 17 00:00:00 2001 From: Manolis Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Wed, 21 Apr 2021 15:25:17 +0300 Subject: [PATCH] Fixed bug when copying while moving content --- src/Classes/Project.gd | 14 +++++++++----- src/UI/Canvas/Selection.gd | 16 ++++++++++++---- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/Classes/Project.gd b/src/Classes/Project.gd index e97db6a01..ce23fc0a3 100644 --- a/src/Classes/Project.gd +++ b/src/Classes/Project.gd @@ -682,7 +682,7 @@ func get_selection_rectangle(bitmap : BitMap = selection_bitmap) -> Rect2: return Rect2(minx, miny, maxx - minx + 1, maxy - miny + 1) -func move_bitmap_values(bitmap : BitMap) -> void: +func move_bitmap_values(bitmap : BitMap, move_offset := true) -> void: var selection_node = Global.canvas.selection var selection_position : Vector2 = selection_node.big_bounding_rectangle.position var selection_end : Vector2 = selection_node.big_bounding_rectangle.end @@ -700,16 +700,20 @@ func move_bitmap_values(bitmap : BitMap) -> void: if selection_position.x < 0: nw -= selection_position.x - self.selection_offset.x = selection_position.x + if move_offset: + self.selection_offset.x = selection_position.x dst.x = 0 else: - self.selection_offset.x = 0 + if move_offset: + self.selection_offset.x = 0 if selection_position.y < 0: nh -= selection_position.y - self.selection_offset.y = selection_position.y + if move_offset: + self.selection_offset.y = selection_position.y dst.y = 0 else: - self.selection_offset.y = 0 + if move_offset: + self.selection_offset.y = 0 if nw <= image.get_size().x: nw = image.get_size().x diff --git a/src/UI/Canvas/Selection.gd b/src/UI/Canvas/Selection.gd index 27769fb05..8631d7ef8 100644 --- a/src/UI/Canvas/Selection.gd +++ b/src/UI/Canvas/Selection.gd @@ -39,11 +39,15 @@ var clipboard := Clipboard.new() var is_moving_content := false var is_pasting := false var big_bounding_rectangle := Rect2() setget _big_bounding_rectangle_changed + var temp_rect := Rect2() +var temp_bitmap := BitMap.new() + var original_big_bounding_rectangle := Rect2() var original_preview_image := Image.new() var original_bitmap := BitMap.new() var original_offset := Vector2.ZERO + var preview_image := Image.new() var preview_image_texture := ImageTexture.new() var undo_data : Dictionary @@ -94,6 +98,7 @@ func _input(event : InputEvent) -> void: mouse_pos_on_gizmo_drag = Global.canvas.current_pixel dragged_gizmo = gizmo temp_rect = big_bounding_rectangle + temp_bitmap = Global.current_project.selection_bitmap move_content_start() Global.current_project.selection_offset = Vector2.ZERO if gizmo.type == Gizmo.Type.ROTATE: @@ -188,7 +193,7 @@ func gizmo_resize() -> void: if temp_rect.size.y < 0: preview_image.flip_y() preview_image_texture.create_from_image(preview_image, 0) - Global.current_project.selection_bitmap = Global.current_project.resize_bitmap_values(original_bitmap, size, temp_rect.size.x < 0, temp_rect.size.y < 0) + Global.current_project.selection_bitmap = Global.current_project.resize_bitmap_values(temp_bitmap, size, temp_rect.size.x < 0, temp_rect.size.y < 0) Global.current_project.selection_bitmap_changed() update() @@ -260,7 +265,7 @@ func move_borders(move : Vector2) -> void: func move_borders_end() -> void: - var selected_bitmap_copy = Global.current_project.selection_bitmap.duplicate() + var selected_bitmap_copy := Global.current_project.selection_bitmap.duplicate() Global.current_project.move_bitmap_values(selected_bitmap_copy) Global.current_project.selection_bitmap = selected_bitmap_copy @@ -381,6 +386,9 @@ func copy() -> void: var to_copy := Image.new() if is_moving_content: to_copy.copy_from(preview_image) + var selected_bitmap_copy := Global.current_project.selection_bitmap.duplicate() + Global.current_project.move_bitmap_values(selected_bitmap_copy, false) + clipboard.selection_bitmap = selected_bitmap_copy else: to_copy = image.get_rect(big_bounding_rectangle) to_copy.lock() @@ -396,8 +404,8 @@ func copy() -> void: if not project.selection_bitmap.get_bit(pos + offset_pos): to_copy.set_pixelv(pos, Color(0)) to_copy.unlock() + clipboard.selection_bitmap = project.selection_bitmap.duplicate() clipboard.image = to_copy - clipboard.selection_bitmap = project.selection_bitmap.duplicate() clipboard.big_bounding_rectangle = big_bounding_rectangle clipboard.selection_offset = project.selection_offset @@ -405,6 +413,7 @@ func copy() -> void: func paste() -> void: if !clipboard.image: return + clear_selection() undo_data = _get_undo_data(true) var project := Global.current_project @@ -412,7 +421,6 @@ func paste() -> void: original_big_bounding_rectangle = big_bounding_rectangle original_offset = Global.current_project.selection_offset - clear_selection() project.selection_bitmap = clipboard.selection_bitmap.duplicate() self.big_bounding_rectangle = clipboard.big_bounding_rectangle project.selection_offset = clipboard.selection_offset