testhittesting.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. return SDL_HITTEST_DRAGGABLE;
  18. }
  19. }
  20. return SDL_HITTEST_NORMAL;
  21. }
  22. int main(int argc, char **argv)
  23. {
  24. int done = 0;
  25. SDL_Window *window;
  26. SDL_Renderer *renderer;
  27. /* !!! FIXME: check for errors. */
  28. SDL_Init(SDL_INIT_VIDEO);
  29. window = SDL_CreateWindow("Drag the red boxes", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_BORDERLESS);
  30. renderer = SDL_CreateRenderer(window, -1, 0);
  31. if (SDL_SetWindowHitTest(window, hitTest, NULL) == -1) {
  32. fprintf(stderr, "Enabling hit-testing failed!\n");
  33. SDL_Quit();
  34. return 1;
  35. }
  36. while (!done)
  37. {
  38. SDL_SetRenderDrawColor(renderer, 0, 0, 127, 255);
  39. SDL_RenderClear(renderer);
  40. SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
  41. SDL_RenderFillRects(renderer, areas, SDL_arraysize(drag_areas));
  42. SDL_RenderPresent(renderer);
  43. SDL_Event e;
  44. int nothing_to_do = 1;
  45. while (SDL_PollEvent(&e)) {
  46. nothing_to_do = 0;
  47. switch (e.type)
  48. {
  49. case SDL_MOUSEBUTTONDOWN:
  50. printf("button down!\n");
  51. break;
  52. case SDL_MOUSEBUTTONUP:
  53. printf("button up!\n");
  54. break;
  55. case SDL_WINDOWEVENT:
  56. if (e.window.event == SDL_WINDOWEVENT_MOVED) {
  57. printf("Window event moved to (%d, %d)!\n", (int) e.window.data1, (int) e.window.data2);
  58. }
  59. break;
  60. case SDL_KEYDOWN:
  61. if (e.key.keysym.sym == SDLK_ESCAPE) {
  62. done = 1;
  63. } else if (e.key.keysym.sym == SDLK_x) {
  64. if (!areas) {
  65. areas = drag_areas;
  66. numareas = SDL_arraysize(drag_areas);
  67. } else {
  68. areas = NULL;
  69. numareas = 0;
  70. }
  71. }
  72. break;
  73. case SDL_QUIT:
  74. done = 1;
  75. break;
  76. }
  77. }
  78. if (nothing_to_do) {
  79. SDL_Delay(50);
  80. }
  81. }
  82. SDL_Quit();
  83. return 0;
  84. }