Applied different styling to overlays - svkbd - simple virtual keyboard
 (HTM) git clone git://git.suckless.org/svkbd
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit e9208cb0888cbb694644905611f368ed5259923c
 (DIR) parent 7f59daca5f83aec7630e1aaee2bbf0948cd5a38a
 (HTM) Author: Maarten van Gompel <proycon@anaproy.nl>
       Date:   Sat,  6 Mar 2021 13:37:38 +0100
       
       Applied different styling to overlays
       
       Diffstat:
         M config.def.h                        |       1 +
         M svkbd.c                             |      30 ++++++++++++++++++------------
       
       2 files changed, 19 insertions(+), 12 deletions(-)
       ---
 (DIR) 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" },
        };
 (DIR) 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();