Skip to content

Commit a9fef84

Browse files
mouse: Add the Back/Forward Mouse Buttons (#906)
* input: Add Back/Foreward Mouse buttons * rebuild * Add remaining renderers * Add mouse tests * Apply suggestion from @RobLoach * allegro: Fix switch warning? * Clean up code * Update demo/d3d12/nuklear_d3d12.h Co-authored-by: sleeptightAnsiC <91839286+sleeptightAnsiC@users.noreply.github.com> * Update demo/d3d11/nuklear_d3d11.h Co-authored-by: sleeptightAnsiC <91839286+sleeptightAnsiC@users.noreply.github.com> * Switch input context from d3d9 to gdi for X buttons * Update context from d3d9 to gdi for XBUTTON events * Change context from d3d9 to gdip for XBUTTON events * Refactor mouse button handling in nuklear_allegro5.h * Fix allegro * Remove break * Add doc comments --------- Co-authored-by: sleeptightAnsiC <91839286+sleeptightAnsiC@users.noreply.github.com>
1 parent 59cd321 commit a9fef84

29 files changed

Lines changed: 280 additions & 11 deletions

File tree

demo/allegro5/nuklear_allegro5.h

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -364,12 +364,14 @@ nk_allegro5_handle_event(ALLEGRO_EVENT *ev)
364364
} break;
365365
case ALLEGRO_EVENT_MOUSE_BUTTON_DOWN:
366366
case ALLEGRO_EVENT_MOUSE_BUTTON_UP: {
367-
int button = NK_BUTTON_LEFT;
368-
if (ev->mouse.button == 2) {
369-
button = NK_BUTTON_RIGHT;
370-
}
371-
else if (ev->mouse.button == 3) {
372-
button = NK_BUTTON_MIDDLE;
367+
int button;
368+
switch (ev->mouse.button) {
369+
case 1: button = NK_BUTTON_LEFT; break;
370+
case 2: button = NK_BUTTON_RIGHT; break;
371+
case 3: button = NK_BUTTON_MIDDLE; break;
372+
case 4: button = NK_BUTTON_X1; break;
373+
case 5: button = NK_BUTTON_X2; break;
374+
default: return 0;
373375
}
374376
nk_input_button(ctx, button, ev->mouse.x, ev->mouse.y, ev->type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN);
375377
return 1;

demo/common/overview.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,6 +1429,41 @@ overview(struct nk_context *ctx)
14291429
}
14301430
nk_tree_pop(ctx);
14311431
}
1432+
1433+
/* Input */
1434+
if (nk_tree_push(ctx, NK_TREE_TAB, "Input", NK_MINIMIZED))
1435+
{
1436+
const struct nk_input *in = &ctx->input;
1437+
static const char *button_names[NK_BUTTON_MAX] = {
1438+
"Left", "Middle", "Right", "Double Click", "X1", "X2"
1439+
};
1440+
int i;
1441+
1442+
/* Mouse Buttons*/
1443+
nk_layout_row_dynamic(ctx, 30, 1);
1444+
nk_label(ctx, "Mouse Buttons", NK_TEXT_LEFT);
1445+
nk_layout_row_dynamic(ctx, 20, 2);
1446+
for (i = 0; i < NK_BUTTON_MAX; i++) {
1447+
nk_label(ctx, button_names[i], NK_TEXT_LEFT);
1448+
if (nk_input_is_mouse_pressed(in, i))
1449+
nk_label(ctx, "Pressed", NK_TEXT_LEFT);
1450+
else if (nk_input_is_mouse_down(in, i))
1451+
nk_label(ctx, "Down", NK_TEXT_LEFT);
1452+
else if (nk_input_is_mouse_released(in, i))
1453+
nk_label(ctx, "Released", NK_TEXT_LEFT);
1454+
else
1455+
nk_label(ctx, "Up", NK_TEXT_LEFT);
1456+
}
1457+
1458+
/* Mouse Wheel */
1459+
nk_layout_row_dynamic(ctx, 30, 1);
1460+
nk_label(ctx, "Mouse Wheel", NK_TEXT_LEFT);
1461+
nk_layout_row_dynamic(ctx, 20, 2);
1462+
nk_labelf(ctx, NK_TEXT_LEFT, "X: %.2f", in->mouse.scroll_delta.x);
1463+
nk_labelf(ctx, NK_TEXT_LEFT, "Y: %.2f", in->mouse.scroll_delta.y);
1464+
nk_tree_pop(ctx);
1465+
}
1466+
14321467
if (disable_widgets)
14331468
nk_widget_disable_end(ctx);
14341469
}

demo/d3d11/nuklear_d3d11.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -404,6 +404,30 @@ nk_d3d11_handle_event(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam)
404404
ReleaseCapture();
405405
return 1;
406406

407+
case WM_XBUTTONDOWN:
408+
switch (GET_XBUTTON_WPARAM(wparam)) {
409+
case XBUTTON1:
410+
nk_input_button(&d3d11.ctx, NK_BUTTON_X1, (short)LOWORD(lparam), (short)HIWORD(lparam), 1);
411+
break;
412+
case XBUTTON2:
413+
nk_input_button(&d3d11.ctx, NK_BUTTON_X2, (short)LOWORD(lparam), (short)HIWORD(lparam), 1);
414+
break;
415+
}
416+
SetCapture(wnd);
417+
return 1;
418+
419+
case WM_XBUTTONUP:
420+
switch (GET_XBUTTON_WPARAM(wparam)) {
421+
case XBUTTON1:
422+
nk_input_button(&d3d11.ctx, NK_BUTTON_X1, (short)LOWORD(lparam), (short)HIWORD(lparam), 0);
423+
break;
424+
case XBUTTON2:
425+
nk_input_button(&d3d11.ctx, NK_BUTTON_X2, (short)LOWORD(lparam), (short)HIWORD(lparam), 0);
426+
break;
427+
}
428+
ReleaseCapture();
429+
return 1;
430+
407431
case WM_MOUSEWHEEL:
408432
nk_input_scroll(&d3d11.ctx, nk_vec2(0,(float)(short)HIWORD(wparam) / WHEEL_DELTA));
409433
return 1;

demo/d3d12/nuklear_d3d12.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,30 @@ nk_d3d12_handle_event(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam)
528528
ReleaseCapture();
529529
return 1;
530530

531+
case WM_XBUTTONDOWN:
532+
switch (GET_XBUTTON_WPARAM(wparam)) {
533+
case XBUTTON1:
534+
nk_input_button(&d3d12.ctx, NK_BUTTON_X1, (short)LOWORD(lparam), (short)HIWORD(lparam), 1);
535+
break;
536+
case XBUTTON2:
537+
nk_input_button(&d3d12.ctx, NK_BUTTON_X2, (short)LOWORD(lparam), (short)HIWORD(lparam), 1);
538+
break;
539+
}
540+
SetCapture(wnd);
541+
return 1;
542+
543+
case WM_XBUTTONUP:
544+
switch (GET_XBUTTON_WPARAM(wparam)) {
545+
case XBUTTON1:
546+
nk_input_button(&d3d12.ctx, NK_BUTTON_X1, (short)LOWORD(lparam), (short)HIWORD(lparam), 0);
547+
break;
548+
case XBUTTON2:
549+
nk_input_button(&d3d12.ctx, NK_BUTTON_X2, (short)LOWORD(lparam), (short)HIWORD(lparam), 0);
550+
break;
551+
}
552+
ReleaseCapture();
553+
return 1;
554+
531555
case WM_MOUSEWHEEL:
532556
nk_input_scroll(&d3d12.ctx, nk_vec2(0,(float)(short)HIWORD(wparam) / WHEEL_DELTA));
533557
return 1;

demo/d3d9/nuklear_d3d9.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,30 @@ nk_d3d9_handle_event(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam)
456456
ReleaseCapture();
457457
return 1;
458458

459+
case WM_XBUTTONDOWN:
460+
switch (GET_XBUTTON_WPARAM(wparam)) {
461+
case XBUTTON1:
462+
nk_input_button(&d3d9.ctx, NK_BUTTON_X1, (short)LOWORD(lparam), (short)HIWORD(lparam), 1);
463+
break;
464+
case XBUTTON2:
465+
nk_input_button(&d3d9.ctx, NK_BUTTON_X2, (short)LOWORD(lparam), (short)HIWORD(lparam), 1);
466+
break;
467+
}
468+
SetCapture(wnd);
469+
return 1;
470+
471+
case WM_XBUTTONUP:
472+
switch (GET_XBUTTON_WPARAM(wparam)) {
473+
case XBUTTON1:
474+
nk_input_button(&d3d9.ctx, NK_BUTTON_X1, (short)LOWORD(lparam), (short)HIWORD(lparam), 0);
475+
break;
476+
case XBUTTON2:
477+
nk_input_button(&d3d9.ctx, NK_BUTTON_X2, (short)LOWORD(lparam), (short)HIWORD(lparam), 0);
478+
break;
479+
}
480+
ReleaseCapture();
481+
return 1;
482+
459483
case WM_MOUSEWHEEL:
460484
nk_input_scroll(&d3d9.ctx, nk_vec2(0,(float)(short)HIWORD(wparam) / WHEEL_DELTA));
461485
return 1;

demo/gdi/nuklear_gdi.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -898,6 +898,30 @@ nk_gdi_handle_event(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam)
898898
ReleaseCapture();
899899
return 1;
900900

901+
case WM_XBUTTONDOWN:
902+
switch (GET_XBUTTON_WPARAM(wparam)) {
903+
case XBUTTON1:
904+
nk_input_button(&gdi.ctx, NK_BUTTON_X1, (short)LOWORD(lparam), (short)HIWORD(lparam), 1);
905+
break;
906+
case XBUTTON2:
907+
nk_input_button(&gdi.ctx, NK_BUTTON_X2, (short)LOWORD(lparam), (short)HIWORD(lparam), 1);
908+
break;
909+
}
910+
SetCapture(wnd);
911+
return 1;
912+
913+
case WM_XBUTTONUP:
914+
switch (GET_XBUTTON_WPARAM(wparam)) {
915+
case XBUTTON1:
916+
nk_input_button(&gdi.ctx, NK_BUTTON_X1, (short)LOWORD(lparam), (short)HIWORD(lparam), 0);
917+
break;
918+
case XBUTTON2:
919+
nk_input_button(&gdi.ctx, NK_BUTTON_X2, (short)LOWORD(lparam), (short)HIWORD(lparam), 0);
920+
break;
921+
}
922+
ReleaseCapture();
923+
return 1;
924+
901925
case WM_MOUSEWHEEL:
902926
nk_input_scroll(&gdi.ctx, nk_vec2(0,(float)(short)HIWORD(wparam) / WHEEL_DELTA));
903927
return 1;

demo/gdi_native_nuklear/nuklear_gdi.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -862,6 +862,30 @@ nk_gdi_handle_event(nk_gdi_ctx gdi, HWND wnd, UINT msg, WPARAM wparam, LPARAM lp
862862
ReleaseCapture();
863863
return 1;
864864

865+
case WM_XBUTTONDOWN:
866+
switch (GET_XBUTTON_WPARAM(wparam)) {
867+
case XBUTTON1:
868+
nk_input_button(&gdi->ctx, NK_BUTTON_X1, (short)LOWORD(lparam), (short)HIWORD(lparam), 1);
869+
break;
870+
case XBUTTON2:
871+
nk_input_button(&gdi->ctx, NK_BUTTON_X2, (short)LOWORD(lparam), (short)HIWORD(lparam), 1);
872+
break;
873+
}
874+
SetCapture(wnd);
875+
return 1;
876+
877+
case WM_XBUTTONUP:
878+
switch (GET_XBUTTON_WPARAM(wparam)) {
879+
case XBUTTON1:
880+
nk_input_button(&gdi->ctx, NK_BUTTON_X1, (short)LOWORD(lparam), (short)HIWORD(lparam), 0);
881+
break;
882+
case XBUTTON2:
883+
nk_input_button(&gdi->ctx, NK_BUTTON_X2, (short)LOWORD(lparam), (short)HIWORD(lparam), 0);
884+
break;
885+
}
886+
ReleaseCapture();
887+
return 1;
888+
865889
case WM_MOUSEWHEEL:
866890
nk_input_scroll(&gdi->ctx, nk_vec2(0, (float)(short)HIWORD(wparam) / WHEEL_DELTA));
867891
return 1;

demo/gdip/nuklear_gdip.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1089,6 +1089,30 @@ nk_gdip_handle_event(HWND wnd, UINT msg, WPARAM wparam, LPARAM lparam)
10891089
ReleaseCapture();
10901090
return 1;
10911091

1092+
case WM_XBUTTONDOWN:
1093+
switch (GET_XBUTTON_WPARAM(wparam)) {
1094+
case XBUTTON1:
1095+
nk_input_button(&gdip.ctx, NK_BUTTON_X1, (short)LOWORD(lparam), (short)HIWORD(lparam), 1);
1096+
break;
1097+
case XBUTTON2:
1098+
nk_input_button(&gdip.ctx, NK_BUTTON_X2, (short)LOWORD(lparam), (short)HIWORD(lparam), 1);
1099+
break;
1100+
}
1101+
SetCapture(wnd);
1102+
return 1;
1103+
1104+
case WM_XBUTTONUP:
1105+
switch (GET_XBUTTON_WPARAM(wparam)) {
1106+
case XBUTTON1:
1107+
nk_input_button(&gdip.ctx, NK_BUTTON_X1, (short)LOWORD(lparam), (short)HIWORD(lparam), 0);
1108+
break;
1109+
case XBUTTON2:
1110+
nk_input_button(&gdip.ctx, NK_BUTTON_X2, (short)LOWORD(lparam), (short)HIWORD(lparam), 0);
1111+
break;
1112+
}
1113+
ReleaseCapture();
1114+
return 1;
1115+
10921116
case WM_MOUSEWHEEL:
10931117
nk_input_scroll(&gdip.ctx, nk_vec2(0,(float)(short)HIWORD(wparam) / WHEEL_DELTA));
10941118
return 1;

demo/glfw_opengl2/nuklear_glfw_gl2.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,8 @@ nk_glfw3_new_frame(void)
453453
nk_input_button(ctx, NK_BUTTON_MIDDLE, (int)x, (int)y, glfwGetMouseButton(win, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS);
454454
nk_input_button(ctx, NK_BUTTON_RIGHT, (int)x, (int)y, glfwGetMouseButton(win, GLFW_MOUSE_BUTTON_RIGHT) == GLFW_PRESS);
455455
nk_input_button(ctx, NK_BUTTON_DOUBLE, (int)glfw.double_click_pos.x, (int)glfw.double_click_pos.y, glfw.is_double_click_down);
456+
nk_input_button(ctx, NK_BUTTON_X1, (int)x, (int)y, glfwGetMouseButton(win, GLFW_MOUSE_BUTTON_4) == GLFW_PRESS);
457+
nk_input_button(ctx, NK_BUTTON_X2, (int)x, (int)y, glfwGetMouseButton(win, GLFW_MOUSE_BUTTON_5) == GLFW_PRESS);
456458
nk_input_scroll(ctx, glfw.scroll);
457459
nk_input_end(&glfw.ctx);
458460

demo/glfw_opengl3/nuklear_glfw_gl3.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,8 @@ nk_glfw3_new_frame(struct nk_glfw* glfw)
565565
nk_input_button(ctx, NK_BUTTON_MIDDLE, (int)x, (int)y, glfwGetMouseButton(win, GLFW_MOUSE_BUTTON_MIDDLE) == GLFW_PRESS);
566566
nk_input_button(ctx, NK_BUTTON_RIGHT, (int)x, (int)y, glfwGetMouseButton(win, GLFW_MOUSE_BUTTON_RIGHT) == GLFW_PRESS);
567567
nk_input_button(ctx, NK_BUTTON_DOUBLE, (int)glfw->double_click_pos.x, (int)glfw->double_click_pos.y, glfw->is_double_click_down);
568+
nk_input_button(ctx, NK_BUTTON_X1, (int)x, (int)y, glfwGetMouseButton(win, GLFW_MOUSE_BUTTON_4) == GLFW_PRESS);
569+
nk_input_button(ctx, NK_BUTTON_X2, (int)x, (int)y, glfwGetMouseButton(win, GLFW_MOUSE_BUTTON_5) == GLFW_PRESS);
568570
nk_input_scroll(ctx, glfw->scroll);
569571
nk_input_end(&glfw->ctx);
570572

0 commit comments

Comments
 (0)