Button: Add line multi section in button section (button { line { coord = {x1, y1, x2, y2} } }) to make your own button motive.

This commit is contained in:
Martin Duquesnoy 2009-03-23 00:56:06 +01:00
parent ba5202b9f5
commit 436aaf5856
6 changed files with 60 additions and 4 deletions

View File

@ -158,8 +158,8 @@ conf_root_section(cfg_t *cfg_r)
void
conf_client_section(cfg_t *cfg_c)
{
int i;
cfg_t *cfgtmp2;
int i, j;
cfg_t *cfgtmp2, *cfgtmp3;
/* Client misc */
conf.client.borderheight = (cfg_getint(cfg_c, "border_height")) ? cfg_getint(cfg_c, "border_height") : 1;
@ -197,11 +197,28 @@ conf_client_section(cfg_t *cfg_c)
for(i = 0; i < conf.titlebar.nbutton; ++i)
{
cfgtmp2 = cfg_getnsec(cfgtmp, "button", i);
/* Multi mouse section */
if((conf.titlebar.button[i].nmouse = cfg_size(cfgtmp2, "mouse")))
{
conf.titlebar.button[i].mouse = emalloc(conf.titlebar.button[i].nmouse, sizeof(MouseBinding));
mouse_section(conf.titlebar.button[i].mouse, cfgtmp2, conf.titlebar.button[i].nmouse);
}
/* Multi line section */
if((conf.titlebar.button[i].nlines = cfg_size(cfgtmp2, "line")))
{
conf.titlebar.button[i].linecoord = emalloc(conf.titlebar.button[i].nlines, sizeof(XSegment));
for(j = 0; j < conf.titlebar.button[i].nlines; ++j)
{
cfgtmp3 = cfg_getnsec(cfgtmp2, "line", j);
conf.titlebar.button[i].linecoord[j].x1 = cfg_getnint(cfgtmp3, "coord", 0);
conf.titlebar.button[i].linecoord[j].y1 = cfg_getnint(cfgtmp3, "coord", 1);
conf.titlebar.button[i].linecoord[j].x2 = cfg_getnint(cfgtmp3, "coord", 2);
conf.titlebar.button[i].linecoord[j].y2 = cfg_getnint(cfgtmp3, "coord", 3);
}
}
}
}
/* }} */

View File

@ -72,9 +72,16 @@ cfg_opt_t root_opts[] =
/* CLIENT {{{ */
cfg_opt_t line_opts[] =
{
CFG_INT_LIST("coord", "{0, 0, 0, 0}", CFGF_MULTI),
CFG_END()
};
cfg_opt_t button_opts[] =
{
CFG_SEC("mouse", mouse_button_opts, CFGF_MULTI),
CFG_SEC("line", line_opts, CFGF_MULTI),
CFG_END()
};

View File

@ -191,7 +191,7 @@ frame_moveresize(Client *c, XRectangle geo)
void
frame_update(Client *c)
{
int i ;
int i, j;
CHECK(c);
@ -214,6 +214,26 @@ frame_update(Client *c)
XSetWindowBackground(dpy, c->button[i], c->colors.frame);
XClearWindow(dpy, c->button[i]);
XSetWindowBorder(dpy, c->button[i], getcolor(c->colors.fg));
/* Button's lines */
if(conf.titlebar.button[i].nlines)
{
XSetForeground(dpy, gc, getcolor(c->colors.fg));
XDrawSegments(dpy, c->button[i], gc,
conf.titlebar.button[i].linecoord,
conf.titlebar.button[i].nlines);
/*
for(j = 0; j < conf.titlebar.button[i].nlines; ++j)
{
XDrawLine(dpy, c->button[i], gc,
conf.titlebar.button[i].linecoord[j].x1,
conf.titlebar.button[i].linecoord[j].y1,
conf.titlebar.button[i].linecoord[j].x2,
conf.titlebar.button[i].linecoord[j].y2);
} */
}
}
}

View File

@ -250,6 +250,8 @@ typedef struct
typedef struct
{
MouseBinding *mouse;
XSegment *linecoord;
int nlines;
int nmouse;
} Button;

View File

@ -123,7 +123,11 @@ quit(void)
IFREE(conf.ntag);
IFREE(conf.titlebar.mouse);
for(i = 0; i < conf.titlebar.nbutton; ++i)
{
IFREE(conf.titlebar.button[i].mouse);
IFREE(conf.titlebar.button[i].linecoord);
}
IFREE(conf.titlebar.button);
IFREE(conf.client.mouse);
IFREE(conf.root.mouse);

8
wmfsrc
View File

@ -106,7 +106,13 @@ client
mouse { button = "3" func = "client_raise" }
mouse { button = "3" func = "mouse_resize" }
button { mouse { button = "1" func = "client_kill" } }
button
{
mouse { button = "1" func = "client_kill" }
# Make a cross with line
line { coord = {1, 1, 4, 4} }
line { coord = {4, 1, 1, 4} }
}
}
}