2#include "nuklear_internal.h"
10nk_parse_hex(
const char *p,
int length)
14 while (len < length) {
16 if (p[len] >=
'a' && p[len] <=
'f')
17 i += ((p[len] -
'a') + 10);
18 else if (p[len] >=
'A' && p[len] <=
'F')
19 i += ((p[len] -
'A') + 10);
20 else i += (p[len] -
'0');
26nk_rgb_factor(struct
nk_color col, float factor)
30 col.r = (nk_byte)(col.r * factor);
31 col.g = (nk_byte)(col.g * factor);
32 col.b = (nk_byte)(col.b * factor);
36nk_rgba(int r, int g, int b, int a)
39 ret.r = (nk_byte)NK_CLAMP(0, r, 255);
40 ret.g = (nk_byte)NK_CLAMP(0, g, 255);
41 ret.b = (nk_byte)NK_CLAMP(0, b, 255);
42 ret.a = (nk_byte)NK_CLAMP(0, a, 255);
46nk_rgb_hex(const char *rgb)
51 col.r = (nk_byte)nk_parse_hex(c, 2);
52 col.g = (nk_byte)nk_parse_hex(c+2, 2);
53 col.b = (nk_byte)nk_parse_hex(c+4, 2);
58nk_rgba_hex(const char *rgb)
63 col.r = (nk_byte)nk_parse_hex(c, 2);
64 col.g = (nk_byte)nk_parse_hex(c+2, 2);
65 col.b = (nk_byte)nk_parse_hex(c+4, 2);
66 col.a = (nk_byte)nk_parse_hex(c+6, 2);
70nk_color_hex_rgba(
char *output,
struct nk_color col)
72 #define NK_TO_HEX(i) ((i) <= 9 ? '0' + (i): 'A' - 10 + (i))
73 output[0] = (char)NK_TO_HEX((col.r & 0xF0) >> 4);
74 output[1] = (char)NK_TO_HEX((col.r & 0x0F));
75 output[2] = (char)NK_TO_HEX((col.g & 0xF0) >> 4);
76 output[3] = (char)NK_TO_HEX((col.g & 0x0F));
77 output[4] = (char)NK_TO_HEX((col.b & 0xF0) >> 4);
78 output[5] = (char)NK_TO_HEX((col.b & 0x0F));
79 output[6] = (char)NK_TO_HEX((col.a & 0xF0) >> 4);
80 output[7] = (char)NK_TO_HEX((col.a & 0x0F));
85nk_color_hex_rgb(
char *output,
struct nk_color col)
87 #define NK_TO_HEX(i) ((i) <= 9 ? '0' + (i): 'A' - 10 + (i))
88 output[0] = (char)NK_TO_HEX((col.r & 0xF0) >> 4);
89 output[1] = (char)NK_TO_HEX((col.r & 0x0F));
90 output[2] = (char)NK_TO_HEX((col.g & 0xF0) >> 4);
91 output[3] = (char)NK_TO_HEX((col.g & 0x0F));
92 output[4] = (char)NK_TO_HEX((col.b & 0xF0) >> 4);
93 output[5] = (char)NK_TO_HEX((col.b & 0x0F));
98nk_rgba_iv(const int *c)
100 return nk_rgba(c[0], c[1], c[2], c[3]);
103nk_rgba_bv(const nk_byte *c)
105 return nk_rgba(c[0], c[1], c[2], c[3]);
108nk_rgb(int r, int g, int b)
111 ret.r = (nk_byte)NK_CLAMP(0, r, 255);
112 ret.g = (nk_byte)NK_CLAMP(0, g, 255);
113 ret.b = (nk_byte)NK_CLAMP(0, b, 255);
114 ret.a = (nk_byte)255;
118nk_rgb_iv(const int *c)
120 return nk_rgb(c[0], c[1], c[2]);
123nk_rgb_bv(const nk_byte* c)
125 return nk_rgb(c[0], c[1], c[2]);
128nk_rgba_u32(nk_uint in)
132 ret.g = ((in >> 8) & 0xFF);
133 ret.b = ((in >> 16) & 0xFF);
134 ret.a = (nk_byte)((in >> 24) & 0xFF);
138nk_rgba_f(float r, float g, float b, float a)
141 ret.r = (nk_byte)(NK_SATURATE(r) * 255.0f);
142 ret.g = (nk_byte)(NK_SATURATE(g) * 255.0f);
143 ret.b = (nk_byte)(NK_SATURATE(b) * 255.0f);
144 ret.a = (nk_byte)(NK_SATURATE(a) * 255.0f);
148nk_rgba_fv(const float *c)
150 return nk_rgba_f(c[0], c[1], c[2], c[3]);
155 return nk_rgba_f(c.r, c.g, c.b, c.a);
158nk_rgb_f(float r, float g, float b)
161 ret.r = (nk_byte)(NK_SATURATE(r) * 255.0f);
162 ret.g = (nk_byte)(NK_SATURATE(g) * 255.0f);
163 ret.b = (nk_byte)(NK_SATURATE(b) * 255.0f);
168nk_rgb_fv(const float *c)
170 return nk_rgb_f(c[0], c[1], c[2]);
175 return nk_rgb_f(c.r, c.g, c.b);
178nk_hsv(int h, int s, int v)
180 return nk_hsva(h, s, v, 255);
183nk_hsv_iv(const int *c)
185 return nk_hsv(c[0], c[1], c[2]);
188nk_hsv_bv(const nk_byte *c)
190 return nk_hsv(c[0], c[1], c[2]);
193nk_hsv_f(float h, float s, float v)
195 return nk_hsva_f(h, s, v, 1.0f);
198nk_hsv_fv(const float *c)
200 return nk_hsv_f(c[0], c[1], c[2]);
203nk_hsva(int h, int s, int v, int a)
205 float hf = ((float)NK_CLAMP(0, h, 255)) / 255.0f;
206 float sf = ((float)NK_CLAMP(0, s, 255)) / 255.0f;
207 float vf = ((float)NK_CLAMP(0, v, 255)) / 255.0f;
208 float af = ((float)NK_CLAMP(0, a, 255)) / 255.0f;
209 return nk_hsva_f(hf, sf, vf, af);
212nk_hsva_iv(const int *c)
214 return nk_hsva(c[0], c[1], c[2], c[3]);
217nk_hsva_bv(const nk_byte *c)
219 return nk_hsva(c[0], c[1], c[2], c[3]);
222nk_hsva_colorf(float h, float s, float v, float a)
228 out.r = v; out.g = v; out.b = v; out.a = a;
231 h = h / (60.0f/360.0f);
235 q = v * (1.0f - (s * f));
236 t = v * (1.0f - s * (1.0f - f));
239 case 0:
default: out.r = v; out.g = t; out.b = p;
break;
240 case 1: out.r = q; out.g = v; out.b = p;
break;
241 case 2: out.r = p; out.g = v; out.b = t;
break;
242 case 3: out.r = p; out.g = q; out.b = v;
break;
243 case 4: out.r = t; out.g = p; out.b = v;
break;
244 case 5: out.r = v; out.g = p; out.b = q;
break;}
249nk_hsva_colorfv(const float *c)
251 return nk_hsva_colorf(c[0], c[1], c[2], c[3]);
254nk_hsva_f(float h, float s, float v, float a)
256 struct nk_colorf c = nk_hsva_colorf(h, s, v, a);
257 return nk_rgba_f(c.r, c.g, c.b, c.a);
260nk_hsva_fv(const float *c)
262 return nk_hsva_f(c[0], c[1], c[2], c[3]);
267 nk_uint out = (nk_uint)in.r;
268 out |= ((nk_uint)in.g << 8);
269 out |= ((nk_uint)in.b << 16);
270 out |= ((nk_uint)in.a << 24);
274nk_color_f(
float *r,
float *g,
float *b,
float *a,
struct nk_color in)
276 NK_STORAGE
const float s = 1.0f/255.0f;
277 *r = (float)in.r * s;
278 *g = (float)in.g * s;
279 *b = (float)in.b * s;
280 *a = (float)in.a * s;
283nk_color_fv(
float *c,
struct nk_color in)
285 nk_color_f(&c[0], &c[1], &c[2], &c[3], in);
291 nk_color_f(&o.r, &o.g, &o.b, &o.a, in);
295nk_color_d(
double *r,
double *g,
double *b,
double *a,
struct nk_color in)
297 NK_STORAGE
const double s = 1.0/255.0;
298 *r = (double)in.r * s;
299 *g = (double)in.g * s;
300 *b = (double)in.b * s;
301 *a = (double)in.a * s;
304nk_color_dv(
double *c,
struct nk_color in)
306 nk_color_d(&c[0], &c[1], &c[2], &c[3], in);
309nk_color_hsv_f(
float *out_h,
float *out_s,
float *out_v,
struct nk_color in)
312 nk_color_hsva_f(out_h, out_s, out_v, &a, in);
315nk_color_hsv_fv(
float *out,
struct nk_color in)
318 nk_color_hsva_f(&out[0], &out[1], &out[2], &a, in);
321nk_colorf_hsva_f(
float *out_h,
float *out_s,
322 float *out_v,
float *out_a,
struct nk_colorf in)
327 const float t = in.g; in.g = in.b; in.b = t;
331 const float t = in.r; in.r = in.g; in.g = t;
334 chroma = in.r - ((in.g < in.b) ? in.g: in.b);
335 *out_h = NK_ABS(K + (in.g - in.b)/(6.0f * chroma + 1e-20f));
336 *out_s = chroma / (in.r + 1e-20f);
342nk_colorf_hsva_fv(
float *hsva,
struct nk_colorf in)
344 nk_colorf_hsva_f(&hsva[0], &hsva[1], &hsva[2], &hsva[3], in);
347nk_color_hsva_f(
float *out_h,
float *out_s,
348 float *out_v,
float *out_a,
struct nk_color in)
351 nk_color_f(&col.r,&col.g,&col.b,&col.a, in);
352 nk_colorf_hsva_f(out_h, out_s, out_v, out_a, col);
355nk_color_hsva_fv(
float *out,
struct nk_color in)
357 nk_color_hsva_f(&out[0], &out[1], &out[2], &out[3], in);
360nk_color_hsva_i(
int *out_h,
int *out_s,
int *out_v,
364 nk_color_hsva_f(&h, &s, &v, &a, in);
365 *out_h = (nk_byte)(h * 255.0f);
366 *out_s = (nk_byte)(s * 255.0f);
367 *out_v = (nk_byte)(v * 255.0f);
368 *out_a = (nk_byte)(a * 255.0f);
371nk_color_hsva_iv(
int *out,
struct nk_color in)
373 nk_color_hsva_i(&out[0], &out[1], &out[2], &out[3], in);
376nk_color_hsva_bv(nk_byte *out,
struct nk_color in)
379 nk_color_hsva_i(&tmp[0], &tmp[1], &tmp[2], &tmp[3], in);
380 out[0] = (nk_byte)tmp[0];
381 out[1] = (nk_byte)tmp[1];
382 out[2] = (nk_byte)tmp[2];
383 out[3] = (nk_byte)tmp[3];
386nk_color_hsva_b(nk_byte *h, nk_byte *s, nk_byte *v, nk_byte *a,
struct nk_color in)
389 nk_color_hsva_i(&tmp[0], &tmp[1], &tmp[2], &tmp[3], in);
390 *h = (nk_byte)tmp[0];
391 *s = (nk_byte)tmp[1];
392 *v = (nk_byte)tmp[2];
393 *a = (nk_byte)tmp[3];
396nk_color_hsv_i(
int *out_h,
int *out_s,
int *out_v,
struct nk_color in)
399 nk_color_hsva_i(out_h, out_s, out_v, &a, in);
402nk_color_hsv_b(nk_byte *out_h, nk_byte *out_s, nk_byte *out_v,
struct nk_color in)
405 nk_color_hsva_i(&tmp[0], &tmp[1], &tmp[2], &tmp[3], in);
406 *out_h = (nk_byte)tmp[0];
407 *out_s = (nk_byte)tmp[1];
408 *out_v = (nk_byte)tmp[2];
411nk_color_hsv_iv(
int *out,
struct nk_color in)
413 nk_color_hsv_i(&out[0], &out[1], &out[2], in);
416nk_color_hsv_bv(nk_byte *out,
struct nk_color in)
419 nk_color_hsv_i(&tmp[0], &tmp[1], &tmp[2], in);
420 out[0] = (nk_byte)tmp[0];
421 out[1] = (nk_byte)tmp[1];
422 out[2] = (nk_byte)tmp[2];
main API and documentation file