From 2e795e8db50a9f83549a0b28dfb4c2b58c242ea2 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas Date: Tue, 13 Sep 2022 00:49:22 +0300 Subject: [PATCH] Fix onion skinning not working with mirror view Addresses the 3rd issue in #717. --- src/UI/Canvas/OnionSkinning.gd | 48 ++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/src/UI/Canvas/OnionSkinning.gd b/src/UI/Canvas/OnionSkinning.gd index 6121cd42b..c100386ea 100644 --- a/src/UI/Canvas/OnionSkinning.gd +++ b/src/UI/Canvas/OnionSkinning.gd @@ -10,27 +10,29 @@ var rate := Global.onion_skinning_past_rate func _draw() -> void: if !Global.onion_skinning: return - rate = Global.onion_skinning_past_rate if type == PAST else Global.onion_skinning_future_rate - if rate > 0: - var color: Color - if Global.onion_skinning_blue_red: - color = blue_red_color - else: - color = Color.white - for i in range(1, rate + 1): - var change: int = Global.current_project.current_frame - if type == PAST: - change -= i - else: - change += i - if change == clamp(change, 0, Global.current_project.frames.size() - 1): - var layer_i := 0 - for cel in Global.current_project.frames[change].cels: - var layer: Layer = Global.current_project.layers[layer_i] - if layer.visible: - # Ignore layer if it has the "_io" suffix in its name (case in-sensitive) - if not (layer.name.to_lower().ends_with("_io")): - color.a = 0.6 / i - draw_texture(cel.image_texture, Vector2.ZERO, color) - layer_i += 1 + if rate <= 0: + return + + var color := blue_red_color if Global.onion_skinning_blue_red else Color.white + var position_tmp := position + var scale_tmp := scale + if Global.mirror_view: + position_tmp.x += Global.current_project.size.x + scale_tmp.x = -1 + draw_set_transform(position_tmp, rotation, scale_tmp) + + for i in range(1, rate + 1): + var change: int = Global.current_project.current_frame + change += i if type == FUTURE else -i + if change == clamp(change, 0, Global.current_project.frames.size() - 1): + var layer_i := 0 + for cel in Global.current_project.frames[change].cels: + var layer: Layer = Global.current_project.layers[layer_i] + if layer.visible: + # Ignore layer if it has the "_io" suffix in its name (case in-sensitive) + if not (layer.name.to_lower().ends_with("_io")): + color.a = 0.6 / i + draw_texture(cel.image_texture, Vector2.ZERO, color) + layer_i += 1 + draw_set_transform(position, rotation, scale)