Skip to content

Commit b0fbe40

Browse files
authored
Merge pull request #789 from rswinkle/fix_knob_scrolling
Fix knob scrolling and remove some dead code
2 parents 7408af0 + 91a6e77 commit b0fbe40

File tree

5 files changed

+31
-25
lines changed

5 files changed

+31
-25
lines changed

clib.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "nuklear",
3-
"version": "4.12.4",
3+
"version": "4.12.5",
44
"repo": "Immediate-Mode-UI/Nuklear",
55
"description": "A small ANSI C gui toolkit",
66
"keywords": ["gl", "ui", "toolkit"],

nuklear.h

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20315,7 +20315,7 @@ nk_panel_end(struct nk_context *ctx)
2031520315
root_window = root_window->parent;
2031620316

2031720317
/* only allow scrolling if parent window is active */
20318-
scroll_has_scrolling = 0;
20318+
scroll_has_scrolling = nk_false;
2031920319
if ((root_window == ctx->active) && layout->has_scrolling) {
2032020320
/* and panel is being hovered and inside clip rect*/
2032120321
if (nk_input_is_mouse_hovering_rect(in, layout->bounds) &&
@@ -20332,13 +20332,13 @@ nk_panel_end(struct nk_context *ctx)
2033220332
scroll_has_scrolling = nk_true;
2033320333
}
2033420334
}
20335-
} else if (!nk_panel_is_sub(layout->type)) {
20335+
} else {
2033620336
/* window mouse wheel scrolling */
2033720337
scroll_has_scrolling = (window == ctx->active) && layout->has_scrolling;
2033820338
if (in && (in->mouse.scroll_delta.y > 0 || in->mouse.scroll_delta.x > 0) && scroll_has_scrolling)
2033920339
window->scrolled = nk_true;
2034020340
else window->scrolled = nk_false;
20341-
} else scroll_has_scrolling = nk_false;
20341+
}
2034220342

2034320343
{
2034420344
/* vertical scrollbar */
@@ -26105,16 +26105,18 @@ nk_knob_behavior(nk_flags *state, struct nk_input *in,
2610526105
/* knob widget state */
2610626106
if (nk_input_is_mouse_hovering_rect(in, bounds)){
2610726107
*state = NK_WIDGET_STATE_HOVERED;
26108-
if (in) {
26109-
/* handle scroll and arrow inputs */
26110-
if (in->mouse.scroll_delta.y > 0 ||
26111-
(in->keyboard.keys[NK_KEY_UP].down && in->keyboard.keys[NK_KEY_UP].clicked))
26112-
knob_value += knob_step;
26113-
26114-
if (in->mouse.scroll_delta.y < 0 ||
26115-
(in->keyboard.keys[NK_KEY_DOWN].down && in->keyboard.keys[NK_KEY_DOWN].clicked))
26116-
knob_value -= knob_step;
26108+
/* handle scroll and arrow inputs */
26109+
if (in->mouse.scroll_delta.y > 0 ||
26110+
(in->keyboard.keys[NK_KEY_UP].down && in->keyboard.keys[NK_KEY_UP].clicked)) {
26111+
knob_value += knob_step;
26112+
}
26113+
26114+
if (in->mouse.scroll_delta.y < 0 ||
26115+
(in->keyboard.keys[NK_KEY_DOWN].down && in->keyboard.keys[NK_KEY_DOWN].clicked)) {
26116+
knob_value -= knob_step;
2611726117
}
26118+
/* easiest way to disable scrolling of parent panels..knob eats scrolling */
26119+
in->mouse.scroll_delta.y = 0;
2611826120
knob_value = NK_CLAMP(knob_min, knob_value, knob_max);
2611926121
}
2612026122
if (*state & NK_WIDGET_STATE_HOVER &&
@@ -30698,6 +30700,7 @@ nk_tooltipfv(struct nk_context *ctx, const char *fmt, va_list args)
3069830700
/// - [y]: Minor version with non-breaking API and library changes
3069930701
/// - [z]: Patch version with no direct changes to the API
3070030702
///
30703+
/// - 2025/03/05 (4.12.5) - Fix scrolling knob also scrolling parent window, remove dead code
3070130704
/// - 2024/12/11 (4.12.4) - Fix array subscript [0, 0] is outside array bounds of ‘char[1]’
3070230705
/// - 2024/12/11 (4.12.3) - Fix border color for property widgets
3070330706
/// - 2024/11/20 (4.12.2) - Fix int/float type conversion warnings in `nk_roundf`

src/CHANGELOG

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
/// - [y]: Minor version with non-breaking API and library changes
88
/// - [z]: Patch version with no direct changes to the API
99
///
10+
/// - 2025/03/05 (4.12.5) - Fix scrolling knob also scrolling parent window, remove dead code
1011
/// - 2024/12/11 (4.12.4) - Fix array subscript [0, 0] is outside array bounds of ‘char[1]’
1112
/// - 2024/12/11 (4.12.3) - Fix border color for property widgets
1213
/// - 2024/11/20 (4.12.2) - Fix int/float type conversion warnings in `nk_roundf`

src/nuklear_knob.c

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,18 @@ nk_knob_behavior(nk_flags *state, struct nk_input *in,
5151
/* knob widget state */
5252
if (nk_input_is_mouse_hovering_rect(in, bounds)){
5353
*state = NK_WIDGET_STATE_HOVERED;
54-
if (in) {
55-
/* handle scroll and arrow inputs */
56-
if (in->mouse.scroll_delta.y > 0 ||
57-
(in->keyboard.keys[NK_KEY_UP].down && in->keyboard.keys[NK_KEY_UP].clicked))
58-
knob_value += knob_step;
59-
60-
if (in->mouse.scroll_delta.y < 0 ||
61-
(in->keyboard.keys[NK_KEY_DOWN].down && in->keyboard.keys[NK_KEY_DOWN].clicked))
62-
knob_value -= knob_step;
54+
/* handle scroll and arrow inputs */
55+
if (in->mouse.scroll_delta.y > 0 ||
56+
(in->keyboard.keys[NK_KEY_UP].down && in->keyboard.keys[NK_KEY_UP].clicked)) {
57+
knob_value += knob_step;
6358
}
59+
60+
if (in->mouse.scroll_delta.y < 0 ||
61+
(in->keyboard.keys[NK_KEY_DOWN].down && in->keyboard.keys[NK_KEY_DOWN].clicked)) {
62+
knob_value -= knob_step;
63+
}
64+
/* easiest way to disable scrolling of parent panels..knob eats scrolling */
65+
in->mouse.scroll_delta.y = 0;
6466
knob_value = NK_CLAMP(knob_min, knob_value, knob_max);
6567
}
6668
if (*state & NK_WIDGET_STATE_HOVER &&

src/nuklear_panel.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ nk_panel_end(struct nk_context *ctx)
421421
root_window = root_window->parent;
422422

423423
/* only allow scrolling if parent window is active */
424-
scroll_has_scrolling = 0;
424+
scroll_has_scrolling = nk_false;
425425
if ((root_window == ctx->active) && layout->has_scrolling) {
426426
/* and panel is being hovered and inside clip rect*/
427427
if (nk_input_is_mouse_hovering_rect(in, layout->bounds) &&
@@ -438,13 +438,13 @@ nk_panel_end(struct nk_context *ctx)
438438
scroll_has_scrolling = nk_true;
439439
}
440440
}
441-
} else if (!nk_panel_is_sub(layout->type)) {
441+
} else {
442442
/* window mouse wheel scrolling */
443443
scroll_has_scrolling = (window == ctx->active) && layout->has_scrolling;
444444
if (in && (in->mouse.scroll_delta.y > 0 || in->mouse.scroll_delta.x > 0) && scroll_has_scrolling)
445445
window->scrolled = nk_true;
446446
else window->scrolled = nk_false;
447-
} else scroll_has_scrolling = nk_false;
447+
}
448448

449449
{
450450
/* vertical scrollbar */

0 commit comments

Comments
 (0)