svkbd

simple virtual keyboard
git clone git://git.suckless.org/svkbd
Log | Files | Refs | README | LICENSE

commit e9208cb0888cbb694644905611f368ed5259923c
parent 7f59daca5f83aec7630e1aaee2bbf0948cd5a38a
Author: Maarten van Gompel <proycon@anaproy.nl>
Date:   Sat,  6 Mar 2021 13:37:38 +0100

Applied different styling to overlays

Diffstat:
Mconfig.def.h | 1+
Msvkbd.c | 30++++++++++++++++++------------
2 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/config.def.h b/config.def.h @@ -13,4 +13,5 @@ static const char *colors[SchemeLast][2] = { [SchemeNormABC] = { "#ffffff", "#14313d" }, [SchemePress] = { "#ffffff", "#000000" }, [SchemeHighlight] = { "#58a7c6", "#005577" }, + [SchemeOverlay] = { "#ffffff", "#2b3313" }, }; diff --git a/svkbd.c b/svkbd.c @@ -33,7 +33,7 @@ #define STRINGTOKEYSYM(X) (XStringToKeySym(X)) /* enums */ -enum { SchemeNorm, SchemeNormABC, SchemePress, SchemeHighlight, SchemeLast }; +enum { SchemeNorm, SchemeNormABC, SchemePress, SchemeHighlight, SchemeOverlay, SchemeLast }; enum { NetWMWindowType, NetLast }; /* typedefs */ @@ -61,7 +61,7 @@ static void configurenotify(XEvent *e); static void countrows(); static int countkeys(Key *layer); static void drawkeyboard(void); -static void drawkey(Key *k); +static void drawkey(Key *k, int idx); static void expose(XEvent *e); static Key *findkey(int x, int y); static void leavenotify(XEvent *e); @@ -100,6 +100,7 @@ static struct timeval pressbegin; static int currentlayer = 0; static int enableoverlays = 1; static int currentoverlay = -1; /* -1 = no overlay */ +static int overlaykeycount = 0; /* number of keys in the current overlay */ static int pressonrelease = 1; static KeySym overlaykeysym = 0; /* keysym for which the overlay is presented */ static int releaseprotect = 0; /* set to 1 after overlay is shown, protecting against immediate release */ @@ -145,7 +146,7 @@ motionnotify(XEvent *e) } else { keys[i].highlighted = True; } - drawkey(&keys[i]); + drawkey(&keys[i], i); } continue; } @@ -155,11 +156,11 @@ motionnotify(XEvent *e) lostfocus = i; ispressingkeysym = 0; unpress(&keys[i], 0); - drawkey(&keys[i]); + drawkey(&keys[i], i); } if (keys[i].highlighted == True) { keys[i].highlighted = False; - drawkey(&keys[i]); + drawkey(&keys[i], i); } } @@ -282,12 +283,12 @@ drawkeyboard(void) for (i = 0; i < numkeys; i++) { if (keys[i].keysym != 0) - drawkey(&keys[i]); + drawkey(&keys[i], i); } } void -drawkey(Key *k) +drawkey(Key *k, int idx) { int x, y, w, h; const char *l; @@ -296,6 +297,8 @@ drawkey(Key *k) drw_setscheme(drw, scheme[SchemePress]); else if (k->highlighted) drw_setscheme(drw, scheme[SchemeHighlight]); + else if (idx < overlaykeycount) + drw_setscheme(drw, scheme[SchemeOverlay]); else if ((k->keysym == XK_Return) || ((k->keysym >= XK_a) && (k->keysym <= XK_z)) || ((k->keysym >= XK_Cyrillic_io) && (k->keysym <= XK_Cyrillic_hardsign))) @@ -420,7 +423,7 @@ press(Key *k, KeySym mod) } } } - drawkey(k); + drawkey(k, 0); } int @@ -516,7 +519,7 @@ unpress(Key *k, KeySym mod) if (keys[i].pressed && !IsModifierKey(keys[i].keysym)) { simulate_keyrelease(keys[i].keysym); keys[i].pressed = 0; - drawkey(&keys[i]); + drawkey(&keys[i], i); break; } } @@ -530,7 +533,7 @@ unpress(Key *k, KeySym mod) if (keys[i].pressed) { simulate_keyrelease(keys[i].keysym); keys[i].pressed = 0; - drawkey(&keys[i]); + drawkey(&keys[i], i); } } } @@ -831,14 +834,16 @@ showoverlay(int idx) for (i = 0; i < numkeys; i++) { if (keys[i].pressed && !IsModifierKey(keys[i].keysym)) { keys[i].pressed = 0; - drawkey(&keys[i]); + drawkey(&keys[i], i); break; } } for (i = idx, j=0; i < OVERLAYS; i++, j++) { - if (overlay[i].keysym == XK_Cancel) + if (overlay[i].keysym == XK_Cancel) { + overlaykeycount = j; break; + } while (keys[j].keysym == 0) j++; keys[j].label = overlay[i].label; @@ -857,6 +862,7 @@ hideoverlay(void) { if (debug) printdbg("Hiding overlay, overlay was #%d\n", currentoverlay); currentoverlay = -1; + overlaykeycount = 0; overlaykeysym = 0; currentlayer--; cyclelayer();