diff options
Diffstat (limited to 'dwm.c')
-rw-r--r-- | dwm.c | 156 |
1 files changed, 118 insertions, 38 deletions
@@ -704,53 +704,133 @@ dirtomon(int dir) void drawbar(Monitor *m) { - int x, w, tw = 0; + int x = 0, w, tw = 0, moveright = 0; int boxs = drw->fonts->h / 9; int boxw = drw->fonts->h / 6 + 2; - unsigned int i, occ = 0, urg = 0; + unsigned int i, j, occ = 0, urg = 0; Client *c; if (!m->showbar) return; + if (barlayout[0] == '\0') + barlayout = "tln|s"; /* draw status first so it can be overdrawn by tags later */ - if (m == selmon) { /* status is only drawn on selected monitor */ - drw_setscheme(drw, scheme[SchemeNorm]); - tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ - drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0); - } - - for (c = m->clients; c; c = c->next) { - occ |= c->tags; - if (c->isurgent) - urg |= c->tags; - } - x = 0; - for (i = 0; i < LENGTH(tags); i++) { - w = TEXTW(tags[i]); - drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]); - drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i); - if (occ & 1 << i) - drw_rect(drw, x + boxs, boxs, boxw, boxw, - m == selmon && selmon->sel && selmon->sel->tags & 1 << i, - urg & 1 << i); - x += w; - } - w = TEXTW(m->ltsymbol); + //if (m == selmon) { /* status is only drawn on selected monitor */ + // drw_setscheme(drw, scheme[SchemeNorm]); + // tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ + // drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0); + //} + + //for (c = m->clients; c; c = c->next) { + // occ |= c->tags; + // if (c->isurgent) + // urg |= c->tags; + //} + //x = 0; + //for (i = 0; i < LENGTH(tags); i++) { + // w = TEXTW(tags[i]); + // drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]); + // drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i); + // if (occ & 1 << i) + // drw_rect(drw, x + boxs, boxs, boxw, boxw, + // m == selmon && selmon->sel && selmon->sel->tags & 1 << i, + // urg & 1 << i); + // x += w; + //} + //w = TEXTW(m->ltsymbol); drw_setscheme(drw, scheme[SchemeNorm]); - x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); - - if ((w = m->ww - tw - x) > bh) { - if (m->sel) { - drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); - drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0); - if (m->sel->isfloating) - drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0); - } else { - drw_setscheme(drw, scheme[SchemeNorm]); - drw_rect(drw, x, 0, w, bh, 1, 1); - } - } + //x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); + + //if ((w = m->ww - tw - x) > bh) { + // if (m->sel) { + // drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); + // drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0); + // if (m->sel->isfloating) + // drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0); + // } else { + // drw_setscheme(drw, scheme[SchemeNorm]); + // drw_rect(drw, x, 0, w, bh, 1, 1); + // } + //} + + drw_text(drw, 0, 0, m->ww, bh, 0, "", 0); /* draw background */ + + for (i = 0; i < strlen(barlayout); i++) { + switch (barlayout[i]) { + case 'l': + w = /*blw =*/ TEXTW(m->ltsymbol); + drw_setscheme(drw, scheme[SchemeNorm]); + if (moveright) { + x -= w; + drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); + } else + x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); + break; + + case 'n': + tw = TEXTW(m->sel->name); + if (moveright) + x -= tw; + if (m->sel) { + drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); + drw_text(drw, x, 0, moveright ? tw : m->ww, bh, lrpad / 2, m->sel->name, 0); + if (m->sel->isfloating) + drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0); + } else { + drw_setscheme(drw, scheme[SchemeNorm]); + drw_rect(drw, x, 0, tw, bh, 1, 1); + } + if (!moveright) + x += tw; + break; + + case 's': + if (m == selmon) { /* status is only drawn on selected monitor */ + drw_setscheme(drw, scheme[SchemeNorm]); + tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ + if (moveright) { + x -= tw; + drw_text(drw, x, 0, tw, bh, 0, stext, 0); + } else + x = drw_text(drw, x, 0, tw, bh, 0, stext, 0); + } + break; + + case 't': + for (c = m->clients; c; c = c->next) { + occ |= c->tags; + if (c->isurgent) + urg |= c->tags; + } + /* tags */ + if (moveright) { + tw = 0; + for (j = 0; j < LENGTH(tags); j++) { + tw += TEXTW(tags[j]); + } + x -= tw; + } + for (j = 0; j < LENGTH(tags); j++) { + w = TEXTW(tags[j]); + drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << j ? SchemeSel : SchemeNorm]); + drw_text(drw, x, 0, w, bh, lrpad / 2, tags[j], urg & 1 << j); + if (occ & 1 << j) + drw_rect(drw, x + boxs, boxs, boxw, boxw, + m == selmon && selmon->sel && selmon->sel->tags & 1 << j, + urg & 1 << i); + x += w; + } + if (moveright) + x -= tw; + break; + + case '|': + moveright = 1; + x = m->ww; + break; + } + } drw_map(drw, m->barwin, 0, 0, m->ww, bh); } |