Fixed clipped group scrollbar behavior

Previously if a group had a scrollbar and is not completly visible
inside the window then the its scrollbar would use the clipped
height instead of its actual height as scroll reference. This should
now be fixed and work correctly.

In addition I split the tab/node button style into two one for the
minimized and one for the maximized state change.
This commit is contained in:
vurtun 2016-06-11 19:05:16 +02:00
parent a4dce2565e
commit c4c3ce226f
1 changed files with 31 additions and 10 deletions

View File

@ -2091,8 +2091,10 @@ struct nk_style_tab {
struct nk_color text;
/* button */
struct nk_style_button tab_button;
struct nk_style_button node_button;
struct nk_style_button tab_maximize_button;
struct nk_style_button tab_minimize_button;
struct nk_style_button node_maximize_button;
struct nk_style_button node_minimize_button;
enum nk_symbol_type sym_minimize;
enum nk_symbol_type sym_maximize;
@ -14113,7 +14115,7 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
tab->rounding = 0;
/* tab button */
button = &style->tab.tab_button;
button = &style->tab.tab_minimize_button;
nk_zero_struct(*button);
button->normal = nk_style_item_color(table[NK_COLOR_TAB_HEADER]);
button->hover = nk_style_item_color(table[NK_COLOR_TAB_HEADER]);
@ -14131,9 +14133,10 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
button->rounding = 0.0f;
button->draw_begin = 0;
button->draw_end = 0;
style->tab.tab_maximize_button =*button;
/* node button */
button = &style->tab.node_button;
button = &style->tab.node_minimize_button;
nk_zero_struct(*button);
button->normal = nk_style_item_color(table[NK_COLOR_WINDOW]);
button->hover = nk_style_item_color(table[NK_COLOR_WINDOW]);
@ -14151,6 +14154,7 @@ nk_style_from_table(struct nk_context *ctx, const struct nk_color *table)
button->rounding = 0.0f;
button->draw_begin = 0;
button->draw_end = 0;
style->tab.node_maximize_button =*button;
/* window header */
win = &style->window;
@ -15815,8 +15819,12 @@ nk_panel_end(struct nk_context *ctx)
bounds.x = layout->bounds.x + layout->width;
bounds.y = layout->clip.y;
bounds.w = scrollbar_size.y;
bounds.h = layout->clip.h;
if (layout->flags & NK_WINDOW_BORDER) bounds.h -= 1;
bounds.h = layout->bounds.h - (layout->footer_h + layout->header_h);
bounds.h -= (2.0f * window_padding.y);
if (layout->menu.h)
bounds.h -= layout->menu.h + layout->row.height;
if (layout->flags & NK_WINDOW_BORDER)
bounds.x -= layout->border;
scroll_offset = layout->offset->y;
scroll_step = layout->clip.h * 0.10f;
@ -16613,6 +16621,8 @@ nk_tree_base(struct nk_context *ctx, enum nk_tree_type type,
const struct nk_style *style;
struct nk_command_buffer *out;
const struct nk_input *in;
const struct nk_style_button *button;
enum nk_symbol_type symbol;
struct nk_vec2 item_spacing;
struct nk_vec2 panel_padding;
@ -16676,14 +16686,25 @@ nk_tree_base(struct nk_context *ctx, enum nk_tree_type type,
if (nk_button_behavior(&ws, header, in, NK_BUTTON_DEFAULT))
*state = (*state == NK_MAXIMIZED) ? NK_MINIMIZED : NK_MAXIMIZED;
/* select correct button style */
if (*state == NK_MAXIMIZED) {
symbol = style->tab.sym_maximize;
if (type == NK_TREE_TAB)
button = &style->tab.tab_maximize_button;
else button = &style->tab.node_maximize_button;
} else {
symbol = style->tab.sym_minimize;
if (type == NK_TREE_TAB)
button = &style->tab.tab_minimize_button;
else button = &style->tab.node_minimize_button;
}
{/* draw triangle button */
sym.w = sym.h = style->font.height;
sym.y = header.y + style->tab.padding.y;
sym.x = header.x + panel_padding.x + style->tab.padding.x;
nk_do_button_symbol(&ws, &win->buffer, sym,
(*state == NK_MAXIMIZED)? style->tab.sym_minimize: style->tab.sym_maximize,
NK_BUTTON_DEFAULT, (type == NK_TREE_TAB)?
&style->tab.tab_button: &style->tab.node_button, 0, &style->font);
nk_do_button_symbol(&ws, &win->buffer, sym, symbol, NK_BUTTON_DEFAULT,
button, 0, &style->font);
if (img) {
/* draw optional image icon */