summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pywal/colors.py7
-rw-r--r--pywal/util.py16
-rwxr-xr-xtests/test_util.py28
3 files changed, 39 insertions, 12 deletions
diff --git a/pywal/colors.py b/pywal/colors.py
index c939215..b2c390e 100644
--- a/pywal/colors.py
+++ b/pywal/colors.py
@@ -54,6 +54,13 @@ def sort_colors(img, colors):
we will later save in json format."""
raw_colors = colors[:1] + colors[9:] + colors[8:]
+ # Darken the background color if it's too light.
+ if int(raw_colors[0][1]) in [3, 4]:
+ raw_colors[0] = util.darken_color(raw_colors[0], 0.50)
+
+ elif int(raw_colors[0][1]) >= 5:
+ raw_colors[0] = util.darken_color(raw_colors[0], 0.25)
+
colors = {"wallpaper": img}
colors_special = {}
diff --git a/pywal/util.py b/pywal/util.py
index 06c0510..2f86811 100644
--- a/pywal/util.py
+++ b/pywal/util.py
@@ -20,7 +20,8 @@ class Color:
@property
def rgb(self):
"""Convert a hex color to rgb."""
- return hex_to_rgb(self.hex_color)
+ red, green, blue = hex_to_rgb(self.hex_color)
+ return f"{red},{green},{blue}"
@property
def xrgba(self):
@@ -99,8 +100,7 @@ def create_dir(directory):
def hex_to_rgb(color):
"""Convert a hex color to rgb."""
- red, green, blue = list(bytes.fromhex(color.strip("#")))
- return f"{red},{green},{blue}"
+ return tuple(bytes.fromhex(color.strip("#")))
def hex_to_xrgba(color):
@@ -109,6 +109,16 @@ def hex_to_xrgba(color):
return f"{col[1]}{col[2]}/{col[3]}{col[4]}/{col[5]}{col[6]}/ff"
+def rgb_to_hex(color):
+ """Convert an rgb color to hex."""
+ return f"#{color[0]:02x}{color[1]:02x}{color[2]:02x}"
+
+
+def darken_color(color, darkness):
+ """Darken a hex color."""
+ return rgb_to_hex([int(col * (1 - darkness)) for col in hex_to_rgb(color)])
+
+
def disown(*cmd):
"""Call a system command in the background,
disown it and hide it's output."""
diff --git a/tests/test_util.py b/tests/test_util.py
index b1fa704..5f8e26d 100755
--- a/tests/test_util.py
+++ b/tests/test_util.py
@@ -64,23 +64,33 @@ class TestUtil(unittest.TestCase):
def test_hex_to_rgb_black(self):
"""> Convert #000000 to RGB."""
result = util.hex_to_rgb("#000000")
- self.assertEqual(result, "0,0,0")
+ self.assertEqual(result, (0, 0, 0))
def test_hex_to_rgb_white(self):
- """> Convert #FFFFFF to RGB."""
- result = util.hex_to_rgb("#FFFFFF")
- self.assertEqual(result, "255,255,255")
+ """> Convert #ffffff to RGB."""
+ result = util.hex_to_rgb("#ffffff")
+ self.assertEqual(result, (255, 255, 255))
def test_hex_to_rgb_rand(self):
- """> Convert #98AEC2 to RGB."""
- result = util.hex_to_rgb("#98AEC2")
- self.assertEqual(result, "152,174,194")
+ """> Convert #98aec2 to RGB."""
+ result = util.hex_to_rgb("#98aec2")
+ self.assertEqual(result, (152, 174, 194))
def test_hex_to_xrgba(self):
- """> Convert #98AEC2 to XRGBA."""
- result = util.hex_to_xrgba("#98AEC2")
+ """> Convert #98aec2 to XRGBA."""
+ result = util.hex_to_xrgba("#98aec2")
self.assertEqual(result, "98/ae/c2/ff")
+ def test_rgb_to_hex(self):
+ """> Convert 152,174,194 to HEX."""
+ result = util.rgb_to_hex((152, 174, 194))
+ self.assertEqual(result, "#98aec2")
+
+ def test_darken_color(self):
+ """> Darken #ffffff by 0.25."""
+ result = util.darken_color("#ffffff", 0.25)
+ self.assertEqual(result, "#bfbfbf")
+
if __name__ == "__main__":
unittest.main()