From 6e52be343d66a3c1ae595d2126294615ea4f6760 Mon Sep 17 00:00:00 2001 From: Frank Oltmanns Date: Mon, 9 Oct 2023 17:27:51 +0200 Subject: [PATCH] Add support for multiple schemes Allow to use more than two color schemes. Signed-off-by: Maarten van Gompel --- config.def.h | 8 +++++--- keyboard.c | 7 +++---- keyboard.h | 3 +-- main.c | 33 ++++++++++++++++----------------- 4 files changed, 25 insertions(+), 26 deletions(-) diff --git a/config.def.h b/config.def.h index 6f73943..890cb77 100644 --- a/config.def.h +++ b/config.def.h @@ -4,21 +4,23 @@ static const char *default_font = "Sans 14"; static const int transparency = 255; -struct clr_scheme scheme = { +struct clr_scheme schemes[] = { +{ /* colors */ .bg = {.bgra = {15, 15, 15, transparency}}, .fg = {.bgra = {45, 45, 45, transparency}}, .high = {.bgra = {100, 100, 100, transparency}}, .swipe = {.bgra = {100, 255, 100, 64}}, .text = {.color = UINT32_MAX}, -}; -struct clr_scheme scheme1 = { +}, +{ /* colors */ .bg = {.bgra = {15, 15, 15, transparency}}, .fg = {.bgra = {32, 32, 32, transparency}}, .high = {.bgra = {100, 100, 100, transparency}}, .swipe = {.bgra = {100, 255, 100, 64}}, .text = {.color = UINT32_MAX}, +} }; /* layers is an ordered list of layouts, used to cycle through */ diff --git a/keyboard.c b/keyboard.c index 9b29367..c5faa12 100644 --- a/keyboard.c +++ b/keyboard.c @@ -555,8 +555,7 @@ kbd_draw_key(struct kbd *kb, struct key *k, enum key_draw_type type) if (kb->debug) fprintf(stderr, "Draw key +%d+%d %dx%d -> %s\n", k->x, k->y, k->w, k->h, label); - struct clr_scheme *scheme = - (k->scheme == 0) ? &(kb->scheme) : &(kb->scheme1); + struct clr_scheme *scheme = &kb->schemes[k->scheme]; switch (type) { case None: @@ -586,7 +585,7 @@ kbd_draw_key(struct kbd *kb, struct key *k, enum key_draw_type type) kb->last_popup_w = k->w; kb->last_popup_h = k->h; - drw_fill_rectangle(kb->popup_surf, kb->scheme.bg, k->x, + drw_fill_rectangle(kb->popup_surf, scheme->bg, k->x, kb->last_popup_y, k->w, k->h); draw_inset(kb->popup_surf, k->x, kb->last_popup_y, k->w, k->h, KBD_KEY_BORDER, scheme->high); @@ -605,7 +604,7 @@ kbd_draw_layout(struct kbd *kb) if (kb->debug) fprintf(stderr, "Draw layout\n"); - drw_fill_rectangle(d, kb->scheme.bg, 0, 0, kb->w, kb->h); + drw_fill_rectangle(d, kb->schemes[0].bg, 0, 0, kb->w, kb->h); while (next_key->type != Last) { if ((next_key->type == Pad) || (next_key->type == EndRow)) { diff --git a/keyboard.h b/keyboard.h index f556812..c69d228 100644 --- a/keyboard.h +++ b/keyboard.h @@ -90,8 +90,7 @@ struct kbd { bool debug; struct layout *layout; - struct clr_scheme scheme; - struct clr_scheme scheme1; + struct clr_scheme *schemes; bool print; bool print_intersect; diff --git a/main.c b/main.c index 01d1896..d1f4b44 100644 --- a/main.c +++ b/main.c @@ -764,9 +764,8 @@ main(int argc, char **argv) /* keyboard settings */ keyboard.layers = (enum layout_id *)&layers; keyboard.landscape_layers = (enum layout_id *)&landscape_layers; - keyboard.scheme = scheme; + keyboard.schemes = schemes; keyboard.layer_index = 0; - keyboard.scheme1 = scheme1; keyboard.preferred_scale = 1; keyboard.preferred_fractional_scale = 0; @@ -803,7 +802,7 @@ main(int argc, char **argv) usage(argv[0]); exit(1); } - set_kbd_colors(keyboard.scheme.bg.bgra, argv[++i]); + set_kbd_colors(keyboard.schemes[0].bg.bgra, argv[++i]); } else if ((!strcmp(argv[i], "-alpha")) || (!strcmp(argv[i], "--alpha"))) { if (i >= argc - 1) { @@ -817,56 +816,56 @@ main(int argc, char **argv) usage(argv[0]); exit(1); } - set_kbd_colors(keyboard.scheme.fg.bgra, argv[++i]); + set_kbd_colors(keyboard.schemes[0].fg.bgra, argv[++i]); } else if ((!strcmp(argv[i], "-fg-sp")) || (!strcmp(argv[i], "--fg-sp"))) { if (i >= argc - 1) { usage(argv[0]); exit(1); } - set_kbd_colors(keyboard.scheme1.fg.bgra, argv[++i]); + set_kbd_colors(keyboard.schemes[1].fg.bgra, argv[++i]); } else if ((!strcmp(argv[i], "-press")) || (!strcmp(argv[i], "--press"))) { if (i >= argc - 1) { usage(argv[0]); exit(1); } - set_kbd_colors(keyboard.scheme.high.bgra, argv[++i]); + set_kbd_colors(keyboard.schemes[0].high.bgra, argv[++i]); } else if ((!strcmp(argv[i], "-press-sp")) || (!strcmp(argv[i], "--press-sp"))) { if (i >= argc - 1) { usage(argv[0]); exit(1); } - set_kbd_colors(keyboard.scheme1.high.bgra, argv[++i]); + set_kbd_colors(keyboard.schemes[1].high.bgra, argv[++i]); } else if ((!strcmp(argv[i], "-swipe")) || (!strcmp(argv[i], "--swipe"))) { if (i >= argc - 1) { usage(argv[0]); exit(1); } - set_kbd_colors(keyboard.scheme.swipe.bgra, argv[++i]); + set_kbd_colors(keyboard.schemes[0].swipe.bgra, argv[++i]); } else if ((!strcmp(argv[i], "-swipe-sp")) || (!strcmp(argv[i], "--swipe-sp"))) { if (i >= argc - 1) { usage(argv[0]); exit(1); } - set_kbd_colors(keyboard.scheme1.swipe.bgra, argv[++i]); + set_kbd_colors(keyboard.schemes[1].swipe.bgra, argv[++i]); } else if ((!strcmp(argv[i], "-text")) || (!strcmp(argv[i], "--text"))) { if (i >= argc - 1) { usage(argv[0]); exit(1); } - set_kbd_colors(keyboard.scheme.text.bgra, argv[++i]); + set_kbd_colors(keyboard.schemes[0].text.bgra, argv[++i]); } else if ((!strcmp(argv[i], "-text-sp")) || (!strcmp(argv[i], "--text-sp"))) { if (i >= argc - 1) { usage(argv[0]); exit(1); } - set_kbd_colors(keyboard.scheme1.text.bgra, argv[++i]); + set_kbd_colors(keyboard.schemes[1].text.bgra, argv[++i]); } else if (!strcmp(argv[i], "-H")) { if (i >= argc - 1) { usage(argv[0]); @@ -906,12 +905,12 @@ main(int argc, char **argv) } if (alpha_defined) { - keyboard.scheme.bg.bgra[3] = alpha; - keyboard.scheme.fg.bgra[3] = alpha; - keyboard.scheme.high.bgra[3] = alpha; - keyboard.scheme1.bg.bgra[3] = alpha; - keyboard.scheme1.fg.bgra[3] = alpha; - keyboard.scheme1.high.bgra[3] = alpha; + keyboard.schemes[0].bg.bgra[3] = alpha; + keyboard.schemes[0].fg.bgra[3] = alpha; + keyboard.schemes[0].high.bgra[3] = alpha; + keyboard.schemes[1].bg.bgra[3] = alpha; + keyboard.schemes[1].fg.bgra[3] = alpha; + keyboard.schemes[1].high.bgra[3] = alpha; } if (!fc_font_pattern) {