slock-squares-password-1.5.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       slock-squares-password-1.5.diff (3022B)
       ---
            1 diff -up ./config.def.h ../config.def.h
            2 --- ./config.def.h        2025-04-15 00:55:12.710000000 -0400
            3 +++ ../config.def.h        2025-04-15 00:55:54.790000000 -0400
            4 @@ -10,3 +10,6 @@ static const int failonclear = 1;
            5  
            6  /* size of square in px */
            7  static const int squaresize = 50;
            8 +
            9 +/* spacing between squares in px */
           10 +static const int squarespacing = 10;
           11 diff -up ./slock.c ../slock.c
           12 --- ./slock.c        2025-04-15 00:55:12.710000000 -0400
           13 +++ ../slock.c        2025-04-15 00:54:09.660000000 -0400
           14 @@ -130,7 +130,7 @@ gethash(void)
           15  
           16  static void
           17  draw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
           18 -     unsigned int color)
           19 +     unsigned int len, unsigned int color)
           20  {
           21          int screen, crtc;
           22          XRRCrtcInfo* rrci;
           23 @@ -145,14 +145,19 @@ draw(Display *dpy, struct xrandr *rr, st
           24                                                        locks[screen]->rrsr,
           25                                                        locks[screen]->rrsr->crtcs[crtc]);
           26                                  /* skip disabled crtc */
           27 -                                if (rrci->noutput > 0)
           28 -                                        XFillRectangle(dpy,
           29 -                                                       locks[screen]->win,
           30 -                                                       locks[screen]->gc,
           31 -                                                       rrci->x + (rrci->width - squaresize) / 2,
           32 -                                                       rrci->y + (rrci->height - squaresize) / 2,
           33 -                                                       squaresize,
           34 -                                                       squaresize);
           35 +                                if (rrci->noutput > 0) {
           36 +                                        if (len < 1)
           37 +                                                len = 1;
           38 +                                        int xoffset = (int) ((squaresize * len) + squarespacing * (len - 1)) / 2;
           39 +                                        for (int i = 0; i < len; i++)
           40 +                                                XFillRectangle(dpy,
           41 +                                                               locks[screen]->win,
           42 +                                                               locks[screen]->gc,
           43 +                                                               rrci->x - xoffset + ((rrci->width - squaresize) / 2 ) + ((squaresize + squarespacing) * i),
           44 +                                                               rrci->y + (rrci->height - squaresize) / 2,
           45 +                                                               squaresize,
           46 +                                                               squaresize);
           47 +                                }
           48                                  XRRFreeCrtcInfo(rrci);
           49                          }
           50                  }
           51 @@ -172,7 +177,7 @@ readpw(Display *dpy, struct xrandr *rr,
           52  {
           53          XRRScreenChangeNotifyEvent *rre;
           54          char buf[32], passwd[256], *inputhash;
           55 -        int num, screen, running, failure, oldc;
           56 +        int num, screen, running, failure;
           57          unsigned int len, color;
           58          KeySym ksym;
           59          XEvent ev;
           60 @@ -180,7 +185,6 @@ readpw(Display *dpy, struct xrandr *rr,
           61          len = 0;
           62          running = 1;
           63          failure = 0;
           64 -        oldc = INIT;
           65  
           66          while (running && !XNextEvent(dpy, &ev)) {
           67                  if (ev.type == KeyPress) {
           68 @@ -230,9 +234,8 @@ readpw(Display *dpy, struct xrandr *rr,
           69                                  break;
           70                          }
           71                          color = len ? INPUT : ((failure || failonclear) ? FAILED : INIT);
           72 -                        if (running && oldc != color) {
           73 -                                draw(dpy, rr, locks, nscreens, color);
           74 -                                oldc = color;
           75 +                        if (running) {
           76 +                                draw(dpy, rr, locks, nscreens, len, color);
           77                          }
           78                  } else if (rr->active && ev.type == rr->evbase + RRScreenChangeNotify) {
           79                          rre = (XRRScreenChangeNotifyEvent*)&ev;
           80 @@ -428,7 +431,7 @@ main(int argc, char **argv) {
           81          }
           82  
           83          /* draw the initial rectangle */
           84 -        draw(dpy, &rr, locks, nscreens, INIT);
           85 +        draw(dpy, &rr, locks, nscreens, 0, INIT);
           86  
           87          /* everything is now blank. Wait for the correct password */
           88          readpw(dpy, &rr, locks, nscreens, hash);