X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=render%2Frender.c;h=d34ddccb1df921cb2704ee7e297a0772e031749a;hb=b190fb6bb6dffca826e48748817f52b9f3ae7c54;hp=a1120570dc304d1ae0174e4d625fbe87eb46353b;hpb=b37a8b7e764c770e5b913116a2e3330b23ff4f67;p=chaz%2Fopenbox diff --git a/render/render.c b/render/render.c index a1120570..d34ddccb 100644 --- a/render/render.c +++ b/render/render.c @@ -2,7 +2,7 @@ render.c for the Openbox window manager Copyright (c) 2006 Mikael Magnusson - Copyright (c) 2003 Ben Jansens + Copyright (c) 2003-2007 Dana Jansens Copyright (c) 2003 Derek Foreman This program is free software; you can redistribute it and/or modify @@ -344,52 +344,85 @@ void RrMargins (RrAppearance *a, gint *l, gint *t, gint *r, gint *b) } } -void RrMinsize(RrAppearance *a, gint *w, gint *h) +void RrMinSize(RrAppearance *a, gint *w, gint *h) +{ + *w = RrMinWidth(a); + *h = RrMinHeight(a); +} + +gint RrMinWidth(RrAppearance *a) { gint i; RrSize *m; gint l, t, r, b; - *w = *h = 0; + gint w = 0; for (i = 0; i < a->textures; ++i) { switch (a->texture[i].type) { case RR_TEXTURE_NONE: break; case RR_TEXTURE_MASK: - *w = MAX(*w, a->texture[i].data.mask.mask->width); - *h = MAX(*h, a->texture[i].data.mask.mask->height); + w = MAX(w, a->texture[i].data.mask.mask->width); break; case RR_TEXTURE_TEXT: m = RrFontMeasureString(a->texture[i].data.text.font, a->texture[i].data.text.string, a->texture[i].data.text.shadow_offset_x, a->texture[i].data.text.shadow_offset_y); - *w = MAX(*w, m->width + 4); - m->height = RrFontHeight(a->texture[i].data.text.font, - a->texture[i].data.text.shadow_offset_y); - *h += MAX(*h, m->height); + w = MAX(w, m->width); g_free(m); break; case RR_TEXTURE_RGBA: - *w += MAX(*w, a->texture[i].data.rgba.width); - *h += MAX(*h, a->texture[i].data.rgba.height); + w += MAX(w, a->texture[i].data.rgba.width); + break; + case RR_TEXTURE_LINE_ART: + w += MAX(w, MAX(a->texture[i].data.lineart.x1, + a->texture[i].data.lineart.x2)); + break; + } + } + + RrMargins(a, &l, &t, &r, &b); + + w += l + r; + + if (w < 1) w = 1; + return w; +} + +gint RrMinHeight(RrAppearance *a) +{ + gint i; + gint l, t, r, b; + gint h = 0; + + for (i = 0; i < a->textures; ++i) { + switch (a->texture[i].type) { + case RR_TEXTURE_NONE: + break; + case RR_TEXTURE_MASK: + h = MAX(h, a->texture[i].data.mask.mask->height); + break; + case RR_TEXTURE_TEXT: + h += MAX(h, RrFontHeight(a->texture[i].data.text.font, + a->texture[i].data.text.shadow_offset_y)); + break; + case RR_TEXTURE_RGBA: + h += MAX(h, a->texture[i].data.rgba.height); break; case RR_TEXTURE_LINE_ART: - *w += MAX(*w, MAX(a->texture[i].data.lineart.x1, - a->texture[i].data.lineart.x2)); - *h += MAX(*h, MAX(a->texture[i].data.lineart.y1, - a->texture[i].data.lineart.y2)); + h += MAX(h, MAX(a->texture[i].data.lineart.y1, + a->texture[i].data.lineart.y2)); break; } } RrMargins(a, &l, &t, &r, &b); - *w += l + r; - *h += t + b; + h += t + b; - if (*w < 1) *w = 1; - if (*h < 1) *h = 1; + if (h < 1) h = 1; + return h; } static void reverse_bits(gchar *c, gint n)