From a931a8d499ecb59334bcda5f21c6b15e414c07a2 Mon Sep 17 00:00:00 2001 From: tcdude Date: Fri, 27 May 2022 04:12:11 +0200 Subject: [PATCH] Fix regression introduced in #448 This adds a new `nk_input_has_mouse_click_in_rect_button` function that is being used only by buttons. This allows `nk_input_has_mouse_click_in_rect` to act as its name suggests while still allowing for the behavior introduced in #448 --- nuklear.h | 15 ++++++++++++++- src/CHANGELOG | 1 + src/nuklear.h | 1 + src/nuklear_button.c | 2 +- src/nuklear_input.c | 11 +++++++++++ 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/nuklear.h b/nuklear.h index 38d72c8..121cf91 100644 --- a/nuklear.h +++ b/nuklear.h @@ -4682,6 +4682,7 @@ struct nk_input { NK_API nk_bool nk_input_has_mouse_click(const struct nk_input*, enum nk_buttons); NK_API nk_bool nk_input_has_mouse_click_in_rect(const struct nk_input*, enum nk_buttons, struct nk_rect); +NK_API nk_bool nk_input_has_mouse_click_in_rect_button(const struct nk_input*, enum nk_buttons, struct nk_rect); NK_API nk_bool nk_input_has_mouse_click_down_in_rect(const struct nk_input*, enum nk_buttons, struct nk_rect, nk_bool down); NK_API nk_bool nk_input_is_mouse_click_in_rect(const struct nk_input*, enum nk_buttons, struct nk_rect); NK_API nk_bool nk_input_is_mouse_click_down_in_rect(const struct nk_input *i, enum nk_buttons id, struct nk_rect b, nk_bool down); @@ -17947,6 +17948,17 @@ nk_input_has_mouse_click(const struct nk_input *i, enum nk_buttons id) NK_API nk_bool nk_input_has_mouse_click_in_rect(const struct nk_input *i, enum nk_buttons id, struct nk_rect b) +{ + const struct nk_mouse_button *btn; + if (!i) return nk_false; + btn = &i->mouse.buttons[id]; + if (!NK_INBOX(btn->clicked_pos.x,btn->clicked_pos.y,b.x,b.y,b.w,b.h)) + return nk_false; + return nk_true; +} +NK_API nk_bool +nk_input_has_mouse_click_in_rect_button(const struct nk_input *i, enum nk_buttons id, + struct nk_rect b) { const struct nk_mouse_button *btn; if (!i) return nk_false; @@ -23770,7 +23782,7 @@ nk_button_behavior(nk_flags *state, struct nk_rect r, *state = NK_WIDGET_STATE_HOVERED; if (nk_input_is_mouse_down(i, NK_BUTTON_LEFT)) *state = NK_WIDGET_STATE_ACTIVE; - if (nk_input_has_mouse_click_in_rect(i, NK_BUTTON_LEFT, r)) { + if (nk_input_has_mouse_click_in_rect_button(i, NK_BUTTON_LEFT, r)) { ret = (behavior != NK_BUTTON_DEFAULT) ? nk_input_is_mouse_down(i, NK_BUTTON_LEFT): #ifdef NK_BUTTON_TRIGGER_ON_RELEASE @@ -29644,6 +29656,7 @@ nk_tooltipfv(struct nk_context *ctx, const char *fmt, va_list args) /// - [y]: Minor version with non-breaking API and library changes /// - [z]: Patch version with no direct changes to the API /// +/// - 2022/05/27 (4.10.0) - Add nk_input_has_mouse_click_in_rect_button() to fix window move bug /// - 2022/04/18 (4.9.7) - Change button behavior when NK_BUTTON_TRIGGER_ON_RELEASE is defined to /// only trigger when the mouse position was inside the same button on down /// - 2022/02/03 (4.9.6) - Allow overriding the NK_INV_SQRT function, similar to NK_SIN and NK_COS diff --git a/src/CHANGELOG b/src/CHANGELOG index 869c890..7f05782 100644 --- a/src/CHANGELOG +++ b/src/CHANGELOG @@ -7,6 +7,7 @@ /// - [y]: Minor version with non-breaking API and library changes /// - [z]: Patch version with no direct changes to the API /// +/// - 2022/05/27 (4.10.0) - Add nk_input_has_mouse_click_in_rect_button() to fix window move bug /// - 2022/04/18 (4.9.7) - Change button behavior when NK_BUTTON_TRIGGER_ON_RELEASE is defined to /// only trigger when the mouse position was inside the same button on down /// - 2022/02/03 (4.9.6) - Allow overriding the NK_INV_SQRT function, similar to NK_SIN and NK_COS diff --git a/src/nuklear.h b/src/nuklear.h index 7979958..6d06be9 100644 --- a/src/nuklear.h +++ b/src/nuklear.h @@ -4461,6 +4461,7 @@ struct nk_input { NK_API nk_bool nk_input_has_mouse_click(const struct nk_input*, enum nk_buttons); NK_API nk_bool nk_input_has_mouse_click_in_rect(const struct nk_input*, enum nk_buttons, struct nk_rect); +NK_API nk_bool nk_input_has_mouse_click_in_rect_button(const struct nk_input*, enum nk_buttons, struct nk_rect); NK_API nk_bool nk_input_has_mouse_click_down_in_rect(const struct nk_input*, enum nk_buttons, struct nk_rect, nk_bool down); NK_API nk_bool nk_input_is_mouse_click_in_rect(const struct nk_input*, enum nk_buttons, struct nk_rect); NK_API nk_bool nk_input_is_mouse_click_down_in_rect(const struct nk_input *i, enum nk_buttons id, struct nk_rect b, nk_bool down); diff --git a/src/nuklear_button.c b/src/nuklear_button.c index 54f02f7..5ca736c 100644 --- a/src/nuklear_button.c +++ b/src/nuklear_button.c @@ -70,7 +70,7 @@ nk_button_behavior(nk_flags *state, struct nk_rect r, *state = NK_WIDGET_STATE_HOVERED; if (nk_input_is_mouse_down(i, NK_BUTTON_LEFT)) *state = NK_WIDGET_STATE_ACTIVE; - if (nk_input_has_mouse_click_in_rect(i, NK_BUTTON_LEFT, r)) { + if (nk_input_has_mouse_click_in_rect_button(i, NK_BUTTON_LEFT, r)) { ret = (behavior != NK_BUTTON_DEFAULT) ? nk_input_is_mouse_down(i, NK_BUTTON_LEFT): #ifdef NK_BUTTON_TRIGGER_ON_RELEASE diff --git a/src/nuklear_input.c b/src/nuklear_input.c index b22afa6..c959a32 100644 --- a/src/nuklear_input.c +++ b/src/nuklear_input.c @@ -146,6 +146,17 @@ nk_input_has_mouse_click(const struct nk_input *i, enum nk_buttons id) NK_API nk_bool nk_input_has_mouse_click_in_rect(const struct nk_input *i, enum nk_buttons id, struct nk_rect b) +{ + const struct nk_mouse_button *btn; + if (!i) return nk_false; + btn = &i->mouse.buttons[id]; + if (!NK_INBOX(btn->clicked_pos.x,btn->clicked_pos.y,b.x,b.y,b.w,b.h)) + return nk_false; + return nk_true; +} +NK_API nk_bool +nk_input_has_mouse_click_in_rect_button(const struct nk_input *i, enum nk_buttons id, + struct nk_rect b) { const struct nk_mouse_button *btn; if (!i) return nk_false;