summaryrefslogtreecommitdiff
path: root/slock.c
diff options
context:
space:
mode:
authorNPScript <nathan@reinerweb.ch>2022-06-19 09:25:25 +0200
committerNPScript <nathan@reinerweb.ch>2022-06-19 09:25:25 +0200
commitaf93a7a473de8bc46a00a40c52e3e56439ff7dc2 (patch)
tree26111e84a401d96ece2fcf43239514098717b0fa /slock.c
parentac23be740a8b39f73c8dfebd2c391a0ef637c7ee (diff)
design update
Diffstat (limited to 'slock.c')
-rw-r--r--slock.c86
1 files changed, 28 insertions, 58 deletions
diff --git a/slock.c b/slock.c
index d5ea2cf..1f20068 100644
--- a/slock.c
+++ b/slock.c
@@ -119,13 +119,15 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
const char *hash)
{
XRRScreenChangeNotifyEvent *rre;
- char buf[32], passwd[256], *inputhash;
+ char buf[32] = {0}, passwd[256] = {0}, *inputhash;
int num, screen, running, failure, oldc;
- unsigned int len, color;
+ unsigned int len, lastlen, color;
+ int line = 20;
KeySym ksym;
XEvent ev;
len = 0;
+ lastlen = 0;
running = 1;
failure = 0;
@@ -134,40 +136,24 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
scr = XRRGetScreenResources(dpy, locks[0]->win);
crtc_info = XRRGetCrtcInfo(dpy, scr, scr->crtcs[0]);
- int w_pos[] = { (crtc_info->width - diasize[0]) / 2, (crtc_info->height - diasize[1]) / 2 };
-
- int w_len[] = {diasize[0] + w_pos[0], diasize[1] + w_pos[1]};
- Drw * drw = drw_create(dpy, locks[0]->screen, locks[0]->win, crtc_info->width, crtc_info->height);
- Clr * scm = drw_scm_create(drw, schemes, 3);
+ Drw * drw = drw_create(dpy, locks[0]->screen, locks[0]->win, crtc_info->x + crtc_info->width, crtc_info->y + 300);
+ Clr * tscm = drw_scm_create(drw, textcolor, 3);
+ Clr * dscm = drw_scm_create(drw, decoration, 3);
Fnt * font = drw_fontset_create(drw, fonts, 1);
drw_setfontset(drw, font);
- drw_setscheme(drw, scm);
-
- int l_size = drw_fontset_getwidth(drw, lock_message);
- int t_pos[] = {(diasize[0] / 2) - (l_size / 2) + w_pos[0], w_pos[1]};
- int t_len[] = {diasize[0] + w_pos[0], w_pos[1] / 3};
+ const char * text = getenv("USER");
+ unsigned int twidth = drw_fontset_getwidth(drw, text);
+ drw_setscheme(drw, tscm);
drw_rect(drw, 0, 0, crtc_info->width, crtc_info->height, 1, 1);
- drw_text(drw, t_pos[0], t_pos[1], t_len[0], t_len[1], 0, lock_message, 0);
+ drw_text(drw, (crtc_info->width - twidth) / 2, 0, twidth, 20, 0, text, 0);
- drw_text(drw,
- ((strlen(passwd)) * 15) + (crtc_info->width / 2 - (strlen(passwd) + 1) * 15 / 2),
- w_pos[1] + diasize[1],
- w_len[0],
- diasize[1],
- 0,
- cursor_char,
- 0
- );
- drw_rect(drw, crtc_info->width / 2 - (strlen(passwd) + 1) * 15 / 2 - 15, w_pos[1] + diasize[1] + 140, (strlen(passwd) + 1) * 15 + 33, 47, 0, 0);
-
- drw_rect(drw, crtc_info->width / 2 - (strlen(passwd) + 1) * 15 / 2, w_pos[1] + diasize[1] + 140, (strlen(passwd) + 1) * 15 + 3, 47, 0, 1);
-
- drw_map(drw, locks[0]->win, 0, 0, crtc_info->width, crtc_info->height);
-
+ drw_setscheme(drw, dscm);
+ drw_rect(drw, (crtc_info->width - len * line) / 2, 200, len * line, 5, 1, 0);
+ drw_map(drw, locks[0]->win, crtc_info->x, crtc_info->y + (crtc_info->height - 300) / 2, crtc_info->width, 300);
while (running && !XNextEvent(dpy, &ev)) {
if (ev.type == KeyPress) {
@@ -227,42 +213,26 @@ readpw(Display *dpy, struct xrandr *rr, struct lock **locks, int nscreens,
oldc = color;
}
+ drw_setscheme(drw, tscm);
drw_rect(drw, 0, 0, crtc_info->width, crtc_info->height, 1, 1);
- drw_text(drw, t_pos[0], t_pos[1], t_len[0], t_len[1], 0, lock_message, 0);
+ drw_text(drw, (crtc_info->width - twidth) / 2, 0, twidth, 20, 0, text, 0);
- if (!failure) {
+ drw_setscheme(drw, running ? dscm : tscm);
+ if (lastlen < len)
+ for (int i = lastlen * line; i <= len * line; ++i) {
+ drw_rect(drw, (crtc_info->width - i) / 2, 200, i, 5, 1, 0);
- for (int i = 0; i < strlen(passwd); i++) {
- drw_text(drw,
- (i * 15) + (crtc_info->width / 2 - (strlen(passwd) + 1) * 15 / 2),
- w_pos[1] + diasize[1],
- w_len[0],
- diasize[1],
- 0,
- pass_char,
- 0
- );
+ drw_map(drw, locks[0]->win, crtc_info->x, crtc_info->y + (crtc_info->height - 300) / 2, crtc_info->width, 300);
}
+ else
+ for (int i = lastlen * line; i > len * line; --i) {
+ drw_rect(drw, (crtc_info->width - i) / 2, 200, i, 5, 1, 0);
- drw_text(drw,
- ((strlen(passwd)) * 15) + (crtc_info->width / 2 - (strlen(passwd) + 1) * 15 / 2),
- w_pos[1] + diasize[1],
- w_len[0],
- diasize[1],
- 0,
- cursor_char,
- 0
- );
-
- } else {
- drw_text(drw, t_pos[0], w_pos[1] + diasize[1], w_len[0], diasize[1], 0, "\u274c", 0);
- failure = 0;
- }
-
- drw_rect(drw, crtc_info->width / 2 - (strlen(passwd) + 1) * 15 / 2 - 15, w_pos[1] + diasize[1] + 140, (strlen(passwd) + 1) * 15 + 33, 47, 0, 0);
- drw_rect(drw, crtc_info->width / 2 - (strlen(passwd) + 1) * 15 / 2, w_pos[1] + diasize[1] + 140, (strlen(passwd) + 1) * 15 + 3, 47, 0, 1);
+ drw_map(drw, locks[0]->win, crtc_info->x, crtc_info->y + (crtc_info->height - 300) / 2, crtc_info->width, 300);
+ drw_rect(drw, (crtc_info->width - i) / 2, 200, i, 5, 1, 1);
+ }
- drw_map(drw, locks[0]->win, 0, 0, crtc_info->width, crtc_info->height);
+ lastlen = len;
} else if (rr->active && ev.type == rr->evbase + RRScreenChangeNotify) {
rre = (XRRScreenChangeNotifyEvent*)&ev;