Blame src-nuklear/nuklear_button.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
 *                          BUTTON
Ivan Mahonin b53a5c
 *
Ivan Mahonin b53a5c
 * ===============================================================*/
Ivan Mahonin b53a5c
NK_LIB void
Ivan Mahonin b53a5c
nk_draw_symbol(struct nk_command_buffer *out, enum nk_symbol_type type,
Ivan Mahonin b53a5c
    struct nk_rect content, struct nk_color background, struct nk_color foreground,
Ivan Mahonin b53a5c
    float border_width, const struct nk_user_font *font)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    switch (type) {
Ivan Mahonin b53a5c
    case NK_SYMBOL_X:
Ivan Mahonin b53a5c
    case NK_SYMBOL_UNDERSCORE:
Ivan Mahonin b53a5c
    case NK_SYMBOL_PLUS:
Ivan Mahonin b53a5c
    case NK_SYMBOL_MINUS: {
Ivan Mahonin b53a5c
        /* single character text symbol */
Ivan Mahonin b53a5c
        const char *X = (type == NK_SYMBOL_X) ? "x":
Ivan Mahonin b53a5c
            (type == NK_SYMBOL_UNDERSCORE) ? "_":
Ivan Mahonin b53a5c
            (type == NK_SYMBOL_PLUS) ? "+": "-";
Ivan Mahonin b53a5c
        struct nk_text text;
Ivan Mahonin b53a5c
        text.padding = nk_vec2(0,0);
Ivan Mahonin b53a5c
        text.background = background;
Ivan Mahonin b53a5c
        text.text = foreground;
Ivan Mahonin b53a5c
        nk_widget_text(out, content, X, 1, &text, NK_TEXT_CENTERED, font);
Ivan Mahonin b53a5c
    } break;
Ivan Mahonin b53a5c
    case NK_SYMBOL_CIRCLE_SOLID:
Ivan Mahonin b53a5c
    case NK_SYMBOL_CIRCLE_OUTLINE:
Ivan Mahonin b53a5c
    case NK_SYMBOL_RECT_SOLID:
Ivan Mahonin b53a5c
    case NK_SYMBOL_RECT_OUTLINE: {
Ivan Mahonin b53a5c
        /* simple empty/filled shapes */
Ivan Mahonin b53a5c
        if (type == NK_SYMBOL_RECT_SOLID || type == NK_SYMBOL_RECT_OUTLINE) {
Ivan Mahonin b53a5c
            nk_fill_rect(out, content,  0, foreground);
Ivan Mahonin b53a5c
            if (type == NK_SYMBOL_RECT_OUTLINE)
Ivan Mahonin b53a5c
                nk_fill_rect(out, nk_shrink_rect(content, border_width), 0, background);
Ivan Mahonin b53a5c
        } else {
Ivan Mahonin b53a5c
            nk_fill_circle(out, content, foreground);
Ivan Mahonin b53a5c
            if (type == NK_SYMBOL_CIRCLE_OUTLINE)
Ivan Mahonin b53a5c
                nk_fill_circle(out, nk_shrink_rect(content, 1), background);
Ivan Mahonin b53a5c
        }
Ivan Mahonin b53a5c
    } break;
Ivan Mahonin b53a5c
    case NK_SYMBOL_TRIANGLE_UP:
Ivan Mahonin b53a5c
    case NK_SYMBOL_TRIANGLE_DOWN:
Ivan Mahonin b53a5c
    case NK_SYMBOL_TRIANGLE_LEFT:
Ivan Mahonin b53a5c
    case NK_SYMBOL_TRIANGLE_RIGHT: {
Ivan Mahonin b53a5c
        enum nk_heading heading;
Ivan Mahonin b53a5c
        struct nk_vec2 points[3];
Ivan Mahonin b53a5c
        heading = (type == NK_SYMBOL_TRIANGLE_RIGHT) ? NK_RIGHT :
Ivan Mahonin b53a5c
            (type == NK_SYMBOL_TRIANGLE_LEFT) ? NK_LEFT:
Ivan Mahonin b53a5c
            (type == NK_SYMBOL_TRIANGLE_UP) ? NK_UP: NK_DOWN;
Ivan Mahonin b53a5c
        nk_triangle_from_direction(points, content, 0, 0, heading);
Ivan Mahonin b53a5c
        nk_fill_triangle(out, points[0].x, points[0].y, points[1].x, points[1].y,
Ivan Mahonin b53a5c
            points[2].x, points[2].y, foreground);
Ivan Mahonin b53a5c
    } break;
Ivan Mahonin b53a5c
    default:
Ivan Mahonin b53a5c
    case NK_SYMBOL_NONE:
Ivan Mahonin b53a5c
    case NK_SYMBOL_MAX: break;
Ivan Mahonin b53a5c
    }
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_LIB nk_bool
Ivan Mahonin b53a5c
nk_button_behavior(nk_flags *state, struct nk_rect r,
Ivan Mahonin b53a5c
    const struct nk_input *i, enum nk_button_behavior behavior)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    int ret = 0;
Ivan Mahonin b53a5c
    nk_widget_state_reset(state);
Ivan Mahonin b53a5c
    if (!i) return 0;
Ivan Mahonin b53a5c
    if (nk_input_is_mouse_hovering_rect(i, r)) {
Ivan Mahonin b53a5c
        *state = NK_WIDGET_STATE_HOVERED;
Ivan Mahonin b53a5c
        if (nk_input_is_mouse_down(i, NK_BUTTON_LEFT))
Ivan Mahonin b53a5c
            *state = NK_WIDGET_STATE_ACTIVE;
Ivan Mahonin b53a5c
        if (nk_input_has_mouse_click_in_button_rect(i, NK_BUTTON_LEFT, r)) {
Ivan Mahonin b53a5c
            ret = (behavior != NK_BUTTON_DEFAULT) ?
Ivan Mahonin b53a5c
                nk_input_is_mouse_down(i, NK_BUTTON_LEFT):
Ivan Mahonin b53a5c
#ifdef NK_BUTTON_TRIGGER_ON_RELEASE
Ivan Mahonin b53a5c
                nk_input_is_mouse_released(i, NK_BUTTON_LEFT);
Ivan Mahonin b53a5c
#else
Ivan Mahonin b53a5c
                nk_input_is_mouse_pressed(i, NK_BUTTON_LEFT);
Ivan Mahonin b53a5c
#endif
Ivan Mahonin b53a5c
        }
Ivan Mahonin b53a5c
    }
Ivan Mahonin b53a5c
    if (*state & NK_WIDGET_STATE_HOVER && !nk_input_is_mouse_prev_hovering_rect(i, r))
Ivan Mahonin b53a5c
        *state |= NK_WIDGET_STATE_ENTERED;
Ivan Mahonin b53a5c
    else if (nk_input_is_mouse_prev_hovering_rect(i, r))
Ivan Mahonin b53a5c
        *state |= NK_WIDGET_STATE_LEFT;
Ivan Mahonin b53a5c
    return ret;
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_LIB const struct nk_style_item*
Ivan Mahonin b53a5c
nk_draw_button(struct nk_command_buffer *out,
Ivan Mahonin b53a5c
    const struct nk_rect *bounds, nk_flags state,
Ivan Mahonin b53a5c
    const struct nk_style_button *style)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    const struct nk_style_item *background;
Ivan Mahonin b53a5c
    if (state & NK_WIDGET_STATE_HOVER)
Ivan Mahonin b53a5c
        background = &style->hover;
Ivan Mahonin b53a5c
    else if (state & NK_WIDGET_STATE_ACTIVED)
Ivan Mahonin b53a5c
        background = &style->active;
Ivan Mahonin b53a5c
    else background = &style->normal;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    switch(background->type) {
Ivan Mahonin b53a5c
        case NK_STYLE_ITEM_IMAGE:
Ivan Mahonin b53a5c
            nk_draw_image(out, *bounds, &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, *bounds, &background->data.slice, nk_white);
Ivan Mahonin b53a5c
            break;
Ivan Mahonin b53a5c
        case NK_STYLE_ITEM_COLOR:
Ivan Mahonin b53a5c
            nk_fill_rect(out, *bounds, style->rounding, background->data.color);
Ivan Mahonin b53a5c
            nk_stroke_rect(out, *bounds, style->rounding, style->border, style->border_color);
Ivan Mahonin b53a5c
            break;
Ivan Mahonin b53a5c
    }
Ivan Mahonin b53a5c
    return background;
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_LIB nk_bool
Ivan Mahonin b53a5c
nk_do_button(nk_flags *state, struct nk_command_buffer *out, struct nk_rect r,
Ivan Mahonin b53a5c
    const struct nk_style_button *style, const struct nk_input *in,
Ivan Mahonin b53a5c
    enum nk_button_behavior behavior, struct nk_rect *content)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_rect bounds;
Ivan Mahonin b53a5c
    NK_ASSERT(style);
Ivan Mahonin b53a5c
    NK_ASSERT(state);
Ivan Mahonin b53a5c
    NK_ASSERT(out);
Ivan Mahonin b53a5c
    if (!out || !style)
Ivan Mahonin b53a5c
        return nk_false;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* calculate button content space */
Ivan Mahonin b53a5c
    content->x = r.x + style->padding.x + style->border + style->rounding;
Ivan Mahonin b53a5c
    content->y = r.y + style->padding.y + style->border + style->rounding;
Ivan Mahonin b53a5c
    content->w = r.w - (2 * (style->padding.x + style->border + style->rounding));
Ivan Mahonin b53a5c
    content->h = r.h - (2 * (style->padding.y + style->border + style->rounding));
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* execute button behavior */
Ivan Mahonin b53a5c
    bounds.x = r.x - style->touch_padding.x;
Ivan Mahonin b53a5c
    bounds.y = r.y - style->touch_padding.y;
Ivan Mahonin b53a5c
    bounds.w = r.w + 2 * style->touch_padding.x;
Ivan Mahonin b53a5c
    bounds.h = r.h + 2 * style->touch_padding.y;
Ivan Mahonin b53a5c
    return nk_button_behavior(state, bounds, in, behavior);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_LIB void
Ivan Mahonin b53a5c
nk_draw_button_text(struct nk_command_buffer *out,
Ivan Mahonin b53a5c
    const struct nk_rect *bounds, const struct nk_rect *content, nk_flags state,
Ivan Mahonin b53a5c
    const struct nk_style_button *style, const char *txt, int len,
Ivan Mahonin b53a5c
    nk_flags text_alignment, const struct nk_user_font *font)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_text text;
Ivan Mahonin b53a5c
    const struct nk_style_item *background;
Ivan Mahonin b53a5c
    background = nk_draw_button(out, bounds, state, style);
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* select correct colors/images */
Ivan Mahonin b53a5c
    if (background->type == NK_STYLE_ITEM_COLOR)
Ivan Mahonin b53a5c
        text.background = background->data.color;
Ivan Mahonin b53a5c
    else text.background = style->text_background;
Ivan Mahonin b53a5c
    if (state & NK_WIDGET_STATE_HOVER)
Ivan Mahonin b53a5c
        text.text = style->text_hover;
Ivan Mahonin b53a5c
    else if (state & NK_WIDGET_STATE_ACTIVED)
Ivan Mahonin b53a5c
        text.text = style->text_active;
Ivan Mahonin b53a5c
    else text.text = style->text_normal;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    text.padding = nk_vec2(0,0);
Ivan Mahonin b53a5c
    nk_widget_text(out, *content, txt, len, &text, text_alignment, font);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_LIB nk_bool
Ivan Mahonin b53a5c
nk_do_button_text(nk_flags *state,
Ivan Mahonin b53a5c
    struct nk_command_buffer *out, struct nk_rect bounds,
Ivan Mahonin b53a5c
    const char *string, int len, nk_flags align, enum nk_button_behavior behavior,
Ivan Mahonin b53a5c
    const struct nk_style_button *style, const struct nk_input *in,
Ivan Mahonin b53a5c
    const struct nk_user_font *font)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_rect content;
Ivan Mahonin b53a5c
    int ret = nk_false;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    NK_ASSERT(state);
Ivan Mahonin b53a5c
    NK_ASSERT(style);
Ivan Mahonin b53a5c
    NK_ASSERT(out);
Ivan Mahonin b53a5c
    NK_ASSERT(string);
Ivan Mahonin b53a5c
    NK_ASSERT(font);
Ivan Mahonin b53a5c
    if (!out || !style || !font || !string)
Ivan Mahonin b53a5c
        return nk_false;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    ret = nk_do_button(state, out, bounds, style, in, behavior, &content);
Ivan Mahonin b53a5c
    if (style->draw_begin) style->draw_begin(out, style->userdata);
Ivan Mahonin b53a5c
    nk_draw_button_text(out, &bounds, &content, *state, style, string, len, align, font);
Ivan Mahonin b53a5c
    if (style->draw_end) style->draw_end(out, style->userdata);
Ivan Mahonin b53a5c
    return ret;
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_LIB void
Ivan Mahonin b53a5c
nk_draw_button_symbol(struct nk_command_buffer *out,
Ivan Mahonin b53a5c
    const struct nk_rect *bounds, const struct nk_rect *content,
Ivan Mahonin b53a5c
    nk_flags state, const struct nk_style_button *style,
Ivan Mahonin b53a5c
    enum nk_symbol_type type, const struct nk_user_font *font)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_color sym, bg;
Ivan Mahonin b53a5c
    const struct nk_style_item *background;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* select correct colors/images */
Ivan Mahonin b53a5c
    background = nk_draw_button(out, bounds, state, style);
Ivan Mahonin b53a5c
    if (background->type == NK_STYLE_ITEM_COLOR)
Ivan Mahonin b53a5c
        bg = background->data.color;
Ivan Mahonin b53a5c
    else bg = style->text_background;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    if (state & NK_WIDGET_STATE_HOVER)
Ivan Mahonin b53a5c
        sym = style->text_hover;
Ivan Mahonin b53a5c
    else if (state & NK_WIDGET_STATE_ACTIVED)
Ivan Mahonin b53a5c
        sym = style->text_active;
Ivan Mahonin b53a5c
    else sym = style->text_normal;
Ivan Mahonin b53a5c
    nk_draw_symbol(out, type, *content, bg, sym, 1, font);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_LIB nk_bool
Ivan Mahonin b53a5c
nk_do_button_symbol(nk_flags *state,
Ivan Mahonin b53a5c
    struct nk_command_buffer *out, struct nk_rect bounds,
Ivan Mahonin b53a5c
    enum nk_symbol_type symbol, enum nk_button_behavior behavior,
Ivan Mahonin b53a5c
    const struct nk_style_button *style, const struct nk_input *in,
Ivan Mahonin b53a5c
    const struct nk_user_font *font)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    int ret;
Ivan Mahonin b53a5c
    struct nk_rect content;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    NK_ASSERT(state);
Ivan Mahonin b53a5c
    NK_ASSERT(style);
Ivan Mahonin b53a5c
    NK_ASSERT(font);
Ivan Mahonin b53a5c
    NK_ASSERT(out);
Ivan Mahonin b53a5c
    if (!out || !style || !font || !state)
Ivan Mahonin b53a5c
        return nk_false;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    ret = nk_do_button(state, out, bounds, style, in, behavior, &content);
Ivan Mahonin b53a5c
    if (style->draw_begin) style->draw_begin(out, style->userdata);
Ivan Mahonin b53a5c
    nk_draw_button_symbol(out, &bounds, &content, *state, style, symbol, font);
Ivan Mahonin b53a5c
    if (style->draw_end) style->draw_end(out, style->userdata);
Ivan Mahonin b53a5c
    return ret;
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_LIB void
Ivan Mahonin b53a5c
nk_draw_button_image(struct nk_command_buffer *out,
Ivan Mahonin b53a5c
    const struct nk_rect *bounds, const struct nk_rect *content,
Ivan Mahonin b53a5c
    nk_flags state, const struct nk_style_button *style, const struct nk_image *img)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    nk_draw_button(out, bounds, state, style);
Ivan Mahonin b53a5c
    nk_draw_image(out, *content, img, nk_white);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_LIB nk_bool
Ivan Mahonin b53a5c
nk_do_button_image(nk_flags *state,
Ivan Mahonin b53a5c
    struct nk_command_buffer *out, struct nk_rect bounds,
Ivan Mahonin b53a5c
    struct nk_image img, enum nk_button_behavior b,
Ivan Mahonin b53a5c
    const struct nk_style_button *style, const struct nk_input *in)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    int ret;
Ivan Mahonin b53a5c
    struct nk_rect content;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    NK_ASSERT(state);
Ivan Mahonin b53a5c
    NK_ASSERT(style);
Ivan Mahonin b53a5c
    NK_ASSERT(out);
Ivan Mahonin b53a5c
    if (!out || !style || !state)
Ivan Mahonin b53a5c
        return nk_false;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    ret = nk_do_button(state, out, bounds, style, in, b, &content);
Ivan Mahonin b53a5c
    content.x += style->image_padding.x;
Ivan Mahonin b53a5c
    content.y += style->image_padding.y;
Ivan Mahonin b53a5c
    content.w -= 2 * style->image_padding.x;
Ivan Mahonin b53a5c
    content.h -= 2 * style->image_padding.y;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    if (style->draw_begin) style->draw_begin(out, style->userdata);
Ivan Mahonin b53a5c
    nk_draw_button_image(out, &bounds, &content, *state, style, &img);
Ivan Mahonin b53a5c
    if (style->draw_end) style->draw_end(out, style->userdata);
Ivan Mahonin b53a5c
    return ret;
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_LIB void
Ivan Mahonin b53a5c
nk_draw_button_text_symbol(struct nk_command_buffer *out,
Ivan Mahonin b53a5c
    const struct nk_rect *bounds, const struct nk_rect *label,
Ivan Mahonin b53a5c
    const struct nk_rect *symbol, nk_flags state, const struct nk_style_button *style,
Ivan Mahonin b53a5c
    const char *str, int len, enum nk_symbol_type type,
Ivan Mahonin b53a5c
    const struct nk_user_font *font)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_color sym;
Ivan Mahonin b53a5c
    struct nk_text text;
Ivan Mahonin b53a5c
    const struct nk_style_item *background;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* select correct background colors/images */
Ivan Mahonin b53a5c
    background = nk_draw_button(out, bounds, state, style);
Ivan Mahonin b53a5c
    if (background->type == NK_STYLE_ITEM_COLOR)
Ivan Mahonin b53a5c
        text.background = background->data.color;
Ivan Mahonin b53a5c
    else text.background = style->text_background;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* select correct text colors */
Ivan Mahonin b53a5c
    if (state & NK_WIDGET_STATE_HOVER) {
Ivan Mahonin b53a5c
        sym = style->text_hover;
Ivan Mahonin b53a5c
        text.text = style->text_hover;
Ivan Mahonin b53a5c
    } else if (state & NK_WIDGET_STATE_ACTIVED) {
Ivan Mahonin b53a5c
        sym = style->text_active;
Ivan Mahonin b53a5c
        text.text = style->text_active;
Ivan Mahonin b53a5c
    } else {
Ivan Mahonin b53a5c
        sym = style->text_normal;
Ivan Mahonin b53a5c
        text.text = style->text_normal;
Ivan Mahonin b53a5c
    }
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    text.padding = nk_vec2(0,0);
Ivan Mahonin b53a5c
    nk_draw_symbol(out, type, *symbol, style->text_background, sym, 0, font);
Ivan Mahonin b53a5c
    nk_widget_text(out, *label, str, len, &text, NK_TEXT_CENTERED, font);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_LIB nk_bool
Ivan Mahonin b53a5c
nk_do_button_text_symbol(nk_flags *state,
Ivan Mahonin b53a5c
    struct nk_command_buffer *out, struct nk_rect bounds,
Ivan Mahonin b53a5c
    enum nk_symbol_type symbol, const char *str, int len, nk_flags align,
Ivan Mahonin b53a5c
    enum nk_button_behavior behavior, const struct nk_style_button *style,
Ivan Mahonin b53a5c
    const struct nk_user_font *font, const struct nk_input *in)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    int ret;
Ivan Mahonin b53a5c
    struct nk_rect tri = {0,0,0,0};
Ivan Mahonin b53a5c
    struct nk_rect content;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    NK_ASSERT(style);
Ivan Mahonin b53a5c
    NK_ASSERT(out);
Ivan Mahonin b53a5c
    NK_ASSERT(font);
Ivan Mahonin b53a5c
    if (!out || !style || !font)
Ivan Mahonin b53a5c
        return nk_false;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    ret = nk_do_button(state, out, bounds, style, in, behavior, &content);
Ivan Mahonin b53a5c
    tri.y = content.y + (content.h/2) - font->height/2;
Ivan Mahonin b53a5c
    tri.w = font->height; tri.h = font->height;
Ivan Mahonin b53a5c
    if (align & NK_TEXT_ALIGN_LEFT) {
Ivan Mahonin b53a5c
        tri.x = (content.x + content.w) - (2 * style->padding.x + tri.w);
Ivan Mahonin b53a5c
        tri.x = NK_MAX(tri.x, 0);
Ivan Mahonin b53a5c
    } else tri.x = content.x + 2 * style->padding.x;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* draw button */
Ivan Mahonin b53a5c
    if (style->draw_begin) style->draw_begin(out, style->userdata);
Ivan Mahonin b53a5c
    nk_draw_button_text_symbol(out, &bounds, &content, &tri,
Ivan Mahonin b53a5c
        *state, style, str, len, symbol, font);
Ivan Mahonin b53a5c
    if (style->draw_end) style->draw_end(out, style->userdata);
Ivan Mahonin b53a5c
    return ret;
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_LIB void
Ivan Mahonin b53a5c
nk_draw_button_text_image(struct nk_command_buffer *out,
Ivan Mahonin b53a5c
    const struct nk_rect *bounds, const struct nk_rect *label,
Ivan Mahonin b53a5c
    const struct nk_rect *image, nk_flags state, const struct nk_style_button *style,
Ivan Mahonin b53a5c
    const char *str, int len, const struct nk_user_font *font,
Ivan Mahonin b53a5c
    const struct nk_image *img)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_text text;
Ivan Mahonin b53a5c
    const struct nk_style_item *background;
Ivan Mahonin b53a5c
    background = nk_draw_button(out, bounds, state, style);
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    /* select correct colors */
Ivan Mahonin b53a5c
    if (background->type == NK_STYLE_ITEM_COLOR)
Ivan Mahonin b53a5c
        text.background = background->data.color;
Ivan Mahonin b53a5c
    else text.background = style->text_background;
Ivan Mahonin b53a5c
    if (state & NK_WIDGET_STATE_HOVER)
Ivan Mahonin b53a5c
        text.text = style->text_hover;
Ivan Mahonin b53a5c
    else if (state & NK_WIDGET_STATE_ACTIVED)
Ivan Mahonin b53a5c
        text.text = style->text_active;
Ivan Mahonin b53a5c
    else text.text = style->text_normal;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    text.padding = nk_vec2(0,0);
Ivan Mahonin b53a5c
    nk_widget_text(out, *label, str, len, &text, NK_TEXT_CENTERED, font);
Ivan Mahonin b53a5c
    nk_draw_image(out, *image, img, nk_white);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_LIB nk_bool
Ivan Mahonin b53a5c
nk_do_button_text_image(nk_flags *state,
Ivan Mahonin b53a5c
    struct nk_command_buffer *out, struct nk_rect bounds,
Ivan Mahonin b53a5c
    struct nk_image img, const char* str, int len, nk_flags align,
Ivan Mahonin b53a5c
    enum nk_button_behavior behavior, const struct nk_style_button *style,
Ivan Mahonin b53a5c
    const struct nk_user_font *font, const struct nk_input *in)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    int ret;
Ivan Mahonin b53a5c
    struct nk_rect icon;
Ivan Mahonin b53a5c
    struct nk_rect content;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    NK_ASSERT(style);
Ivan Mahonin b53a5c
    NK_ASSERT(state);
Ivan Mahonin b53a5c
    NK_ASSERT(font);
Ivan Mahonin b53a5c
    NK_ASSERT(out);
Ivan Mahonin b53a5c
    if (!out || !font || !style || !str)
Ivan Mahonin b53a5c
        return nk_false;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    ret = nk_do_button(state, out, bounds, style, in, behavior, &content);
Ivan Mahonin b53a5c
    icon.y = bounds.y + style->padding.y;
Ivan Mahonin b53a5c
    icon.w = icon.h = bounds.h - 2 * style->padding.y;
Ivan Mahonin b53a5c
    if (align & NK_TEXT_ALIGN_LEFT) {
Ivan Mahonin b53a5c
        icon.x = (bounds.x + bounds.w) - (2 * style->padding.x + icon.w);
Ivan Mahonin b53a5c
        icon.x = NK_MAX(icon.x, 0);
Ivan Mahonin b53a5c
    } else icon.x = bounds.x + 2 * style->padding.x;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    icon.x += style->image_padding.x;
Ivan Mahonin b53a5c
    icon.y += style->image_padding.y;
Ivan Mahonin b53a5c
    icon.w -= 2 * style->image_padding.x;
Ivan Mahonin b53a5c
    icon.h -= 2 * style->image_padding.y;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    if (style->draw_begin) style->draw_begin(out, style->userdata);
Ivan Mahonin b53a5c
    nk_draw_button_text_image(out, &bounds, &content, &icon, *state, style, str, len, font, &img);
Ivan Mahonin b53a5c
    if (style->draw_end) style->draw_end(out, style->userdata);
Ivan Mahonin b53a5c
    return ret;
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API void
Ivan Mahonin b53a5c
nk_button_set_behavior(struct nk_context *ctx, enum nk_button_behavior behavior)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    NK_ASSERT(ctx);
Ivan Mahonin b53a5c
    if (!ctx) return;
Ivan Mahonin b53a5c
    ctx->button_behavior = behavior;
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_button_push_behavior(struct nk_context *ctx, enum nk_button_behavior behavior)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_config_stack_button_behavior *button_stack;
Ivan Mahonin b53a5c
    struct nk_config_stack_button_behavior_element *element;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    NK_ASSERT(ctx);
Ivan Mahonin b53a5c
    if (!ctx) return 0;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    button_stack = &ctx->stacks.button_behaviors;
Ivan Mahonin b53a5c
    NK_ASSERT(button_stack->head < (int)NK_LEN(button_stack->elements));
Ivan Mahonin b53a5c
    if (button_stack->head >= (int)NK_LEN(button_stack->elements))
Ivan Mahonin b53a5c
        return 0;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    element = &button_stack->elements[button_stack->head++];
Ivan Mahonin b53a5c
    element->address = &ctx->button_behavior;
Ivan Mahonin b53a5c
    element->old_value = ctx->button_behavior;
Ivan Mahonin b53a5c
    ctx->button_behavior = behavior;
Ivan Mahonin b53a5c
    return 1;
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_button_pop_behavior(struct nk_context *ctx)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_config_stack_button_behavior *button_stack;
Ivan Mahonin b53a5c
    struct nk_config_stack_button_behavior_element *element;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    NK_ASSERT(ctx);
Ivan Mahonin b53a5c
    if (!ctx) return 0;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    button_stack = &ctx->stacks.button_behaviors;
Ivan Mahonin b53a5c
    NK_ASSERT(button_stack->head > 0);
Ivan Mahonin b53a5c
    if (button_stack->head < 1)
Ivan Mahonin b53a5c
        return 0;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    element = &button_stack->elements[--button_stack->head];
Ivan Mahonin b53a5c
    *element->address = element->old_value;
Ivan Mahonin b53a5c
    return 1;
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_button_text_styled(struct nk_context *ctx,
Ivan Mahonin b53a5c
    const struct nk_style_button *style, const char *title, int len)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_window *win;
Ivan Mahonin b53a5c
    struct nk_panel *layout;
Ivan Mahonin b53a5c
    const struct nk_input *in;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    struct nk_rect bounds;
Ivan Mahonin b53a5c
    enum nk_widget_layout_states state;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    NK_ASSERT(ctx);
Ivan Mahonin b53a5c
    NK_ASSERT(style);
Ivan Mahonin b53a5c
    NK_ASSERT(ctx->current);
Ivan Mahonin b53a5c
    NK_ASSERT(ctx->current->layout);
Ivan Mahonin b53a5c
    if (!style || !ctx || !ctx->current || !ctx->current->layout) return 0;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    win = ctx->current;
Ivan Mahonin b53a5c
    layout = win->layout;
Ivan Mahonin b53a5c
    state = nk_widget(&bounds, ctx);
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    if (!state) return 0;
Ivan Mahonin b53a5c
    in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
Ivan Mahonin b53a5c
    return nk_do_button_text(&ctx->last_widget_state, &win->buffer, bounds,
Ivan Mahonin b53a5c
                    title, len, style->text_alignment, ctx->button_behavior,
Ivan Mahonin b53a5c
                    style, in, ctx->style.font);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_button_text(struct nk_context *ctx, const char *title, int len)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    NK_ASSERT(ctx);
Ivan Mahonin b53a5c
    if (!ctx) return 0;
Ivan Mahonin b53a5c
    return nk_button_text_styled(ctx, &ctx->style.button, title, len);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool nk_button_label_styled(struct nk_context *ctx,
Ivan Mahonin b53a5c
    const struct nk_style_button *style, const char *title)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    return nk_button_text_styled(ctx, style, title, nk_strlen(title));
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool nk_button_label(struct nk_context *ctx, const char *title)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    return nk_button_text(ctx, title, nk_strlen(title));
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_button_color(struct nk_context *ctx, struct nk_color color)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_window *win;
Ivan Mahonin b53a5c
    struct nk_panel *layout;
Ivan Mahonin b53a5c
    const struct nk_input *in;
Ivan Mahonin b53a5c
    struct nk_style_button button;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    int ret = 0;
Ivan Mahonin b53a5c
    struct nk_rect bounds;
Ivan Mahonin b53a5c
    struct nk_rect content;
Ivan Mahonin b53a5c
    enum nk_widget_layout_states 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
    win = ctx->current;
Ivan Mahonin b53a5c
    layout = win->layout;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    state = nk_widget(&bounds, ctx);
Ivan Mahonin b53a5c
    if (!state) return 0;
Ivan Mahonin b53a5c
    in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    button = ctx->style.button;
Ivan Mahonin b53a5c
    button.normal = nk_style_item_color(color);
Ivan Mahonin b53a5c
    button.hover = nk_style_item_color(color);
Ivan Mahonin b53a5c
    button.active = nk_style_item_color(color);
Ivan Mahonin b53a5c
    ret = nk_do_button(&ctx->last_widget_state, &win->buffer, bounds,
Ivan Mahonin b53a5c
                &button, in, ctx->button_behavior, &content);
Ivan Mahonin b53a5c
    nk_draw_button(&win->buffer, &bounds, ctx->last_widget_state, &button);
Ivan Mahonin b53a5c
    return ret;
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_button_symbol_styled(struct nk_context *ctx,
Ivan Mahonin b53a5c
    const struct nk_style_button *style, enum nk_symbol_type symbol)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_window *win;
Ivan Mahonin b53a5c
    struct nk_panel *layout;
Ivan Mahonin b53a5c
    const struct nk_input *in;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    struct nk_rect bounds;
Ivan Mahonin b53a5c
    enum nk_widget_layout_states 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
    win = ctx->current;
Ivan Mahonin b53a5c
    layout = win->layout;
Ivan Mahonin b53a5c
    state = nk_widget(&bounds, ctx);
Ivan Mahonin b53a5c
    if (!state) return 0;
Ivan Mahonin b53a5c
    in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
Ivan Mahonin b53a5c
    return nk_do_button_symbol(&ctx->last_widget_state, &win->buffer, bounds,
Ivan Mahonin b53a5c
            symbol, ctx->button_behavior, style, in, ctx->style.font);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_button_symbol(struct nk_context *ctx, enum nk_symbol_type symbol)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    NK_ASSERT(ctx);
Ivan Mahonin b53a5c
    if (!ctx) return 0;
Ivan Mahonin b53a5c
    return nk_button_symbol_styled(ctx, &ctx->style.button, symbol);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_button_image_styled(struct nk_context *ctx, const struct nk_style_button *style,
Ivan Mahonin b53a5c
    struct nk_image img)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_window *win;
Ivan Mahonin b53a5c
    struct nk_panel *layout;
Ivan Mahonin b53a5c
    const struct nk_input *in;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    struct nk_rect bounds;
Ivan Mahonin b53a5c
    enum nk_widget_layout_states 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
    win = ctx->current;
Ivan Mahonin b53a5c
    layout = win->layout;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    state = nk_widget(&bounds, ctx);
Ivan Mahonin b53a5c
    if (!state) return 0;
Ivan Mahonin b53a5c
    in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
Ivan Mahonin b53a5c
    return nk_do_button_image(&ctx->last_widget_state, &win->buffer, bounds,
Ivan Mahonin b53a5c
                img, ctx->button_behavior, style, in);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_button_image(struct nk_context *ctx, struct nk_image img)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    NK_ASSERT(ctx);
Ivan Mahonin b53a5c
    if (!ctx) return 0;
Ivan Mahonin b53a5c
    return nk_button_image_styled(ctx, &ctx->style.button, img);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_button_symbol_text_styled(struct nk_context *ctx,
Ivan Mahonin b53a5c
    const struct nk_style_button *style, enum nk_symbol_type symbol,
Ivan Mahonin b53a5c
    const char *text, int len, nk_flags align)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_window *win;
Ivan Mahonin b53a5c
    struct nk_panel *layout;
Ivan Mahonin b53a5c
    const struct nk_input *in;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    struct nk_rect bounds;
Ivan Mahonin b53a5c
    enum nk_widget_layout_states 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
    win = ctx->current;
Ivan Mahonin b53a5c
    layout = win->layout;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    state = nk_widget(&bounds, ctx);
Ivan Mahonin b53a5c
    if (!state) return 0;
Ivan Mahonin b53a5c
    in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
Ivan Mahonin b53a5c
    return nk_do_button_text_symbol(&ctx->last_widget_state, &win->buffer, bounds,
Ivan Mahonin b53a5c
                symbol, text, len, align, ctx->button_behavior,
Ivan Mahonin b53a5c
                style, ctx->style.font, in);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_button_symbol_text(struct nk_context *ctx, enum nk_symbol_type symbol,
Ivan Mahonin b53a5c
    const char* text, int len, nk_flags align)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    NK_ASSERT(ctx);
Ivan Mahonin b53a5c
    if (!ctx) return 0;
Ivan Mahonin b53a5c
    return nk_button_symbol_text_styled(ctx, &ctx->style.button, symbol, text, len, align);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool nk_button_symbol_label(struct nk_context *ctx, enum nk_symbol_type symbol,
Ivan Mahonin b53a5c
    const char *label, nk_flags align)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    return nk_button_symbol_text(ctx, symbol, label, nk_strlen(label), align);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool nk_button_symbol_label_styled(struct nk_context *ctx,
Ivan Mahonin b53a5c
    const struct nk_style_button *style, enum nk_symbol_type symbol,
Ivan Mahonin b53a5c
    const char *title, nk_flags align)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    return nk_button_symbol_text_styled(ctx, style, symbol, title, nk_strlen(title), align);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_button_image_text_styled(struct nk_context *ctx,
Ivan Mahonin b53a5c
    const struct nk_style_button *style, struct nk_image img, const char *text,
Ivan Mahonin b53a5c
    int len, nk_flags align)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    struct nk_window *win;
Ivan Mahonin b53a5c
    struct nk_panel *layout;
Ivan Mahonin b53a5c
    const struct nk_input *in;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    struct nk_rect bounds;
Ivan Mahonin b53a5c
    enum nk_widget_layout_states 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
    win = ctx->current;
Ivan Mahonin b53a5c
    layout = win->layout;
Ivan Mahonin b53a5c
Ivan Mahonin b53a5c
    state = nk_widget(&bounds, ctx);
Ivan Mahonin b53a5c
    if (!state) return 0;
Ivan Mahonin b53a5c
    in = (state == NK_WIDGET_ROM || layout->flags & NK_WINDOW_ROM) ? 0 : &ctx->input;
Ivan Mahonin b53a5c
    return nk_do_button_text_image(&ctx->last_widget_state, &win->buffer,
Ivan Mahonin b53a5c
            bounds, img, text, len, align, ctx->button_behavior,
Ivan Mahonin b53a5c
            style, ctx->style.font, in);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool
Ivan Mahonin b53a5c
nk_button_image_text(struct nk_context *ctx, struct nk_image img,
Ivan Mahonin b53a5c
    const char *text, int len, nk_flags align)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    return nk_button_image_text_styled(ctx, &ctx->style.button,img, text, len, align);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool nk_button_image_label(struct nk_context *ctx, struct nk_image img,
Ivan Mahonin b53a5c
    const char *label, nk_flags align)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    return nk_button_image_text(ctx, img, label, nk_strlen(label), align);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c
NK_API nk_bool nk_button_image_label_styled(struct nk_context *ctx,
Ivan Mahonin b53a5c
    const struct nk_style_button *style, struct nk_image img,
Ivan Mahonin b53a5c
    const char *label, nk_flags text_alignment)
Ivan Mahonin b53a5c
{
Ivan Mahonin b53a5c
    return nk_button_image_text_styled(ctx, style, img, label, nk_strlen(label), text_alignment);
Ivan Mahonin b53a5c
}
Ivan Mahonin b53a5c