slider1:0<0,255,1>|-------------------- R
slider2:0<0,255,1>G
slider3:0<0,255,1>B
slider4:0<0,360,1>|-------------------- H
slider5:1<0,1,0.001>S
slider6:0.5<0,1,0.001>L
slider7:0<0,16777215,1>|-------- Decimals
slider8:0<0,1,0.00001>|------------- R (gfx)
slider9:0<0,1,0.000001>G (gfx)
slider10:0<0,1,0.000001>B (gfx)
slider11:0<0,255,1>|------- Grayscale
slider12:4<0,4,1{RGB,HSL,Decimals,RGB (gfx),Mouse}>Mode
slider13:0<0,1,1{off,on}>Grayscale
slider14:150<0,400,1>--Pos X
slider15:10<0,100,1>--Pos Y
slider16:1<0.5,4,0.1>Zoom
slider17:0<0,11,1>Image

filename:0,color_tool_gfx/001.png
filename:1,color_tool_gfx/002.png
filename:2,color_tool_gfx/003.png
filename:3,color_tool_gfx/004.png
filename:4,color_tool_gfx/005.png
filename:5,color_tool_gfx/006.png
filename:6,color_tool_gfx/007.png
filename:7,color_tool_gfx/008.png
filename:8,color_tool_gfx/009.png
filename:9,color_tool_gfx/010.png
filename:10,color_tool_gfx/011.png
filename:11,color_tool_gfx/012.png
// ...add more images. Update slider17 !!!

in_pin:none
out_pin:none

@init
// RGB <-> HSL
function round(value)(
floor(value + 0.5);
);
function roundto(val,to)(
round(val/to)*to;
);
function mod(val,mod)(
//abs(roundto(val,mod) - val);
(val - floor(val/mod)*mod);
);

// RGB to HEX
hextab = 0;
i=0;
loop(10,hextab[i] = $'0' + i; i+=1; );
loop(6,hextab[i] = $'A' + i - 10; i+=1; );

luma=1;

@slider
slider7=floor(slider7);

@block
slider12==0?(

// RGB to RGB(gfx)
R=slider1/255;
G=slider2/255;
B=slider3/255;

// RGB to HSL
min = min(min(R,G),B);
max = max(max(R,G),B);
C = max-min;
L = (min+max)*0.5;
S = C / (L < 0.5 ? max+min : 2-max-min);
H = R == max ? (G-B)/C: 
G == max ? 2+(B-R)/C : 4+(R-G)/C;
H < 0 ? H+=6;

slider4=round(H*60);
slider5=S;
slider6=L;

// RGB to decimals
slider7=(slider1 << 16) + (slider2 << 8) + slider3;

// Grayscale
slider11=round(0.299*slider1 + 0.587*slider2 + 0.114*slider3);
slider11>140?luma=0:luma=1;

// RGB to RGB(gfx)
slider8=slider1/255;
slider9=slider2/255;
slider10=slider3/255;
);

slider12==1?(

H=slider4;
S=slider5;
L=slider6;

// HSL to RGB
S == 0 ? R=G=B=L : (
C = S * (1 - abs(2*L-1));
X = C * (1 - abs(mod(H/60,2) - 1));
m = L - C*0.5;
H < 60 ? (R=C; G=X; B=0):
H < 120 ? (R=X; G=C; B=0):
H < 180 ? (R=0; G=C; B=X):
H < 240 ? (R=0; G=X; B=C):
H < 300 ? (R=X; G=0; B=C):
(R=C; G=0; B=X);
R+=m; B+=m; G+=m;
);

slider1=round(R*255);
slider2=round(G*255);
slider3=round(B*255);

// RGB to decimals
slider7=(slider1 << 16) + (slider2 << 8) + slider3;

// Grayscale
slider11=round(0.299*slider1 + 0.587*slider2 + 0.114*slider3);
slider11>140?luma=0:luma=1;

// RGB to RGB(gfx)
slider8=slider1/255;
slider9=slider2/255;
slider10=slider3/255;
);

slider12==2?(

// decimals to RGB
R=floor(slider7/ 65536);
slider1=R;
sliderchange(slider1);
G=floor((slider7 - (65536 * R)) / 256);
slider2=G;
sliderchange(slider2);
B=slider7 - (65536 * R + 256 * G);
slider3=floor(B);
sliderchange(slider3);

// RGB to RGB(gfx)
slider8=slider1/255;
slider9=slider2/255;
slider10=slider3/255;

// RGB to HSL
min = min(min(slider8,slider9),slider10);
max = max(max(slider8,slider9),slider10);
C = max-min;
L = (min+max)*0.5;
S = C / (L < 0.5 ? max+min : 2-max-min);
H = slider8 == max ? (slider9-slider10)/C: 
G == max ? 2+(slider10-slider8)/C : 4+(slider8-slider9)/C;
H < 0 ? H+=6;

slider4=round(H*60);
slider5=S;
slider6=L;

// Grayscale
slider11=round(0.299*slider1 + 0.587*slider2 + 0.114*slider3);
slider11>140?luma=0:luma=1;
);

slider12==3?(

// RGB to HSL
R=slider8;
G=slider9;
B=slider10;

min = min(min(R,G),B);
max = max(max(R,G),B);
C = max-min;
L = (min+max)*0.5;
S = C / (L < 0.5 ? max+min : 2-max-min);
H = R == max ? (G-B)/C: 
G == max ? 2+(B-R)/C : 4+(R-G)/C;
H < 0 ? H+=6;

slider4=round(H*60);
slider5=S;
slider6=L;

// RGB(gfx) to RGB
slider1 = round(R*255);
sliderchange(slider1);
slider2 = round(G*255);
sliderchange(slider2);
slider3 = round(B*255);
sliderchange(slider3);

// RGB to decimals
slider7=(slider1 << 16) + (slider2 << 8) + slider3;

// Grayscale
slider11=round(0.299*slider1 + 0.587*slider2 + 0.114*slider3);
slider11>140?luma=0:luma=1;
);

// RGB to HEX
rx=slider1;
gx=slider2;
bx=slider3;

x1=rx/16;
y1=rx%=16;
x2=gx/16;
y2=gx%=16;
x3=bx/16;
y3=bx%=16;

@gfx 0 210
gfx_a =1;
slider13 ? (
z=0.299*slider1/255 + 0.587*slider2/255 + 0.114*slider3/255;
gfx_r=gfx_g=gfx_b=z;
):(
gfx_r=slider8;gfx_g=slider9;gfx_b=slider10;
);
gfx_x=0;gfx_y=0;
gfx_rectto(gfx_w,gfx_h);

slider12==4?(
gfx_a=1;
gfx_r=gfx_g=gfx_b=0;
(mouse_cap) == 2 ?
(
gfx_x=mouse_x;
gfx_y=mouse_y;
slider14=mouse_x;
slider15=mouse_y;
):(
gfx_x=slider14;
gfx_y=slider15;
);
gfx_getimgdim(slider17,w,h);
gfx_blit(slider17,slider16,0);

(mouse_cap) == 1 ?
(
((mouse_x < slider14+w*slider16) && (mouse_y < slider15+h*slider16) && (mouse_x > slider14) && (mouse_y > slider15)) ?
(
gfx_x = mouse_x;
gfx_y = mouse_y;

gfx_getpixel(slider8,slider9,slider10);

R=slider8;
G=slider9;
B=slider10;
slider1=round(R*255);
slider2=round(G*255);
slider3=round(B*255);

min = min(min(R,G),B);
max = max(max(R,G),B);
C = max-min;
L = (min+max)*0.5;
S = C / (L < 0.5 ? max+min : 2-max-min);
H = R == max ? (G-B)/C :
G == max ? 2+(B-R)/C : 4+(R-G)/C;
H < 0 ? H+=6;

slider4=round(H*60);
slider5=S;
slider6=L;

slider7=(slider1 << 16) + (slider2 << 8) + slider3;

slider11=round(0.299*slider1 + 0.587*slider2 + 0.114*slider3);
slider11>140?luma=0:luma=1;
);
);

// ???
sliderchange(slider1);
sliderchange(slider2);
sliderchange(slider3);

sliderchange(slider4);
sliderchange(slider5);
sliderchange(slider6);

sliderchange(slider7);
sliderchange(slider11);

sliderchange(slider8);
sliderchange(slider9);
sliderchange(slider10);

// RGB
gfx_x=gfx_w-145;
gfx_y=gfx_h-gfx_texth-2;
gfx_r=gfx_g=gfx_b=0;
gfx_a=1;
gfx_rectto(gfx_w,gfx_h);

gfx_x=gfx_w-143;
gfx_y=gfx_h-gfx_texth;
gfx_r=gfx_g=gfx_b=1;
gfx_drawstr("R:");
gfx_drawnumber(slider1,0);

gfx_x=gfx_w-92;
gfx_y=gfx_h-gfx_texth;
gfx_r=gfx_g=gfx_b=1;
gfx_drawstr("G:");
gfx_drawnumber(slider2,0);

gfx_x=gfx_w-41;
gfx_y=gfx_h-gfx_texth;
gfx_r=gfx_g=gfx_b=1;
gfx_drawstr("B:");
gfx_drawnumber(slider3,0);
);

// HEX
gfx_x=0;
gfx_y=gfx_h-gfx_texth-2;
gfx_r=gfx_g=gfx_b=0;
gfx_a=1;
gfx_rectto(56,gfx_h);

gfx_r=gfx_g=gfx_b=1;
gfx_x=2;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[x1]);
gfx_x=10;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[y1]);
gfx_x=20;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[x2]);
gfx_x=28;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[y2]);
gfx_x=38;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[x3]);
gfx_x=46;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[y3]);

// Contrast
gfx_x=gfx_w-52;
gfx_y=gfx_texth-2;
gfx_r=gfx_g=gfx_b=luma; gfx_a=1;
gfx_printf("Walter");
