From f8a47de5ec444c452093371e3db16857eb39a490 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 16 Mar 2003 21:11:39 +0000 Subject: merge the C branch into HEAD --- render/color.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 render/color.c (limited to 'render/color.c') diff --git a/render/color.c b/render/color.c new file mode 100644 index 00000000..83c2aa37 --- /dev/null +++ b/render/color.c @@ -0,0 +1,57 @@ +#include +#include +#include "render.h" +#include "color.h" +#include "../kernel/openbox.h" +void color_allocate_gc(color_rgb *in) +{ + XGCValues gcv; + + gcv.foreground = in->pixel; + gcv.cap_style = CapProjecting; + in->gc = XCreateGC(ob_display, ob_root, GCForeground | GCCapStyle, &gcv); +} + +color_rgb *color_parse(char *colorname) +{ + g_assert(colorname != NULL); + // get rgb values from colorname + + XColor xcol; + xcol.red = 0; + xcol.green = 0; + xcol.blue = 0; + xcol.pixel = 0; + if (!XParseColor(ob_display, render_colormap, colorname, &xcol)) { + g_warning("unable to parse color '%s'", colorname); + return NULL; + } + return color_new(xcol.red >> 8, xcol.green >> 8, xcol.blue >> 8); +} + +color_rgb *color_new(int r, int g, int b) +{ +/* this should be replaced with something far cooler */ + color_rgb *out; + XColor xcol; + xcol.red = (r << 8) | r; + xcol.green = (g << 8) | g; + xcol.blue = (b << 8) | b; + if (XAllocColor(ob_display, render_colormap, &xcol)) { + out = g_new(color_rgb, 1); + out->r = xcol.red >> 8; + out->g = xcol.green >> 8; + out->b = xcol.blue >> 8; + out->gc = None; + out->pixel = xcol.pixel; + return out; + } + return NULL; +} + +void color_free(color_rgb *c) +{ + if (c->gc != None) + XFreeGC(ob_display, c->gc); + free(c); +} -- cgit v1.2.3