2727 #define NK_BUFFER_DEFAULT_INITIAL_SIZE (4*1024)
2828#endif
2929
30+ #ifdef __cplusplus
31+ extern "C" {
32+ #endif
33+
3034NK_API struct nk_context * nk_sdl_init (SDL_Window * win , SDL_Renderer * renderer , struct nk_allocator allocator );
3135#ifdef NK_INCLUDE_FONT_BAKING
3236NK_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
4145NK_API void nk_sdl_style_set_debug_font (struct nk_context * ctx );
4246NK_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-
6465struct 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