Skip to content

Instantly share code, notes, and snippets.

@p4p1
Created December 20, 2023 12:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save p4p1/ae396cff30d7e082ce1ff72566304e81 to your computer and use it in GitHub Desktop.
Save p4p1/ae396cff30d7e082ce1ff72566304e81 to your computer and use it in GitHub Desktop.
🔑🔑🔑🔑
/* 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