Display RGB hex instead of HSV

main
noah metz 2024-11-12 23:56:30 -07:00
parent 12019ada57
commit 89bd65f649
2 changed files with 40 additions and 7 deletions

@ -21,7 +21,7 @@ layout(location = 0) out vec4 outColor;
vec4 hsv_to_rgb(vec4 hsv) {
float C = hsv[1] * hsv[2];
float H = hsv[0]*6;
float H = hsv[0]*6;
float X = C * (1 - abs(mod(H, 2) - 1));
vec4 temp;
if(0 <= H && H <= 1) {

@ -97,12 +97,45 @@ uint32_t add_hex_region(ClientContext* context) {
#define COLOR_PICK_CONTAINER_ID 0x03
void rgb_string_set(ClientContext* context, float r, float g, float b) {
void hsv_to_rgb(vec3 hsv, vec3 rgb) {
float C = hsv[1] * hsv[2];
float H = hsv[0]*6;
float X = C * (1 - fabs((H - 2 * floor( H / 2 )) - 1));
vec4 temp = {0, 0, 0, 0};
if(0 <= H && H <= 1) {
temp[0] = C;
temp[1] = X;
} else if(1 <= H && H <= 2) {
temp[0] = X;
temp[1] = C;
} else if(2 <= H && H <= 3) {
temp[1] = C;
temp[2] = X;
} else if(3 <= H && H <= 4) {
temp[1] = X;
temp[2] = C;
} else if(4 <= H && H <= 5) {
temp[0] = X;
temp[2] = C;
} else if(5 <= H && H <= 6) {
temp[0] = C;
temp[2] = X;
}
float m = hsv[2] - C;
rgb[0] = temp[0] + m;
rgb[1] = temp[1] + m;
rgb[2] = temp[2] + m;
}
void rgb_string_set(ClientContext* context, vec3 hsv) {
vec3 rgb;
hsv_to_rgb(hsv, rgb);
char temp[10];
snprintf(temp, 10, "#%02x%02x%02x",
(uint)(r*255),
(uint)(g*255),
(uint)(b*255));
(uint)(rgb[0]*255),
(uint)(rgb[1]*255),
(uint)(rgb[2]*255));
update_ui_string(temp, COLOR_PICK_CONTAINER_ID, 0, 0, context->ui, context->render);
}
@ -157,7 +190,7 @@ void sv_square_pick(ClientContext* context, float s, float v) {
4*sizeof(vec4),
context->render);
rgb_string_set(context, select->color[0][0], select->color[0][1], select->color[0][2]);
rgb_string_set(context, select->color[0]);
}
void sv_square_button_callback(void* ptr, float x, float y, int button, int action, int mods) {
@ -216,7 +249,7 @@ void hue_bar_set(ClientContext* context, float y) {
4*sizeof(vec4),
context->render);
rgb_string_set(context, select->color[0][0], select->color[0][1], select->color[0][2]);
rgb_string_set(context, select->color[0]);
}
void hue_bar_scroll_callback(void* ptr, double x, double y) {