main.c 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. #include <SDL.h>
  2. #include <SDL_mouse.h>
  3. #include <SDL_keyboard.h>
  4. #ifndef MIN
  5. #define MIN(a,b) ((a) < (b) ? (a) : (b))
  6. #endif
  7. #ifndef MAX
  8. #define MAX(a,b) ((a) < (b) ? (b) : (a))
  9. #endif
  10. #define NK_INCLUDE_FIXED_TYPES
  11. #define NK_INCLUDE_STANDARD_IO
  12. #define NK_INCLUDE_STANDARD_VARARGS
  13. #define NK_INCLUDE_DEFAULT_ALLOCATOR
  14. #define NK_IMPLEMENTATION
  15. #define NK_INCLUDE_FONT_BAKING
  16. #define NK_INCLUDE_DEFAULT_FONT
  17. #define NK_INCLUDE_SOFTWARE_FONT
  18. #include "../../nuklear.h"
  19. #define NK_SDLSURFACE_IMPLEMENTATION
  20. #include "sdl2surface_rawfb.h"
  21. static int translate_sdl_key(struct SDL_Keysym const *k)
  22. {
  23. /*keyboard handling left as an exercise for the reader */
  24. return NK_KEY_NONE;
  25. }
  26. static int sdl_button_to_nk(int button)
  27. {
  28. switch(button)
  29. {
  30. default:
  31. /* ft */
  32. case SDL_BUTTON_LEFT:
  33. return NK_BUTTON_LEFT;
  34. break;
  35. case SDL_BUTTON_MIDDLE:
  36. return NK_BUTTON_MIDDLE;
  37. break;
  38. case SDL_BUTTON_RIGHT:
  39. return NK_BUTTON_RIGHT;
  40. break;
  41. }
  42. }
  43. static void
  44. grid_demo(struct nk_context *ctx)
  45. {
  46. static char text[3][64];
  47. static int text_len[3];
  48. static const char *items[] = {"Item 0","item 1","item 2"};
  49. static int selected_item = 0;
  50. static int check = 1;
  51. int i;
  52. if (nk_begin(ctx, "Grid Demo", nk_rect(600, 350, 275, 250),
  53. NK_WINDOW_TITLE|NK_WINDOW_BORDER|NK_WINDOW_MOVABLE|
  54. NK_WINDOW_NO_SCROLLBAR))
  55. {
  56. nk_layout_row_dynamic(ctx, 30, 2);
  57. nk_label(ctx, "Floating point:", NK_TEXT_RIGHT);
  58. nk_edit_string(ctx, NK_EDIT_FIELD, text[0], &text_len[0], 64, nk_filter_float);
  59. nk_label(ctx, "Hexadecimal:", NK_TEXT_RIGHT);
  60. nk_edit_string(ctx, NK_EDIT_FIELD, text[1], &text_len[1], 64, nk_filter_hex);
  61. nk_label(ctx, "Binary:", NK_TEXT_RIGHT);
  62. nk_edit_string(ctx, NK_EDIT_FIELD, text[2], &text_len[2], 64, nk_filter_binary);
  63. nk_label(ctx, "Checkbox:", NK_TEXT_RIGHT);
  64. nk_checkbox_label(ctx, "Check me", &check);
  65. nk_label(ctx, "Combobox:", NK_TEXT_RIGHT);
  66. if (nk_combo_begin_label(ctx, items[selected_item], nk_vec2(nk_widget_width(ctx), 200))) {
  67. nk_layout_row_dynamic(ctx, 25, 1);
  68. for (i = 0; i < 3; ++i)
  69. if (nk_combo_item_label(ctx, items[i], NK_TEXT_LEFT))
  70. selected_item = i;
  71. nk_combo_end(ctx);
  72. }
  73. }
  74. nk_end(ctx);
  75. }
  76. int main(int argc, char **argv)
  77. {
  78. struct nk_color clear = {0,100,0,255};
  79. struct nk_vec2 vec;
  80. struct nk_rect bounds = {40,40,0,0};
  81. SDL_Init(SDL_INIT_VIDEO);
  82. printf("sdl init called...\n");
  83. SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
  84. SDL_DisplayMode dm;
  85. SDL_GetDesktopDisplayMode(0, &dm);
  86. printf("desktop display mode %d %d\n", dm.w, dm.h);
  87. SDL_Window *window = SDL_CreateWindow("Puzzle", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, dm.w-200,dm.h-200, SDL_WINDOW_OPENGL);
  88. if (!window)
  89. {
  90. printf("can't open window!\n");
  91. exit(1);
  92. }
  93. SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, 0);
  94. SDL_Surface *surface = SDL_CreateRGBSurfaceWithFormat(0, dm.w-200, dm.h-200, 32, SDL_PIXELFORMAT_ARGB8888);
  95. struct sdlsurface_context *context = nk_sdlsurface_init(surface, 13.0f);
  96. while(1)
  97. {
  98. nk_input_begin(&(context->ctx));
  99. SDL_Event event;
  100. while (SDL_PollEvent(&event))
  101. {
  102. switch(event.type)
  103. {
  104. case SDL_QUIT:
  105. exit(0);
  106. break;
  107. case SDL_KEYDOWN:
  108. nk_input_key(&(context->ctx), translate_sdl_key(&event.key.keysym), 1);
  109. break;
  110. case SDL_KEYUP:
  111. nk_input_key(&(context->ctx), translate_sdl_key(&event.key.keysym), 0);
  112. break;
  113. case SDL_MOUSEMOTION:
  114. nk_input_motion(&(context->ctx), event.motion.x, event.motion.y);
  115. break;
  116. case SDL_MOUSEBUTTONDOWN:
  117. nk_input_button(&(context->ctx), sdl_button_to_nk(event.button.button), event.button.x, event.button.y,1);
  118. break;
  119. case SDL_MOUSEBUTTONUP:
  120. nk_input_button(&(context->ctx), sdl_button_to_nk(event.button.button), event.button.x, event.button.y,0);
  121. break;
  122. case SDL_MOUSEWHEEL:
  123. vec.x = event.wheel.x;
  124. vec.y = event.wheel.y;
  125. nk_input_scroll(&(context->ctx), vec );
  126. break;
  127. }
  128. }
  129. nk_input_end(&(context->ctx));
  130. bounds.w = 400;
  131. bounds.h = 400;
  132. if (nk_begin(&(context->ctx), "Test", bounds, NK_WINDOW_MOVABLE | NK_WINDOW_SCALABLE | NK_WINDOW_TITLE))
  133. {
  134. enum {EASY, HARD};
  135. static int op = EASY;
  136. static int property = 20;
  137. nk_layout_row_static(&(context->ctx), 30, 80, 1);
  138. if (nk_button_label(&(context->ctx), "button")){
  139. printf("button pressed\n");
  140. }
  141. nk_layout_row_dynamic(&(context->ctx), 40, 2);
  142. if (nk_option_label(&(context->ctx), "easy", op == EASY)) op = EASY;
  143. if (nk_option_label(&(context->ctx), "hard", op == HARD)) op = HARD;
  144. nk_layout_row_dynamic(&(context->ctx), 45, 1);
  145. nk_property_int(&(context->ctx), "Compression:", 0, &property, 100, 10, 1);
  146. }
  147. nk_end(&(context->ctx));
  148. /* grid_demo(&(context->ctx)); */
  149. nk_sdlsurface_render(context, clear, 1);
  150. SDL_Texture *tex = SDL_CreateTextureFromSurface(renderer, surface);
  151. SDL_RenderCopy(renderer, tex, NULL, NULL);
  152. SDL_RenderPresent(renderer);
  153. SDL_DestroyTexture(tex);
  154. }
  155. nk_sdlsurface_shutdown(context);
  156. SDL_FreeSurface(surface);
  157. SDL_DestroyRenderer(renderer);
  158. SDL_DestroyWindow(window);
  159. }