|
|
|
@ -96,13 +96,12 @@ uint32_t add_hex_region(ClientContext* context) {
|
|
|
|
|
typedef struct ColorUIDataStruct {
|
|
|
|
|
double current_hsv[3];
|
|
|
|
|
vec4 current;
|
|
|
|
|
vec3 saved[12];
|
|
|
|
|
vec4 saved[12];
|
|
|
|
|
char string[10];
|
|
|
|
|
int string_len;
|
|
|
|
|
} ColorUIData;
|
|
|
|
|
|
|
|
|
|
void set_rgb_from_hsv(UIContext* ui, RenderContext* gpu, ColorUIData* data, double hsv[3]) {
|
|
|
|
|
hsv_to_rgb(hsv, data->current);
|
|
|
|
|
void update_hex_string(UIContext* ui, RenderContext* gpu, ColorUIData* data) {
|
|
|
|
|
snprintf(data->string, 10, "#%02X%02X%02X%02X",
|
|
|
|
|
(uint)rintf(data->current[0]*255),
|
|
|
|
|
(uint)rintf(data->current[1]*255),
|
|
|
|
@ -166,7 +165,8 @@ void sv_square_pick(UIContext* ui, RenderContext* gpu, ColorUIData* data, float
|
|
|
|
|
4*sizeof(vec4),
|
|
|
|
|
gpu);
|
|
|
|
|
|
|
|
|
|
set_rgb_from_hsv(ui, gpu, data, data->current_hsv);
|
|
|
|
|
hsv_to_rgb(data->current_hsv, data->current);
|
|
|
|
|
update_hex_string(ui, gpu, data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void sv_square_button_callback(void* data, UIContext* ui, RenderContext* gpu, float x, float y, int button, int action, int mods) {
|
|
|
|
@ -234,7 +234,8 @@ void hue_bar_set(UIContext* ui, RenderContext* gpu, ColorUIData* data, float y)
|
|
|
|
|
1*sizeof(float),
|
|
|
|
|
gpu);
|
|
|
|
|
|
|
|
|
|
set_rgb_from_hsv(ui, gpu, data, data->current_hsv);
|
|
|
|
|
hsv_to_rgb(data->current_hsv, data->current);
|
|
|
|
|
update_hex_string(ui, gpu, data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void hue_bar_scroll_callback(void* data, UIContext* ui, RenderContext* gpu, double x, double y) {
|
|
|
|
@ -312,7 +313,8 @@ bool hex_string_key_callback(void* ptr, UIContext* ui, RenderContext* gpu, int k
|
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
|
switch(key) {
|
|
|
|
|
case GLFW_KEY_ESCAPE:
|
|
|
|
|
set_rgb_from_hsv(ui, gpu, data, data->current_hsv);
|
|
|
|
|
hsv_to_rgb(data->current_hsv, data->current);
|
|
|
|
|
update_hex_string(ui, gpu, data);
|
|
|
|
|
clear_active_element(ui, gpu);
|
|
|
|
|
break;
|
|
|
|
|
case GLFW_KEY_ENTER:
|
|
|
|
@ -369,9 +371,102 @@ void hex_string_button_callback(void* data, UIContext* ui, RenderContext* gpu, f
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void hex_string_deselect_callback(void* data, UIContext* ui, RenderContext* gpu) {
|
|
|
|
|
(void)data;
|
|
|
|
|
hex_string_set_color(ui, gpu, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void set_saved_color(UIContext* ui, RenderContext* gpu, ColorUIData* data, uint32_t index, vec4 color) {
|
|
|
|
|
data->saved[index][0] = color[0];
|
|
|
|
|
data->saved[index][1] = color[1];
|
|
|
|
|
data->saved[index][2] = color[2];
|
|
|
|
|
data->saved[index][3] = color[3];
|
|
|
|
|
|
|
|
|
|
Container* container = context_container(COLOR_PICK_CONTAINER_ID, ui);
|
|
|
|
|
Layer* layer = &container->layers[0];
|
|
|
|
|
GPUDrawable* saved_color = &layer->drawables_buffer[7 + index];
|
|
|
|
|
|
|
|
|
|
saved_color->color[0][0] = data->current[0];
|
|
|
|
|
saved_color->color[0][1] = data->current[1];
|
|
|
|
|
saved_color->color[0][2] = data->current[2];
|
|
|
|
|
|
|
|
|
|
saved_color->color[1][0] = data->current[0];
|
|
|
|
|
saved_color->color[1][1] = data->current[1];
|
|
|
|
|
saved_color->color[1][2] = data->current[2];
|
|
|
|
|
|
|
|
|
|
saved_color->color[2][0] = data->current[0];
|
|
|
|
|
saved_color->color[2][1] = data->current[1];
|
|
|
|
|
saved_color->color[2][2] = data->current[2];
|
|
|
|
|
|
|
|
|
|
saved_color->color[3][0] = data->current[0];
|
|
|
|
|
saved_color->color[3][1] = data->current[1];
|
|
|
|
|
saved_color->color[3][2] = data->current[2];
|
|
|
|
|
|
|
|
|
|
add_transfers(
|
|
|
|
|
&saved_color->color[0],
|
|
|
|
|
layer->drawables,
|
|
|
|
|
(7+index)*sizeof(GPUDrawable) + offsetof(GPUDrawable, color),
|
|
|
|
|
4*sizeof(vec4),
|
|
|
|
|
gpu);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void saved_color_button_callback(
|
|
|
|
|
void* ptr,
|
|
|
|
|
UIContext* ui,
|
|
|
|
|
RenderContext* gpu,
|
|
|
|
|
float x, float y,
|
|
|
|
|
int button, int action, int mods,
|
|
|
|
|
uint32_t index) {
|
|
|
|
|
(void)x;
|
|
|
|
|
(void)y;
|
|
|
|
|
(void)mods;
|
|
|
|
|
|
|
|
|
|
ColorUIData* data = ptr;
|
|
|
|
|
|
|
|
|
|
if(action == GLFW_PRESS) {
|
|
|
|
|
if(button == GLFW_MOUSE_BUTTON_LEFT) {
|
|
|
|
|
data->current[0] = data->saved[index][0];
|
|
|
|
|
data->current[1] = data->saved[index][1];
|
|
|
|
|
data->current[2] = data->saved[index][2];
|
|
|
|
|
data->current[3] = data->saved[index][3];
|
|
|
|
|
rgb_to_hsv(data->current, data->current_hsv);
|
|
|
|
|
hue_bar_set(ui, gpu, data, data->current_hsv[0]);
|
|
|
|
|
sv_square_pick(ui, gpu, data, data->current_hsv[1], data->current_hsv[2]);
|
|
|
|
|
update_hex_string(ui, gpu, data);
|
|
|
|
|
} else if(button == GLFW_MOUSE_BUTTON_RIGHT) {
|
|
|
|
|
set_saved_color(ui, gpu, data, index, data->current);
|
|
|
|
|
} else if (button == GLFW_MOUSE_BUTTON_MIDDLE) {
|
|
|
|
|
vec4 clear = {0, 0, 0, 0};
|
|
|
|
|
set_saved_color(ui, gpu, data, index, clear);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define SAVED_COLOR_BUTTON_CALLBACK(n) \
|
|
|
|
|
void saved_color_button_callback_##n(void* data, UIContext* ui, RenderContext* gpu, float x, float y, int button, int action, int mods) { \
|
|
|
|
|
saved_color_button_callback(data, ui, gpu, x, y, button, action, mods, n); \
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SAVED_COLOR_BUTTON_CALLBACK( 0);
|
|
|
|
|
SAVED_COLOR_BUTTON_CALLBACK( 1);
|
|
|
|
|
SAVED_COLOR_BUTTON_CALLBACK( 2);
|
|
|
|
|
SAVED_COLOR_BUTTON_CALLBACK( 3);
|
|
|
|
|
SAVED_COLOR_BUTTON_CALLBACK( 4);
|
|
|
|
|
SAVED_COLOR_BUTTON_CALLBACK( 5);
|
|
|
|
|
SAVED_COLOR_BUTTON_CALLBACK( 6);
|
|
|
|
|
SAVED_COLOR_BUTTON_CALLBACK( 7);
|
|
|
|
|
SAVED_COLOR_BUTTON_CALLBACK( 8);
|
|
|
|
|
SAVED_COLOR_BUTTON_CALLBACK( 9);
|
|
|
|
|
SAVED_COLOR_BUTTON_CALLBACK(10);
|
|
|
|
|
SAVED_COLOR_BUTTON_CALLBACK(11);
|
|
|
|
|
|
|
|
|
|
#define SAVED_COLOR_CALLBACK_ENTRY(n) \
|
|
|
|
|
{ \
|
|
|
|
|
.layer = 0, \
|
|
|
|
|
.element = 7 + n, \
|
|
|
|
|
.data = data, \
|
|
|
|
|
.button = saved_color_button_callback_##n, \
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
VkResult color_ui(ClientContext* context) {
|
|
|
|
|
GPUString strings[] = {
|
|
|
|
|
{
|
|
|
|
@ -429,61 +524,73 @@ VkResult color_ui(ClientContext* context) {
|
|
|
|
|
.pos = {146, 2},
|
|
|
|
|
.size = {20, 20},
|
|
|
|
|
.color = {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}},
|
|
|
|
|
.events = UI_EVENT_BUTTON,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.pos = {168, 2},
|
|
|
|
|
.size = {20, 20},
|
|
|
|
|
.color = {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}},
|
|
|
|
|
.events = UI_EVENT_BUTTON,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.pos = {146, 24},
|
|
|
|
|
.size = {20, 20},
|
|
|
|
|
.color = {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}},
|
|
|
|
|
.events = UI_EVENT_BUTTON,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.pos = {168, 24},
|
|
|
|
|
.size = {20, 20},
|
|
|
|
|
.color = {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}},
|
|
|
|
|
.events = UI_EVENT_BUTTON,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.pos = {146, 46},
|
|
|
|
|
.size = {20, 20},
|
|
|
|
|
.color = {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}},
|
|
|
|
|
.events = UI_EVENT_BUTTON,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.pos = {168, 46},
|
|
|
|
|
.size = {20, 20},
|
|
|
|
|
.color = {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}},
|
|
|
|
|
.events = UI_EVENT_BUTTON,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.pos = {146, 68},
|
|
|
|
|
.size = {20, 20},
|
|
|
|
|
.color = {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}},
|
|
|
|
|
.events = UI_EVENT_BUTTON,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.pos = {168, 68},
|
|
|
|
|
.size = {20, 20},
|
|
|
|
|
.color = {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}},
|
|
|
|
|
.events = UI_EVENT_BUTTON,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.pos = {146, 90},
|
|
|
|
|
.size = {20, 20},
|
|
|
|
|
.color = {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}},
|
|
|
|
|
.events = UI_EVENT_BUTTON,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.pos = {168, 90},
|
|
|
|
|
.size = {20, 20},
|
|
|
|
|
.color = {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}},
|
|
|
|
|
.events = UI_EVENT_BUTTON,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.pos = {146, 112},
|
|
|
|
|
.size = {20, 20},
|
|
|
|
|
.color = {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}},
|
|
|
|
|
.events = UI_EVENT_BUTTON,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
.pos = {168, 112},
|
|
|
|
|
.size = {20, 20},
|
|
|
|
|
.color = {{1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}, {1, 1, 1, 1}},
|
|
|
|
|
.events = UI_EVENT_BUTTON,
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -542,6 +649,18 @@ VkResult color_ui(ClientContext* context) {
|
|
|
|
|
.text = hex_string_text_callback,
|
|
|
|
|
.deselect = hex_string_deselect_callback,
|
|
|
|
|
},
|
|
|
|
|
SAVED_COLOR_CALLBACK_ENTRY( 0),
|
|
|
|
|
SAVED_COLOR_CALLBACK_ENTRY( 1),
|
|
|
|
|
SAVED_COLOR_CALLBACK_ENTRY( 2),
|
|
|
|
|
SAVED_COLOR_CALLBACK_ENTRY( 3),
|
|
|
|
|
SAVED_COLOR_CALLBACK_ENTRY( 4),
|
|
|
|
|
SAVED_COLOR_CALLBACK_ENTRY( 5),
|
|
|
|
|
SAVED_COLOR_CALLBACK_ENTRY( 6),
|
|
|
|
|
SAVED_COLOR_CALLBACK_ENTRY( 7),
|
|
|
|
|
SAVED_COLOR_CALLBACK_ENTRY( 8),
|
|
|
|
|
SAVED_COLOR_CALLBACK_ENTRY( 9),
|
|
|
|
|
SAVED_COLOR_CALLBACK_ENTRY(10),
|
|
|
|
|
SAVED_COLOR_CALLBACK_ENTRY(11),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
ContainerInput container = {
|
|
|
|
|