From: Dana Jansens Date: Sun, 6 Apr 2003 06:19:36 +0000 (+0000) Subject: add function to give the minimum size of an appearance to fully render it's data X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=8d08de4bb62ad9a114488e4ca281d4dcc03d84d9;p=chaz%2Fopenbox add function to give the minimum size of an appearance to fully render it's data --- diff --git a/render/render.c b/render/render.c index 71bf7fa3..0e4d244e 100644 --- a/render/render.c +++ b/render/render.c @@ -7,7 +7,7 @@ #include "mask.h" #include "color.h" #include "image.h" -#include "../kernel/openbox.h" +#include "kernel/openbox.h" int render_depth; Visual *render_visual; @@ -385,3 +385,43 @@ void pixel32_to_pixmap(pixel32 *in, Pixmap out, int x, int y, int w, int h) im->data = NULL; XDestroyImage(im); } + +void appearance_minsize(Appearance *l, Size *s) +{ + int i; + SIZE_SET(*s, 0, 0); + + switch (l->surface.type) { + case Surface_Planar: + if (l->surface.data.planar.border || + l->surface.data.planar.bevel == Bevel1) + SIZE_SET(*s, 2, 2); + else if (l->surface.data.planar.bevel == Bevel2) + SIZE_SET(*s, 4, 4); + + for (i = 0; i < l->textures; ++i) + switch (l->texture[i].type) { + case Bitmask: + s->width += l->texture[i].data.mask.mask->w; + s->height += l->texture[i].data.mask.mask->h; + break; + case Text: + s->width +=font_measure_string(l->texture[i].data.text.font, + l->texture[i].data.text.string, + l->texture[i].data.text.shadow, + l->texture[i].data.text.offset); + s->height += font_height(l->texture[i].data.text.font, + l->texture[i].data.text.shadow, + l->texture[i].data.text.offset); + break; + case RGBA: + s->width += l->texture[i].data.rgba.width; + s->height += l->texture[i].data.rgba.height; + break; + case NoTexture: + break; + } + break; + } + return s; +} diff --git a/render/render.h b/render/render.h index e282740e..1a41b219 100644 --- a/render/render.h +++ b/render/render.h @@ -156,4 +156,6 @@ void truecolor_startup(void); void pseudocolor_startup(void); void pixel32_to_pixmap(pixel32 *in, Pixmap out, int x, int y, int w, int h); +void appearance_minsize(Appearance *l, Size *s); + #endif /*__render_h*/