From f7557c55b5a87a51daba825ed3f6155eed179221 Mon Sep 17 00:00:00 2001 From: Guilherme Freire <41879254+GRFreire@users.noreply.github.com> Date: Sat, 11 Sep 2021 11:38:22 -0300 Subject: [PATCH] Custom bar colors (#10) * set bar and text colors independently * change xresources to Program.class.resource * rename color variables to win/bar_bg/fg * change default bar colors to match window colors --- image.c | 2 +- sxiv.1 | 14 ++++++++++---- sxiv.h | 6 ++++-- thumbs.c | 6 +++--- window.c | 28 ++++++++++++++++------------ 5 files changed, 34 insertions(+), 22 deletions(-) diff --git a/image.c b/image.c index 2c6852f..9d76d46 100644 --- a/image.c +++ b/image.c @@ -500,7 +500,7 @@ void img_render(img_t *img) } imlib_image_put_back_data(data); } else { - c = win->bg.pixel; + c = win->win_bg.pixel; imlib_context_set_color(c >> 16 & 0xFF, c >> 8 & 0xFF, c & 0xFF, 0xFF); imlib_image_fill_rectangle(0, 0, dw, dh); } diff --git a/sxiv.1 b/sxiv.1 index 4ba6c7d..bf8d5c3 100644 --- a/sxiv.1 +++ b/sxiv.1 @@ -381,11 +381,17 @@ Zoom out. .SH CONFIGURATION The following X resources are supported: .TP -.B background -Color of the window background and bar foreground +.B window.background +Color of the window background .TP -.B foreground -Color of the window foreground and bar background +.B window.foreground +Color of the window foreground +.TP +.B bar.background +Color of the bar background. Defaults to window.foreground +.TP +.B bar.foreground +Color of the bar foreground. Defaults to window.background .TP .B font Name of Xft bar font diff --git a/sxiv.h b/sxiv.h index 746b35f..c914837 100644 --- a/sxiv.h +++ b/sxiv.h @@ -409,8 +409,10 @@ struct win { Window xwin; win_env_t env; - XftColor bg; - XftColor fg; + XftColor win_bg; + XftColor win_fg; + XftColor bar_bg; + XftColor bar_fg; int x; int y; diff --git a/thumbs.c b/thumbs.c index 36874d6..4238aa0 100644 --- a/thumbs.c +++ b/thumbs.c @@ -469,14 +469,14 @@ void tns_mark(tns_t *tns, int n, bool mark) if (n >= 0 && n < *tns->cnt && tns->thumbs[n].im != NULL) { win_t *win = tns->win; thumb_t *t = &tns->thumbs[n]; - unsigned long col = win->bg.pixel; + unsigned long col = win->win_bg.pixel; int x = t->x + t->w, y = t->y + t->h; win_draw_rect(win, x - 1, y + 1, 1, tns->bw, true, 1, col); win_draw_rect(win, x + 1, y - 1, tns->bw, 1, true, 1, col); if (mark) - col = win->fg.pixel; + col = win->win_fg.pixel; win_draw_rect(win, x, y, tns->bw + 2, tns->bw + 2, true, 1, col); @@ -490,7 +490,7 @@ void tns_highlight(tns_t *tns, int n, bool hl) if (n >= 0 && n < *tns->cnt && tns->thumbs[n].im != NULL) { win_t *win = tns->win; thumb_t *t = &tns->thumbs[n]; - unsigned long col = hl ? win->fg.pixel : win->bg.pixel; + unsigned long col = hl ? win->win_fg.pixel : win->win_bg.pixel; int oxy = (tns->bw + 1) / 2 + 1, owh = tns->bw + 2; win_draw_rect(win, t->x - oxy, t->y - oxy, t->w + owh, t->h + owh, diff --git a/window.c b/window.c index ded20c8..bd9b0c3 100644 --- a/window.c +++ b/window.c @@ -93,7 +93,7 @@ const char* win_res(XrmDatabase db, const char *name, const char *def) void win_init(win_t *win) { win_env_t *e; - const char *bg, *fg, *f; + const char *win_bg, *win_fg, *bar_bg, *bar_fg, *f; char *res_man; XrmDatabase db; XVisualInfo vis; @@ -133,10 +133,14 @@ void win_init(win_t *win) f = win_res(db, RES_CLASS ".font", "monospace-8"); win_init_font(e, f); - bg = win_res(db, RES_CLASS ".background", "white"); - fg = win_res(db, RES_CLASS ".foreground", "black"); - win_alloc_color(e, bg, &win->bg); - win_alloc_color(e, fg, &win->fg); + win_bg = win_res(db, RES_CLASS ".window.background", "white"); + win_fg = win_res(db, RES_CLASS ".window.foreground", "black"); + bar_bg = win_res(db, RES_CLASS ".bar.background", win_bg); + bar_fg = win_res(db, RES_CLASS ".bar.foreground", win_fg); + win_alloc_color(e, win_bg, &win->win_bg); + win_alloc_color(e, win_fg, &win->win_fg); + win_alloc_color(e, bar_bg, &win->bar_bg); + win_alloc_color(e, bar_fg, &win->bar_fg); win->bar.l.size = BAR_L_LEN; win->bar.r.size = BAR_R_LEN; @@ -297,7 +301,7 @@ void win_open(win_t *win) win->buf.h = e->scrh; win->buf.pm = XCreatePixmap(e->dpy, win->xwin, win->buf.w, win->buf.h, e->depth); - XSetForeground(e->dpy, gc, win->bg.pixel); + XSetForeground(e->dpy, gc, win->win_bg.pixel); XFillRectangle(e->dpy, win->buf.pm, gc, 0, 0, win->buf.w, win->buf.h); XSetWindowBackgroundPixmap(e->dpy, win->xwin, win->buf.pm); @@ -379,7 +383,7 @@ void win_clear(win_t *win) win->buf.pm = XCreatePixmap(e->dpy, win->xwin, win->buf.w, win->buf.h, e->depth); } - XSetForeground(e->dpy, gc, win->bg.pixel); + XSetForeground(e->dpy, gc, win->win_bg.pixel); XFillRectangle(e->dpy, win->buf.pm, gc, 0, 0, win->buf.w, win->buf.h); } @@ -436,23 +440,23 @@ void win_draw_bar(win_t *win) d = XftDrawCreate(e->dpy, win->buf.pm, e->vis, e->cmap); - XSetForeground(e->dpy, gc, win->fg.pixel); + XSetForeground(e->dpy, gc, win->bar_bg.pixel); XFillRectangle(e->dpy, win->buf.pm, gc, 0, win->h, win->w, win->bar.h); - XSetForeground(e->dpy, gc, win->bg.pixel); - XSetBackground(e->dpy, gc, win->fg.pixel); + XSetForeground(e->dpy, gc, win->win_bg.pixel); + XSetBackground(e->dpy, gc, win->bar_bg.pixel); if ((len = strlen(r->buf)) > 0) { if ((tw = TEXTWIDTH(win, r->buf, len)) > w) return; x = win->w - tw - H_TEXT_PAD; w -= tw; - win_draw_text(win, d, &win->bg, x, y, r->buf, len, tw); + win_draw_text(win, d, &win->bar_fg, x, y, r->buf, len, tw); } if ((len = strlen(l->buf)) > 0) { x = H_TEXT_PAD; w -= 2 * H_TEXT_PAD; /* gap between left and right parts */ - win_draw_text(win, d, &win->bg, x, y, l->buf, len, w); + win_draw_text(win, d, &win->bar_fg, x, y, l->buf, len, w); } XftDrawDestroy(d); }