ltk

Socket-based GUI for X11 (WIP)
git clone git://lumidify.org/ltk.git (fast, but not encrypted)
git clone https://lumidify.org/git/ltk.git (encrypted, but very slow)
Log | Files | Refs | README | LICENSE

commit b0c76c485b6b050d6b76fdf6397d7d4b93ce1efc
parent 16fa6bfa5bfc26126ac712ac03528914b0d651f9
Author: lumidify <nobody@lumidify.org>
Date:   Sat, 20 Feb 2021 21:15:18 +0100

Improve makefile, but possibly just make it ugly

Diffstat:
MMakefile | 31+++++++++++++++++++++++++++++--
Mcolor.c | 2+-
Mcolor.h | 6++++--
Dconfig.mk | 14--------------
Mltk.h | 2+-
Mltkd.c | 10+++++-----
Mmemory.h | 2+-
Mtext.h | 2+-
Mutil.h | 5+++++
9 files changed, 47 insertions(+), 27 deletions(-)

diff --git a/Makefile b/Makefile @@ -1,6 +1,33 @@ -include config.mk +VERSION = -999 -OBJ += strtonum.o util.o memory.o color.o ltkd.o ini.o grid.o box.o scrollbar.o button.o label.o draw.o +# FIXME: Using DEBUG here doesn't work because it somehow interferes with a predefined macro, +# at least on OpenBSD +DEV = 0 +USE_PANGO = 0 + +CFLAGS += -DUSE_PANGO=$(USE_PANGO) -DDEV=$(DEV) -D_POSIX_C_SOURCE=200809L -w -std=c99 `pkg-config --cflags x11 fontconfig` +LDFLAGS += -lm `pkg-config --libs x11 fontconfig` + +# Note: this macro magic for debugging and pango rendering seems ugly; it should probably be changed + +# debug +DEV_1 = -g -Wall -Werror -Wextra -pedantic + +# stb rendering +EXTRA_OBJ_0 = stb_truetype.o text_stb.o + +# pango rendering +EXTRA_OBJ_1 = text_pango.o +EXTRA_CFLAGS_1 += -DUSE_PANGO `pkg-config --cflags pangoxft` +EXTRA_LDFLAGS_1 += `pkg-config --libs pangoxft` + +EXTRA_OBJ = $(EXTRA_OBJ_$(USE_PANGO)) +EXTRA_CFLAGS = $(EXTRA_CFLAGS_$(USE_PANGO)) $(DEV_$(DEV)) +EXTRA_LDFLAGS = $(EXTRA_LDFLAGS_$(USE_PANGO)) + +OBJ = strtonum.o util.o memory.o color.o ltkd.o ini.o grid.o box.o scrollbar.o button.o label.o draw.o $(EXTRA_OBJ) +CFLAGS += $(EXTRA_CFLAGS) +LDFLAGS += $(EXTRA_LDFLAGS) all: ltkd ltkc diff --git a/color.c b/color.c @@ -13,7 +13,7 @@ ltk_color_create(Display *dpy, int screen, Colormap cm, const char *hex, LtkColo } XAllocColor(dpy, cm, &col->xcolor); /* FIXME: replace with XftColorAllocValue; error checking */ - #ifdef USE_PANGO + #if USE_PANGO == 1 XftColorAllocName(dpy, DefaultVisual(dpy, screen), cm, hex, &col->xftcolor); #endif } diff --git a/color.h b/color.h @@ -1,15 +1,17 @@ #ifndef _LTK_COLOR_H_ #define _LTK_COLOR_H_ -#ifdef USE_PANGO +#if USE_PANGO == 1 #include <X11/Xft/Xft.h> #endif typedef struct { XColor xcolor; - #ifdef USE_PANGO + #if USE_PANGO == 1 XftColor xftcolor; #endif } LtkColor; +void ltk_color_create(Display *dpy, int screen, Colormap cm, const char *hex, LtkColor *col); + #endif /* _LTK_COLOR_H_ */ diff --git a/config.mk b/config.mk @@ -1,14 +0,0 @@ -VERSION = -999 - -CFLAGS = -DDEBUG -D_POSIX_C_SOURCE=200809L -g -std=c99 -w -fno-common -Wall -Werror -Wextra `pkg-config --cflags x11 fontconfig` -pedantic -LDFLAGS = -lm `pkg-config --libs x11 fontconfig` - -# Comment when enabling pango rendering: -OBJ = stb_truetype.o text_stb.o - -# Uncomment to enable pango rendering: -#OBJ = text_pango.o -#CFLAGS += -DUSE_PANGO `pkg-config --cflags pangoxft` -#LDFLAGS += `pkg-config --libs pangoxft` - -CC = cc diff --git a/ltk.h b/ltk.h @@ -160,7 +160,7 @@ int ltk_collide_rect(ltk_rect rect, int x, int y); void ltk_window_set_active_widget(ltk_window *window, ltk_widget *widget); void ltk_window_set_pressed_widget(ltk_window *window, ltk_widget *widget); void ltk_fill_widget_defaults(ltk_widget *widget, const char *id, ltk_window * window, - void (*draw) (void *), void (*change_state) (void *), + void (*draw) (void *, ltk_rect), void (*change_state) (void *), void (*destroy) (void *, int), unsigned int needs_redraw, ltk_widget_type type); void ltk_widget_mouse_press_event(ltk_widget *widget, XEvent event); diff --git a/ltkd.c b/ltkd.c @@ -188,7 +188,7 @@ ltk_mainloop(ltk_window *window) { FD_SET(listenfd, &rallfds); maxfd = listenfd; - printf("%d", window->xwindow); + printf("%lu", window->xwindow); /*fflush(stdout);*/ daemonize(); @@ -327,7 +327,7 @@ get_sock_path(char *basedir, Window id) { /* FIXME: MAKE SURE THIS IS ACTUALLY BIG ENOUGH! */ path = ltk_malloc(len + 20); /* FIXME: also check for less than 0 */ - if (snprintf(path, len + 20, "%s/%d.sock", basedir, id) >= len + 20) + if (snprintf(path, len + 20, "%s/%lu.sock", basedir, id) >= len + 20) ltk_fatal("Tell lumidify to fix his code.\n"); return path; @@ -395,10 +395,10 @@ ltk_log_msg(const char *mode, const char *format, va_list args) { time(&clock); timeptr = localtime(&clock); - strftime(&logtime, 25, "%Y-%m-%d %H:%M:%S", timeptr); + strftime(logtime, 25, "%Y-%m-%d %H:%M:%S", timeptr); if (main_window) - fprintf(stderr, "%s ltkd(%d) %s: ", logtime, main_window->xwindow, mode); + fprintf(stderr, "%s ltkd(%lu) %s: ", logtime, main_window->xwindow, mode); else fprintf(stderr, "%s ltkd(?) %s: ", logtime, mode); vfprintf(stderr, format, args); @@ -685,7 +685,7 @@ ltk_collide_rect(ltk_rect rect, int x, int y) { void ltk_fill_widget_defaults(ltk_widget *widget, const char *id, ltk_window *window, - void (*draw) (void *), void (*change_state) (void *), + void (*draw) (void *, ltk_rect), void (*change_state) (void *), void (*destroy) (void *, int), unsigned int needs_redraw, ltk_widget_type type) { if (id) { diff --git a/memory.h b/memory.h @@ -28,7 +28,7 @@ /* Requires: <stdlib.h> */ -#ifdef DEBUG +#if DEV == 1 #define ltk_strdup(s) ltk_strdup_debug(s, __func__, __FILE__, __LINE__) #define ltk_malloc(size) ltk_malloc_debug(size, __func__, __FILE__, __LINE__) #define ltk_calloc(nmemb, size) ltk_calloc_debug(nmemb, size, __func__, __FILE__, __LINE__) diff --git a/text.h b/text.h @@ -14,7 +14,7 @@ void ltk_text_line_set_width(LtkTextLine *tl, int width); void ltk_text_line_get_size(LtkTextLine *tl, int *w, int *h); void ltk_text_line_destroy(LtkTextLine *tl); -#ifdef USE_PANGO +#if USE_PANGO == 1 #include <pango/pangoxft.h> #endif diff --git a/util.h b/util.h @@ -38,3 +38,8 @@ char *ltk_strcat_useful(const char *str1, const char *str2); declared here so they can be used by the utility functions */ void ltk_log_msg(const char *mode, const char *format, va_list args); void ltk_cleanup(void); + +void ltk_fatal_errno(const char *format, ...); +void ltk_warn_errno(const char *format, ...); +void ltk_fatal(const char *format, ...); +void ltk_warn(const char *format, ...);