Created
December 20, 2023 12:33
-
-
Save p4p1/ae396cff30d7e082ce1ff72566304e81 to your computer and use it in GitHub Desktop.
🔑🔑🔑🔑
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* A svkbd that adds rounded corners to the keycaps */ | |
diff -up a/drw.c b/drw.c | |
--- a/drw.c 2023-12-20 13:30:49.639649487 +0100 | |
+++ b/drw.c 2023-12-20 13:28:47.659098778 +0100 | |
@@ -242,10 +242,23 @@ drw_rect(Drw *drw, int x, int y, unsigne | |
if (!drw || !drw->scheme) | |
return; | |
XSetForeground(drw->dpy, drw->gc, invert ? drw->scheme[ColBg].pixel : drw->scheme[ColFg].pixel); | |
- if (filled) | |
- XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h); | |
- else | |
- XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w - 1, h - 1); | |
+ if (filled) { | |
+ XFillRectangle(drw->dpy, drw->drawable, drw->gc, x+radius_keys, y, w - 2 * radius_keys, h); | |
+ XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y + radius_keys, w, h - 2 * radius_keys); | |
+ | |
+ XFillArc(drw->dpy, drw->drawable, drw->gc, x, y, 2 * radius_keys, 2 * radius_keys, DEG2RAD(180), -DEG2RAD(90)); | |
+ XFillArc(drw->dpy, drw->drawable, drw->gc, x + w - 2 * radius_keys, y, 2 * radius_keys, 2 * radius_keys, DEG2RAD(90), -DEG2RAD(90)); | |
+ XFillArc(drw->dpy, drw->drawable, drw->gc, x, y + h - 2 * radius_keys, 2 * radius_keys, 2 * radius_keys, -DEG2RAD(90), -DEG2RAD(90)); | |
+ XFillArc(drw->dpy, drw->drawable, drw->gc, x + w - 2 * radius_keys, y + h - 2 * radius_keys, 2 * radius_keys, 2 * radius_keys, 0, -DEG2RAD(90)); | |
+ } else { | |
+ XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x+radius_keys, y, w - 2 * radius_keys, h); | |
+ XDrawRectangle(drw->dpy, drw->drawable, drw->gc, x, y + radius_keys, w, h - 2 * radius_keys); | |
+ | |
+ XDrawArc(drw->dpy, drw->drawable, drw->gc, x, y, 2 * radius_keys, 2 * radius_keys, DEG2RAD(180), -DEG2RAD(90)); | |
+ XDrawArc(drw->dpy, drw->drawable, drw->gc, x + w - 2 * radius_keys, y, 2 * radius_keys, 2 * radius_keys, DEG2RAD(90), -DEG2RAD(90)); | |
+ XDrawArc(drw->dpy, drw->drawable, drw->gc, x, y + h - 2 * radius_keys, 2 * radius_keys, 2 * radius_keys, -DEG2RAD(90), -DEG2RAD(90)); | |
+ XDrawArc(drw->dpy, drw->drawable, drw->gc, x + w - 2 * radius_keys, y + h - 2 * radius_keys, 2 * radius_keys, 2 * radius_keys, 0, -DEG2RAD(90)); | |
+ } | |
} | |
int | |
diff -up a/svkbd.c b/svkbd.c | |
--- a/svkbd.c 2023-12-20 13:30:49.639649487 +0100 | |
+++ b/svkbd.c 2023-12-20 13:29:57.049411950 +0100 | |
@@ -1001,6 +1001,7 @@ usage(char *argv0) | |
fprintf(stderr, " -o - Print to standard output\n"); | |
fprintf(stderr, " -l - Comma separated list of layers to enable\n"); | |
fprintf(stderr, " -s - Layer to select on program start\n"); | |
+ fprintf(stderr, " -r [int] - Set the radius of the keyboard\n"); | |
fprintf(stderr, " -H [int] - Height fraction, one key row takes 1/x of the screen height\n"); | |
fprintf(stderr, " -fn [font] - Set font (Xft, e.g: DejaVu Sans:bold:size=20)\n"); | |
fprintf(stderr, " -g - Set the window position or size using the X geometry format\n"); | |
@@ -1237,6 +1238,10 @@ main(int argc, char *argv[]) | |
if (i >= argc - 1) | |
usage(argv[0]); | |
initial_layer_name = argv[++i]; | |
+ } else if (!strcmp(argv[i], "-r")) { | |
+ if (i >= argc - 1) | |
+ usage(argv[0]); | |
+ radius_keys = atoi(argv[++i]); | |
} else if (!strcmp(argv[i], "-H")) { | |
if (i >= argc - 1) | |
usage(argv[0]); | |
diff -up a/util.c b/util.c | |
--- a/util.c 2023-12-20 13:30:49.639649487 +0100 | |
+++ b/util.c 2023-12-20 13:25:46.918284447 +0100 | |
@@ -6,6 +6,8 @@ | |
#include "util.h" | |
+int radius_keys = 0; | |
+ | |
void * | |
ecalloc(size_t nmemb, size_t size) | |
{ | |
diff -up a/util.h b/util.h | |
--- a/util.h 2023-12-20 13:30:49.639649487 +0100 | |
+++ b/util.h 2023-12-20 13:28:46.202425539 +0100 | |
@@ -3,6 +3,9 @@ | |
#define MAX(A, B) ((A) > (B) ? (A) : (B)) | |
#define MIN(A, B) ((A) < (B) ? (A) : (B)) | |
#define BETWEEN(X, A, B) ((A) <= (X) && (X) <= (B)) | |
+#define DEG2RAD(deg) ((deg) * 64) | |
+ | |
+extern int radius_keys; | |
void die(const char *fmt, ...); | |
void *ecalloc(size_t nmemb, size_t size); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment