testhittesting.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #include <stdio.h>
  2. #include "SDL.h"
  3. /* !!! FIXME: rewrite this to be wired in to test framework. */
  4. const SDL_Rect drag_areas[] = {
  5. { 20, 20, 100, 100 },
  6. { 200, 70, 100, 100 },
  7. { 400, 90, 100, 100 }
  8. };
  9. static const SDL_Rect *areas = drag_areas;
  10. static int numareas = SDL_arraysize(drag_areas);
  11. static SDL_HitTestResult
  12. hitTest(SDL_Window *window, const SDL_Point *pt, void *data)
  13. {
  14. int i;
  15. for (i = 0; i < numareas; i++) {
  16. if (SDL_PointInRect(pt, &areas[i])) {
  17. SDL_Log("HIT-TEST: DRAGGABLE\n");
  18. return SDL_HITTEST_DRAGGABLE;
  19. }
  20. }
  21. SDL_Log("HIT-TEST: NORMAL\n");
  22. return SDL_HITTEST_NORMAL;
  23. }
  24. int main(int argc, char **argv)
  25. {
  26. int done = 0;
  27. SDL_Window *window;
  28. SDL_Renderer *renderer;
  29. /* !!! FIXME: check for errors. */
  30. SDL_Init(SDL_INIT_VIDEO);
  31. window = SDL_CreateWindow("Drag the red boxes", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_BORDERLESS);
  32. renderer = SDL_CreateRenderer(window, -1, 0);
  33. if (SDL_SetWindowHitTest(window, hitTest, NULL) == -1) {
  34. SDL_Log("Enabling hit-testing failed!\n");
  35. SDL_Quit();
  36. return 1;
  37. }
  38. while (!done)
  39. {
  40. SDL_SetRenderDrawColor(renderer, 0, 0, 127, 255);
  41. SDL_RenderClear(renderer);
  42. SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
  43. SDL_RenderFillRects(renderer, areas, SDL_arraysize(drag_areas));
  44. SDL_RenderPresent(renderer);
  45. SDL_Event e;
  46. int nothing_to_do = 1;
  47. while (SDL_PollEvent(&e)) {
  48. nothing_to_do = 0;
  49. switch (e.type)
  50. {
  51. case SDL_MOUSEBUTTONDOWN:
  52. SDL_Log("button down!\n");
  53. break;
  54. case SDL_MOUSEBUTTONUP:
  55. SDL_Log("button up!\n");
  56. break;
  57. case SDL_WINDOWEVENT:
  58. if (e.window.event == SDL_WINDOWEVENT_MOVED) {
  59. SDL_Log("Window event moved to (%d, %d)!\n", (int) e.window.data1, (int) e.window.data2);
  60. }
  61. break;
  62. case SDL_KEYDOWN:
  63. if (e.key.keysym.sym == SDLK_ESCAPE) {
  64. done = 1;
  65. } else if (e.key.keysym.sym == SDLK_x) {
  66. if (!areas) {
  67. areas = drag_areas;
  68. numareas = SDL_arraysize(drag_areas);
  69. } else {
  70. areas = NULL;
  71. numareas = 0;
  72. }
  73. }
  74. break;
  75. case SDL_QUIT:
  76. done = 1;
  77. break;
  78. }
  79. }
  80. if (nothing_to_do) {
  81. SDL_Delay(50);
  82. }
  83. }
  84. SDL_Quit();
  85. return 0;
  86. }