X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=engines%2Fopenbox%2Fobrender.c;h=00272080eabadc776b40ff9d05df9e569c7608f5;hb=fb1696659672386bcfc0f753b67f9eeda74e93b9;hp=518c4669edd99c56e756bd92e987dcc57708cc21;hpb=883a38eeb21e4c166e31f25a9af32b739d85d409;p=chaz%2Fopenbox diff --git a/engines/openbox/obrender.c b/engines/openbox/obrender.c index 518c4669..00272080 100644 --- a/engines/openbox/obrender.c +++ b/engines/openbox/obrender.c @@ -2,87 +2,109 @@ #include "../../kernel/openbox.h" #include "../../kernel/screen.h" -static void render_label(ObFrame *self, Appearance *a); -static void render_max(ObFrame *self, Appearance *a); -static void render_icon(ObFrame *self, Appearance *a); -static void render_iconify(ObFrame *self, Appearance *a); -static void render_desk(ObFrame *self, Appearance *a); -static void render_close(ObFrame *self, Appearance *a); - -void render_frame(ObFrame *self) +static void obrender_label(ObFrame *self, Appearance *a); +static void obrender_max(ObFrame *self, Appearance *a); +static void obrender_icon(ObFrame *self, Appearance *a); +static void obrender_iconify(ObFrame *self, Appearance *a); +static void obrender_desk(ObFrame *self, Appearance *a); +static void obrender_shade(ObFrame *self, Appearance *a); +static void obrender_close(ObFrame *self, Appearance *a); + +void obrender_frame(ObFrame *self) { if (client_focused(self->frame.client)) { XSetWindowBorder(ob_display, self->frame.plate, - s_cb_focused_color->pixel); + ob_s_cb_focused_color->pixel); } else { XSetWindowBorder(ob_display, self->frame.plate, - s_cb_unfocused_color->pixel); + ob_s_cb_unfocused_color->pixel); } if (self->frame.client->decorations & Decor_Titlebar) { - Appearance *t, *l, *m, *n, *i, *d, *c; + Appearance *t, *l, *m, *n, *i, *d, *s, *c; t = (client_focused(self->frame.client) ? self->a_focused_title : self->a_unfocused_title); l = (client_focused(self->frame.client) ? self->a_focused_label : self->a_unfocused_label); m = (client_focused(self->frame.client) ? - ((self->max_press || - self->frame.client->max_vert || self->frame.client->max_horz) ? - a_focused_pressed_max : a_focused_unpressed_max) : - ((self->max_press || - self->frame.client->max_vert || self->frame.client->max_horz) ? - a_unfocused_pressed_max : a_unfocused_unpressed_max)); + (self->frame.client->max_vert || self->frame.client->max_horz ? + ob_a_focused_pressed_set_max : + (self->max_press ? + ob_a_focused_pressed_max : ob_a_focused_unpressed_max)) : + (self->frame.client->max_vert || self->frame.client->max_horz ? + ob_a_unfocused_pressed_set_max : + (self->max_press ? + ob_a_unfocused_pressed_max : ob_a_unfocused_unpressed_max))); n = self->a_icon; i = (client_focused(self->frame.client) ? (self->iconify_press ? - a_focused_pressed_iconify : a_focused_unpressed_iconify) : + ob_a_focused_pressed_iconify : ob_a_focused_unpressed_iconify) : (self->iconify_press ? - a_unfocused_pressed_iconify : a_unfocused_unpressed_iconify)); + ob_a_unfocused_pressed_iconify : + ob_a_unfocused_unpressed_iconify)); d = (client_focused(self->frame.client) ? - (self->desk_press || self->frame.client->desktop == DESKTOP_ALL ? - a_focused_pressed_desk : a_focused_unpressed_desk) : - (self->desk_press || self->frame.client->desktop == DESKTOP_ALL ? - a_unfocused_pressed_desk : a_unfocused_unpressed_desk)); + (self->frame.client->desktop == DESKTOP_ALL ? + ob_a_focused_pressed_set_desk : + (self->desk_press ? + ob_a_focused_pressed_desk : ob_a_focused_unpressed_desk)) : + (self->frame.client->desktop == DESKTOP_ALL ? + ob_a_unfocused_pressed_set_desk : + (self->desk_press ? + ob_a_unfocused_pressed_desk : ob_a_unfocused_unpressed_desk))); + s = (client_focused(self->frame.client) ? + (self->frame.client->shaded ? + ob_a_focused_pressed_set_shade : + (self->shade_press ? + ob_a_focused_pressed_shade : ob_a_focused_unpressed_shade)) : + (self->frame.client->shaded ? + ob_a_unfocused_pressed_set_shade : + (self->shade_press ? + ob_a_unfocused_pressed_shade :ob_a_unfocused_unpressed_shade))); c = (client_focused(self->frame.client) ? (self->close_press ? - a_focused_pressed_close : a_focused_unpressed_close) : + ob_a_focused_pressed_close : ob_a_focused_unpressed_close) : (self->close_press ? - a_unfocused_pressed_close : a_unfocused_unpressed_close)); + ob_a_unfocused_pressed_close : ob_a_unfocused_unpressed_close)); paint(self->title, t); /* set parents for any parent relative guys */ l->surface.data.planar.parent = t; l->surface.data.planar.parentx = self->label_x; - l->surface.data.planar.parenty = s_bevel; + l->surface.data.planar.parenty = ob_s_bevel; m->surface.data.planar.parent = t; m->surface.data.planar.parentx = self->max_x; - m->surface.data.planar.parenty = s_bevel + 1; + m->surface.data.planar.parenty = ob_s_bevel + 1; n->surface.data.planar.parent = t; n->surface.data.planar.parentx = self->icon_x; - n->surface.data.planar.parenty = s_bevel + 1; + n->surface.data.planar.parenty = ob_s_bevel + 1; i->surface.data.planar.parent = t; i->surface.data.planar.parentx = self->iconify_x; - i->surface.data.planar.parenty = s_bevel + 1; + i->surface.data.planar.parenty = ob_s_bevel + 1; d->surface.data.planar.parent = t; d->surface.data.planar.parentx = self->desk_x; - d->surface.data.planar.parenty = s_bevel + 1; + d->surface.data.planar.parenty = ob_s_bevel + 1; + + s->surface.data.planar.parent = t; + s->surface.data.planar.parentx = self->shade_x; + s->surface.data.planar.parenty = ob_s_bevel + 1; c->surface.data.planar.parent = t; c->surface.data.planar.parentx = self->close_x; - c->surface.data.planar.parenty = s_bevel + 1; - - render_label(self, l); - render_max(self, m); - render_icon(self, n); - render_iconify(self, i); - render_desk(self, d); - render_close(self, c); + c->surface.data.planar.parenty = ob_s_bevel + 1; + + obrender_label(self, l); + obrender_max(self, m); + obrender_icon(self, n); + obrender_iconify(self, i); + obrender_desk(self, d); + obrender_shade(self, s); + obrender_close(self, c); } if (self->frame.client->decorations & Decor_Handle) { @@ -91,7 +113,7 @@ void render_frame(ObFrame *self) h = (client_focused(self->frame.client) ? self->a_focused_handle : self->a_unfocused_handle); g = (client_focused(self->frame.client) ? - a_focused_grip : a_unfocused_grip); + ob_a_focused_grip : ob_a_unfocused_grip); if (g->surface.data.planar.grad == Background_ParentRelative) { g->surface.data.planar.parent = h; @@ -111,7 +133,7 @@ void render_frame(ObFrame *self) } } -static void render_label(ObFrame *self, Appearance *a) +static void obrender_label(ObFrame *self, Appearance *a) { if (self->label_x < 0) return; @@ -123,7 +145,7 @@ static void render_label(ObFrame *self, Appearance *a) paint(self->label, a); } -static void render_icon(ObFrame *self, Appearance *a) +static void obrender_icon(ObFrame *self, Appearance *a) { if (self->icon_x < 0) return; @@ -141,7 +163,7 @@ static void render_icon(ObFrame *self, Appearance *a) paint(self->icon, a); } -static void render_max(ObFrame *self, Appearance *a) +static void obrender_max(ObFrame *self, Appearance *a) { if (self->max_x < 0) return; @@ -149,7 +171,7 @@ static void render_max(ObFrame *self, Appearance *a) paint(self->max, a); } -static void render_iconify(ObFrame *self, Appearance *a) +static void obrender_iconify(ObFrame *self, Appearance *a) { if (self->iconify_x < 0) return; @@ -157,7 +179,7 @@ static void render_iconify(ObFrame *self, Appearance *a) paint(self->iconify, a); } -static void render_desk(ObFrame *self, Appearance *a) +static void obrender_desk(ObFrame *self, Appearance *a) { if (self->desk_x < 0) return; @@ -165,7 +187,15 @@ static void render_desk(ObFrame *self, Appearance *a) paint(self->desk, a); } -static void render_close(ObFrame *self, Appearance *a) +static void obrender_shade(ObFrame *self, Appearance *a) +{ + if (self->shade_x < 0) return; + + RECT_SET(a->texture[0].position, 0, 0, BUTTON_SIZE,BUTTON_SIZE); + paint(self->shade, a); +} + +static void obrender_close(ObFrame *self, Appearance *a) { if (self->close_x < 0) return; @@ -173,27 +203,32 @@ static void render_close(ObFrame *self, Appearance *a) paint(self->close, a); } -GQuark get_context(Client *client, Window win) +void render_label(Window win, Size *sz, char *text, + gboolean hilight, gboolean toplevel) { - ObFrame *self; - - if (win == ob_root) return g_quark_try_string("root"); - if (client == NULL) return g_quark_try_string("none"); - if (win == client->window) return g_quark_try_string("client"); - - self = (ObFrame*) client->frame; - if (win == self->frame.window) return g_quark_try_string("frame"); - if (win == self->frame.plate) return g_quark_try_string("client"); - if (win == self->title) return g_quark_try_string("titlebar"); - if (win == self->label) return g_quark_try_string("titlebar"); - if (win == self->handle) return g_quark_try_string("handle"); - if (win == self->lgrip) return g_quark_try_string("blcorner"); - if (win == self->rgrip) return g_quark_try_string("brcorner"); - if (win == self->max) return g_quark_try_string("maximize"); - if (win == self->iconify) return g_quark_try_string("iconify"); - if (win == self->close) return g_quark_try_string("close"); - if (win == self->icon) return g_quark_try_string("icon"); - if (win == self->desk) return g_quark_try_string("alldesktops"); - - return g_quark_try_string("none"); + Appearance *a; + + a = hilight ? ob_app_hilite_label : ob_app_unhilite_label; + a->texture[0].data.text.string = text; + RECT_SET(a->area, 0, 0, sz->width, sz->height); + a->texture[0].position = a->area; + + if (toplevel) { + XSetWindowBorderWidth(ob_display, win, ob_s_bwidth); + XSetWindowBorder(ob_display, win, ob_s_b_color->pixel); + } + + paint(win, a); +} + +void size_label(char *text, gboolean hilight, gboolean toplevel, Size *s) +{ + Appearance *a; + + a = hilight ? ob_app_hilite_label : ob_app_unhilite_label; + a->texture[0].data.text.string = text; + + appearance_minsize(a, s); + s->width += ob_s_bevel * 2; + s->height += ob_s_bevel * 2; }