Added feature to disable widgets

This commit is contained in:
Yukyduky 2023-10-11 21:27:52 +02:00
parent a14e55f536
commit 8016ff334d
22 changed files with 747 additions and 286 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "nuklear", "name": "nuklear",
"version": "4.10.6", "version": "4.11.0",
"repo": "Immediate-Mode-UI/Nuklear", "repo": "Immediate-Mode-UI/Nuklear",
"description": "A small ANSI C gui toolkit", "description": "A small ANSI C gui toolkit",
"keywords": ["gl", "ui", "toolkit"], "keywords": ["gl", "ui", "toolkit"],

View File

@ -248,20 +248,14 @@ overview(struct nk_context *ctx)
nk_layout_row_static(ctx, 30, 80, 1); nk_layout_row_static(ctx, 30, 80, 1);
if (inactive) { if (inactive) {
struct nk_style_button button; nk_widget_disable_begin(ctx);
button = ctx->style.button; }
ctx->style.button.normal = nk_style_item_color(nk_rgb(40,40,40));
ctx->style.button.hover = nk_style_item_color(nk_rgb(40,40,40)); if (nk_button_label(ctx, "button"))
ctx->style.button.active = nk_style_item_color(nk_rgb(40,40,40));
ctx->style.button.border_color = nk_rgb(60,60,60);
ctx->style.button.text_background = nk_rgb(60,60,60);
ctx->style.button.text_normal = nk_rgb(60,60,60);
ctx->style.button.text_hover = nk_rgb(60,60,60);
ctx->style.button.text_active = nk_rgb(60,60,60);
nk_button_label(ctx, "button");
ctx->style.button = button;
} else if (nk_button_label(ctx, "button"))
fprintf(stdout, "button pressed\n"); fprintf(stdout, "button pressed\n");
nk_widget_disable_end(ctx);
nk_tree_pop(ctx); nk_tree_pop(ctx);
} }

505
nuklear.h

File diff suppressed because it is too large Load Diff

View File

@ -7,6 +7,7 @@
/// - [y]: Minor version with non-breaking API and library changes /// - [y]: Minor version with non-breaking API and library changes
/// - [z]: Patch version with no direct changes to the API /// - [z]: Patch version with no direct changes to the API
/// ///
/// - 2023/10/11 (4.11.0) - Added nk_widget_disable_begin() and nk_widget_disable_end()
/// - 2022/12/23 (4.10.6) - Fix incorrect glyph index in nk_font_bake() /// - 2022/12/23 (4.10.6) - Fix incorrect glyph index in nk_font_bake()
/// - 2022/12/17 (4.10.5) - Fix nk_font_bake_pack() using TTC font offset incorrectly /// - 2022/12/17 (4.10.5) - Fix nk_font_bake_pack() using TTC font offset incorrectly
/// - 2022/10/24 (4.10.4) - Fix nk_str_{append,insert}_str_utf8 always returning 0 /// - 2022/10/24 (4.10.4) - Fix nk_str_{append,insert}_str_utf8 always returning 0

View File

@ -2854,7 +2854,8 @@ NK_API void nk_list_view_end(struct nk_list_view*);
enum nk_widget_layout_states { enum nk_widget_layout_states {
NK_WIDGET_INVALID, /* The widget cannot be seen and is completely out of view */ NK_WIDGET_INVALID, /* The widget cannot be seen and is completely out of view */
NK_WIDGET_VALID, /* The widget is completely inside the window and can be updated and drawn */ NK_WIDGET_VALID, /* The widget is completely inside the window and can be updated and drawn */
NK_WIDGET_ROM /* The widget is partially visible and cannot be updated */ NK_WIDGET_ROM, /* The widget is partially visible and cannot be updated */
NK_WIDGET_DISABLED /* The widget is manually disabled and acts like NK_WIDGET_ROM */
}; };
enum nk_widget_states { enum nk_widget_states {
NK_WIDGET_STATE_MODIFIED = NK_FLAG(1), NK_WIDGET_STATE_MODIFIED = NK_FLAG(1),
@ -2877,6 +2878,8 @@ NK_API nk_bool nk_widget_is_hovered(struct nk_context*);
NK_API nk_bool nk_widget_is_mouse_clicked(struct nk_context*, enum nk_buttons); NK_API nk_bool nk_widget_is_mouse_clicked(struct nk_context*, enum nk_buttons);
NK_API nk_bool nk_widget_has_mouse_click_down(struct nk_context*, enum nk_buttons, nk_bool down); NK_API nk_bool nk_widget_has_mouse_click_down(struct nk_context*, enum nk_buttons, nk_bool down);
NK_API void nk_spacing(struct nk_context*, int cols); NK_API void nk_spacing(struct nk_context*, int cols);
NK_API void nk_widget_disable_begin(struct nk_context* ctx);
NK_API void nk_widget_disable_end(struct nk_context* ctx);
/* ============================================================================= /* =============================================================================
* *
* TEXT * TEXT
@ -3447,6 +3450,7 @@ NK_API struct nk_color nk_rgb_f(float r, float g, float b);
NK_API struct nk_color nk_rgb_fv(const float *rgb); NK_API struct nk_color nk_rgb_fv(const float *rgb);
NK_API struct nk_color nk_rgb_cf(struct nk_colorf c); NK_API struct nk_color nk_rgb_cf(struct nk_colorf c);
NK_API struct nk_color nk_rgb_hex(const char *rgb); NK_API struct nk_color nk_rgb_hex(const char *rgb);
NK_API struct nk_color nk_rgb_factor(const struct nk_color col, const float factor);
NK_API struct nk_color nk_rgba(int r, int g, int b, int a); NK_API struct nk_color nk_rgba(int r, int g, int b, int a);
NK_API struct nk_color nk_rgba_u32(nk_uint); NK_API struct nk_color nk_rgba_u32(nk_uint);
@ -4667,6 +4671,8 @@ struct nk_style_item {
struct nk_style_text { struct nk_style_text {
struct nk_color color; struct nk_color color;
struct nk_vec2 padding; struct nk_vec2 padding;
float color_factor;
float disabled_factor;
}; };
struct nk_style_button { struct nk_style_button {
@ -4689,6 +4695,8 @@ struct nk_style_button {
struct nk_vec2 padding; struct nk_vec2 padding;
struct nk_vec2 image_padding; struct nk_vec2 image_padding;
struct nk_vec2 touch_padding; struct nk_vec2 touch_padding;
float color_factor;
float disabled_factor;
/* optional user callbacks */ /* optional user callbacks */
nk_handle userdata; nk_handle userdata;
@ -4719,6 +4727,8 @@ struct nk_style_toggle {
struct nk_vec2 touch_padding; struct nk_vec2 touch_padding;
float spacing; float spacing;
float border; float border;
float color_factor;
float disabled_factor;
/* optional user callbacks */ /* optional user callbacks */
nk_handle userdata; nk_handle userdata;
@ -4754,6 +4764,8 @@ struct nk_style_selectable {
struct nk_vec2 padding; struct nk_vec2 padding;
struct nk_vec2 touch_padding; struct nk_vec2 touch_padding;
struct nk_vec2 image_padding; struct nk_vec2 image_padding;
float color_factor;
float disabled_factor;
/* optional user callbacks */ /* optional user callbacks */
nk_handle userdata; nk_handle userdata;
@ -4786,6 +4798,8 @@ struct nk_style_slider {
struct nk_vec2 padding; struct nk_vec2 padding;
struct nk_vec2 spacing; struct nk_vec2 spacing;
struct nk_vec2 cursor_size; struct nk_vec2 cursor_size;
float color_factor;
float disabled_factor;
/* optional buttons */ /* optional buttons */
int show_buttons; int show_buttons;
@ -4819,6 +4833,8 @@ struct nk_style_progress {
float cursor_border; float cursor_border;
float cursor_rounding; float cursor_rounding;
struct nk_vec2 padding; struct nk_vec2 padding;
float color_factor;
float disabled_factor;
/* optional user callbacks */ /* optional user callbacks */
nk_handle userdata; nk_handle userdata;
@ -4845,6 +4861,8 @@ struct nk_style_scrollbar {
float border_cursor; float border_cursor;
float rounding_cursor; float rounding_cursor;
struct nk_vec2 padding; struct nk_vec2 padding;
float color_factor;
float disabled_factor;
/* optional buttons */ /* optional buttons */
int show_buttons; int show_buttons;
@ -4891,6 +4909,8 @@ struct nk_style_edit {
struct nk_vec2 scrollbar_size; struct nk_vec2 scrollbar_size;
struct nk_vec2 padding; struct nk_vec2 padding;
float row_padding; float row_padding;
float color_factor;
float disabled_factor;
}; };
struct nk_style_property { struct nk_style_property {
@ -4913,6 +4933,8 @@ struct nk_style_property {
float border; float border;
float rounding; float rounding;
struct nk_vec2 padding; struct nk_vec2 padding;
float color_factor;
float disabled_factor;
struct nk_style_edit edit; struct nk_style_edit edit;
struct nk_style_button inc_button; struct nk_style_button inc_button;
@ -4935,6 +4957,8 @@ struct nk_style_chart {
float border; float border;
float rounding; float rounding;
struct nk_vec2 padding; struct nk_vec2 padding;
float color_factor;
float disabled_factor;
}; };
struct nk_style_combo { struct nk_style_combo {
@ -4966,6 +4990,8 @@ struct nk_style_combo {
struct nk_vec2 content_padding; struct nk_vec2 content_padding;
struct nk_vec2 button_padding; struct nk_vec2 button_padding;
struct nk_vec2 spacing; struct nk_vec2 spacing;
float color_factor;
float disabled_factor;
}; };
struct nk_style_tab { struct nk_style_tab {
@ -4988,6 +5014,8 @@ struct nk_style_tab {
float indent; float indent;
struct nk_vec2 padding; struct nk_vec2 padding;
struct nk_vec2 spacing; struct nk_vec2 spacing;
float color_factor;
float disabled_factor;
}; };
enum nk_style_header_align { enum nk_style_header_align {
@ -5270,6 +5298,7 @@ struct nk_window {
struct nk_popup_state popup; struct nk_popup_state popup;
struct nk_edit_state edit; struct nk_edit_state edit;
unsigned int scrolled; unsigned int scrolled;
nk_bool widgets_disabled;
struct nk_table *tables; struct nk_table *tables;
unsigned int table_count; unsigned int table_count;

View File

@ -98,16 +98,16 @@ nk_draw_button(struct nk_command_buffer *out,
background = &style->active; background = &style->active;
else background = &style->normal; else background = &style->normal;
switch(background->type) { switch (background->type) {
case NK_STYLE_ITEM_IMAGE: case NK_STYLE_ITEM_IMAGE:
nk_draw_image(out, *bounds, &background->data.image, nk_white); nk_draw_image(out, *bounds, &background->data.image, nk_rgb_factor(nk_white, style->color_factor));
break; break;
case NK_STYLE_ITEM_NINE_SLICE: case NK_STYLE_ITEM_NINE_SLICE:
nk_draw_nine_slice(out, *bounds, &background->data.slice, nk_white); nk_draw_nine_slice(out, *bounds, &background->data.slice, nk_rgb_factor(nk_rgb_factor(nk_white, style->color_factor), style->color_factor));
break; break;
case NK_STYLE_ITEM_COLOR: case NK_STYLE_ITEM_COLOR:
nk_fill_rect(out, *bounds, style->rounding, background->data.color); nk_fill_rect(out, *bounds, style->rounding, nk_rgb_factor(background->data.color, style->color_factor));
nk_stroke_rect(out, *bounds, style->rounding, style->border, style->border_color); nk_stroke_rect(out, *bounds, style->rounding, style->border, nk_rgb_factor(style->border_color, style->color_factor));
break; break;
} }
return background; return background;
@ -157,6 +157,8 @@ nk_draw_button_text(struct nk_command_buffer *out,
text.text = style->text_active; text.text = style->text_active;
else text.text = style->text_normal; else text.text = style->text_normal;
text.text = nk_rgb_factor(text.text, style->color_factor);
text.padding = nk_vec2(0,0); text.padding = nk_vec2(0,0);
nk_widget_text(out, *content, txt, len, &text, text_alignment, font); nk_widget_text(out, *content, txt, len, &text, text_alignment, font);
} }
@ -204,6 +206,8 @@ nk_draw_button_symbol(struct nk_command_buffer *out,
else if (state & NK_WIDGET_STATE_ACTIVED) else if (state & NK_WIDGET_STATE_ACTIVED)
sym = style->text_active; sym = style->text_active;
else sym = style->text_normal; else sym = style->text_normal;
sym = nk_rgb_factor(sym, style->color_factor);
nk_draw_symbol(out, type, *content, bg, sym, 1, font); nk_draw_symbol(out, type, *content, bg, sym, 1, font);
} }
NK_LIB nk_bool NK_LIB nk_bool
@ -235,7 +239,7 @@ nk_draw_button_image(struct nk_command_buffer *out,
nk_flags state, const struct nk_style_button *style, const struct nk_image *img) nk_flags state, const struct nk_style_button *style, const struct nk_image *img)
{ {
nk_draw_button(out, bounds, state, style); nk_draw_button(out, bounds, state, style);
nk_draw_image(out, *content, img, nk_white); nk_draw_image(out, *content, img, nk_rgb_factor(nk_white, style->color_factor));
} }
NK_LIB nk_bool NK_LIB nk_bool
nk_do_button_image(nk_flags *state, nk_do_button_image(nk_flags *state,
@ -292,6 +296,8 @@ nk_draw_button_text_symbol(struct nk_command_buffer *out,
text.text = style->text_normal; text.text = style->text_normal;
} }
sym = nk_rgb_factor(sym, style->color_factor);
text.text = nk_rgb_factor(text.text, style->color_factor);
text.padding = nk_vec2(0,0); text.padding = nk_vec2(0,0);
nk_draw_symbol(out, type, *symbol, style->text_background, sym, 0, font); nk_draw_symbol(out, type, *symbol, style->text_background, sym, 0, font);
nk_widget_text(out, *label, str, len, &text, NK_TEXT_CENTERED, font); nk_widget_text(out, *label, str, len, &text, NK_TEXT_CENTERED, font);
@ -349,9 +355,10 @@ nk_draw_button_text_image(struct nk_command_buffer *out,
text.text = style->text_active; text.text = style->text_active;
else text.text = style->text_normal; else text.text = style->text_normal;
text.padding = nk_vec2(0,0); text.text = nk_rgb_factor(text.text, style->color_factor);
text.padding = nk_vec2(0, 0);
nk_widget_text(out, *label, str, len, &text, NK_TEXT_CENTERED, font); nk_widget_text(out, *label, str, len, &text, NK_TEXT_CENTERED, font);
nk_draw_image(out, *image, img, nk_white); nk_draw_image(out, *image, img, nk_rgb_factor(nk_white, style->color_factor));
} }
NK_LIB nk_bool NK_LIB nk_bool
nk_do_button_text_image(nk_flags *state, nk_do_button_text_image(nk_flags *state,
@ -456,7 +463,7 @@ nk_button_text_styled(struct nk_context *ctx,
state = nk_widget(&bounds, ctx); state = nk_widget(&bounds, ctx);
if (!state) return 0; if (!state) return 0;
in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
return nk_do_button_text(&ctx->last_widget_state, &win->buffer, bounds, return nk_do_button_text(&ctx->last_widget_state, &win->buffer, bounds,
title, len, style->text_alignment, ctx->button_behavior, title, len, style->text_alignment, ctx->button_behavior,
style, in, ctx->style.font); style, in, ctx->style.font);
@ -501,7 +508,7 @@ nk_button_color(struct nk_context *ctx, struct nk_color color)
state = nk_widget(&bounds, ctx); state = nk_widget(&bounds, ctx);
if (!state) return 0; if (!state) return 0;
in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
button = ctx->style.button; button = ctx->style.button;
button.normal = nk_style_item_color(color); button.normal = nk_style_item_color(color);
@ -533,7 +540,7 @@ nk_button_symbol_styled(struct nk_context *ctx,
layout = win->layout; layout = win->layout;
state = nk_widget(&bounds, ctx); state = nk_widget(&bounds, ctx);
if (!state) return 0; if (!state) return 0;
in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
return nk_do_button_symbol(&ctx->last_widget_state, &win->buffer, bounds, return nk_do_button_symbol(&ctx->last_widget_state, &win->buffer, bounds,
symbol, ctx->button_behavior, style, in, ctx->style.font); symbol, ctx->button_behavior, style, in, ctx->style.font);
} }
@ -566,7 +573,7 @@ nk_button_image_styled(struct nk_context *ctx, const struct nk_style_button *sty
state = nk_widget(&bounds, ctx); state = nk_widget(&bounds, ctx);
if (!state) return 0; if (!state) return 0;
in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
return nk_do_button_image(&ctx->last_widget_state, &win->buffer, bounds, return nk_do_button_image(&ctx->last_widget_state, &win->buffer, bounds,
img, ctx->button_behavior, style, in); img, ctx->button_behavior, style, in);
} }
@ -600,7 +607,7 @@ nk_button_symbol_text_styled(struct nk_context *ctx,
state = nk_widget(&bounds, ctx); state = nk_widget(&bounds, ctx);
if (!state) return 0; if (!state) return 0;
in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
return nk_do_button_text_symbol(&ctx->last_widget_state, &win->buffer, bounds, return nk_do_button_text_symbol(&ctx->last_widget_state, &win->buffer, bounds,
symbol, text, len, align, ctx->button_behavior, symbol, text, len, align, ctx->button_behavior,
style, ctx->style.font, in); style, ctx->style.font, in);
@ -647,7 +654,7 @@ nk_button_image_text_styled(struct nk_context *ctx,
state = nk_widget(&bounds, ctx); state = nk_widget(&bounds, ctx);
if (!state) return 0; if (!state) return 0;
in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
return nk_do_button_text_image(&ctx->last_widget_state, &win->buffer, return nk_do_button_text_image(&ctx->last_widget_state, &win->buffer,
bounds, img, text, len, align, ctx->button_behavior, bounds, img, text, len, align, ctx->button_behavior,
style, ctx->style.font, in); style, ctx->style.font, in);

View File

@ -48,7 +48,7 @@ nk_chart_begin_colored(struct nk_context *ctx, enum nk_chart_type type,
{struct nk_chart_slot *slot = &chart->slots[chart->slot++]; {struct nk_chart_slot *slot = &chart->slots[chart->slot++];
slot->type = type; slot->type = type;
slot->count = count; slot->count = count;
slot->color = color; slot->color = nk_rgb_factor(color, style->color_factor);
slot->highlight = highlight; slot->highlight = highlight;
slot->min = NK_MIN(min_value, max_value); slot->min = NK_MIN(min_value, max_value);
slot->max = NK_MAX(min_value, max_value); slot->max = NK_MAX(min_value, max_value);
@ -59,15 +59,15 @@ nk_chart_begin_colored(struct nk_context *ctx, enum nk_chart_type type,
switch(background->type) { switch(background->type) {
case NK_STYLE_ITEM_IMAGE: case NK_STYLE_ITEM_IMAGE:
nk_draw_image(&win->buffer, bounds, &background->data.image, nk_white); nk_draw_image(&win->buffer, bounds, &background->data.image, nk_rgb_factor(nk_white, style->color_factor));
break; break;
case NK_STYLE_ITEM_NINE_SLICE: case NK_STYLE_ITEM_NINE_SLICE:
nk_draw_nine_slice(&win->buffer, bounds, &background->data.slice, nk_white); nk_draw_image(&win->buffer, bounds, &background->data.image, nk_rgb_factor(nk_white, style->color_factor));
break; break;
case NK_STYLE_ITEM_COLOR: case NK_STYLE_ITEM_COLOR:
nk_fill_rect(&win->buffer, bounds, style->rounding, style->border_color); nk_fill_rect(&win->buffer, bounds, style->rounding, nk_rgb_factor(style->border_color, style->color_factor));
nk_fill_rect(&win->buffer, nk_shrink_rect(bounds, style->border), nk_fill_rect(&win->buffer, nk_shrink_rect(bounds, style->border),
style->rounding, style->background.data.color); style->rounding, nk_rgb_factor(style->background.data.color, style->color_factor));
break; break;
} }
return 1; return 1;
@ -84,6 +84,8 @@ nk_chart_add_slot_colored(struct nk_context *ctx, const enum nk_chart_type type,
struct nk_color color, struct nk_color highlight, struct nk_color color, struct nk_color highlight,
int count, float min_value, float max_value) int count, float min_value, float max_value)
{ {
const struct nk_style_chart* style;
NK_ASSERT(ctx); NK_ASSERT(ctx);
NK_ASSERT(ctx->current); NK_ASSERT(ctx->current);
NK_ASSERT(ctx->current->layout); NK_ASSERT(ctx->current->layout);
@ -91,12 +93,14 @@ nk_chart_add_slot_colored(struct nk_context *ctx, const enum nk_chart_type type,
if (!ctx || !ctx->current || !ctx->current->layout) return; if (!ctx || !ctx->current || !ctx->current->layout) return;
if (ctx->current->layout->chart.slot >= NK_CHART_MAX_SLOT) return; if (ctx->current->layout->chart.slot >= NK_CHART_MAX_SLOT) return;
style = &ctx->style.chart;
/* add another slot into the graph */ /* add another slot into the graph */
{struct nk_chart *chart = &ctx->current->layout->chart; {struct nk_chart *chart = &ctx->current->layout->chart;
struct nk_chart_slot *slot = &chart->slots[chart->slot++]; struct nk_chart_slot *slot = &chart->slots[chart->slot++];
slot->type = type; slot->type = type;
slot->count = count; slot->count = count;
slot->color = color; slot->color = nk_rgb_factor(color, style->color_factor);
slot->highlight = highlight; slot->highlight = highlight;
slot->min = NK_MIN(min_value, max_value); slot->min = NK_MIN(min_value, max_value);
slot->max = NK_MAX(min_value, max_value); slot->max = NK_MAX(min_value, max_value);
@ -114,7 +118,7 @@ nk_chart_push_line(struct nk_context *ctx, struct nk_window *win,
struct nk_chart *g, float value, int slot) struct nk_chart *g, float value, int slot)
{ {
struct nk_panel *layout = win->layout; struct nk_panel *layout = win->layout;
const struct nk_input *i = &ctx->input; const struct nk_input *i = ctx->current->widgets_disabled ? 0 : &ctx->input;
struct nk_command_buffer *out = &win->buffer; struct nk_command_buffer *out = &win->buffer;
nk_flags ret = 0; nk_flags ret = 0;
@ -140,7 +144,7 @@ nk_chart_push_line(struct nk_context *ctx, struct nk_window *win,
bounds.w = bounds.h = 4; bounds.w = bounds.h = 4;
color = g->slots[slot].color; color = g->slots[slot].color;
if (!(layout->flags & NK_WINDOW_ROM) && if (!(layout->flags & NK_WINDOW_ROM) && i &&
NK_INBOX(i->mouse.pos.x,i->mouse.pos.y, g->slots[slot].last.x-3, g->slots[slot].last.y-3, 6, 6)){ NK_INBOX(i->mouse.pos.x,i->mouse.pos.y, g->slots[slot].last.x-3, g->slots[slot].last.y-3, 6, 6)){
ret = nk_input_is_mouse_hovering_rect(i, bounds) ? NK_CHART_HOVERING : 0; ret = nk_input_is_mouse_hovering_rect(i, bounds) ? NK_CHART_HOVERING : 0;
ret |= (i->mouse.buttons[NK_BUTTON_LEFT].down && ret |= (i->mouse.buttons[NK_BUTTON_LEFT].down &&
@ -184,7 +188,7 @@ nk_chart_push_column(const struct nk_context *ctx, struct nk_window *win,
struct nk_chart *chart, float value, int slot) struct nk_chart *chart, float value, int slot)
{ {
struct nk_command_buffer *out = &win->buffer; struct nk_command_buffer *out = &win->buffer;
const struct nk_input *in = &ctx->input; const struct nk_input *in = ctx->current->widgets_disabled ? 0 : &ctx->input;
struct nk_panel *layout = win->layout; struct nk_panel *layout = win->layout;
float ratio; float ratio;
@ -214,7 +218,7 @@ nk_chart_push_column(const struct nk_context *ctx, struct nk_window *win,
item.x = item.x + ((float)chart->slots[slot].index); item.x = item.x + ((float)chart->slots[slot].index);
/* user chart bar selection */ /* user chart bar selection */
if (!(layout->flags & NK_WINDOW_ROM) && if (!(layout->flags & NK_WINDOW_ROM) && in &&
NK_INBOX(in->mouse.pos.x,in->mouse.pos.y,item.x,item.y,item.w,item.h)) { NK_INBOX(in->mouse.pos.x,in->mouse.pos.y,item.x,item.y,item.w,item.h)) {
ret = NK_CHART_HOVERING; ret = NK_CHART_HOVERING;
ret |= (!in->mouse.buttons[NK_BUTTON_LEFT].down && ret |= (!in->mouse.buttons[NK_BUTTON_LEFT].down &&

View File

@ -23,6 +23,16 @@ nk_parse_hex(const char *p, int length)
return i; return i;
} }
NK_API struct nk_color NK_API struct nk_color
nk_rgb_factor(const struct nk_color col, const float factor)
{
struct nk_color ret;
ret.r = col.r * factor;
ret.g = col.g * factor;
ret.b = col.b * factor;
ret.a = col.a;
return ret;
}
NK_API struct nk_color
nk_rgba(int r, int g, int b, int a) nk_rgba(int r, int g, int b, int a)
{ {
struct nk_color ret; struct nk_color ret;

View File

@ -187,7 +187,7 @@ nk_color_pick(struct nk_context * ctx, struct nk_colorf *color,
layout = win->layout; layout = win->layout;
state = nk_widget(&bounds, ctx); state = nk_widget(&bounds, ctx);
if (!state) return 0; if (!state) return 0;
in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
return nk_do_color_picker(&ctx->last_widget_state, &win->buffer, color, fmt, bounds, return nk_do_color_picker(&ctx->last_widget_state, &win->buffer, color, fmt, bounds,
nk_vec2(0,0), in, config->font); nk_vec2(0,0), in, config->font);
} }

View File

@ -67,7 +67,7 @@ nk_combo_begin_text(struct nk_context *ctx, const char *selected, int len,
if (s == NK_WIDGET_INVALID) if (s == NK_WIDGET_INVALID)
return 0; return 0;
in = (win->layout->flags & NK_WINDOW_ROM || s == NK_WIDGET_ROM)? 0: &ctx->input; in = (win->layout->flags & NK_WINDOW_ROM || s == NK_WIDGET_DISABLED || s == NK_WIDGET_ROM)? 0: &ctx->input;
if (nk_button_behavior(&ctx->last_widget_state, header, in, NK_BUTTON_DEFAULT)) if (nk_button_behavior(&ctx->last_widget_state, header, in, NK_BUTTON_DEFAULT))
is_clicked = nk_true; is_clicked = nk_true;
@ -83,19 +83,21 @@ nk_combo_begin_text(struct nk_context *ctx, const char *selected, int len,
text.text = style->combo.label_normal; text.text = style->combo.label_normal;
} }
text.text = nk_rgb_factor(text.text, style->combo.color_factor);
switch(background->type) { switch(background->type) {
case NK_STYLE_ITEM_IMAGE: case NK_STYLE_ITEM_IMAGE:
text.background = nk_rgba(0, 0, 0, 0); text.background = nk_rgba(0, 0, 0, 0);
nk_draw_image(&win->buffer, header, &background->data.image, nk_white); nk_draw_image(&win->buffer, header, &background->data.image, nk_rgb_factor(nk_white, style->combo.color_factor));
break; break;
case NK_STYLE_ITEM_NINE_SLICE: case NK_STYLE_ITEM_NINE_SLICE:
text.background = nk_rgba(0, 0, 0, 0); text.background = nk_rgba(0, 0, 0, 0);
nk_draw_nine_slice(&win->buffer, header, &background->data.slice, nk_white); nk_draw_nine_slice(&win->buffer, header, &background->data.slice, nk_rgb_factor(nk_white, style->combo.color_factor));
break; break;
case NK_STYLE_ITEM_COLOR: case NK_STYLE_ITEM_COLOR:
text.background = background->data.color; text.background = background->data.color;
nk_fill_rect(&win->buffer, header, style->combo.rounding, background->data.color); nk_fill_rect(&win->buffer, header, style->combo.rounding, nk_rgb_factor(background->data.color, style->combo.color_factor));
nk_stroke_rect(&win->buffer, header, style->combo.rounding, style->combo.border, style->combo.border_color); nk_stroke_rect(&win->buffer, header, style->combo.rounding, style->combo.border, nk_rgb_factor(style->combo.border_color, style->combo.color_factor));
break; break;
} }
{ {
@ -175,7 +177,7 @@ nk_combo_begin_color(struct nk_context *ctx, struct nk_color color, struct nk_ve
if (s == NK_WIDGET_INVALID) if (s == NK_WIDGET_INVALID)
return 0; return 0;
in = (win->layout->flags & NK_WINDOW_ROM || s == NK_WIDGET_ROM)? 0: &ctx->input; in = (win->layout->flags & NK_WINDOW_ROM || s == NK_WIDGET_DISABLED || s == NK_WIDGET_ROM)? 0: &ctx->input;
if (nk_button_behavior(&ctx->last_widget_state, header, in, NK_BUTTON_DEFAULT)) if (nk_button_behavior(&ctx->last_widget_state, header, in, NK_BUTTON_DEFAULT))
is_clicked = nk_true; is_clicked = nk_true;
@ -188,14 +190,14 @@ nk_combo_begin_color(struct nk_context *ctx, struct nk_color color, struct nk_ve
switch(background->type) { switch(background->type) {
case NK_STYLE_ITEM_IMAGE: case NK_STYLE_ITEM_IMAGE:
nk_draw_image(&win->buffer, header, &background->data.image, nk_white); nk_draw_image(&win->buffer, header, &background->data.image, nk_rgb_factor(nk_white, style->combo.color_factor));
break; break;
case NK_STYLE_ITEM_NINE_SLICE: case NK_STYLE_ITEM_NINE_SLICE:
nk_draw_nine_slice(&win->buffer, header, &background->data.slice, nk_white); nk_draw_nine_slice(&win->buffer, header, &background->data.slice, nk_rgb_factor(nk_white, style->combo.color_factor));
break; break;
case NK_STYLE_ITEM_COLOR: case NK_STYLE_ITEM_COLOR:
nk_fill_rect(&win->buffer, header, style->combo.rounding, background->data.color); nk_fill_rect(&win->buffer, header, style->combo.rounding, nk_rgb_factor(background->data.color, style->combo.color_factor));
nk_stroke_rect(&win->buffer, header, style->combo.rounding, style->combo.border, style->combo.border_color); nk_stroke_rect(&win->buffer, header, style->combo.rounding, style->combo.border, nk_rgb_factor(style->combo.border_color, style->combo.color_factor));
break; break;
} }
{ {
@ -233,7 +235,7 @@ nk_combo_begin_color(struct nk_context *ctx, struct nk_color color, struct nk_ve
bounds.w = (button.x - (style->combo.content_padding.x + style->combo.spacing.x)) - bounds.x; bounds.w = (button.x - (style->combo.content_padding.x + style->combo.spacing.x)) - bounds.x;
else else
bounds.w = header.w - 4 * style->combo.content_padding.x; bounds.w = header.w - 4 * style->combo.content_padding.x;
nk_fill_rect(&win->buffer, bounds, 0, color); nk_fill_rect(&win->buffer, bounds, 0, nk_rgb_factor(color, style->combo.color_factor));
/* draw open/close button */ /* draw open/close button */
if (draw_button_symbol) if (draw_button_symbol)
@ -268,7 +270,7 @@ nk_combo_begin_symbol(struct nk_context *ctx, enum nk_symbol_type symbol, struct
if (s == NK_WIDGET_INVALID) if (s == NK_WIDGET_INVALID)
return 0; return 0;
in = (win->layout->flags & NK_WINDOW_ROM || s == NK_WIDGET_ROM)? 0: &ctx->input; in = (win->layout->flags & NK_WINDOW_ROM || s == NK_WIDGET_DISABLED || s == NK_WIDGET_ROM)? 0: &ctx->input;
if (nk_button_behavior(&ctx->last_widget_state, header, in, NK_BUTTON_DEFAULT)) if (nk_button_behavior(&ctx->last_widget_state, header, in, NK_BUTTON_DEFAULT))
is_clicked = nk_true; is_clicked = nk_true;
@ -284,19 +286,21 @@ nk_combo_begin_symbol(struct nk_context *ctx, enum nk_symbol_type symbol, struct
symbol_color = style->combo.symbol_hover; symbol_color = style->combo.symbol_hover;
} }
symbol_color = nk_rgb_factor(symbol_color, style->combo.color_factor);
switch(background->type) { switch(background->type) {
case NK_STYLE_ITEM_IMAGE: case NK_STYLE_ITEM_IMAGE:
sym_background = nk_rgba(0, 0, 0, 0); sym_background = nk_rgba(0, 0, 0, 0);
nk_draw_image(&win->buffer, header, &background->data.image, nk_white); nk_draw_image(&win->buffer, header, &background->data.image, nk_rgb_factor(nk_white, style->combo.color_factor));
break; break;
case NK_STYLE_ITEM_NINE_SLICE: case NK_STYLE_ITEM_NINE_SLICE:
sym_background = nk_rgba(0, 0, 0, 0); sym_background = nk_rgba(0, 0, 0, 0);
nk_draw_nine_slice(&win->buffer, header, &background->data.slice, nk_white); nk_draw_nine_slice(&win->buffer, header, &background->data.slice, nk_rgb_factor(nk_white, style->combo.color_factor));
break; break;
case NK_STYLE_ITEM_COLOR: case NK_STYLE_ITEM_COLOR:
sym_background = background->data.color; sym_background = background->data.color;
nk_fill_rect(&win->buffer, header, style->combo.rounding, background->data.color); nk_fill_rect(&win->buffer, header, style->combo.rounding, nk_rgb_factor(background->data.color, style->combo.color_factor));
nk_stroke_rect(&win->buffer, header, style->combo.rounding, style->combo.border, style->combo.border_color); nk_stroke_rect(&win->buffer, header, style->combo.rounding, style->combo.border, nk_rgb_factor(style->combo.border_color, style->combo.color_factor));
break; break;
} }
{ {
@ -362,7 +366,7 @@ nk_combo_begin_symbol_text(struct nk_context *ctx, const char *selected, int len
s = nk_widget(&header, ctx); s = nk_widget(&header, ctx);
if (!s) return 0; if (!s) return 0;
in = (win->layout->flags & NK_WINDOW_ROM || s == NK_WIDGET_ROM)? 0: &ctx->input; in = (win->layout->flags & NK_WINDOW_ROM || s == NK_WIDGET_DISABLED || s == NK_WIDGET_ROM)? 0: &ctx->input;
if (nk_button_behavior(&ctx->last_widget_state, header, in, NK_BUTTON_DEFAULT)) if (nk_button_behavior(&ctx->last_widget_state, header, in, NK_BUTTON_DEFAULT))
is_clicked = nk_true; is_clicked = nk_true;
@ -381,19 +385,22 @@ nk_combo_begin_symbol_text(struct nk_context *ctx, const char *selected, int len
text.text = style->combo.label_normal; text.text = style->combo.label_normal;
} }
text.text = nk_rgb_factor(text.text, style->combo.color_factor);
symbol_color = nk_rgb_factor(symbol_color, style->combo.color_factor);
switch(background->type) { switch(background->type) {
case NK_STYLE_ITEM_IMAGE: case NK_STYLE_ITEM_IMAGE:
text.background = nk_rgba(0, 0, 0, 0); text.background = nk_rgba(0, 0, 0, 0);
nk_draw_image(&win->buffer, header, &background->data.image, nk_white); nk_draw_image(&win->buffer, header, &background->data.image, nk_rgb_factor(nk_white, style->combo.color_factor));
break; break;
case NK_STYLE_ITEM_NINE_SLICE: case NK_STYLE_ITEM_NINE_SLICE:
text.background = nk_rgba(0, 0, 0, 0); text.background = nk_rgba(0, 0, 0, 0);
nk_draw_nine_slice(&win->buffer, header, &background->data.slice, nk_white); nk_draw_nine_slice(&win->buffer, header, &background->data.slice, nk_rgb_factor(nk_white, style->combo.color_factor));
break; break;
case NK_STYLE_ITEM_COLOR: case NK_STYLE_ITEM_COLOR:
text.background = background->data.color; text.background = background->data.color;
nk_fill_rect(&win->buffer, header, style->combo.rounding, background->data.color); nk_fill_rect(&win->buffer, header, style->combo.rounding, nk_rgb_factor(background->data.color, style->combo.color_factor));
nk_stroke_rect(&win->buffer, header, style->combo.rounding, style->combo.border, style->combo.border_color); nk_stroke_rect(&win->buffer, header, style->combo.rounding, style->combo.border, nk_rgb_factor(style->combo.border_color, style->combo.color_factor));
break; break;
} }
{ {
@ -464,7 +471,7 @@ nk_combo_begin_image(struct nk_context *ctx, struct nk_image img, struct nk_vec2
if (s == NK_WIDGET_INVALID) if (s == NK_WIDGET_INVALID)
return 0; return 0;
in = (win->layout->flags & NK_WINDOW_ROM || s == NK_WIDGET_ROM)? 0: &ctx->input; in = (win->layout->flags & NK_WINDOW_ROM || s == NK_WIDGET_DISABLED || s == NK_WIDGET_ROM)? 0: &ctx->input;
if (nk_button_behavior(&ctx->last_widget_state, header, in, NK_BUTTON_DEFAULT)) if (nk_button_behavior(&ctx->last_widget_state, header, in, NK_BUTTON_DEFAULT))
is_clicked = nk_true; is_clicked = nk_true;
@ -477,14 +484,14 @@ nk_combo_begin_image(struct nk_context *ctx, struct nk_image img, struct nk_vec2
switch (background->type) { switch (background->type) {
case NK_STYLE_ITEM_IMAGE: case NK_STYLE_ITEM_IMAGE:
nk_draw_image(&win->buffer, header, &background->data.image, nk_white); nk_draw_image(&win->buffer, header, &background->data.image, nk_rgb_factor(nk_white, style->combo.color_factor));
break; break;
case NK_STYLE_ITEM_NINE_SLICE: case NK_STYLE_ITEM_NINE_SLICE:
nk_draw_nine_slice(&win->buffer, header, &background->data.slice, nk_white); nk_draw_nine_slice(&win->buffer, header, &background->data.slice, nk_rgb_factor(nk_white, style->combo.color_factor));
break; break;
case NK_STYLE_ITEM_COLOR: case NK_STYLE_ITEM_COLOR:
nk_fill_rect(&win->buffer, header, style->combo.rounding, background->data.color); nk_fill_rect(&win->buffer, header, style->combo.rounding, nk_rgb_factor(background->data.color, style->combo.color_factor));
nk_stroke_rect(&win->buffer, header, style->combo.rounding, style->combo.border, style->combo.border_color); nk_stroke_rect(&win->buffer, header, style->combo.rounding, style->combo.border, nk_rgb_factor(style->combo.border_color, style->combo.color_factor));
break; break;
} }
{ {
@ -522,7 +529,7 @@ nk_combo_begin_image(struct nk_context *ctx, struct nk_image img, struct nk_vec2
bounds.w = (button.x - style->combo.content_padding.y) - bounds.x; bounds.w = (button.x - style->combo.content_padding.y) - bounds.x;
else else
bounds.w = header.w - 2 * style->combo.content_padding.x; bounds.w = header.w - 2 * style->combo.content_padding.x;
nk_draw_image(&win->buffer, bounds, &img, nk_white); nk_draw_image(&win->buffer, bounds, &img, nk_rgb_factor(nk_white, style->combo.color_factor));
/* draw open/close button */ /* draw open/close button */
if (draw_button_symbol) if (draw_button_symbol)
@ -556,7 +563,7 @@ nk_combo_begin_image_text(struct nk_context *ctx, const char *selected, int len,
s = nk_widget(&header, ctx); s = nk_widget(&header, ctx);
if (!s) return 0; if (!s) return 0;
in = (win->layout->flags & NK_WINDOW_ROM || s == NK_WIDGET_ROM)? 0: &ctx->input; in = (win->layout->flags & NK_WINDOW_ROM || s == NK_WIDGET_DISABLED || s == NK_WIDGET_ROM)? 0: &ctx->input;
if (nk_button_behavior(&ctx->last_widget_state, header, in, NK_BUTTON_DEFAULT)) if (nk_button_behavior(&ctx->last_widget_state, header, in, NK_BUTTON_DEFAULT))
is_clicked = nk_true; is_clicked = nk_true;
@ -572,19 +579,21 @@ nk_combo_begin_image_text(struct nk_context *ctx, const char *selected, int len,
text.text = style->combo.label_normal; text.text = style->combo.label_normal;
} }
text.text = nk_rgb_factor(text.text, style->combo.color_factor);
switch(background->type) { switch(background->type) {
case NK_STYLE_ITEM_IMAGE: case NK_STYLE_ITEM_IMAGE:
text.background = nk_rgba(0, 0, 0, 0); text.background = nk_rgba(0, 0, 0, 0);
nk_draw_image(&win->buffer, header, &background->data.image, nk_white); nk_draw_image(&win->buffer, header, &background->data.image, nk_rgb_factor(nk_white, style->combo.color_factor));
break; break;
case NK_STYLE_ITEM_NINE_SLICE: case NK_STYLE_ITEM_NINE_SLICE:
text.background = nk_rgba(0, 0, 0, 0); text.background = nk_rgba(0, 0, 0, 0);
nk_draw_nine_slice(&win->buffer, header, &background->data.slice, nk_white); nk_draw_nine_slice(&win->buffer, header, &background->data.slice, nk_rgb_factor(nk_white, style->combo.color_factor));
break; break;
case NK_STYLE_ITEM_COLOR: case NK_STYLE_ITEM_COLOR:
text.background = background->data.color; text.background = background->data.color;
nk_fill_rect(&win->buffer, header, style->combo.rounding, background->data.color); nk_fill_rect(&win->buffer, header, style->combo.rounding, nk_rgb_factor(background->data.color, style->combo.color_factor));
nk_stroke_rect(&win->buffer, header, style->combo.rounding, style->combo.border, style->combo.border_color); nk_stroke_rect(&win->buffer, header, style->combo.rounding, style->combo.border, nk_rgb_factor(style->combo.border_color, style->combo.color_factor));
break; break;
} }
{ {
@ -623,7 +632,7 @@ nk_combo_begin_image_text(struct nk_context *ctx, const char *selected, int len,
image.y = header.y + style->combo.content_padding.y; image.y = header.y + style->combo.content_padding.y;
image.h = header.h - 2 * style->combo.content_padding.y; image.h = header.h - 2 * style->combo.content_padding.y;
image.w = image.h; image.w = image.h;
nk_draw_image(&win->buffer, image, &img, nk_white); nk_draw_image(&win->buffer, image, &img, nk_rgb_factor(nk_white, style->combo.color_factor));
/* draw label */ /* draw label */
text.padding = nk_vec2(0,0); text.padding = nk_vec2(0,0);

View File

@ -13,6 +13,7 @@ nk_contextual_begin(struct nk_context *ctx, nk_flags flags, struct nk_vec2 size,
struct nk_window *win; struct nk_window *win;
struct nk_window *popup; struct nk_window *popup;
struct nk_rect body; struct nk_rect body;
struct nk_input* in;
NK_STORAGE const struct nk_rect null_rect = {-1,-1,0,0}; NK_STORAGE const struct nk_rect null_rect = {-1,-1,0,0};
int is_clicked = 0; int is_clicked = 0;
@ -33,35 +34,39 @@ nk_contextual_begin(struct nk_context *ctx, nk_flags flags, struct nk_vec2 size,
/* check if currently active contextual is active */ /* check if currently active contextual is active */
popup = win->popup.win; popup = win->popup.win;
is_open = (popup && win->popup.type == NK_PANEL_CONTEXTUAL); is_open = (popup && win->popup.type == NK_PANEL_CONTEXTUAL);
is_clicked = nk_input_mouse_clicked(&ctx->input, NK_BUTTON_RIGHT, trigger_bounds); in = win->widgets_disabled ? 0 : &ctx->input;
if (win->popup.active_con && win->popup.con_count != win->popup.active_con) if (in) {
return 0; is_clicked = nk_input_mouse_clicked(in, NK_BUTTON_RIGHT, trigger_bounds);
if (!is_open && win->popup.active_con) if (win->popup.active_con && win->popup.con_count != win->popup.active_con)
win->popup.active_con = 0; return 0;
if ((!is_open && !is_clicked)) if (!is_open && win->popup.active_con)
return 0; win->popup.active_con = 0;
if ((!is_open && !is_clicked))
return 0;
/* calculate contextual position on click */ /* calculate contextual position on click */
win->popup.active_con = win->popup.con_count; win->popup.active_con = win->popup.con_count;
if (is_clicked) { if (is_clicked) {
body.x = ctx->input.mouse.pos.x; body.x = in->mouse.pos.x;
body.y = ctx->input.mouse.pos.y; body.y = in->mouse.pos.y;
} else { } else {
body.x = popup->bounds.x; body.x = popup->bounds.x;
body.y = popup->bounds.y; body.y = popup->bounds.y;
} }
body.w = size.x;
body.h = size.y;
/* start nonblocking contextual popup */ body.w = size.x;
ret = nk_nonblock_begin(ctx, flags|NK_WINDOW_NO_SCROLLBAR, body, body.h = size.y;
/* start nonblocking contextual popup */
ret = nk_nonblock_begin(ctx, flags | NK_WINDOW_NO_SCROLLBAR, body,
null_rect, NK_PANEL_CONTEXTUAL); null_rect, NK_PANEL_CONTEXTUAL);
if (ret) win->popup.type = NK_PANEL_CONTEXTUAL; if (ret) win->popup.type = NK_PANEL_CONTEXTUAL;
else { else {
win->popup.active_con = 0; win->popup.active_con = 0;
win->popup.type = NK_PANEL_NONE; win->popup.type = NK_PANEL_NONE;
if (win->popup.win) if (win->popup.win)
win->popup.win->flags = 0; win->popup.win->flags = 0;
}
} }
return ret; return ret;
} }

View File

@ -89,6 +89,9 @@ nk_edit_draw_text(struct nk_command_buffer *out,
float line_offset = 0; float line_offset = 0;
int line_count = 0; int line_count = 0;
foreground = nk_rgb_factor(foreground, style->color_factor);
background = nk_rgb_factor(background, style->color_factor);
struct nk_text txt; struct nk_text txt;
txt.padding = nk_vec2(0,0); txt.padding = nk_vec2(0,0);
txt.background = background; txt.background = background;
@ -331,14 +334,14 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out,
/* draw background frame */ /* draw background frame */
switch(background->type) { switch(background->type) {
case NK_STYLE_ITEM_IMAGE: case NK_STYLE_ITEM_IMAGE:
nk_draw_image(out, bounds, &background->data.image, nk_white); nk_draw_image(out, bounds, &background->data.image, nk_rgb_factor(nk_white, style->color_factor));
break; break;
case NK_STYLE_ITEM_NINE_SLICE: case NK_STYLE_ITEM_NINE_SLICE:
nk_draw_nine_slice(out, bounds, &background->data.slice, nk_white); nk_draw_nine_slice(out, bounds, &background->data.slice, nk_rgb_factor(nk_white, style->color_factor));
break; break;
case NK_STYLE_ITEM_COLOR: case NK_STYLE_ITEM_COLOR:
nk_fill_rect(out, bounds, style->rounding, background->data.color); nk_fill_rect(out, bounds, style->rounding, nk_rgb_factor(background->data.color, style->color_factor));
nk_stroke_rect(out, bounds, style->rounding, style->border, style->border_color); nk_stroke_rect(out, bounds, style->rounding, style->border, nk_rgb_factor(style->border_color, style->color_factor));
break; break;
}} }}
@ -547,6 +550,8 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out,
else else
background_color = background->data.color; background_color = background->data.color;
cursor_color = nk_rgb_factor(cursor_color, style->color_factor);
cursor_text_color = nk_rgb_factor(cursor_text_color, style->color_factor);
if (edit->select_start == edit->select_end) { if (edit->select_start == edit->select_end) {
/* no selection so just draw the complete text */ /* no selection so just draw the complete text */
@ -654,6 +659,10 @@ nk_do_edit(nk_flags *state, struct nk_command_buffer *out,
background_color = nk_rgba(0,0,0,0); background_color = nk_rgba(0,0,0,0);
else else
background_color = background->data.color; background_color = background->data.color;
background_color = nk_rgb_factor(background_color, style->color_factor);
text_color = nk_rgb_factor(text_color, style->color_factor);
nk_edit_draw_text(out, style, area.x - edit->scrollbar.x, nk_edit_draw_text(out, style, area.x - edit->scrollbar.x,
area.y - edit->scrollbar.y, 0, begin, l, row_height, font, area.y - edit->scrollbar.y, 0, begin, l, row_height, font,
background_color, text_color, nk_false); background_color, text_color, nk_false);
@ -773,6 +782,8 @@ nk_edit_buffer(struct nk_context *ctx, nk_flags flags,
style = &ctx->style; style = &ctx->style;
state = nk_widget(&bounds, ctx); state = nk_widget(&bounds, ctx);
if (!state) return state; if (!state) return state;
else if (state == NK_WIDGET_DISABLED)
flags |= NK_EDIT_READ_ONLY;
in = (win->layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (win->layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
/* check if edit is currently hot item */ /* check if edit is currently hot item */

View File

@ -128,7 +128,7 @@ nk_menu_begin_text(struct nk_context *ctx, const char *title, int len,
win = ctx->current; win = ctx->current;
state = nk_widget(&header, ctx); state = nk_widget(&header, ctx);
if (!state) return 0; if (!state) return 0;
in = (state == NK_WIDGET_ROM || win->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || win->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
if (nk_do_button_text(&ctx->last_widget_state, &win->buffer, header, if (nk_do_button_text(&ctx->last_widget_state, &win->buffer, header,
title, len, align, NK_BUTTON_DEFAULT, &ctx->style.menu_button, in, ctx->style.font)) title, len, align, NK_BUTTON_DEFAULT, &ctx->style.menu_button, in, ctx->style.font))
is_clicked = nk_true; is_clicked = nk_true;
@ -158,7 +158,7 @@ nk_menu_begin_image(struct nk_context *ctx, const char *id, struct nk_image img,
win = ctx->current; win = ctx->current;
state = nk_widget(&header, ctx); state = nk_widget(&header, ctx);
if (!state) return 0; if (!state) return 0;
in = (state == NK_WIDGET_ROM || win->layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || win->layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
if (nk_do_button_image(&ctx->last_widget_state, &win->buffer, header, if (nk_do_button_image(&ctx->last_widget_state, &win->buffer, header,
img, NK_BUTTON_DEFAULT, &ctx->style.menu_button, in)) img, NK_BUTTON_DEFAULT, &ctx->style.menu_button, in))
is_clicked = nk_true; is_clicked = nk_true;
@ -183,7 +183,7 @@ nk_menu_begin_symbol(struct nk_context *ctx, const char *id,
win = ctx->current; win = ctx->current;
state = nk_widget(&header, ctx); state = nk_widget(&header, ctx);
if (!state) return 0; if (!state) return 0;
in = (state == NK_WIDGET_ROM || win->layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || win->layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
if (nk_do_button_symbol(&ctx->last_widget_state, &win->buffer, header, if (nk_do_button_symbol(&ctx->last_widget_state, &win->buffer, header,
sym, NK_BUTTON_DEFAULT, &ctx->style.menu_button, in, ctx->style.font)) sym, NK_BUTTON_DEFAULT, &ctx->style.menu_button, in, ctx->style.font))
is_clicked = nk_true; is_clicked = nk_true;
@ -208,7 +208,7 @@ nk_menu_begin_image_text(struct nk_context *ctx, const char *title, int len,
win = ctx->current; win = ctx->current;
state = nk_widget(&header, ctx); state = nk_widget(&header, ctx);
if (!state) return 0; if (!state) return 0;
in = (state == NK_WIDGET_ROM || win->layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || win->layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
if (nk_do_button_text_image(&ctx->last_widget_state, &win->buffer, if (nk_do_button_text_image(&ctx->last_widget_state, &win->buffer,
header, img, title, len, align, NK_BUTTON_DEFAULT, &ctx->style.menu_button, header, img, title, len, align, NK_BUTTON_DEFAULT, &ctx->style.menu_button,
ctx->style.font, in)) ctx->style.font, in))
@ -241,7 +241,7 @@ nk_menu_begin_symbol_text(struct nk_context *ctx, const char *title, int len,
state = nk_widget(&header, ctx); state = nk_widget(&header, ctx);
if (!state) return 0; if (!state) return 0;
in = (state == NK_WIDGET_ROM || win->layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || win->layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
if (nk_do_button_text_symbol(&ctx->last_widget_state, &win->buffer, if (nk_do_button_text_symbol(&ctx->last_widget_state, &win->buffer,
header, sym, title, len, align, NK_BUTTON_DEFAULT, &ctx->style.menu_button, header, sym, title, len, align, NK_BUTTON_DEFAULT, &ctx->style.menu_button,
ctx->style.font, in)) is_clicked = nk_true; ctx->style.font, in)) is_clicked = nk_true;

View File

@ -62,28 +62,28 @@ nk_draw_progress(struct nk_command_buffer *out, nk_flags state,
/* draw background */ /* draw background */
switch(background->type) { switch(background->type) {
case NK_STYLE_ITEM_IMAGE: case NK_STYLE_ITEM_IMAGE:
nk_draw_image(out, *bounds, &background->data.image, nk_white); nk_draw_image(out, *bounds, &background->data.image, nk_rgb_factor(nk_white, style->color_factor));
break; break;
case NK_STYLE_ITEM_NINE_SLICE: case NK_STYLE_ITEM_NINE_SLICE:
nk_draw_nine_slice(out, *bounds, &background->data.slice, nk_white); nk_draw_nine_slice(out, *bounds, &background->data.slice, nk_rgb_factor(nk_white, style->color_factor));
break; break;
case NK_STYLE_ITEM_COLOR: case NK_STYLE_ITEM_COLOR:
nk_fill_rect(out, *bounds, style->rounding, background->data.color); nk_fill_rect(out, *bounds, style->rounding, nk_rgb_factor(background->data.color, style->color_factor));
nk_stroke_rect(out, *bounds, style->rounding, style->border, style->border_color); nk_stroke_rect(out, *bounds, style->rounding, style->border, nk_rgb_factor(style->border_color, style->color_factor));
break; break;
} }
/* draw cursor */ /* draw cursor */
switch(cursor->type) { switch(cursor->type) {
case NK_STYLE_ITEM_IMAGE: case NK_STYLE_ITEM_IMAGE:
nk_draw_image(out, *scursor, &cursor->data.image, nk_white); nk_draw_image(out, *scursor, &cursor->data.image, nk_rgb_factor(nk_white, style->color_factor));
break; break;
case NK_STYLE_ITEM_NINE_SLICE: case NK_STYLE_ITEM_NINE_SLICE:
nk_draw_nine_slice(out, *scursor, &cursor->data.slice, nk_white); nk_draw_nine_slice(out, *scursor, &cursor->data.slice, nk_rgb_factor(nk_white, style->color_factor));
break; break;
case NK_STYLE_ITEM_COLOR: case NK_STYLE_ITEM_COLOR:
nk_fill_rect(out, *scursor, style->rounding, cursor->data.color); nk_fill_rect(out, *scursor, style->rounding, nk_rgb_factor(cursor->data.color, style->color_factor));
nk_stroke_rect(out, *scursor, style->rounding, style->border, style->border_color); nk_stroke_rect(out, *scursor, style->rounding, style->border, nk_rgb_factor(style->border_color, style->color_factor));
break; break;
} }
} }
@ -143,7 +143,7 @@ nk_progress(struct nk_context *ctx, nk_size *cur, nk_size max, nk_bool is_modify
state = nk_widget(&bounds, ctx); state = nk_widget(&bounds, ctx);
if (!state) return 0; if (!state) return 0;
in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
old_value = *cur; old_value = *cur;
*cur = nk_do_progress(&ctx->last_widget_state, &win->buffer, bounds, *cur = nk_do_progress(&ctx->last_widget_state, &win->buffer, bounds,
*cur, max, is_modifyable, &style->progress, in); *cur, max, is_modifyable, &style->progress, in);

View File

@ -85,20 +85,22 @@ nk_draw_property(struct nk_command_buffer *out, const struct nk_style_property *
text.text = style->label_normal; text.text = style->label_normal;
} }
text.text = nk_rgb_factor(text.text, style->color_factor);
/* draw background */ /* draw background */
switch(background->type) { switch(background->type) {
case NK_STYLE_ITEM_IMAGE: case NK_STYLE_ITEM_IMAGE:
text.background = nk_rgba(0, 0, 0, 0); text.background = nk_rgba(0, 0, 0, 0);
nk_draw_image(out, *bounds, &background->data.image, nk_white); nk_draw_image(out, *bounds, &background->data.image, nk_rgb_factor(nk_white, style->color_factor));
break; break;
case NK_STYLE_ITEM_NINE_SLICE: case NK_STYLE_ITEM_NINE_SLICE:
text.background = nk_rgba(0, 0, 0, 0); text.background = nk_rgba(0, 0, 0, 0);
nk_draw_nine_slice(out, *bounds, &background->data.slice, nk_white); nk_draw_nine_slice(out, *bounds, &background->data.slice, nk_rgb_factor(nk_white, style->color_factor));
break; break;
case NK_STYLE_ITEM_COLOR: case NK_STYLE_ITEM_COLOR:
text.background = background->data.color; text.background = background->data.color;
nk_fill_rect(out, *bounds, style->rounding, background->data.color); nk_fill_rect(out, *bounds, style->rounding, nk_rgb_factor(background->data.color, style->color_factor));
nk_stroke_rect(out, *bounds, style->rounding, style->border, background->data.color); nk_stroke_rect(out, *bounds, style->rounding, style->border, nk_rgb_factor(background->data.color, style->color_factor));
break; break;
} }
@ -383,7 +385,7 @@ nk_property(struct nk_context *ctx, const char *name, struct nk_property_variant
old_state = *state; old_state = *state;
ctx->text_edit.clip = ctx->clip; ctx->text_edit.clip = ctx->clip;
in = ((s == NK_WIDGET_ROM && !win->property.active) || in = ((s == NK_WIDGET_ROM && !win->property.active) ||
layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; layout->flags & NK_WINDOW_ROM || s == NK_WIDGET_DISABLED) ? 0 : &ctx->input;
nk_do_property(&ctx->last_widget_state, &win->buffer, bounds, name, nk_do_property(&ctx->last_widget_state, &win->buffer, bounds, name,
variant, inc_per_pixel, buffer, len, state, cursor, select_begin, variant, inc_per_pixel, buffer, len, state, cursor, select_begin,
select_end, &style->property, filter, in, style->font, &ctx->text_edit, select_end, &style->property, filter, in, style->font, &ctx->text_edit,

View File

@ -41,23 +41,26 @@ nk_draw_selectable(struct nk_command_buffer *out,
text.text = style->text_normal_active; text.text = style->text_normal_active;
} }
} }
text.text = nk_rgb_factor(text.text, style->color_factor);
/* draw selectable background and text */ /* draw selectable background and text */
switch (background->type) { switch (background->type) {
case NK_STYLE_ITEM_IMAGE: case NK_STYLE_ITEM_IMAGE:
text.background = nk_rgba(0, 0, 0, 0); text.background = nk_rgba(0, 0, 0, 0);
nk_draw_image(out, *bounds, &background->data.image, nk_white); nk_draw_image(out, *bounds, &background->data.image, nk_rgb_factor(nk_white, style->color_factor));
break; break;
case NK_STYLE_ITEM_NINE_SLICE: case NK_STYLE_ITEM_NINE_SLICE:
text.background = nk_rgba(0, 0, 0, 0); text.background = nk_rgba(0, 0, 0, 0);
nk_draw_nine_slice(out, *bounds, &background->data.slice, nk_white); nk_draw_nine_slice(out, *bounds, &background->data.slice, nk_rgb_factor(nk_white, style->color_factor));
break; break;
case NK_STYLE_ITEM_COLOR: case NK_STYLE_ITEM_COLOR:
text.background = background->data.color; text.background = background->data.color;
nk_fill_rect(out, *bounds, style->rounding, background->data.color); nk_fill_rect(out, *bounds, style->rounding, nk_rgb_factor(background->data.color, style->color_factor));
break; break;
} }
if (icon) { if (icon) {
if (img) nk_draw_image(out, *icon, img, nk_white); if (img) nk_draw_image(out, *icon, img, nk_rgb_factor(nk_white, style->color_factor));
else nk_draw_symbol(out, sym, *icon, text.background, text.text, 1, font); else nk_draw_symbol(out, sym, *icon, text.background, text.text, 1, font);
} }
nk_widget_text(out, *bounds, string, len, &text, align, font); nk_widget_text(out, *bounds, string, len, &text, align, font);
@ -218,7 +221,7 @@ nk_selectable_text(struct nk_context *ctx, const char *str, int len,
state = nk_widget(&bounds, ctx); state = nk_widget(&bounds, ctx);
if (!state) return 0; if (!state) return 0;
in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
return nk_do_selectable(&ctx->last_widget_state, &win->buffer, bounds, return nk_do_selectable(&ctx->last_widget_state, &win->buffer, bounds,
str, len, align, value, &style->selectable, in, style->font); str, len, align, value, &style->selectable, in, style->font);
} }
@ -247,7 +250,7 @@ nk_selectable_image_text(struct nk_context *ctx, struct nk_image img,
state = nk_widget(&bounds, ctx); state = nk_widget(&bounds, ctx);
if (!state) return 0; if (!state) return 0;
in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
return nk_do_selectable_image(&ctx->last_widget_state, &win->buffer, bounds, return nk_do_selectable_image(&ctx->last_widget_state, &win->buffer, bounds,
str, len, align, value, &img, &style->selectable, in, style->font); str, len, align, value, &img, &style->selectable, in, style->font);
} }
@ -276,7 +279,7 @@ nk_selectable_symbol_text(struct nk_context *ctx, enum nk_symbol_type sym,
state = nk_widget(&bounds, ctx); state = nk_widget(&bounds, ctx);
if (!state) return 0; if (!state) return 0;
in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
return nk_do_selectable_symbol(&ctx->last_widget_state, &win->buffer, bounds, return nk_do_selectable_symbol(&ctx->last_widget_state, &win->buffer, bounds,
str, len, align, value, sym, &style->selectable, in, style->font); str, len, align, value, sym, &style->selectable, in, style->font);
} }

View File

@ -78,6 +78,7 @@ nk_draw_slider(struct nk_command_buffer *out, nk_flags state,
bar_color = style->bar_normal; bar_color = style->bar_normal;
cursor = &style->cursor_normal; cursor = &style->cursor_normal;
} }
/* calculate slider background bar */ /* calculate slider background bar */
bar.x = bounds->x; bar.x = bounds->x;
bar.y = (visual_cursor->y + visual_cursor->h/2) - bounds->h/12; bar.y = (visual_cursor->y + visual_cursor->h/2) - bounds->h/12;
@ -93,26 +94,26 @@ nk_draw_slider(struct nk_command_buffer *out, nk_flags state,
/* draw background */ /* draw background */
switch(background->type) { switch(background->type) {
case NK_STYLE_ITEM_IMAGE: case NK_STYLE_ITEM_IMAGE:
nk_draw_image(out, *bounds, &background->data.image, nk_white); nk_draw_image(out, *bounds, &background->data.image, nk_rgb_factor(nk_white, style->color_factor));
break; break;
case NK_STYLE_ITEM_NINE_SLICE: case NK_STYLE_ITEM_NINE_SLICE:
nk_draw_nine_slice(out, *bounds, &background->data.slice, nk_white); nk_draw_nine_slice(out, *bounds, &background->data.slice, nk_rgb_factor(nk_white, style->color_factor));
break; break;
case NK_STYLE_ITEM_COLOR: case NK_STYLE_ITEM_COLOR:
nk_fill_rect(out, *bounds, style->rounding, background->data.color); nk_fill_rect(out, *bounds, style->rounding, nk_rgb_factor(background->data.color, style->color_factor));
nk_stroke_rect(out, *bounds, style->rounding, style->border, style->border_color); nk_stroke_rect(out, *bounds, style->rounding, style->border, nk_rgb_factor(style->border_color, style->color_factor));
break; break;
} }
/* draw slider bar */ /* draw slider bar */
nk_fill_rect(out, bar, style->rounding, bar_color); nk_fill_rect(out, bar, style->rounding, nk_rgb_factor(bar_color, style->color_factor));
nk_fill_rect(out, fill, style->rounding, style->bar_filled); nk_fill_rect(out, fill, style->rounding, nk_rgb_factor(style->bar_filled, style->color_factor));
/* draw cursor */ /* draw cursor */
if (cursor->type == NK_STYLE_ITEM_IMAGE) if (cursor->type == NK_STYLE_ITEM_IMAGE)
nk_draw_image(out, *visual_cursor, &cursor->data.image, nk_white); nk_draw_image(out, *visual_cursor, &cursor->data.image, nk_rgb_factor(nk_white, style->color_factor));
else else
nk_fill_circle(out, *visual_cursor, cursor->data.color); nk_fill_circle(out, *visual_cursor, nk_rgb_factor(cursor->data.color, style->color_factor));
} }
NK_LIB float NK_LIB float
nk_do_slider(nk_flags *state, nk_do_slider(nk_flags *state,
@ -230,7 +231,7 @@ nk_slider_float(struct nk_context *ctx, float min_value, float *value, float max
state = nk_widget(&bounds, ctx); state = nk_widget(&bounds, ctx);
if (!state) return ret; if (!state) return ret;
in = (/*state == NK_WIDGET_ROM || */ layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (/*state == NK_WIDGET_ROM || */ state == NK_WIDGET_DISABLED || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
old_value = *value; old_value = *value;
*value = nk_do_slider(&ctx->last_widget_state, &win->buffer, bounds, min_value, *value = nk_do_slider(&ctx->last_widget_state, &win->buffer, bounds, min_value,

View File

@ -113,6 +113,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
text = &style->text; text = &style->text;
text->color = table[NK_COLOR_TEXT]; text->color = table[NK_COLOR_TEXT];
text->padding = nk_vec2(0,0); text->padding = nk_vec2(0,0);
text->color_factor = 1.0f;
text->disabled_factor = 0.5f;
/* default button */ /* default button */
button = &style->button; button = &style->button;
@ -132,6 +134,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
button->text_alignment = NK_TEXT_CENTERED; button->text_alignment = NK_TEXT_CENTERED;
button->border = 1.0f; button->border = 1.0f;
button->rounding = 4.0f; button->rounding = 4.0f;
button->color_factor = 1.0f;
button->disabled_factor = 0.5f;
button->draw_begin = 0; button->draw_begin = 0;
button->draw_end = 0; button->draw_end = 0;
@ -152,6 +156,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
button->text_alignment = NK_TEXT_CENTERED; button->text_alignment = NK_TEXT_CENTERED;
button->border = 0.0f; button->border = 0.0f;
button->rounding = 0.0f; button->rounding = 0.0f;
button->color_factor = 1.0f;
button->disabled_factor = 0.5f;
button->draw_begin = 0; button->draw_begin = 0;
button->draw_end = 0; button->draw_end = 0;
@ -172,6 +178,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
button->text_alignment = NK_TEXT_CENTERED; button->text_alignment = NK_TEXT_CENTERED;
button->border = 0.0f; button->border = 0.0f;
button->rounding = 1.0f; button->rounding = 1.0f;
button->color_factor = 1.0f;
button->disabled_factor = 0.5f;
button->draw_begin = 0; button->draw_begin = 0;
button->draw_end = 0; button->draw_end = 0;
@ -193,6 +201,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
toggle->border_color = nk_rgba(0,0,0,0); toggle->border_color = nk_rgba(0,0,0,0);
toggle->border = 0.0f; toggle->border = 0.0f;
toggle->spacing = 4; toggle->spacing = 4;
toggle->color_factor = 1.0f;
toggle->disabled_factor = 0.5f;
/* option toggle */ /* option toggle */
toggle = &style->option; toggle = &style->option;
@ -212,6 +222,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
toggle->border_color = nk_rgba(0,0,0,0); toggle->border_color = nk_rgba(0,0,0,0);
toggle->border = 0.0f; toggle->border = 0.0f;
toggle->spacing = 4; toggle->spacing = 4;
toggle->color_factor = 1.0f;
toggle->disabled_factor = 0.5f;
/* selectable */ /* selectable */
select = &style->selectable; select = &style->selectable;
@ -233,6 +245,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
select->touch_padding = nk_vec2(0,0); select->touch_padding = nk_vec2(0,0);
select->userdata = nk_handle_ptr(0); select->userdata = nk_handle_ptr(0);
select->rounding = 0.0f; select->rounding = 0.0f;
select->color_factor = 1.0f;
select->disabled_factor = 0.5f;
select->draw_begin = 0; select->draw_begin = 0;
select->draw_end = 0; select->draw_end = 0;
@ -258,6 +272,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
slider->show_buttons = nk_false; slider->show_buttons = nk_false;
slider->bar_height = 8; slider->bar_height = 8;
slider->rounding = 0; slider->rounding = 0;
slider->color_factor = 1.0f;
slider->disabled_factor = 0.5f;
slider->draw_begin = 0; slider->draw_begin = 0;
slider->draw_end = 0; slider->draw_end = 0;
@ -277,6 +293,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
button->text_alignment = NK_TEXT_CENTERED; button->text_alignment = NK_TEXT_CENTERED;
button->border = 1.0f; button->border = 1.0f;
button->rounding = 0.0f; button->rounding = 0.0f;
button->color_factor = 1.0f;
button->disabled_factor = 0.5f;
button->draw_begin = 0; button->draw_begin = 0;
button->draw_end = 0; button->draw_end = 0;
style->slider.dec_button = style->slider.inc_button; style->slider.dec_button = style->slider.inc_button;
@ -298,6 +316,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
prog->border = 0; prog->border = 0;
prog->cursor_rounding = 0; prog->cursor_rounding = 0;
prog->cursor_border = 0; prog->cursor_border = 0;
prog->color_factor = 1.0f;
prog->disabled_factor = 0.5f;
prog->draw_begin = 0; prog->draw_begin = 0;
prog->draw_end = 0; prog->draw_end = 0;
@ -321,6 +341,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
scroll->rounding = 0; scroll->rounding = 0;
scroll->border_cursor = 0; scroll->border_cursor = 0;
scroll->rounding_cursor = 0; scroll->rounding_cursor = 0;
scroll->color_factor = 1.0f;
scroll->disabled_factor = 0.5f;
scroll->draw_begin = 0; scroll->draw_begin = 0;
scroll->draw_end = 0; scroll->draw_end = 0;
style->scrollv = style->scrollh; style->scrollv = style->scrollh;
@ -341,6 +363,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
button->text_alignment = NK_TEXT_CENTERED; button->text_alignment = NK_TEXT_CENTERED;
button->border = 1.0f; button->border = 1.0f;
button->rounding = 0.0f; button->rounding = 0.0f;
button->color_factor = 1.0f;
button->disabled_factor = 0.5f;
button->draw_begin = 0; button->draw_begin = 0;
button->draw_end = 0; button->draw_end = 0;
style->scrollh.dec_button = style->scrollh.inc_button; style->scrollh.dec_button = style->scrollh.inc_button;
@ -372,6 +396,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
edit->cursor_size = 4; edit->cursor_size = 4;
edit->border = 1; edit->border = 1;
edit->rounding = 0; edit->rounding = 0;
edit->color_factor = 1.0f;
edit->disabled_factor = 0.5f;
/* property */ /* property */
property = &style->property; property = &style->property;
@ -391,6 +417,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
property->rounding = 10; property->rounding = 10;
property->draw_begin = 0; property->draw_begin = 0;
property->draw_end = 0; property->draw_end = 0;
property->color_factor = 1.0f;
property->disabled_factor = 0.5f;
/* property buttons */ /* property buttons */
button = &style->property.dec_button; button = &style->property.dec_button;
@ -409,6 +437,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
button->text_alignment = NK_TEXT_CENTERED; button->text_alignment = NK_TEXT_CENTERED;
button->border = 0.0f; button->border = 0.0f;
button->rounding = 0.0f; button->rounding = 0.0f;
button->color_factor = 1.0f;
button->disabled_factor = 0.5f;
button->draw_begin = 0; button->draw_begin = 0;
button->draw_end = 0; button->draw_end = 0;
style->property.inc_button = style->property.dec_button; style->property.inc_button = style->property.dec_button;
@ -435,6 +465,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
edit->cursor_size = 8; edit->cursor_size = 8;
edit->border = 0; edit->border = 0;
edit->rounding = 0; edit->rounding = 0;
edit->color_factor = 1.0f;
edit->disabled_factor = 0.5f;
/* chart */ /* chart */
chart = &style->chart; chart = &style->chart;
@ -446,6 +478,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
chart->padding = nk_vec2(4,4); chart->padding = nk_vec2(4,4);
chart->border = 0; chart->border = 0;
chart->rounding = 0; chart->rounding = 0;
chart->color_factor = 1.0f;
chart->disabled_factor = 0.5f;
/* combo */ /* combo */
combo = &style->combo; combo = &style->combo;
@ -464,6 +498,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
combo->spacing = nk_vec2(4,0); combo->spacing = nk_vec2(4,0);
combo->border = 1; combo->border = 1;
combo->rounding = 0; combo->rounding = 0;
combo->color_factor = 1.0f;
combo->disabled_factor = 0.5f;
/* combo button */ /* combo button */
button = &style->combo.button; button = &style->combo.button;
@ -482,6 +518,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
button->text_alignment = NK_TEXT_CENTERED; button->text_alignment = NK_TEXT_CENTERED;
button->border = 0.0f; button->border = 0.0f;
button->rounding = 0.0f; button->rounding = 0.0f;
button->color_factor = 1.0f;
button->disabled_factor = 0.5f;
button->draw_begin = 0; button->draw_begin = 0;
button->draw_end = 0; button->draw_end = 0;
@ -497,6 +535,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
tab->indent = 10.0f; tab->indent = 10.0f;
tab->border = 1; tab->border = 1;
tab->rounding = 0; tab->rounding = 0;
tab->color_factor = 1.0f;
tab->disabled_factor = 0.5f;
/* tab button */ /* tab button */
button = &style->tab.tab_minimize_button; button = &style->tab.tab_minimize_button;
@ -515,6 +555,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
button->text_alignment = NK_TEXT_CENTERED; button->text_alignment = NK_TEXT_CENTERED;
button->border = 0.0f; button->border = 0.0f;
button->rounding = 0.0f; button->rounding = 0.0f;
button->color_factor = 1.0f;
button->disabled_factor = 0.5f;
button->draw_begin = 0; button->draw_begin = 0;
button->draw_end = 0; button->draw_end = 0;
style->tab.tab_maximize_button =*button; style->tab.tab_maximize_button =*button;
@ -536,6 +578,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
button->text_alignment = NK_TEXT_CENTERED; button->text_alignment = NK_TEXT_CENTERED;
button->border = 0.0f; button->border = 0.0f;
button->rounding = 0.0f; button->rounding = 0.0f;
button->color_factor = 1.0f;
button->disabled_factor = 0.5f;
button->draw_begin = 0; button->draw_begin = 0;
button->draw_end = 0; button->draw_end = 0;
style->tab.node_maximize_button =*button; style->tab.node_maximize_button =*button;
@ -573,6 +617,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
button->text_alignment = NK_TEXT_CENTERED; button->text_alignment = NK_TEXT_CENTERED;
button->border = 0.0f; button->border = 0.0f;
button->rounding = 0.0f; button->rounding = 0.0f;
button->color_factor = 1.0f;
button->disabled_factor = 0.5f;
button->draw_begin = 0; button->draw_begin = 0;
button->draw_end = 0; button->draw_end = 0;
@ -593,6 +639,8 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
button->text_alignment = NK_TEXT_CENTERED; button->text_alignment = NK_TEXT_CENTERED;
button->border = 0.0f; button->border = 0.0f;
button->rounding = 0.0f; button->rounding = 0.0f;
button->color_factor = 1.0f;
button->disabled_factor = 0.5f;
button->draw_begin = 0; button->draw_begin = 0;
button->draw_end = 0; button->draw_end = 0;

View File

@ -114,7 +114,7 @@ nk_text_colored(struct nk_context *ctx, const char *str, int len,
text.padding.x = item_padding.x; text.padding.x = item_padding.x;
text.padding.y = item_padding.y; text.padding.y = item_padding.y;
text.background = style->window.background; text.background = style->window.background;
text.text = color; text.text = nk_rgb_factor(color, style->text.color_factor);
nk_widget_text(&win->buffer, bounds, str, len, &text, alignment, style->font); nk_widget_text(&win->buffer, bounds, str, len, &text, alignment, style->font);
} }
NK_API void NK_API void
@ -141,7 +141,7 @@ nk_text_wrap_colored(struct nk_context *ctx, const char *str,
text.padding.x = item_padding.x; text.padding.x = item_padding.x;
text.padding.y = item_padding.y; text.padding.y = item_padding.y;
text.background = style->window.background; text.background = style->window.background;
text.text = color; text.text = nk_rgb_factor(color, style->text.color_factor);
nk_widget_text_wrap(&win->buffer, bounds, str, len, &text, style->font); nk_widget_text_wrap(&win->buffer, bounds, str, len, &text, style->font);
} }
#ifdef NK_INCLUDE_STANDARD_VARARGS #ifdef NK_INCLUDE_STANDARD_VARARGS

View File

@ -47,14 +47,16 @@ nk_draw_checkbox(struct nk_command_buffer *out,
text.text = style->text_normal; text.text = style->text_normal;
} }
text.text = nk_rgb_factor(text.text, style->color_factor);
/* draw background and cursor */ /* draw background and cursor */
if (background->type == NK_STYLE_ITEM_COLOR) { if (background->type == NK_STYLE_ITEM_COLOR) {
nk_fill_rect(out, *selector, 0, style->border_color); nk_fill_rect(out, *selector, 0, nk_rgb_factor(style->border_color, style->color_factor));
nk_fill_rect(out, nk_shrink_rect(*selector, style->border), 0, background->data.color); nk_fill_rect(out, nk_shrink_rect(*selector, style->border), 0, nk_rgb_factor(background->data.color, style->color_factor));
} else nk_draw_image(out, *selector, &background->data.image, nk_white); } else nk_draw_image(out, *selector, &background->data.image, nk_rgb_factor(nk_white, style->color_factor));
if (active) { if (active) {
if (cursor->type == NK_STYLE_ITEM_IMAGE) if (cursor->type == NK_STYLE_ITEM_IMAGE)
nk_draw_image(out, *cursors, &cursor->data.image, nk_white); nk_draw_image(out, *cursors, &cursor->data.image, nk_rgb_factor(nk_white, style->color_factor));
else nk_fill_rect(out, *cursors, 0, cursor->data.color); else nk_fill_rect(out, *cursors, 0, cursor->data.color);
} }
@ -89,14 +91,16 @@ nk_draw_option(struct nk_command_buffer *out,
text.text = style->text_normal; text.text = style->text_normal;
} }
text.text = nk_rgb_factor(text.text, style->color_factor);
/* draw background and cursor */ /* draw background and cursor */
if (background->type == NK_STYLE_ITEM_COLOR) { if (background->type == NK_STYLE_ITEM_COLOR) {
nk_fill_circle(out, *selector, style->border_color); nk_fill_circle(out, *selector, nk_rgb_factor(style->border_color, style->color_factor));
nk_fill_circle(out, nk_shrink_rect(*selector, style->border), background->data.color); nk_fill_circle(out, nk_shrink_rect(*selector, style->border), nk_rgb_factor(background->data.color, style->color_factor));
} else nk_draw_image(out, *selector, &background->data.image, nk_white); } else nk_draw_image(out, *selector, &background->data.image, nk_rgb_factor(nk_white, style->color_factor));
if (active) { if (active) {
if (cursor->type == NK_STYLE_ITEM_IMAGE) if (cursor->type == NK_STYLE_ITEM_IMAGE)
nk_draw_image(out, *cursors, &cursor->data.image, nk_white); nk_draw_image(out, *cursors, &cursor->data.image, nk_rgb_factor(nk_white, style->color_factor));
else nk_fill_circle(out, *cursors, cursor->data.color); else nk_fill_circle(out, *cursors, cursor->data.color);
} }
@ -195,7 +199,7 @@ nk_check_text(struct nk_context *ctx, const char *text, int len, nk_bool active)
state = nk_widget(&bounds, ctx); state = nk_widget(&bounds, ctx);
if (!state) return active; if (!state) return active;
in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
nk_do_toggle(&ctx->last_widget_state, &win->buffer, bounds, &active, nk_do_toggle(&ctx->last_widget_state, &win->buffer, bounds, &active,
text, len, NK_TOGGLE_CHECK, &style->checkbox, in, style->font); text, len, NK_TOGGLE_CHECK, &style->checkbox, in, style->font);
return active; return active;
@ -290,7 +294,7 @@ nk_option_text(struct nk_context *ctx, const char *text, int len, nk_bool is_act
state = nk_widget(&bounds, ctx); state = nk_widget(&bounds, ctx);
if (!state) return (int)state; if (!state) return (int)state;
in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input; in = (state == NK_WIDGET_ROM || state == NK_WIDGET_DISABLED || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
nk_do_toggle(&ctx->last_widget_state, &win->buffer, bounds, &is_active, nk_do_toggle(&ctx->last_widget_state, &win->buffer, bounds, &is_active,
text, len, NK_TOGGLE_OPTION, &style->option, in, style->font); text, len, NK_TOGGLE_OPTION, &style->option, in, style->font);
return is_active; return is_active;

View File

@ -175,6 +175,8 @@ nk_widget(struct nk_rect *bounds, const struct nk_context *ctx)
nk_unify(&v, &c, bounds->x, bounds->y, bounds->x + bounds->w, bounds->y + bounds->h); nk_unify(&v, &c, bounds->x, bounds->y, bounds->x + bounds->w, bounds->y + bounds->h);
if (!NK_INTERSECT(c.x, c.y, c.w, c.h, bounds->x, bounds->y, bounds->w, bounds->h)) if (!NK_INTERSECT(c.x, c.y, c.w, c.h, bounds->x, bounds->y, bounds->w, bounds->h))
return NK_WIDGET_INVALID; return NK_WIDGET_INVALID;
if (win->widgets_disabled)
return NK_WIDGET_DISABLED;
if (!NK_INBOX(in->mouse.pos.x, in->mouse.pos.y, v.x, v.y, v.w, v.h)) if (!NK_INBOX(in->mouse.pos.x, in->mouse.pos.y, v.x, v.y, v.w, v.h))
return NK_WIDGET_ROM; return NK_WIDGET_ROM;
return NK_WIDGET_VALID; return NK_WIDGET_VALID;
@ -227,4 +229,101 @@ nk_spacing(struct nk_context *ctx, int cols)
nk_panel_alloc_space(&none, ctx); nk_panel_alloc_space(&none, ctx);
} layout->row.index = index; } layout->row.index = index;
} }
NK_API void
nk_widget_disable_begin(struct nk_context* ctx)
{
struct nk_window* win;
struct nk_style* style;
NK_ASSERT(ctx);
NK_ASSERT(ctx->current);
if (!ctx || !ctx->current)
return;
win = ctx->current;
style = &ctx->style;
win->widgets_disabled = nk_true;
style->button.color_factor = style->button.disabled_factor;
style->chart.color_factor = style->chart.disabled_factor;
style->checkbox.color_factor = style->checkbox.disabled_factor;
style->combo.color_factor = style->combo.disabled_factor;
style->combo.button.color_factor = style->combo.button.disabled_factor;
style->contextual_button.color_factor = style->contextual_button.disabled_factor;
style->edit.color_factor = style->edit.disabled_factor;
style->edit.scrollbar.color_factor = style->edit.scrollbar.disabled_factor;
style->menu_button.color_factor = style->menu_button.disabled_factor;
style->option.color_factor = style->option.disabled_factor;
style->progress.color_factor = style->progress.disabled_factor;
style->property.color_factor = style->property.disabled_factor;
style->property.inc_button.color_factor = style->property.inc_button.disabled_factor;
style->property.dec_button.color_factor = style->property.dec_button.disabled_factor;
style->property.edit.color_factor = style->property.edit.disabled_factor;
style->scrollh.color_factor = style->scrollh.disabled_factor;
style->scrollh.inc_button.color_factor = style->scrollh.inc_button.disabled_factor;
style->scrollh.dec_button.color_factor = style->scrollh.dec_button.disabled_factor;
style->scrollv.color_factor = style->scrollv.disabled_factor;
style->scrollv.inc_button.color_factor = style->scrollv.inc_button.disabled_factor;
style->scrollv.dec_button.color_factor = style->scrollv.dec_button.disabled_factor;
style->selectable.color_factor = style->selectable.disabled_factor;
style->slider.color_factor = style->slider.disabled_factor;
style->slider.inc_button.color_factor = style->slider.inc_button.disabled_factor;
style->slider.dec_button.color_factor = style->slider.dec_button.disabled_factor;
style->tab.color_factor = style->tab.disabled_factor;
style->tab.node_maximize_button.color_factor = style->tab.node_maximize_button.disabled_factor;
style->tab.node_minimize_button.color_factor = style->tab.node_minimize_button.disabled_factor;
style->tab.tab_maximize_button.color_factor = style->tab.tab_maximize_button.disabled_factor;
style->tab.tab_minimize_button.color_factor = style->tab.tab_minimize_button.disabled_factor;
style->text.color_factor = style->text.disabled_factor;
}
NK_API void
nk_widget_disable_end(struct nk_context* ctx)
{
struct nk_window* win;
struct nk_style* style;
NK_ASSERT(ctx);
NK_ASSERT(ctx->current);
if (!ctx || !ctx->current)
return;
win = ctx->current;
style = &ctx->style;
win->widgets_disabled = nk_false;
style->button.color_factor = 1.0f;
style->chart.color_factor = 1.0f;
style->checkbox.color_factor = 1.0f;
style->combo.color_factor = 1.0f;
style->combo.button.color_factor = 1.0f;
style->contextual_button.color_factor = 1.0f;
style->edit.color_factor = 1.0f;
style->edit.scrollbar.color_factor = 1.0f;
style->menu_button.color_factor = 1.0f;
style->option.color_factor = 1.0f;
style->progress.color_factor = 1.0f;
style->property.color_factor = 1.0f;
style->property.inc_button.color_factor = 1.0f;
style->property.dec_button.color_factor = 1.0f;
style->property.edit.color_factor = 1.0f;
style->scrollh.color_factor = 1.0f;
style->scrollh.inc_button.color_factor = 1.0f;
style->scrollh.dec_button.color_factor = 1.0f;
style->scrollv.color_factor = 1.0f;
style->scrollv.inc_button.color_factor = 1.0f;
style->scrollv.dec_button.color_factor = 1.0f;
style->selectable.color_factor = 1.0f;
style->slider.color_factor = 1.0f;
style->slider.inc_button.color_factor = 1.0f;
style->slider.dec_button.color_factor = 1.0f;
style->tab.color_factor = 1.0f;
style->tab.node_maximize_button.color_factor = 1.0f;
style->tab.node_minimize_button.color_factor = 1.0f;
style->tab.tab_maximize_button.color_factor = 1.0f;
style->tab.tab_minimize_button.color_factor = 1.0f;
style->text.color_factor = 1.0f;
}

View File

@ -180,6 +180,7 @@ nk_begin_titled(struct nk_context *ctx, const char *name, const char *title,
NK_MEMCPY(win->name_string, name, name_length); NK_MEMCPY(win->name_string, name, name_length);
win->name_string[name_length] = 0; win->name_string[name_length] = 0;
win->popup.win = 0; win->popup.win = 0;
win->widgets_disabled = false;
if (!ctx->active) if (!ctx->active)
ctx->active = win; ctx->active = win;
} else { } else {