summaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-04-06 06:19:36 +0000
committerDana Jansens <danakj@orodu.net>2003-04-06 06:19:36 +0000
commit8d08de4bb62ad9a114488e4ca281d4dcc03d84d9 (patch)
tree8dc02ab2c338015b074eec62cf92edefc30d82f0 /render
parent852f36235eee5f3414430d1b89e91b1ba68db666 (diff)
add function to give the minimum size of an appearance to fully render it's data
Diffstat (limited to 'render')
-rw-r--r--render/render.c42
-rw-r--r--render/render.h2
2 files changed, 43 insertions, 1 deletions
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*/