From d27da65f2952cbfdf755cbcd8838e174ff5d5f06 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 10 Sep 2014 21:38:36 +0000 Subject: split code --- cms.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- cms.h | 12 ++---------- widget.c | 45 ++------------------------------------------- widget.h | 10 ---------- 4 files changed, 51 insertions(+), 65 deletions(-) diff --git a/cms.c b/cms.c index 435089a..0f30dab 100644 --- a/cms.c +++ b/cms.c @@ -20,11 +20,16 @@ * output: R, G, B 0..65535 */ +#include + +#include #include +#include #include "cms.h" -void +#if 0 +static void hsv2rgb(unsigned short *r, unsigned short *g, unsigned short *b, double h, double s, double v) { @@ -65,13 +70,14 @@ hsv2rgb(unsigned short *r, unsigned short *g, unsigned short *b, *r = *g = *b = UINT16_MAX * v; } } +#endif /* * input: H 0..360, S 0..100, L 0..100 * output: R, G, B 0..65535 */ -void +static void hsl2rgb(unsigned short *r, unsigned short *g, unsigned short *b, double h, double s, double l) { @@ -114,3 +120,42 @@ hsl2rgb(unsigned short *r, unsigned short *g, unsigned short *b, *r = *g = *b = UINT16_MAX * l; } } + +unsigned long +hslcolor(Display *d, double h, double s, double l) +{ + int scr = DefaultScreen(d); + Colormap cmap = DefaultColormap(d, scr); + XColor c; + + hsl2rgb(&c.red, &c.green, &c.blue, h, s, l); + c.flags = DoRed|DoGreen|DoBlue; + + XAllocColor(d, cmap, &c); + + return c.pixel; +} + +unsigned long * +init_palette(Display *d, struct palette pal, int n) +{ + unsigned long *p; + float hstep, sstep, lstep; + int i; + + p = calloc(n, sizeof(unsigned long)); + assert(p); + + hstep = (pal.to.h - pal.from.h) / (n - 1); + sstep = (pal.to.s - pal.from.s) / (n - 1); + lstep = (pal.to.l - pal.from.l) / (n - 1); + + for (i = 0; i < n; i++) { + p[i] = hslcolor(d, pal.from.h, pal.from.s, pal.from.l); + pal.from.h += hstep; + pal.from.s += sstep; + pal.from.l += lstep; + } + + return p; +} diff --git a/cms.h b/cms.h index e98f576..aa1083a 100644 --- a/cms.h +++ b/cms.h @@ -18,7 +18,6 @@ #ifndef __CMS_H #define __CMS_H -/* struct hsl { double h, s, l; }; @@ -26,17 +25,10 @@ struct hsl { struct palette { struct hsl from, to; }; - */ __BEGIN_DECLS -void hsv2rgb( - unsigned short *r, unsigned short *g, unsigned short *b, - double h, double s, double v -); -void hsl2rgb( - unsigned short *r, unsigned short *g, unsigned short *b, - double h, double s, double l -); +unsigned long *init_palette(Display *, struct palette, int); +unsigned long hslcolor(Display *, double h, double s, double l); __END_DECLS #endif diff --git a/widget.c b/widget.c index e0b9921..04d1390 100644 --- a/widget.c +++ b/widget.c @@ -27,48 +27,6 @@ struct palette p_spectr = {{ 120.0, 100.0, 75.0 }, { 0.0, 100.0, 25.0 }}; struct palette p_shadow = {{ 120.0, 100.0, 10.0 }, { 0.0, 100.0, 10.0 }}; struct palette p_waterfall = {{ 210.0, 75.0, 0.0 }, { 180.0, 100.0, 100.0 }}; -struct hsl hsl_gray = {0.0, 0.0, 20.0}; - -unsigned long -hslcolor(Display *d, struct hsl hsl) -{ - int scr = DefaultScreen(d); - Colormap cmap = DefaultColormap(d, scr); - XColor c; - - hsl2rgb(&c.red, &c.green, &c.blue, hsl.h, hsl.s, hsl.l); - c.flags = DoRed|DoGreen|DoBlue; - - XAllocColor(d, cmap, &c); - - return c.pixel; -} - -unsigned long * -init_palette(Display *d, struct palette pal, int n) -{ - unsigned long *p; - float hstep, sstep, lstep; - int i; - - p = calloc(n, sizeof(unsigned long)); - assert(p); - - hstep = (pal.to.h - pal.from.h) / (n - 1); - sstep = (pal.to.s - pal.from.s) / (n - 1); - lstep = (pal.to.l - pal.from.l) / (n - 1); - - for (i = 0; i < n; i++) { - p[i] = hslcolor(d, pal.from); - pal.from.h += hstep; - pal.from.s += sstep; - pal.from.l += lstep; - } - - return p; -} - - static void blit(Display *d, Drawable p, GC gc, XRectangle r) { @@ -217,7 +175,8 @@ init_panel(Display *d, Window win, XRectangle r, enum mirror m) struct panel *p; int scr = DefaultScreen(d); unsigned long white = WhitePixel(d, scr); - unsigned long gray = hslcolor(d, hsl_gray); + unsigned long gray = hslcolor(d, 0.0, 0.0, 20.0); + unsigned long *palette; unsigned int maxval = r.height / 4; XRectangle geo; diff --git a/widget.h b/widget.h index 002db22..8642fa0 100644 --- a/widget.h +++ b/widget.h @@ -47,19 +47,9 @@ struct panel { unsigned long *palette; }; -struct hsl { - float h, s, l; -}; - -struct palette { - struct hsl from, to; -}; - enum mirror { LTR, RTL }; __BEGIN_DECLS -unsigned long hslcolor(Display *, struct hsl); -unsigned long *init_palette(Display *, struct palette, int); void draw_panel(Display *, struct panel *); void flip_panel(Display *, struct panel *); struct panel *init_panel(Display *, Window, XRectangle, enum mirror); -- cgit v1.2.3