mirror of
https://github.com/leahneukirchen/cwm.git
synced 2023-08-10 21:13:12 +03:00
start fixing screen_ctx usage, for it is utterly broken. bring font
into screen_ctx and start passing screen_ctx around to in order get rid of Curscreen; fixup per-screen config colors the same way. diff mostly from oga@, with a bit harsher reaction to the state of screen_ctx. "please commit" oga@
This commit is contained in:
parent
aa88d5848e
commit
ee7df6a95f
4
calmwm.c
4
calmwm.c
@ -156,10 +156,10 @@ x_setupscreen(struct screen_ctx *sc, u_int which)
|
|||||||
sc->xmax = DisplayWidth(X_Dpy, sc->which);
|
sc->xmax = DisplayWidth(X_Dpy, sc->which);
|
||||||
sc->ymax = DisplayHeight(X_Dpy, sc->which);
|
sc->ymax = DisplayHeight(X_Dpy, sc->which);
|
||||||
|
|
||||||
conf_color(&Conf);
|
conf_color(&Conf, sc);
|
||||||
|
|
||||||
font_init(sc);
|
font_init(sc);
|
||||||
conf_font(&Conf);
|
conf_font(&Conf, sc);
|
||||||
|
|
||||||
TAILQ_INIT(&sc->mruq);
|
TAILQ_INIT(&sc->mruq);
|
||||||
|
|
||||||
|
16
calmwm.h
16
calmwm.h
@ -79,6 +79,8 @@ struct screen_ctx {
|
|||||||
|
|
||||||
XftDraw *xftdraw;
|
XftDraw *xftdraw;
|
||||||
XftColor xftcolor;
|
XftColor xftcolor;
|
||||||
|
XftFont *font;
|
||||||
|
u_int fontheight;
|
||||||
|
|
||||||
int xinerama_no;
|
int xinerama_no;
|
||||||
XineramaScreenInfo *xinerama;
|
XineramaScreenInfo *xinerama;
|
||||||
@ -284,8 +286,6 @@ struct conf {
|
|||||||
|
|
||||||
#define DEFAULTFONTNAME "sans-serif:pixelsize=14:bold"
|
#define DEFAULTFONTNAME "sans-serif:pixelsize=14:bold"
|
||||||
char *DefaultFontName;
|
char *DefaultFontName;
|
||||||
XftFont *DefaultFont;
|
|
||||||
u_int FontHeight;
|
|
||||||
int gap_top, gap_bottom, gap_left, gap_right;
|
int gap_top, gap_bottom, gap_left, gap_right;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -410,8 +410,8 @@ void conf_bindname(struct conf *, char *, char *);
|
|||||||
void conf_mousebind(struct conf *, char *, char *);
|
void conf_mousebind(struct conf *, char *, char *);
|
||||||
void conf_grab_mouse(struct client_ctx *);
|
void conf_grab_mouse(struct client_ctx *);
|
||||||
void conf_reload(struct conf *);
|
void conf_reload(struct conf *);
|
||||||
void conf_font(struct conf *);
|
void conf_font(struct conf *, struct screen_ctx *);
|
||||||
void conf_color(struct conf *);
|
void conf_color(struct conf *, struct screen_ctx *);
|
||||||
void conf_init(struct conf *);
|
void conf_init(struct conf *);
|
||||||
void conf_clear(struct conf *);
|
void conf_clear(struct conf *);
|
||||||
void conf_cmd_add(struct conf *, char *, char *, int);
|
void conf_cmd_add(struct conf *, char *, char *, int);
|
||||||
@ -485,14 +485,14 @@ void group_autogroup(struct client_ctx *);
|
|||||||
void group_movetogroup(struct client_ctx *, int);
|
void group_movetogroup(struct client_ctx *, int);
|
||||||
|
|
||||||
void font_init(struct screen_ctx *);
|
void font_init(struct screen_ctx *);
|
||||||
int font_width(const char *, int);
|
int font_width(struct screen_ctx *, const char *, int);
|
||||||
void font_draw(struct screen_ctx *, const char *, int,
|
void font_draw(struct screen_ctx *, const char *, int,
|
||||||
Drawable, int, int);
|
Drawable, int, int);
|
||||||
XftFont *font_make(struct screen_ctx *, const char *);
|
XftFont *font_make(struct screen_ctx *, const char *);
|
||||||
|
|
||||||
#define font_ascent() Conf.DefaultFont->ascent
|
#define font_ascent(sc) sc->font->ascent
|
||||||
#define font_descent() Conf.DefaultFont->descent
|
#define font_descent(sc) sc->font->descent
|
||||||
#define font_height() Conf.FontHeight
|
#define font_height(sc) sc->fontheight
|
||||||
|
|
||||||
/* Externs */
|
/* Externs */
|
||||||
|
|
||||||
|
22
conf.c
22
conf.c
@ -51,24 +51,17 @@ conf_cmd_add(struct conf *c, char *image, char *label, int flags)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
conf_font(struct conf *c)
|
conf_font(struct conf *c, struct screen_ctx *sc)
|
||||||
{
|
{
|
||||||
struct screen_ctx *sc;
|
sc->font = font_make(sc, c->DefaultFontName);
|
||||||
|
sc->fontheight = font_ascent(sc) + font_descent(sc) + 1;
|
||||||
sc = screen_current();
|
|
||||||
|
|
||||||
c->DefaultFont = font_make(sc, c->DefaultFontName);
|
|
||||||
c->FontHeight = font_ascent() + font_descent() + 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
conf_color(struct conf *c)
|
conf_color(struct conf *c, struct screen_ctx *sc)
|
||||||
{
|
{
|
||||||
struct screen_ctx *sc;
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
sc = screen_current();
|
|
||||||
|
|
||||||
for (i = 0; i < CWM_COLOR_MAX; i++) {
|
for (i = 0; i < CWM_COLOR_MAX; i++) {
|
||||||
xu_freecolor(sc, sc->color[i].pixel);
|
xu_freecolor(sc, sc->color[i].pixel);
|
||||||
sc->color[i].pixel = xu_getcolor(sc, c->color[i].name);
|
sc->color[i].pixel = xu_getcolor(sc, c->color[i].name);
|
||||||
@ -78,6 +71,7 @@ conf_color(struct conf *c)
|
|||||||
void
|
void
|
||||||
conf_reload(struct conf *c)
|
conf_reload(struct conf *c)
|
||||||
{
|
{
|
||||||
|
struct screen_ctx *sc;
|
||||||
struct client_ctx *cc;
|
struct client_ctx *cc;
|
||||||
|
|
||||||
if (parse_config(c->conf_path, c) == -1) {
|
if (parse_config(c->conf_path, c) == -1) {
|
||||||
@ -85,10 +79,12 @@ conf_reload(struct conf *c)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
conf_color(c);
|
|
||||||
TAILQ_FOREACH(cc, &Clientq, entry)
|
TAILQ_FOREACH(cc, &Clientq, entry)
|
||||||
client_draw_border(cc);
|
client_draw_border(cc);
|
||||||
conf_font(c);
|
TAILQ_FOREACH(sc, &Screenq, entry) {
|
||||||
|
conf_color(c, sc);
|
||||||
|
conf_font(c, sc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
|
6
font.c
6
font.c
@ -33,11 +33,11 @@ font_init(struct screen_ctx *sc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
font_width(const char *text, int len)
|
font_width(struct screen_ctx *sc, const char *text, int len)
|
||||||
{
|
{
|
||||||
XGlyphInfo extents;
|
XGlyphInfo extents;
|
||||||
|
|
||||||
XftTextExtents8(X_Dpy, Conf.DefaultFont, (const XftChar8*)text,
|
XftTextExtents8(X_Dpy, sc->font, (const XftChar8*)text,
|
||||||
len, &extents);
|
len, &extents);
|
||||||
|
|
||||||
return (extents.xOff);
|
return (extents.xOff);
|
||||||
@ -49,7 +49,7 @@ font_draw(struct screen_ctx *sc, const char *text, int len,
|
|||||||
{
|
{
|
||||||
XftDrawChange(sc->xftdraw, d);
|
XftDrawChange(sc->xftdraw, d);
|
||||||
/* Really needs to be UTF8'd. */
|
/* Really needs to be UTF8'd. */
|
||||||
XftDrawString8(sc->xftdraw, &sc->xftcolor, Conf.DefaultFont, x, y,
|
XftDrawString8(sc->xftdraw, &sc->xftcolor, sc->font, x, y,
|
||||||
(const FcChar8*)text, len);
|
(const FcChar8*)text, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
30
menu.c
30
menu.c
@ -99,7 +99,7 @@ menu_filter(struct menu_q *menuq, char *prompt, char *initial, int dummy,
|
|||||||
PROMPT_SCHAR);
|
PROMPT_SCHAR);
|
||||||
snprintf(mc.dispstr, sizeof(mc.dispstr), "%s%s%c", mc.promptstr,
|
snprintf(mc.dispstr, sizeof(mc.dispstr), "%s%s%c", mc.promptstr,
|
||||||
mc.searchstr, PROMPT_ECHAR);
|
mc.searchstr, PROMPT_ECHAR);
|
||||||
mc.width = font_width(mc.dispstr, strlen(mc.dispstr));
|
mc.width = font_width(sc, mc.dispstr, strlen(mc.dispstr));
|
||||||
mc.hasprompt = 1;
|
mc.hasprompt = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,7 +113,7 @@ menu_filter(struct menu_q *menuq, char *prompt, char *initial, int dummy,
|
|||||||
mc.entry = mc.prev = -1;
|
mc.entry = mc.prev = -1;
|
||||||
|
|
||||||
XMoveResizeWindow(X_Dpy, sc->menuwin, mc.x, mc.y, mc.width,
|
XMoveResizeWindow(X_Dpy, sc->menuwin, mc.x, mc.y, mc.width,
|
||||||
font_height());
|
font_height(sc));
|
||||||
XSelectInput(X_Dpy, sc->menuwin, evmask);
|
XSelectInput(X_Dpy, sc->menuwin, evmask);
|
||||||
XMapRaised(X_Dpy, sc->menuwin);
|
XMapRaised(X_Dpy, sc->menuwin);
|
||||||
|
|
||||||
@ -283,8 +283,8 @@ menu_draw(struct screen_ctx *sc, struct menu_ctx *mc, struct menu_q *menuq,
|
|||||||
if (mc->hasprompt) {
|
if (mc->hasprompt) {
|
||||||
snprintf(mc->dispstr, sizeof(mc->dispstr), "%s%s%c",
|
snprintf(mc->dispstr, sizeof(mc->dispstr), "%s%s%c",
|
||||||
mc->promptstr, mc->searchstr, PROMPT_ECHAR);
|
mc->promptstr, mc->searchstr, PROMPT_ECHAR);
|
||||||
mc->width = font_width(mc->dispstr, strlen(mc->dispstr));
|
mc->width = font_width(sc, mc->dispstr, strlen(mc->dispstr));
|
||||||
dy = font_height();
|
dy = font_height(sc);
|
||||||
mc->num = 1;
|
mc->num = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,9 +299,9 @@ menu_draw(struct screen_ctx *sc, struct menu_ctx *mc, struct menu_q *menuq,
|
|||||||
text = mi->text;
|
text = mi->text;
|
||||||
}
|
}
|
||||||
|
|
||||||
mc->width = MAX(mc->width, font_width(text,
|
mc->width = MAX(mc->width, font_width(sc, text,
|
||||||
MIN(strlen(text), MENU_MAXENTRY)));
|
MIN(strlen(text), MENU_MAXENTRY)));
|
||||||
dy += font_height();
|
dy += font_height(sc);
|
||||||
mc->num++;
|
mc->num++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,7 +326,7 @@ menu_draw(struct screen_ctx *sc, struct menu_ctx *mc, struct menu_q *menuq,
|
|||||||
|
|
||||||
if (mc->hasprompt) {
|
if (mc->hasprompt) {
|
||||||
font_draw(sc, mc->dispstr, strlen(mc->dispstr), sc->menuwin,
|
font_draw(sc, mc->dispstr, strlen(mc->dispstr), sc->menuwin,
|
||||||
0, font_ascent() + 1);
|
0, font_ascent(sc) + 1);
|
||||||
n = 1;
|
n = 1;
|
||||||
} else
|
} else
|
||||||
n = 0;
|
n = 0;
|
||||||
@ -336,17 +336,17 @@ menu_draw(struct screen_ctx *sc, struct menu_ctx *mc, struct menu_q *menuq,
|
|||||||
mi->print : mi->text;
|
mi->print : mi->text;
|
||||||
|
|
||||||
font_draw(sc, text, MIN(strlen(text), MENU_MAXENTRY),
|
font_draw(sc, text, MIN(strlen(text), MENU_MAXENTRY),
|
||||||
sc->menuwin, 0, n * font_height() + font_ascent() + 1);
|
sc->menuwin, 0, n * font_height(sc) + font_ascent(sc) + 1);
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mc->hasprompt && n > 1)
|
if (mc->hasprompt && n > 1)
|
||||||
XFillRectangle(X_Dpy, sc->menuwin, sc->gc,
|
XFillRectangle(X_Dpy, sc->menuwin, sc->gc,
|
||||||
0, font_height(), mc->width, font_height());
|
0, font_height(sc), mc->width, font_height(sc));
|
||||||
|
|
||||||
if (mc->noresult)
|
if (mc->noresult)
|
||||||
XFillRectangle(X_Dpy, sc->menuwin, sc->gc,
|
XFillRectangle(X_Dpy, sc->menuwin, sc->gc,
|
||||||
0, 0, mc->width, font_height());
|
0, 0, mc->width, font_height(sc));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -357,11 +357,11 @@ menu_handle_move(XEvent *e, struct menu_ctx *mc, struct screen_ctx *sc)
|
|||||||
|
|
||||||
if (mc->prev != -1)
|
if (mc->prev != -1)
|
||||||
XFillRectangle(X_Dpy, sc->menuwin, sc->gc, 0,
|
XFillRectangle(X_Dpy, sc->menuwin, sc->gc, 0,
|
||||||
font_height() * mc->prev, mc->width, font_height());
|
font_height(sc) * mc->prev, mc->width, font_height(sc));
|
||||||
if (mc->entry != -1) {
|
if (mc->entry != -1) {
|
||||||
xu_ptr_regrab(MenuGrabMask, Cursor_select);
|
xu_ptr_regrab(MenuGrabMask, Cursor_select);
|
||||||
XFillRectangle(X_Dpy, sc->menuwin, sc->gc, 0,
|
XFillRectangle(X_Dpy, sc->menuwin, sc->gc, 0,
|
||||||
font_height() * mc->entry, mc->width, font_height());
|
font_height(sc) * mc->entry, mc->width, font_height(sc));
|
||||||
} else
|
} else
|
||||||
xu_ptr_regrab(MenuGrabMask, Cursor_default);
|
xu_ptr_regrab(MenuGrabMask, Cursor_default);
|
||||||
}
|
}
|
||||||
@ -395,11 +395,11 @@ menu_calc_entry(struct screen_ctx *sc, struct menu_ctx *mc, int x, int y)
|
|||||||
{
|
{
|
||||||
int entry;
|
int entry;
|
||||||
|
|
||||||
entry = y / font_height();
|
entry = y / font_height(sc);
|
||||||
|
|
||||||
/* in bounds? */
|
/* in bounds? */
|
||||||
if (x <= 0 || x > mc->width || y <= 0 || y > font_height() * mc->num ||
|
if (x <= 0 || x > mc->width || y <= 0 ||
|
||||||
entry < 0 || entry >= mc->num)
|
y > font_height(sc) * mc->num || entry < 0 || entry >= mc->num)
|
||||||
entry = -1;
|
entry = -1;
|
||||||
|
|
||||||
if (mc->hasprompt && entry == 0)
|
if (mc->hasprompt && entry == 0)
|
||||||
|
10
mousefunc.c
10
mousefunc.c
@ -51,10 +51,10 @@ mousefunc_sweep_draw(struct client_ctx *cc)
|
|||||||
snprintf(asize, sizeof(asize), "%dx%d",
|
snprintf(asize, sizeof(asize), "%dx%d",
|
||||||
(cc->geom.width - cc->geom.basew) / cc->geom.incw,
|
(cc->geom.width - cc->geom.basew) / cc->geom.incw,
|
||||||
(cc->geom.height - cc->geom.baseh) / cc->geom.inch);
|
(cc->geom.height - cc->geom.baseh) / cc->geom.inch);
|
||||||
width_size = font_width(asize, strlen(asize)) + 4;
|
width_size = font_width(sc, asize, strlen(asize)) + 4;
|
||||||
width_name = font_width(cc->name, strlen(cc->name)) + 4;
|
width_name = font_width(sc, cc->name, strlen(cc->name)) + 4;
|
||||||
width = MAX(width_size, width_name);
|
width = MAX(width_size, width_name);
|
||||||
height = font_ascent() + font_descent() + 1;
|
height = font_ascent(sc) + font_descent(sc) + 1;
|
||||||
|
|
||||||
XMoveResizeWindow(X_Dpy, sc->menuwin, cc->geom.x, cc->geom.y,
|
XMoveResizeWindow(X_Dpy, sc->menuwin, cc->geom.x, cc->geom.y,
|
||||||
width, height * 2);
|
width, height * 2);
|
||||||
@ -62,9 +62,9 @@ mousefunc_sweep_draw(struct client_ctx *cc)
|
|||||||
XReparentWindow(X_Dpy, sc->menuwin, cc->win, 0, 0);
|
XReparentWindow(X_Dpy, sc->menuwin, cc->win, 0, 0);
|
||||||
XClearWindow(X_Dpy, sc->menuwin);
|
XClearWindow(X_Dpy, sc->menuwin);
|
||||||
font_draw(sc, cc->name, strlen(cc->name), sc->menuwin,
|
font_draw(sc, cc->name, strlen(cc->name), sc->menuwin,
|
||||||
2, font_ascent() + 1);
|
2, font_ascent(sc) + 1);
|
||||||
font_draw(sc, asize, strlen(asize), sc->menuwin,
|
font_draw(sc, asize, strlen(asize), sc->menuwin,
|
||||||
width / 2 - width_size / 2, height + font_ascent() + 1);
|
width / 2 - width_size / 2, height + font_ascent(sc) + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user