aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2014-09-10 21:38:36 +0000
committerDimitri Sokolyuk <demon@dim13.org>2014-09-10 21:38:36 +0000
commitd27da65f2952cbfdf755cbcd8838e174ff5d5f06 (patch)
tree58b32f9653f054a1074282478e075cafdd80c9ac
parentce4c20d0acc9cec5551934131feae7ecd11ddedf (diff)
split code
-rw-r--r--cms.c49
-rw-r--r--cms.h12
-rw-r--r--widget.c45
-rw-r--r--widget.h10
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 <X11/Xlib.h>
+
+#include <assert.h>
#include <stdint.h>
+#include <stdlib.h>
#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);