diff options
| -rw-r--r-- | pywal/backends/fast_colorthief.py | 50 | ||||
| -rw-r--r-- | pywal/colors.py | 10 | ||||
| -rw-r--r-- | pywal/templates/colors-rofi-dark.rasi | 5 | ||||
| -rw-r--r-- | pywal/templates/colors-rofi-light.rasi | 5 | 
4 files changed, 69 insertions, 1 deletions
diff --git a/pywal/backends/fast_colorthief.py b/pywal/backends/fast_colorthief.py new file mode 100644 index 0000000..b68ff02 --- /dev/null +++ b/pywal/backends/fast_colorthief.py @@ -0,0 +1,50 @@ +""" +Generate a colorscheme using fast_colorthief. +""" +import logging +import sys + +try: +    import fast_colorthief + +except ImportError: +    logging.error("fast_colorthief wasn't found on your system.") +    logging.error("Try another backend. (wal --backend)") +    sys.exit(1) + +from .. import util + + +def gen_colors(img): +    """ Ask backend to generate 16 colors. """ +    raw_colors = fast_colorthief.get_palette(img, 16) + +    return [util.rgb_to_hex(color) for color in raw_colors] + + +def adjust(cols, light): +    """Create palette.""" +    cols.sort(key=util.rgb_to_yiq) +    raw_colors = [*cols, *cols] + +    if light: +        raw_colors[0] = util.lighten_color(cols[0], 0.90) +        raw_colors[7] = util.darken_color(cols[0], 0.75) + +    else: +        for color in raw_colors: +            color = util.lighten_color(color, 0.40) + +        raw_colors[0] = util.darken_color(cols[0], 0.80) +        raw_colors[7] = util.lighten_color(cols[0], 0.60) + +    raw_colors[8] = util.lighten_color(cols[0], 0.20) +    raw_colors[15] = raw_colors[7] + +    return raw_colors + + +def get(img, light=False): +    """Get colorscheme.""" +    cols = gen_colors(img) +    return adjust(cols, light) diff --git a/pywal/colors.py b/pywal/colors.py index 49e5571..8688b4b 100644 --- a/pywal/colors.py +++ b/pywal/colors.py @@ -18,11 +18,19 @@ def list_backends():              os.scandir(os.path.join(MODULE_DIR, "backends"))              if "__" not in b.name] +def normalize_img_path(img: str): +    """Normalizes the image path for output.""" +    if os.name == 'nt': +        # On Windows, the JSON.dump ends up outputting un-escaped backslash breaking +        # the ability to read colors.json. Windows supports forward slash, so we can +        # use that for now +        return img.replace('\\', '/') +    return img  def colors_to_dict(colors, img):      """Convert list of colors to pywal format."""      return { -        "wallpaper": img, +        "wallpaper": normalize_img_path(img),          "alpha": util.Color.alpha_num,          "special": { diff --git a/pywal/templates/colors-rofi-dark.rasi b/pywal/templates/colors-rofi-dark.rasi index 302d44f..fde6881 100644 --- a/pywal/templates/colors-rofi-dark.rasi +++ b/pywal/templates/colors-rofi-dark.rasi @@ -73,6 +73,11 @@      padding: 1px;  }} +#element-text, element-icon {{ +    background-color: inherit; +    text-color:       inherit; +}} +  #element.normal.normal {{      background-color: @normal-background;      text-color: @normal-foreground; diff --git a/pywal/templates/colors-rofi-light.rasi b/pywal/templates/colors-rofi-light.rasi index d4f89af..ff592d7 100644 --- a/pywal/templates/colors-rofi-light.rasi +++ b/pywal/templates/colors-rofi-light.rasi @@ -73,6 +73,11 @@      padding: 1px;  }} +#element-text, element-icon {{ +    background-color: inherit; +    text-color:       inherit; +}} +  #element.normal.normal {{      background-color: @normal-background;      text-color: @normal-foreground;  | 
