Blame src-nuklear/nuklear_tree.c

Ivan Mahonin b53a5c
#include "nuklear.h"
Ivan Mahonin b53a5c
#include "nuklear_internal.h"
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
/* ===============================================================
Ivan Mahonin b53a5c
 *
Ivan Mahonin b53a5c
 *                              TREE
Ivan Mahonin b53a5c
 *
Ivan Mahonin b53a5c
 * ===============================================================*/
Ivan Mahonin b53a5c
NK_INTERN int
Ivan Mahonin b53a5c
nk_tree_state_base(struct nk_context *ctx, enum nk_tree_type type,
Ivan Mahonin b53a5c
    struct nk_image *img, const char *title, enum nk_collapse_states *state)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_window *win;
Ivan Mahonin b53a5c
    struct nk_panel *layout;
Ivan Mahonin b53a5c
    const struct nk_style *style;
Ivan Mahonin b53a5c
    struct nk_command_buffer *out;
Ivan Mahonin b53a5c
    const struct nk_input *in;
Ivan Mahonin b53a5c
    const struct nk_style_button *button;
Ivan Mahonin b53a5c
    enum nk_symbol_type symbol;
Ivan Mahonin b53a5c
    float row_height;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    struct nk_vec2 item_spacing;
Ivan Mahonin b53a5c
    struct nk_rect header = {0,0,0,0};
Ivan Mahonin b53a5c
    struct nk_rect sym = {0,0,0,0};
Ivan Mahonin b53a5c
    struct nk_text text;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    nk_flags ws = 0;
Ivan Mahonin b53a5c
    enum nk_widget_layout_states widget_state;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    NK_ASSERT(ctx);
Ivan Mahonin b53a5c
    NK_ASSERT(ctx->current);
Ivan Mahonin b53a5c
    NK_ASSERT(ctx->current->layout);
Ivan Mahonin b53a5c
    if (!ctx || !ctx->current || !ctx->current->layout)
Ivan Mahonin b53a5c
        return 0;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* cache some data */
Ivan Mahonin b53a5c
    win = ctx->current;
Ivan Mahonin b53a5c
    layout = win->layout;
Ivan Mahonin b53a5c
    out = &win->buffer;
Ivan Mahonin b53a5c
    style = &ctx->style;
Ivan Mahonin b53a5c
    item_spacing = style->window.spacing;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* calculate header bounds and draw background */
Ivan Mahonin b53a5c
    row_height = style->font->height + 2 * style->tab.padding.y;
Ivan Mahonin b53a5c
    nk_layout_set_min_row_height(ctx, row_height);
Ivan Mahonin b53a5c
    nk_layout_row_dynamic(ctx, row_height, 1);
Ivan Mahonin b53a5c
    nk_layout_reset_min_row_height(ctx);
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    widget_state = nk_widget(&header, ctx);
Ivan Mahonin b53a5c
    if (type == NK_TREE_TAB) {
Ivan Mahonin b53a5c
        const struct nk_style_item *background = &style->tab.background;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
        switch(background->type) {
Ivan Mahonin b53a5c
            case NK_STYLE_ITEM_IMAGE:
Ivan Mahonin b53a5c
                nk_draw_image(out, header, &background->data.image, nk_white);
Ivan Mahonin b53a5c
                break;
Ivan Mahonin b53a5c
            case NK_STYLE_ITEM_NINE_SLICE:
Ivan Mahonin b53a5c
                nk_draw_nine_slice(out, header, &background->data.slice, nk_white);
Ivan Mahonin b53a5c
                break;
Ivan Mahonin b53a5c
            case NK_STYLE_ITEM_COLOR:
Ivan Mahonin b53a5c
                nk_fill_rect(out, header, 0, style->tab.border_color);
Ivan Mahonin b53a5c
                nk_fill_rect(out, nk_shrink_rect(header, style->tab.border),
Ivan Mahonin b53a5c
                    style->tab.rounding, background->data.color);
Ivan Mahonin b53a5c
                break;
Ivan Mahonin b53a5c
        }
Ivan Mahonin b53a5c
    } else text.background = style->window.background;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* update node state */
Ivan Mahonin b53a5c
    in = (!(layout->flags & NK_WINDOW_ROM)) ? &ctx->input: 0;
Ivan Mahonin b53a5c
    in = (in && widget_state == NK_WIDGET_VALID) ? &ctx->input : 0;
Ivan Mahonin b53a5c
    if (nk_button_behavior(&ws, header, in, NK_BUTTON_DEFAULT))
Ivan Mahonin b53a5c
        *state = (*state == NK_MAXIMIZED) ? NK_MINIMIZED : NK_MAXIMIZED;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* select correct button style */
Ivan Mahonin b53a5c
    if (*state == NK_MAXIMIZED) {
Ivan Mahonin b53a5c
        symbol = style->tab.sym_maximize;
Ivan Mahonin b53a5c
        if (type == NK_TREE_TAB)
Ivan Mahonin b53a5c
            button = &style->tab.tab_maximize_button;
Ivan Mahonin b53a5c
        else button = &style->tab.node_maximize_button;
Ivan Mahonin b53a5c
    } else {
Ivan Mahonin b53a5c
        symbol = style->tab.sym_minimize;
Ivan Mahonin b53a5c
        if (type == NK_TREE_TAB)
Ivan Mahonin b53a5c
            button = &style->tab.tab_minimize_button;
Ivan Mahonin b53a5c
        else button = &style->tab.node_minimize_button;
Ivan Mahonin b53a5c
    }
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    {/* draw triangle button */
Ivan Mahonin b53a5c
    sym.w = sym.h = style->font->height;
Ivan Mahonin b53a5c
    sym.y = header.y + style->tab.padding.y;
Ivan Mahonin b53a5c
    sym.x = header.x + style->tab.padding.x;
Ivan Mahonin b53a5c
    nk_do_button_symbol(&ws, &win->buffer, sym, symbol, NK_BUTTON_DEFAULT,
Ivan Mahonin b53a5c
        button, 0, style->font);
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    if (img) {
Ivan Mahonin b53a5c
        /* draw optional image icon */
Ivan Mahonin b53a5c
        sym.x = sym.x + sym.w + 4 * item_spacing.x;
Ivan Mahonin b53a5c
        nk_draw_image(&win->buffer, sym, img, nk_white);
Ivan Mahonin b53a5c
        sym.w = style->font->height + style->tab.spacing.x;}
Ivan Mahonin b53a5c
    }
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    {/* draw label */
Ivan Mahonin b53a5c
    struct nk_rect label;
Ivan Mahonin b53a5c
    header.w = NK_MAX(header.w, sym.w + item_spacing.x);
Ivan Mahonin b53a5c
    label.x = sym.x + sym.w + item_spacing.x;
Ivan Mahonin b53a5c
    label.y = sym.y;
Ivan Mahonin b53a5c
    label.w = header.w - (sym.w + item_spacing.y + style->tab.indent);
Ivan Mahonin b53a5c
    label.h = style->font->height;
Ivan Mahonin b53a5c
    text.text = style->tab.text;
Ivan Mahonin b53a5c
    text.padding = nk_vec2(0,0);
Ivan Mahonin b53a5c
    nk_widget_text(out, label, title, nk_strlen(title), &text,
Ivan Mahonin b53a5c
        NK_TEXT_LEFT, style->font);}
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* increase x-axis cursor widget position pointer */
Ivan Mahonin b53a5c
    if (*state == NK_MAXIMIZED) {
Ivan Mahonin b53a5c
        layout->at_x = header.x + (float)*layout->offset_x + style->tab.indent;
Ivan Mahonin b53a5c
        layout->bounds.w = NK_MAX(layout->bounds.w, style->tab.indent);
Ivan Mahonin b53a5c
        layout->bounds.w -= (style->tab.indent + style->window.padding.x);
Ivan Mahonin b53a5c
        layout->row.tree_depth++;
Ivan Mahonin b53a5c
        return nk_true;
Ivan Mahonin b53a5c
    } else return nk_false;
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_INTERN int
Ivan Mahonin b53a5c
nk_tree_base(struct nk_context *ctx, enum nk_tree_type type,
Ivan Mahonin b53a5c
    struct nk_image *img, const char *title, enum nk_collapse_states initial_state,
Ivan Mahonin b53a5c
    const char *hash, int len, int line)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_window *win = ctx->current;
Ivan Mahonin b53a5c
    int title_len = 0;
Ivan Mahonin b53a5c
    nk_hash tree_hash = 0;
Ivan Mahonin b53a5c
    nk_uint *state = 0;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* retrieve tree state from internal widget state tables */
Ivan Mahonin b53a5c
    if (!hash) {
Ivan Mahonin b53a5c
        title_len = (int)nk_strlen(title);
Ivan Mahonin b53a5c
        tree_hash = nk_murmur_hash(title, (int)title_len, (nk_hash)line);
Ivan Mahonin b53a5c
    } else tree_hash = nk_murmur_hash(hash, len, (nk_hash)line);
Ivan Mahonin b53a5c
    state = nk_find_value(win, tree_hash);
Ivan Mahonin b53a5c
    if (!state) {
Ivan Mahonin b53a5c
        state = nk_add_value(ctx, win, tree_hash, 0);
Ivan Mahonin b53a5c
        *state = initial_state;
Ivan Mahonin b53a5c
    }
Ivan Mahonin b53a5c
    return nk_tree_state_base(ctx, type, img, title, (enum nk_collapse_states*)state);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_tree_state_push(struct nk_context *ctx, enum nk_tree_type type,
Ivan Mahonin b53a5c
    const char *title, enum nk_collapse_states *state)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    return nk_tree_state_base(ctx, type, 0, title, state);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_tree_state_image_push(struct nk_context *ctx, enum nk_tree_type type,
Ivan Mahonin b53a5c
    struct nk_image img, const char *title, enum nk_collapse_states *state)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    return nk_tree_state_base(ctx, type, &img, title, state);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API void
Ivan Mahonin b53a5c
nk_tree_state_pop(struct nk_context *ctx)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_window *win = 0;
Ivan Mahonin b53a5c
    struct nk_panel *layout = 0;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    NK_ASSERT(ctx);
Ivan Mahonin b53a5c
    NK_ASSERT(ctx->current);
Ivan Mahonin b53a5c
    NK_ASSERT(ctx->current->layout);
Ivan Mahonin b53a5c
    if (!ctx || !ctx->current || !ctx->current->layout)
Ivan Mahonin b53a5c
        return;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    win = ctx->current;
Ivan Mahonin b53a5c
    layout = win->layout;
Ivan Mahonin b53a5c
    layout->at_x -= ctx->style.tab.indent + (float)*layout->offset_x;
Ivan Mahonin b53a5c
    layout->bounds.w += ctx->style.tab.indent + ctx->style.window.padding.x;
Ivan Mahonin b53a5c
    NK_ASSERT(layout->row.tree_depth);
Ivan Mahonin b53a5c
    layout->row.tree_depth--;
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_tree_push_hashed(struct nk_context *ctx, enum nk_tree_type type,
Ivan Mahonin b53a5c
    const char *title, enum nk_collapse_states initial_state,
Ivan Mahonin b53a5c
    const char *hash, int len, int line)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    return nk_tree_base(ctx, type, 0, title, initial_state, hash, len, line);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_tree_image_push_hashed(struct nk_context *ctx, enum nk_tree_type type,
Ivan Mahonin b53a5c
    struct nk_image img, const char *title, enum nk_collapse_states initial_state,
Ivan Mahonin b53a5c
    const char *hash, int len,int seed)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    return nk_tree_base(ctx, type, &img, title, initial_state, hash, len, seed);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API void
Ivan Mahonin b53a5c
nk_tree_pop(struct nk_context *ctx)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    nk_tree_state_pop(ctx);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_INTERN int
Ivan Mahonin b53a5c
nk_tree_element_image_push_hashed_base(struct nk_context *ctx, enum nk_tree_type type,
Ivan Mahonin b53a5c
    struct nk_image *img, const char *title, int title_len,
Ivan Mahonin b53a5c
    enum nk_collapse_states *state, nk_bool *selected)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_window *win;
Ivan Mahonin b53a5c
    struct nk_panel *layout;
Ivan Mahonin b53a5c
    const struct nk_style *style;
Ivan Mahonin b53a5c
    struct nk_command_buffer *out;
Ivan Mahonin b53a5c
    const struct nk_input *in;
Ivan Mahonin b53a5c
    const struct nk_style_button *button;
Ivan Mahonin b53a5c
    enum nk_symbol_type symbol;
Ivan Mahonin b53a5c
    float row_height;
Ivan Mahonin b53a5c
    struct nk_vec2 padding;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    int text_len;
Ivan Mahonin b53a5c
    float text_width;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    struct nk_vec2 item_spacing;
Ivan Mahonin b53a5c
    struct nk_rect header = {0,0,0,0};
Ivan Mahonin b53a5c
    struct nk_rect sym = {0,0,0,0};
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    nk_flags ws = 0;
Ivan Mahonin b53a5c
    enum nk_widget_layout_states widget_state;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    NK_ASSERT(ctx);
Ivan Mahonin b53a5c
    NK_ASSERT(ctx->current);
Ivan Mahonin b53a5c
    NK_ASSERT(ctx->current->layout);
Ivan Mahonin b53a5c
    if (!ctx || !ctx->current || !ctx->current->layout)
Ivan Mahonin b53a5c
        return 0;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* cache some data */
Ivan Mahonin b53a5c
    win = ctx->current;
Ivan Mahonin b53a5c
    layout = win->layout;
Ivan Mahonin b53a5c
    out = &win->buffer;
Ivan Mahonin b53a5c
    style = &ctx->style;
Ivan Mahonin b53a5c
    item_spacing = style->window.spacing;
Ivan Mahonin b53a5c
    padding = style->selectable.padding;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* calculate header bounds and draw background */
Ivan Mahonin b53a5c
    row_height = style->font->height + 2 * style->tab.padding.y;
Ivan Mahonin b53a5c
    nk_layout_set_min_row_height(ctx, row_height);
Ivan Mahonin b53a5c
    nk_layout_row_dynamic(ctx, row_height, 1);
Ivan Mahonin b53a5c
    nk_layout_reset_min_row_height(ctx);
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    widget_state = nk_widget(&header, ctx);
Ivan Mahonin b53a5c
    if (type == NK_TREE_TAB) {
Ivan Mahonin b53a5c
        const struct nk_style_item *background = &style->tab.background;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
        switch (background->type) {
Ivan Mahonin b53a5c
            case NK_STYLE_ITEM_IMAGE:
Ivan Mahonin b53a5c
                nk_draw_image(out, header, &background->data.image, nk_white);
Ivan Mahonin b53a5c
                break;
Ivan Mahonin b53a5c
            case NK_STYLE_ITEM_NINE_SLICE:
Ivan Mahonin b53a5c
                nk_draw_nine_slice(out, header, &background->data.slice, nk_white);
Ivan Mahonin b53a5c
                break;
Ivan Mahonin b53a5c
            case NK_STYLE_ITEM_COLOR:
Ivan Mahonin b53a5c
                nk_fill_rect(out, header, 0, style->tab.border_color);
Ivan Mahonin b53a5c
                nk_fill_rect(out, nk_shrink_rect(header, style->tab.border),
Ivan Mahonin b53a5c
                    style->tab.rounding, background->data.color);
Ivan Mahonin b53a5c
                break;
Ivan Mahonin b53a5c
        }
Ivan Mahonin b53a5c
    }
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    in = (!(layout->flags & NK_WINDOW_ROM)) ? &ctx->input: 0;
Ivan Mahonin b53a5c
    in = (in && widget_state == NK_WIDGET_VALID) ? &ctx->input : 0;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* select correct button style */
Ivan Mahonin b53a5c
    if (*state == NK_MAXIMIZED) {
Ivan Mahonin b53a5c
        symbol = style->tab.sym_maximize;
Ivan Mahonin b53a5c
        if (type == NK_TREE_TAB)
Ivan Mahonin b53a5c
            button = &style->tab.tab_maximize_button;
Ivan Mahonin b53a5c
        else button = &style->tab.node_maximize_button;
Ivan Mahonin b53a5c
    } else {
Ivan Mahonin b53a5c
        symbol = style->tab.sym_minimize;
Ivan Mahonin b53a5c
        if (type == NK_TREE_TAB)
Ivan Mahonin b53a5c
            button = &style->tab.tab_minimize_button;
Ivan Mahonin b53a5c
        else button = &style->tab.node_minimize_button;
Ivan Mahonin b53a5c
    }
Ivan Mahonin b53a5c
    {/* draw triangle button */
Ivan Mahonin b53a5c
    sym.w = sym.h = style->font->height;
Ivan Mahonin b53a5c
    sym.y = header.y + style->tab.padding.y;
Ivan Mahonin b53a5c
    sym.x = header.x + style->tab.padding.x;
Ivan Mahonin b53a5c
    if (nk_do_button_symbol(&ws, &win->buffer, sym, symbol, NK_BUTTON_DEFAULT, button, in, style->font))
Ivan Mahonin b53a5c
        *state = (*state == NK_MAXIMIZED) ? NK_MINIMIZED : NK_MAXIMIZED;}
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* draw label */
Ivan Mahonin b53a5c
    {nk_flags dummy = 0;
Ivan Mahonin b53a5c
    struct nk_rect label;
Ivan Mahonin b53a5c
    /* calculate size of the text and tooltip */
Ivan Mahonin b53a5c
    text_len = nk_strlen(title);
Ivan Mahonin b53a5c
    text_width = style->font->width(style->font->userdata, style->font->height, title, text_len);
Ivan Mahonin b53a5c
    text_width += (4 * padding.x);
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    header.w = NK_MAX(header.w, sym.w + item_spacing.x);
Ivan Mahonin b53a5c
    label.x = sym.x + sym.w + item_spacing.x;
Ivan Mahonin b53a5c
    label.y = sym.y;
Ivan Mahonin b53a5c
    label.w = NK_MIN(header.w - (sym.w + item_spacing.y + style->tab.indent), text_width);
Ivan Mahonin b53a5c
    label.h = style->font->height;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    if (img) {
Ivan Mahonin b53a5c
        nk_do_selectable_image(&dummy, &win->buffer, label, title, title_len, NK_TEXT_LEFT,
Ivan Mahonin b53a5c
            selected, img, &style->selectable, in, style->font);
Ivan Mahonin b53a5c
    } else nk_do_selectable(&dummy, &win->buffer, label, title, title_len, NK_TEXT_LEFT,
Ivan Mahonin b53a5c
            selected, &style->selectable, in, style->font);
Ivan Mahonin b53a5c
    }
Ivan Mahonin b53a5c
    /* increase x-axis cursor widget position pointer */
Ivan Mahonin b53a5c
    if (*state == NK_MAXIMIZED) {
Ivan Mahonin b53a5c
        layout->at_x = header.x + (float)*layout->offset_x + style->tab.indent;
Ivan Mahonin b53a5c
        layout->bounds.w = NK_MAX(layout->bounds.w, style->tab.indent);
Ivan Mahonin b53a5c
        layout->bounds.w -= (style->tab.indent + style->window.padding.x);
Ivan Mahonin b53a5c
        layout->row.tree_depth++;
Ivan Mahonin b53a5c
        return nk_true;
Ivan Mahonin b53a5c
    } else return nk_false;
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_INTERN int
Ivan Mahonin b53a5c
nk_tree_element_base(struct nk_context *ctx, enum nk_tree_type type,
Ivan Mahonin b53a5c
    struct nk_image *img, const char *title, enum nk_collapse_states initial_state,
Ivan Mahonin b53a5c
    nk_bool *selected, const char *hash, int len, int line)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_window *win = ctx->current;
Ivan Mahonin b53a5c
    int title_len = 0;
Ivan Mahonin b53a5c
    nk_hash tree_hash = 0;
Ivan Mahonin b53a5c
    nk_uint *state = 0;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* retrieve tree state from internal widget state tables */
Ivan Mahonin b53a5c
    if (!hash) {
Ivan Mahonin b53a5c
        title_len = (int)nk_strlen(title);
Ivan Mahonin b53a5c
        tree_hash = nk_murmur_hash(title, (int)title_len, (nk_hash)line);
Ivan Mahonin b53a5c
    } else tree_hash = nk_murmur_hash(hash, len, (nk_hash)line);
Ivan Mahonin b53a5c
    state = nk_find_value(win, tree_hash);
Ivan Mahonin b53a5c
    if (!state) {
Ivan Mahonin b53a5c
        state = nk_add_value(ctx, win, tree_hash, 0);
Ivan Mahonin b53a5c
        *state = initial_state;
Ivan Mahonin b53a5c
    } return nk_tree_element_image_push_hashed_base(ctx, type, img, title,
Ivan Mahonin b53a5c
        nk_strlen(title), (enum nk_collapse_states*)state, selected);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_tree_element_push_hashed(struct nk_context *ctx, enum nk_tree_type type,
Ivan Mahonin b53a5c
    const char *title, enum nk_collapse_states initial_state,
Ivan Mahonin b53a5c
    nk_bool *selected, const char *hash, int len, int seed)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    return nk_tree_element_base(ctx, type, 0, title, initial_state, selected, hash, len, seed);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_tree_element_image_push_hashed(struct nk_context *ctx, enum nk_tree_type type,
Ivan Mahonin b53a5c
    struct nk_image img, const char *title, enum nk_collapse_states initial_state,
Ivan Mahonin b53a5c
    nk_bool *selected, const char *hash, int len,int seed)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    return nk_tree_element_base(ctx, type, &img, title, initial_state, selected, hash, len, seed);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API void
Ivan Mahonin b53a5c
nk_tree_element_pop(struct nk_context *ctx)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    nk_tree_state_pop(ctx);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c