|
|
|
@ -96,6 +96,93 @@ 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) {
|
|
|
|
|
char temp[10];
|
|
|
|
|
snprintf(temp, 10, "#%02x%02x%02x",
|
|
|
|
|
(uint)(r*255),
|
|
|
|
|
(uint)(g*255),
|
|
|
|
|
(uint)(b*255));
|
|
|
|
|
update_ui_string(temp, COLOR_PICK_CONTAINER_ID, 0, 0, context->ui, context->render);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void sv_square_pick(ClientContext* context, float s, float v) {
|
|
|
|
|
if(s < 0) s = 0;
|
|
|
|
|
if(s > 1) s = 1;
|
|
|
|
|
|
|
|
|
|
if(v < 0) v = 0;
|
|
|
|
|
if(v > 1) v = 1;
|
|
|
|
|
|
|
|
|
|
Container* container = context_container(COLOR_PICK_CONTAINER_ID, context->ui);
|
|
|
|
|
Layer* layer = &container->layers[0];
|
|
|
|
|
GPUDrawable* select_outline = &layer->drawables_buffer[3];
|
|
|
|
|
GPUDrawable* select = &layer->drawables_buffer[4];
|
|
|
|
|
|
|
|
|
|
select->pos[0] = s*130 - 2;
|
|
|
|
|
select->pos[1] = v*130 - 2;
|
|
|
|
|
|
|
|
|
|
select->color[0][1] = s;
|
|
|
|
|
select->color[0][2] = 1-v;
|
|
|
|
|
|
|
|
|
|
select->color[1][1] = s;
|
|
|
|
|
select->color[1][2] = 1-v;
|
|
|
|
|
|
|
|
|
|
select->color[2][1] = s;
|
|
|
|
|
select->color[2][2] = 1-v;
|
|
|
|
|
|
|
|
|
|
select->color[3][1] = s;
|
|
|
|
|
select->color[3][2] = 1-v;
|
|
|
|
|
|
|
|
|
|
select_outline->pos[0] = s*130 - 3;
|
|
|
|
|
select_outline->pos[1] = v*130 - 3;
|
|
|
|
|
|
|
|
|
|
add_transfers(
|
|
|
|
|
&select_outline->pos[0],
|
|
|
|
|
layer->drawables,
|
|
|
|
|
3*sizeof(GPUDrawable) + offsetof(GPUDrawable, pos),
|
|
|
|
|
1*sizeof(vec2),
|
|
|
|
|
context->render);
|
|
|
|
|
|
|
|
|
|
add_transfers(
|
|
|
|
|
&select->pos[0],
|
|
|
|
|
layer->drawables,
|
|
|
|
|
4*sizeof(GPUDrawable) + offsetof(GPUDrawable, pos),
|
|
|
|
|
1*sizeof(vec2),
|
|
|
|
|
context->render);
|
|
|
|
|
|
|
|
|
|
add_transfers(
|
|
|
|
|
&select->color[0],
|
|
|
|
|
layer->drawables,
|
|
|
|
|
4*sizeof(GPUDrawable) + offsetof(GPUDrawable, color),
|
|
|
|
|
4*sizeof(vec4),
|
|
|
|
|
context->render);
|
|
|
|
|
|
|
|
|
|
rgb_string_set(context, select->color[0][0], select->color[0][1], select->color[0][2]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void sv_square_button_callback(void* ptr, float x, float y, int button, int action, int mods) {
|
|
|
|
|
(void)mods;
|
|
|
|
|
(void)x;
|
|
|
|
|
|
|
|
|
|
ClientContext* context = (ClientContext*)ptr;
|
|
|
|
|
if(action == GLFW_PRESS && button == GLFW_MOUSE_BUTTON_LEFT) {
|
|
|
|
|
set_active_element(COLOR_PICK_CONTAINER_ID, 0, 1, context->ui);
|
|
|
|
|
sv_square_pick(context, x, y);
|
|
|
|
|
} else if(action == GLFW_RELEASE && button == GLFW_MOUSE_BUTTON_LEFT) {
|
|
|
|
|
clear_active_element(context->ui);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void sv_square_cursor_callback(void* ptr, float x, float y) {
|
|
|
|
|
ClientContext* context = (ClientContext*)ptr;
|
|
|
|
|
|
|
|
|
|
if(context->ui->active_element == 1
|
|
|
|
|
&& context->ui->active_layer == 0
|
|
|
|
|
&& context->ui->active_container == COLOR_PICK_CONTAINER_ID) {
|
|
|
|
|
sv_square_pick(context, x, y);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void hue_bar_set(ClientContext* context, float y) {
|
|
|
|
|
if(y < 0) y = 0;
|
|
|
|
|
if(y > 1) y = 1;
|
|
|
|
@ -103,17 +190,33 @@ void hue_bar_set(ClientContext* context, float y) {
|
|
|
|
|
Container* container = context_container(COLOR_PICK_CONTAINER_ID, context->ui);
|
|
|
|
|
Layer* layer = &container->layers[0];
|
|
|
|
|
GPUDrawable* sv_square = &layer->drawables_buffer[1];
|
|
|
|
|
GPUDrawable* select = &layer->drawables_buffer[4];
|
|
|
|
|
|
|
|
|
|
sv_square->color[0][0] = y;
|
|
|
|
|
sv_square->color[1][0] = y;
|
|
|
|
|
sv_square->color[2][0] = y;
|
|
|
|
|
sv_square->color[3][0] = y;
|
|
|
|
|
|
|
|
|
|
select->color[0][0] = y;
|
|
|
|
|
select->color[1][0] = y;
|
|
|
|
|
select->color[2][0] = y;
|
|
|
|
|
select->color[3][0] = y;
|
|
|
|
|
|
|
|
|
|
add_transfers(
|
|
|
|
|
&sv_square->color[0],
|
|
|
|
|
layer->drawables,
|
|
|
|
|
1*sizeof(GPUDrawable) + offsetof(GPUDrawable, color),
|
|
|
|
|
4*sizeof(vec4),
|
|
|
|
|
context->render);
|
|
|
|
|
|
|
|
|
|
add_transfers(
|
|
|
|
|
&select->color[0],
|
|
|
|
|
layer->drawables,
|
|
|
|
|
4*sizeof(GPUDrawable) + offsetof(GPUDrawable, color),
|
|
|
|
|
4*sizeof(vec4),
|
|
|
|
|
context->render);
|
|
|
|
|
|
|
|
|
|
rgb_string_set(context, select->color[0][0], select->color[0][1], select->color[0][2]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void hue_bar_scroll_callback(void* ptr, double x, double y) {
|
|
|
|
@ -188,6 +291,7 @@ VkResult color_ui(ClientContext* context) {
|
|
|
|
|
.color = {{0, 0, 0, 1}, {0, 0, 0, 1}, {0, 0, 0, 1}, {0, 0, 0, 1}},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.type = DRAWABLE_TYPE_RECT_HSV,
|
|
|
|
|
.pos = {10, 10},
|
|
|
|
|
.size = {5, 5},
|
|
|
|
|
.color = {{1, 0, 0, 1}, {1, 0, 0, 1}, {1, 0, 0, 1}, {1, 0, 0, 1}},
|
|
|
|
@ -272,6 +376,12 @@ VkResult color_ui(ClientContext* context) {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
UICallbacks callbacks[] = {
|
|
|
|
|
{
|
|
|
|
|
.layer = 0,
|
|
|
|
|
.element = 1,
|
|
|
|
|
.button = sv_square_button_callback,
|
|
|
|
|
.cursor = sv_square_cursor_callback,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.layer = 0,
|
|
|
|
|
.element = 2,
|
|
|
|
|