From 96fc2aa12d849ad89c109a2c4503f7b1505ccccf Mon Sep 17 00:00:00 2001 From: Manolis Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 23 Oct 2020 20:18:39 +0300 Subject: [PATCH] Fixed issues where fully transparent color could not be picked More specifically, the color picked sometimes failed to pick transparent color (and picked black instead), swapping between colors when one of them is fully transparent made it fully opaque, and also when picking a color from a palette which was fully transparent made it fully opaque. Closes #364 --- src/Autoload/Tools.gd | 15 ++++++++------- src/Palette/PaletteContainer.gd | 4 ++-- src/Tools/ColorPicker.gd | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/Autoload/Tools.gd b/src/Autoload/Tools.gd index 9e7f379d5..ec1861443 100644 --- a/src/Autoload/Tools.gd +++ b/src/Autoload/Tools.gd @@ -59,7 +59,7 @@ var shift := false var alt := false -func _ready(): +func _ready() -> void: yield(get_tree(), "idle_frame") _slots[BUTTON_LEFT] = Slot.new("Left tool") _slots[BUTTON_RIGHT] = Slot.new("Right tool") @@ -72,9 +72,9 @@ func _ready(): value = Global.config_cache.get_value(_slots[BUTTON_RIGHT].kname, "tool", "Eraser") set_tool(value, BUTTON_RIGHT) value = Global.config_cache.get_value(_slots[BUTTON_LEFT].kname, "color", Color.black) - assign_color(value, BUTTON_LEFT) + assign_color(value, BUTTON_LEFT, false) value = Global.config_cache.get_value(_slots[BUTTON_RIGHT].kname, "color", Color.white) - assign_color(value, BUTTON_RIGHT) + assign_color(value, BUTTON_RIGHT, false) update_tool_buttons() update_tool_cursors() @@ -115,13 +115,14 @@ func default_color() -> void: func swap_color() -> void: var left = _slots[BUTTON_LEFT].color var right = _slots[BUTTON_RIGHT].color - assign_color(right, BUTTON_LEFT) - assign_color(left, BUTTON_RIGHT) + assign_color(right, BUTTON_LEFT, false) + assign_color(left, BUTTON_RIGHT, false) -func assign_color(color : Color, button : int) -> void: +func assign_color(color : Color, button : int, change_alpha := true) -> void: var c : Color = _slots[button].color - if color.a == 0: + # This was requested by Issue #54 on GitHub + if color.a == 0 and change_alpha: if color.r != c.r or color.g != c.g or color.b != c.b: color.a = 1 _slots[button].color = color diff --git a/src/Palette/PaletteContainer.gd b/src/Palette/PaletteContainer.gd index c2058614f..abe3e0df6 100644 --- a/src/Palette/PaletteContainer.gd +++ b/src/Palette/PaletteContainer.gd @@ -268,9 +268,9 @@ func on_color_select(index : int) -> void: var color : Color = Global.palettes[current_palette].get_color(index) if Input.is_action_just_pressed("left_mouse"): - Tools.assign_color(color, BUTTON_LEFT) + Tools.assign_color(color, BUTTON_LEFT, false) elif Input.is_action_just_pressed("right_mouse"): - Tools.assign_color(color, BUTTON_RIGHT) + Tools.assign_color(color, BUTTON_RIGHT, false) func _load_palettes() -> void: diff --git a/src/Tools/ColorPicker.gd b/src/Tools/ColorPicker.gd index 36596e2be..45866fc29 100644 --- a/src/Tools/ColorPicker.gd +++ b/src/Tools/ColorPicker.gd @@ -48,4 +48,4 @@ func _pick_color(position : Vector2) -> void: image.lock() var color := image.get_pixelv(position) var button := BUTTON_LEFT if _color_slot == 0 else BUTTON_RIGHT - Tools.assign_color(color, button) + Tools.assign_color(color, button, false)