Skip to content

Commit d4c0ef2

Browse files
authored
Merge pull request #940 from rswinkle/sdl3_renderer_issues
Fix minor sdl3_renderer issues
2 parents 7f87c67 + 2880afd commit d4c0ef2

1 file changed

Lines changed: 41 additions & 46 deletions

File tree

demo/sdl3_renderer/nuklear_sdl3_renderer.h

Lines changed: 41 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727
#define NK_BUFFER_DEFAULT_INITIAL_SIZE (4*1024)
2828
#endif
2929

30+
#ifdef __cplusplus
31+
extern "C"{
32+
#endif
33+
3034
NK_API struct nk_context* nk_sdl_init(SDL_Window *win, SDL_Renderer *renderer, struct nk_allocator allocator);
3135
#ifdef NK_INCLUDE_FONT_BAKING
3236
NK_API struct nk_font_atlas* nk_sdl_font_stash_begin(struct nk_context* ctx);
@@ -41,6 +45,10 @@ NK_API void nk_sdl_set_userdata(struct nk_context* ctx, nk_handl
4145
NK_API void nk_sdl_style_set_debug_font(struct nk_context* ctx);
4246
NK_API struct nk_allocator nk_sdl_allocator(void);
4347

48+
#ifdef __cplusplus
49+
}
50+
#endif
51+
4452
#endif /* NK_SDL3_RENDERER_H_ */
4553

4654
/*
@@ -54,13 +62,6 @@ NK_API struct nk_allocator nk_sdl_allocator(void);
5462
#ifndef NK_SDL3_RENDERER_IMPLEMENTATION_ONCE
5563
#define NK_SDL3_RENDERER_IMPLEMENTATION_ONCE
5664

57-
#ifndef NK_SDL_DOUBLE_CLICK_LO
58-
#define NK_SDL_DOUBLE_CLICK_LO 0.02
59-
#endif
60-
#ifndef NK_SDL_DOUBLE_CLICK_HI
61-
#define NK_SDL_DOUBLE_CLICK_HI 0.2
62-
#endif
63-
6465
struct nk_sdl_device {
6566
struct nk_buffer cmds;
6667
struct nk_draw_null_texture tex_null;
@@ -84,7 +85,6 @@ struct nk_sdl {
8485
#endif
8586
struct nk_allocator allocator;
8687
nk_handle userdata;
87-
Uint64 last_left_click;
8888
Uint64 last_render;
8989
bool insert_toggle;
9090
bool edit_was_active;
@@ -362,7 +362,7 @@ nk_sdl_clipboard_copy(nk_handle usr, const char *text, int len)
362362
buflen = (size_t)(ptext - text) + 1;
363363
#endif
364364

365-
str = sdl->allocator.alloc(sdl->allocator.userdata, 0, buflen);
365+
str = (char*)sdl->allocator.alloc(sdl->allocator.userdata, 0, buflen);
366366
if (!str) return;
367367
SDL_strlcpy(str, text, buflen);
368368
SDL_SetClipboardText(str);
@@ -377,7 +377,7 @@ nk_sdl_init(SDL_Window *win, SDL_Renderer *renderer, struct nk_allocator allocat
377377
NK_ASSERT(renderer);
378378
NK_ASSERT(allocator.alloc);
379379
NK_ASSERT(allocator.free);
380-
sdl = allocator.alloc(allocator.userdata, 0, sizeof(*sdl));
380+
sdl = (struct nk_sdl*)allocator.alloc(allocator.userdata, 0, sizeof(*sdl));
381381
NK_ASSERT(sdl);
382382
SDL_zerop(sdl);
383383
sdl->allocator.userdata = allocator.userdata;
@@ -391,7 +391,6 @@ nk_sdl_init(SDL_Window *win, SDL_Renderer *renderer, struct nk_allocator allocat
391391
sdl->ctx.clip.paste = nk_sdl_clipboard_paste;
392392
sdl->ctx.clip.userdata = nk_handle_ptr((void*)sdl);
393393
nk_buffer_init(&sdl->ogl.cmds, &sdl->allocator, NK_BUFFER_DEFAULT_INITIAL_SIZE);
394-
sdl->last_left_click = 0;
395394
sdl->edit_was_active = false;
396395
sdl->insert_toggle = false;
397396
return &sdl->ctx;
@@ -452,50 +451,48 @@ nk_sdl_handle_event(struct nk_context* ctx, SDL_Event *evt)
452451
case SDL_EVENT_KEY_DOWN:
453452
{
454453
int down = evt->type == SDL_EVENT_KEY_DOWN;
455-
int ctrl_down = evt->key.mod & (SDL_KMOD_LCTRL | SDL_KMOD_RCTRL);
454+
int ctrl_down = evt->key.mod & SDL_KMOD_CTRL;
456455

457-
/* In 99% of the time, you want to use scancodes, not real key codes,
458-
* see: https://wiki.libsdl.org/SDL3/BestKeyboardPractices */
459-
switch(evt->key.scancode)
456+
switch(evt->key.key)
460457
{
461-
case SDL_SCANCODE_RSHIFT: /* RSHIFT & LSHIFT share same routine */
462-
case SDL_SCANCODE_LSHIFT: nk_input_key(ctx, NK_KEY_SHIFT, down); break;
463-
case SDL_SCANCODE_DELETE: nk_input_key(ctx, NK_KEY_DEL, down); break;
464-
case SDL_SCANCODE_RETURN: nk_input_key(ctx, NK_KEY_ENTER, down); break;
465-
case SDL_SCANCODE_TAB: nk_input_key(ctx, NK_KEY_TAB, down); break;
466-
case SDL_SCANCODE_BACKSPACE: nk_input_key(ctx, NK_KEY_BACKSPACE, down); break;
467-
case SDL_SCANCODE_HOME: nk_input_key(ctx, NK_KEY_TEXT_START, down);
468-
nk_input_key(ctx, NK_KEY_SCROLL_START, down); break;
469-
case SDL_SCANCODE_END: nk_input_key(ctx, NK_KEY_TEXT_END, down);
470-
nk_input_key(ctx, NK_KEY_SCROLL_END, down); break;
471-
case SDL_SCANCODE_PAGEDOWN: nk_input_key(ctx, NK_KEY_SCROLL_DOWN, down); break;
472-
case SDL_SCANCODE_PAGEUP: nk_input_key(ctx, NK_KEY_SCROLL_UP, down); break;
473-
case SDL_SCANCODE_A: nk_input_key(ctx, NK_KEY_TEXT_SELECT_ALL, down && ctrl_down); break;
474-
case SDL_SCANCODE_Z: nk_input_key(ctx, NK_KEY_TEXT_UNDO, down && ctrl_down); break;
475-
case SDL_SCANCODE_R: nk_input_key(ctx, NK_KEY_TEXT_REDO, down && ctrl_down); break;
476-
case SDL_SCANCODE_C: nk_input_key(ctx, NK_KEY_COPY, down && ctrl_down); break;
477-
case SDL_SCANCODE_V: nk_input_key(ctx, NK_KEY_PASTE, down && ctrl_down); break;
478-
case SDL_SCANCODE_X: nk_input_key(ctx, NK_KEY_CUT, down && ctrl_down); break;
479-
case SDL_SCANCODE_B: nk_input_key(ctx, NK_KEY_TEXT_LINE_START, down && ctrl_down); break;
480-
case SDL_SCANCODE_E: nk_input_key(ctx, NK_KEY_TEXT_LINE_END, down && ctrl_down); break;
481-
case SDL_SCANCODE_UP: nk_input_key(ctx, NK_KEY_UP, down); break;
482-
case SDL_SCANCODE_DOWN: nk_input_key(ctx, NK_KEY_DOWN, down); break;
483-
case SDL_SCANCODE_ESCAPE: nk_input_key(ctx, NK_KEY_TEXT_RESET_MODE, down); break;
484-
case SDL_SCANCODE_INSERT:
458+
case SDLK_RSHIFT: /* RSHIFT & LSHIFT share same routine */
459+
case SDLK_LSHIFT: nk_input_key(ctx, NK_KEY_SHIFT, down); break;
460+
case SDLK_DELETE: nk_input_key(ctx, NK_KEY_DEL, down); break;
461+
case SDLK_RETURN: nk_input_key(ctx, NK_KEY_ENTER, down); break;
462+
case SDLK_TAB: nk_input_key(ctx, NK_KEY_TAB, down); break;
463+
case SDLK_BACKSPACE: nk_input_key(ctx, NK_KEY_BACKSPACE, down); break;
464+
case SDLK_HOME: nk_input_key(ctx, NK_KEY_TEXT_START, down);
465+
nk_input_key(ctx, NK_KEY_SCROLL_START, down); break;
466+
case SDLK_END: nk_input_key(ctx, NK_KEY_TEXT_END, down);
467+
nk_input_key(ctx, NK_KEY_SCROLL_END, down); break;
468+
case SDLK_PAGEDOWN: nk_input_key(ctx, NK_KEY_SCROLL_DOWN, down); break;
469+
case SDLK_PAGEUP: nk_input_key(ctx, NK_KEY_SCROLL_UP, down); break;
470+
case SDLK_A: nk_input_key(ctx, NK_KEY_TEXT_SELECT_ALL, down && ctrl_down); break;
471+
case SDLK_Z: nk_input_key(ctx, NK_KEY_TEXT_UNDO, down && ctrl_down); break;
472+
case SDLK_R: nk_input_key(ctx, NK_KEY_TEXT_REDO, down && ctrl_down); break;
473+
case SDLK_C: nk_input_key(ctx, NK_KEY_COPY, down && ctrl_down); break;
474+
case SDLK_V: nk_input_key(ctx, NK_KEY_PASTE, down && ctrl_down); break;
475+
case SDLK_X: nk_input_key(ctx, NK_KEY_CUT, down && ctrl_down); break;
476+
case SDLK_B: nk_input_key(ctx, NK_KEY_TEXT_LINE_START, down && ctrl_down); break;
477+
case SDLK_E: nk_input_key(ctx, NK_KEY_TEXT_LINE_END, down && ctrl_down); break;
478+
case SDLK_UP: nk_input_key(ctx, NK_KEY_UP, down); break;
479+
case SDLK_DOWN: nk_input_key(ctx, NK_KEY_DOWN, down); break;
480+
case SDLK_ESCAPE: nk_input_key(ctx, NK_KEY_TEXT_RESET_MODE, down); break;
481+
case SDLK_INSERT:
485482
if (down) sdl->insert_toggle = !sdl->insert_toggle;
486483
if (sdl->insert_toggle) {
487484
nk_input_key(ctx, NK_KEY_TEXT_INSERT_MODE, down);
488485
} else {
489486
nk_input_key(ctx, NK_KEY_TEXT_REPLACE_MODE, down);
490487
}
491488
break;
492-
case SDL_SCANCODE_LEFT:
489+
case SDLK_LEFT:
493490
if (ctrl_down)
494491
nk_input_key(ctx, NK_KEY_TEXT_WORD_LEFT, down);
495492
else
496493
nk_input_key(ctx, NK_KEY_LEFT, down);
497494
break;
498-
case SDL_SCANCODE_RIGHT:
495+
case SDLK_RIGHT:
499496
if (ctrl_down)
500497
nk_input_key(ctx, NK_KEY_TEXT_WORD_RIGHT, down);
501498
else
@@ -512,14 +509,12 @@ nk_sdl_handle_event(struct nk_context* ctx, SDL_Event *evt)
512509
{
513510
const int x = evt->button.x, y = evt->button.y;
514511
const int down = evt->button.down;
515-
const double dt = (double)(evt->button.timestamp - sdl->last_left_click) / 1000000000.0;
516512
switch(evt->button.button)
517513
{
518514
case SDL_BUTTON_LEFT:
515+
if (evt->button.clicks > 1)
516+
nk_input_button(ctx, NK_BUTTON_DOUBLE, x, y, down);
519517
nk_input_button(ctx, NK_BUTTON_LEFT, x, y, down);
520-
nk_input_button(ctx, NK_BUTTON_DOUBLE, x, y,
521-
down && dt > NK_SDL_DOUBLE_CLICK_LO && dt < NK_SDL_DOUBLE_CLICK_HI);
522-
sdl->last_left_click = evt->button.timestamp;
523518
break;
524519
case SDL_BUTTON_MIDDLE: nk_input_button(ctx, NK_BUTTON_MIDDLE, x, y, down); break;
525520
case SDL_BUTTON_RIGHT: nk_input_button(ctx, NK_BUTTON_RIGHT, x, y, down); break;
@@ -684,7 +679,7 @@ nk_sdl_style_set_debug_font(struct nk_context* ctx)
684679
success = SDL_RenderPresent(renderer);
685680
NK_ASSERT(success);
686681

687-
font = sdl->allocator.alloc(sdl->allocator.userdata, 0, sizeof(*font));
682+
font = (struct nk_user_font*)sdl->allocator.alloc(sdl->allocator.userdata, 0, sizeof(*font));
688683
NK_ASSERT(font);
689684
font->userdata.ptr = sdl;
690685
font->height = SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE;

0 commit comments

Comments
 (0)