aboutsummaryrefslogtreecommitdiff
path: root/include/BH
diff options
context:
space:
mode:
Diffstat (limited to 'include/BH')
-rw-r--r--include/BH/Color.h151
1 files changed, 151 insertions, 0 deletions
diff --git a/include/BH/Color.h b/include/BH/Color.h
new file mode 100644
index 0000000..1fb2d73
--- /dev/null
+++ b/include/BH/Color.h
@@ -0,0 +1,151 @@
+#ifndef BH_COLOR_H
+#define BH_COLOR_H
+
+
+#include "Common.h"
+
+
+#define BH_COLOR_TYPE_RGBA 0x0000
+#define BH_COLOR_TYPE_HSVA 0x0001
+#define BH_COLOR_TYPE_HSLA 0x0002
+
+
+#define BH_COLOR_MODE_NORMAL 0x0000
+#define BH_COLOR_MODE_MULTIPLY 0x0001
+#define BH_COLOR_MODE_SCREEN 0x0002
+#define BH_COLOR_MODE_OVERLAY 0x0003
+#define BH_COLOR_MODE_DARKEN 0x0004
+#define BH_COLOR_MODE_LIGHTEN 0x0005
+#define BH_COLOR_MODE_COLOR_DODGE 0x0006
+#define BH_COLOR_MODE_COLOR_BURN 0x0007
+#define BH_COLOR_MODE_LINEAR_DODGE 0x0008
+#define BH_COLOR_MODE_LINEAR_BURN 0x0009
+#define BH_COLOR_MODE_HARD_LIGHT 0x000A
+#define BH_COLOR_MODE_SOFT_LIGHT 0x000B
+#define BH_COLOR_MODE_DIFFERENCE 0x000C
+#define BH_COLOR_MODE_EXCLUSION 0x000D
+#define BH_COLOR_MODE_HUE 0x000E
+#define BH_COLOR_MODE_SATURATION 0x000F
+#define BH_COLOR_MODE_COLOR 0x0010
+#define BH_COLOR_MODE_LUMINOSITY 0x0011
+
+
+typedef struct BH_Color
+{
+ int type;
+ union
+ {
+ struct
+ {
+ uint16_t r;
+ uint16_t g;
+ uint16_t b;
+ uint16_t a;
+ } rgba;
+ struct
+ {
+ uint16_t h;
+ uint16_t s;
+ uint16_t v;
+ uint16_t a;
+ } hsva;
+ struct
+ {
+ uint16_t h;
+ uint16_t s;
+ uint16_t l;
+ uint16_t a;
+ } hsla;
+ } data;
+} BH_Color;
+
+
+void BH_ColorRGBA8(const BH_Color *color,
+ uint8_t *r,
+ uint8_t *g,
+ uint8_t *b,
+ uint8_t *a);
+
+
+void BH_ColorRGBA16(const BH_Color *color,
+ uint16_t *r,
+ uint16_t *g,
+ uint16_t *b,
+ uint16_t *a);
+
+
+void BH_ColorRGBAf(const BH_Color *color,
+ float *r,
+ float *g,
+ float *b,
+ float *a);
+
+
+void BH_ColorSetRGBA8(BH_Color *color,
+ uint8_t r,
+ uint8_t g,
+ uint8_t b,
+ uint8_t a);
+
+
+void BH_ColorSetRGBA16(BH_Color *color,
+ uint16_t r,
+ uint16_t g,
+ uint16_t b,
+ uint16_t a);
+
+
+void BH_ColorSetRGBAf(BH_Color *color,
+ float r,
+ float g,
+ float b,
+ float a);
+
+
+void BH_ColorHSVAf(const BH_Color *color,
+ float *h,
+ float *s,
+ float *v,
+ float *a);
+
+
+void BH_ColorSetHSVAf(BH_Color *color,
+ float h,
+ float s,
+ float v,
+ float a);
+
+
+void BH_ColorHSLAf(const BH_Color *color,
+ float *h,
+ float *s,
+ float *l,
+ float *a);
+
+
+void BH_ColorSetHSLAf(BH_Color *color,
+ float h,
+ float s,
+ float l,
+ float a);
+
+
+void BH_ColorToRGBA(const BH_Color *color,
+ BH_Color *out);
+
+
+void BH_ColorToHSVA(const BH_Color *color,
+ BH_Color *out);
+
+
+void BH_ColorToHSLA(const BH_Color *color,
+ BH_Color *out);
+
+
+void BH_ColorBlend(const BH_Color *foreground,
+ const BH_Color *background,
+ int mode,
+ BH_Color *dest);
+
+
+#endif /* BH_COLOR_H */