diff --git a/demo/overview.c b/demo/overview.c index 5e13774..e200ab5 100644 --- a/demo/overview.c +++ b/demo/overview.c @@ -1,4 +1,3 @@ - static int overview(struct nk_context *ctx) { @@ -221,7 +220,6 @@ overview(struct nk_context *ctx) option = nk_option_label(ctx, "optionB", option == B) ? B : option; option = nk_option_label(ctx, "optionC", option == C) ? C : option; - nk_layout_row(ctx, NK_STATIC, 30, 2, ratio); nk_labelf(ctx, NK_TEXT_LEFT, "Slider int"); nk_slider_int(ctx, 0, &int_slider, 10, 1); @@ -253,6 +251,32 @@ overview(struct nk_context *ctx) nk_tree_pop(ctx); } + if (nk_tree_push(ctx, NK_TREE_NODE, "Inactive", NK_MINIMIZED)) + { + static int inactive = 1; + nk_layout_row_dynamic(ctx, 30, 1); + nk_checkbox_label(ctx, "Inactive", &inactive); + + nk_layout_row_static(ctx, 30, 80, 1); + if (inactive) { + struct nk_style_button button; + 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)); + 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"); + nk_tree_pop(ctx); + } + + if (nk_tree_push(ctx, NK_TREE_NODE, "Selectable", NK_MINIMIZED)) { if (nk_tree_push(ctx, NK_TREE_NODE, "List", NK_MINIMIZED)) diff --git a/nuklear.h b/nuklear.h index c4fbf4a..71aa36e 100644 --- a/nuklear.h +++ b/nuklear.h @@ -5170,6 +5170,7 @@ NK_API struct nk_style_item nk_style_item_hide(void); #endif enum nk_panel_type { + NK_PANEL_NONE = 0, NK_PANEL_WINDOW = NK_FLAG(0), NK_PANEL_GROUP = NK_FLAG(1), NK_PANEL_POPUP = NK_FLAG(2), @@ -16902,9 +16903,8 @@ nk_contextual_begin(struct nk_context *ctx, nk_flags flags, struct nk_vec2 size, struct nk_window *popup; struct nk_rect body; - NK_STORAGE const struct nk_rect null_rect = {0,0,0,0}; + NK_STORAGE const struct nk_rect null_rect = {-1,-1,0,0}; int is_clicked = 0; - int is_active = 0; int is_open = 0; int ret = 0; @@ -16913,11 +16913,11 @@ nk_contextual_begin(struct nk_context *ctx, nk_flags flags, struct nk_vec2 size, NK_ASSERT(ctx->current->layout); if (!ctx || !ctx->current || !ctx->current->layout) return 0; - if (ctx->current != ctx->active) - return 0; win = ctx->current; ++win->popup.con_count; + if (ctx->current != ctx->active) + return 0; /* check if currently active contextual is active */ popup = win->popup.win; @@ -16925,7 +16925,7 @@ nk_contextual_begin(struct nk_context *ctx, nk_flags flags, struct nk_vec2 size, is_clicked = nk_input_mouse_clicked(&ctx->input, NK_BUTTON_RIGHT, trigger_bounds); if (win->popup.active_con && win->popup.con_count != win->popup.active_con) return 0; - if ((is_clicked && is_open && !is_active) || (!is_open && !is_active && !is_clicked)) + if ((!is_open && !is_clicked)) return 0; /* calculate contextual position on click */ @@ -16946,6 +16946,7 @@ nk_contextual_begin(struct nk_context *ctx, nk_flags flags, struct nk_vec2 size, if (ret) win->popup.type = NK_PANEL_CONTEXTUAL; else { win->popup.active_con = 0; + win->popup.type = NK_PANEL_NONE; if (win->popup.win) win->popup.win->flags = 0; } diff --git a/src/nuklear.h b/src/nuklear.h index d95b413..b1ef888 100644 --- a/src/nuklear.h +++ b/src/nuklear.h @@ -4954,6 +4954,7 @@ NK_API struct nk_style_item nk_style_item_hide(void); #endif enum nk_panel_type { + NK_PANEL_NONE = 0, NK_PANEL_WINDOW = NK_FLAG(0), NK_PANEL_GROUP = NK_FLAG(1), NK_PANEL_POPUP = NK_FLAG(2), diff --git a/src/nuklear_contextual.c b/src/nuklear_contextual.c index 1f29e66..539b8ed 100644 --- a/src/nuklear_contextual.c +++ b/src/nuklear_contextual.c @@ -14,9 +14,8 @@ nk_contextual_begin(struct nk_context *ctx, nk_flags flags, struct nk_vec2 size, struct nk_window *popup; struct nk_rect body; - NK_STORAGE const struct nk_rect null_rect = {0,0,0,0}; + NK_STORAGE const struct nk_rect null_rect = {-1,-1,0,0}; int is_clicked = 0; - int is_active = 0; int is_open = 0; int ret = 0; @@ -25,11 +24,11 @@ nk_contextual_begin(struct nk_context *ctx, nk_flags flags, struct nk_vec2 size, NK_ASSERT(ctx->current->layout); if (!ctx || !ctx->current || !ctx->current->layout) return 0; - if (ctx->current != ctx->active) - return 0; win = ctx->current; ++win->popup.con_count; + if (ctx->current != ctx->active) + return 0; /* check if currently active contextual is active */ popup = win->popup.win; @@ -37,7 +36,7 @@ nk_contextual_begin(struct nk_context *ctx, nk_flags flags, struct nk_vec2 size, is_clicked = nk_input_mouse_clicked(&ctx->input, NK_BUTTON_RIGHT, trigger_bounds); if (win->popup.active_con && win->popup.con_count != win->popup.active_con) return 0; - if ((is_clicked && is_open && !is_active) || (!is_open && !is_active && !is_clicked)) + if ((!is_open && !is_clicked)) return 0; /* calculate contextual position on click */ @@ -58,6 +57,7 @@ nk_contextual_begin(struct nk_context *ctx, nk_flags flags, struct nk_vec2 size, if (ret) win->popup.type = NK_PANEL_CONTEXTUAL; else { win->popup.active_con = 0; + win->popup.type = NK_PANEL_NONE; if (win->popup.win) win->popup.win->flags = 0; }