diff options
| author | iamcheeseman <[hidden email]> | 2026-03-01 11:05:57 -0500 |
|---|---|---|
| committer | iamcheeseman <[hidden email]> | 2026-03-01 11:05:57 -0500 |
| commit | 6d17f1ca1f4e2c85e8aed05e6902196f1274cf87 (patch) | |
| tree | d81af8b3c72cefd6843bdfa53cf71aad0c6504f3 /src/tsar.c | |
| parent | d4b46c35b65d0acca115723c4519a175af8f83fd (diff) | |
Text rendering
Diffstat (limited to 'src/tsar.c')
| -rw-r--r-- | src/tsar.c | 33 |
1 files changed, 32 insertions, 1 deletions
@@ -14,6 +14,9 @@ Display* display; Window win; GC gc; +XftFont* font; +XftColor fg_color; + static int height = 17; static int width = 1000; static float width_ratio = 1; @@ -67,14 +70,40 @@ void init_x(void) { gc = XCreateGC(display, win, 0, NULL); XSetForeground(display, gc, 0xFFFFFF); + const char font_name[] = "CommitMono:style=Regular:antialias=true"; + font = XftFontOpenName(display, DefaultScreen(display), font_name); + + XftColorAllocName( + display, + DefaultVisual(display, DefaultScreen(display)), + DefaultColormap(display, DefaultScreen(display)), + "#FFFFFF", + &fg_color + ); + XFlush(display); } void deinit_x(void) { + XftFontClose(display, font); XUnmapWindow(display, win); XDestroyWindow(display, win); } +void draw_text(const char* text, int x, int y) { + XftDraw* xft_draw = XftDrawCreate( + display, + win, + DefaultVisual(display, DefaultScreen(display)), + DefaultColormap(display, DefaultScreen(display)) + ); + + int dy = y + (height - font->height) / 2 + font->ascent; + XftDrawString8(xft_draw, &fg_color, font, x, dy, (const FcChar8*)text, strlen(text)); + + XftDrawDestroy(xft_draw); +} + int main(void) { init_pipe(); init_x(); @@ -83,7 +112,9 @@ int main(void) { XEvent ev; XNextEvent(display, &ev); - XDrawLine(display, win, gc, 0, 0, width, height); + XClearWindow(display, win); + + draw_text("Hello, world!", 0, 0); XFlush(display); await_change(); |
