Barwin/Frame: Optimization of saikobee feature
This commit is contained in:
parent
57019236aa
commit
d213d13784
29
src/barwin.c
29
src/barwin.c
@ -81,6 +81,8 @@ barwin_create(Window parent,
|
||||
if(border)
|
||||
{
|
||||
bw->bord = True;
|
||||
bw->border.light = color_shade(bg, conf.colors.bar_light_shade);
|
||||
bw->border.dark = color_shade(bg, conf.colors.bar_dark_shade);
|
||||
|
||||
CWIN(bw->border.left, bw->win, 0, 0, SHADH, h, 0, CWBackPixel, bg, &at);
|
||||
CWIN(bw->border.top, bw->win, 0, 0, w, SHADH, 0, CWBackPixel, bg, &at);
|
||||
@ -95,8 +97,6 @@ barwin_create(Window parent,
|
||||
bw->geo.height = h;
|
||||
bw->bg = bg;
|
||||
bw->fg = fg;
|
||||
bw->border.light = color_shade(bg, conf.colors.bar_light_shade);
|
||||
bw->border.dark = color_shade(bg, conf.colors.bar_dark_shade);
|
||||
bw->stipple = stipple;
|
||||
bw->stipple_color = -1;
|
||||
|
||||
@ -143,6 +143,23 @@ barwin_draw_image_ofset_text(BarWindow *bw, int x, int y, char *text, int x_imag
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
barwin_color_set(BarWindow *bw, uint bg, char *fg)
|
||||
{
|
||||
CHECK(bw);
|
||||
|
||||
bw->bg = bg;
|
||||
bw->fg = fg;
|
||||
|
||||
if(bw->bord)
|
||||
{
|
||||
bw->border.light = color_shade(bg, conf.colors.bar_light_shade);
|
||||
bw->border.dark = color_shade(bg, conf.colors.bar_dark_shade);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/** Delete a BarWindow
|
||||
* \param bw BarWindow pointer
|
||||
*/
|
||||
@ -299,10 +316,10 @@ barwin_refresh_color(BarWindow *bw)
|
||||
|
||||
if(bw->bord)
|
||||
{
|
||||
XSetWindowBackground(dpy, bw->border.left, color_shade(bw->bg, conf.colors.bar_light_shade));
|
||||
XSetWindowBackground(dpy, bw->border.top, color_shade(bw->bg, conf.colors.bar_light_shade));
|
||||
XSetWindowBackground(dpy, bw->border.bottom, color_shade(bw->bg, conf.colors.bar_dark_shade));
|
||||
XSetWindowBackground(dpy, bw->border.right, color_shade(bw->bg, conf.colors.bar_dark_shade));
|
||||
XSetWindowBackground(dpy, bw->border.left, bw->border.light);
|
||||
XSetWindowBackground(dpy, bw->border.top, bw->border.light);
|
||||
XSetWindowBackground(dpy, bw->border.bottom, bw->border.dark);
|
||||
XSetWindowBackground(dpy, bw->border.right, bw->border.dark);
|
||||
|
||||
XClearWindow(dpy, bw->border.left);
|
||||
XClearWindow(dpy, bw->border.top);
|
||||
|
||||
16
src/client.c
16
src/client.c
@ -360,19 +360,13 @@ client_focus(Client *c)
|
||||
|
||||
if(sel && sel != c)
|
||||
{
|
||||
sel->colors.frame = conf.client.bordernormal;
|
||||
sel->colors.fg = conf.titlebar.fg_normal;
|
||||
sel->colors.resizecorner = conf.client.resizecorner_normal;
|
||||
|
||||
if(TBARH - BORDH && sel->titlebar->stipple)
|
||||
sel->titlebar->stipple_color = conf.titlebar.stipple.colors.normal;
|
||||
|
||||
if(sel->flags & AboveFlag)
|
||||
sel->flags &= ~AboveFlag;
|
||||
|
||||
XChangeProperty(dpy, sel->frame, net_atom[net_wm_window_opacity], XA_CARDINAL,
|
||||
32, PropModeReplace, (uchar *)&conf.opacity, 1);
|
||||
|
||||
frame_update_color(sel, True);
|
||||
frame_update(sel);
|
||||
|
||||
mouse_grabbuttons(sel, !conf.focus_pclick);
|
||||
@ -380,10 +374,6 @@ client_focus(Client *c)
|
||||
|
||||
if((sel = c))
|
||||
{
|
||||
c->colors.frame = conf.client.borderfocus;
|
||||
c->colors.fg = conf.titlebar.fg_focus;
|
||||
c->colors.resizecorner = conf.client.resizecorner_focus;
|
||||
|
||||
/* Set focusontag option */
|
||||
for(cc = clients; cc; cc = cc->next)
|
||||
if(cc->focusontag == (int)c->tag)
|
||||
@ -391,11 +381,9 @@ client_focus(Client *c)
|
||||
|
||||
c->focusontag = seltag[selscreen];
|
||||
|
||||
if(TBARH - BORDH && c->titlebar->stipple)
|
||||
c->titlebar->stipple_color = conf.titlebar.stipple.colors.focus;
|
||||
|
||||
XDeleteProperty(dpy, c->frame, net_atom[net_wm_window_opacity]);
|
||||
|
||||
frame_update_color(c, False);
|
||||
frame_update(c);
|
||||
mouse_grabbuttons(c, True);
|
||||
|
||||
|
||||
57
src/frame.c
57
src/frame.c
@ -118,10 +118,13 @@ frame_create(Client *c)
|
||||
/* Border (for shadow) */
|
||||
if(conf.client.border_shadow)
|
||||
{
|
||||
CWIN(c->left, c->frame, 0, 0, SHADH, c->frame_geo.height, 0, CWBackPixel, c->colors.frame, &at);
|
||||
CWIN(c->top, c->frame, 0, 0, c->frame_geo.width, SHADH, 0, CWBackPixel, c->colors.frame, &at);
|
||||
CWIN(c->bottom, c->frame, 0, c->frame_geo.height - SHADH, c->frame_geo.width, SHADH, 0, CWBackPixel, c->colors.frame, &at);
|
||||
CWIN(c->right, c->frame, c->frame_geo.width - SHADH, 0, SHADH, c->frame_geo.height, 0, CWBackPixel, c->colors.frame, &at);
|
||||
c->colors.borddark = color_shade(c->colors.frame, conf.colors.client_dark_shade);
|
||||
c->colors.bordlight = color_shade(c->colors.frame, conf.colors.client_light_shade);
|
||||
|
||||
CWIN(c->left, c->frame, 0, 0, SHADH, c->frame_geo.height, 0, CWBackPixel, c->colors.bordlight, &at);
|
||||
CWIN(c->top, c->frame, 0, 0, c->frame_geo.width, SHADH, 0, CWBackPixel, c->colors.bordlight, &at);
|
||||
CWIN(c->bottom, c->frame, 0, c->frame_geo.height - SHADH, c->frame_geo.width, SHADH, 0, CWBackPixel, c->colors.borddark, &at);
|
||||
CWIN(c->right, c->frame, c->frame_geo.width - SHADH, 0, SHADH, c->frame_geo.height, 0, CWBackPixel, c->colors.borddark, &at);
|
||||
}
|
||||
|
||||
/* Reparent window with the frame */
|
||||
@ -191,6 +194,44 @@ frame_moveresize(Client *c, XRectangle geo)
|
||||
return;
|
||||
}
|
||||
|
||||
/** Update frame colors for focus event
|
||||
*\param c Client pointer
|
||||
*/
|
||||
void
|
||||
frame_update_color(Client *c, Bool focused)
|
||||
{
|
||||
CHECK(c);
|
||||
|
||||
/* Not focused client */
|
||||
if(focused)
|
||||
{
|
||||
c->colors.frame = conf.client.bordernormal;
|
||||
c->colors.fg = conf.titlebar.fg_normal;
|
||||
c->colors.resizecorner = conf.client.resizecorner_normal;
|
||||
|
||||
if(TBARH - BORDH && c->titlebar->stipple)
|
||||
c->titlebar->stipple_color = conf.titlebar.stipple.colors.normal;
|
||||
}
|
||||
/* Focused */
|
||||
else
|
||||
{
|
||||
c->colors.frame = conf.client.borderfocus;
|
||||
c->colors.fg = conf.titlebar.fg_focus;
|
||||
c->colors.resizecorner = conf.client.resizecorner_focus;
|
||||
|
||||
if(TBARH - BORDH && c->titlebar->stipple)
|
||||
c->titlebar->stipple_color = conf.titlebar.stipple.colors.focus;
|
||||
}
|
||||
|
||||
if(conf.client.border_shadow)
|
||||
{
|
||||
c->colors.borddark = color_shade(c->colors.frame, conf.colors.client_dark_shade);
|
||||
c->colors.bordlight = color_shade(c->colors.frame, conf.colors.client_light_shade);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/** Update the client frame; Set the new color
|
||||
* and the title --> refresh
|
||||
* \param c Client pointer
|
||||
@ -258,10 +299,10 @@ frame_update(Client *c)
|
||||
|
||||
if(conf.client.border_shadow)
|
||||
{
|
||||
XSetWindowBackground(dpy, c->left, color_shade(c->colors.frame, conf.colors.client_light_shade));
|
||||
XSetWindowBackground(dpy, c->top, color_shade(c->colors.frame, conf.colors.client_light_shade));
|
||||
XSetWindowBackground(dpy, c->right, color_shade(c->colors.frame, conf.colors.client_dark_shade));
|
||||
XSetWindowBackground(dpy, c->bottom, color_shade(c->colors.frame, conf.colors.client_dark_shade));
|
||||
XSetWindowBackground(dpy, c->left, c->colors.bordlight);
|
||||
XSetWindowBackground(dpy, c->top, c->colors.bordlight);
|
||||
XSetWindowBackground(dpy, c->right, c->colors.borddark);
|
||||
XSetWindowBackground(dpy, c->bottom, c->colors.borddark);
|
||||
|
||||
XClearWindow(dpy, c->left);
|
||||
XClearWindow(dpy, c->top);
|
||||
|
||||
@ -272,6 +272,7 @@ infobar_draw_taglist(int sc)
|
||||
? conf.colors.tag_occupied_fg
|
||||
: conf.colors.text));
|
||||
|
||||
barwin_color_set(infobar[sc].tags[i], infobar[sc].tags[i]->bg, infobar[sc].tags[i]->fg);
|
||||
barwin_refresh_color(infobar[sc].tags[i]);
|
||||
|
||||
if(tags[sc][i].name)
|
||||
@ -417,7 +418,7 @@ uicb_infobar_toggledisplay(uicb_t cmd)
|
||||
? 0 : (tags[selscreen][seltag[selscreen]].prev_barpos
|
||||
? tags[selscreen][seltag[selscreen]].prev_barpos : 2
|
||||
));
|
||||
|
||||
|
||||
tags[selscreen][seltag[selscreen]].prev_barpos = tags[selscreen][seltag[selscreen]].barpos;
|
||||
tags[selscreen][seltag[selscreen]].barpos = new_pos;
|
||||
|
||||
|
||||
@ -748,7 +748,9 @@ uicb_togglemax(uicb_t cmd)
|
||||
sel->free_geo = sel->geo;
|
||||
sel->flags &= ~(TileFlag | FreeFlag);
|
||||
client_maximize(sel);
|
||||
XRaiseWindow(dpy, sel->frame);
|
||||
sel->flags |= MaxFlag;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -216,6 +216,7 @@ struct Client
|
||||
uint frame;
|
||||
char *fg;
|
||||
uint resizecorner;
|
||||
uint bordlight, borddark;
|
||||
} colors;
|
||||
/* Client Information by flags */
|
||||
uint flags;
|
||||
|
||||
@ -120,6 +120,7 @@ BarWindow *barwin_create(Window parent,
|
||||
Bool border);
|
||||
void barwin_draw_text(BarWindow *bw, int x, int y, char *text);
|
||||
void barwin_draw_image_ofset_text(BarWindow *bw, int x, int y, char *text, int x_image_ofset, int y_image_ofset);
|
||||
void barwin_color_set(BarWindow *bw, uint bg, char *fg);
|
||||
void barwin_delete(BarWindow *bw);
|
||||
void barwin_delete_subwin(BarWindow *bw);
|
||||
void barwin_map(BarWindow *bw);
|
||||
@ -227,6 +228,7 @@ void ewmh_manage_window_type(Client *c);
|
||||
void frame_create(Client *c);
|
||||
void frame_delete(Client *c);
|
||||
void frame_moveresize(Client *c, XRectangle geo);
|
||||
void frame_update_color(Client *c, Bool focused);
|
||||
void frame_update(Client *c);
|
||||
|
||||
/* config.c */
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user