Advertisement
Guest User

Untitled

a guest
Mar 5th, 2021
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.33 KB | None | 0 0
  1. #include <cassert>
  2.  
  3. #define SDL_MAIN_HANDLED
  4. #include <SDL2/SDL.h>
  5.  
  6. SDL_Rect clientArea;
  7.  
  8. SDL_HitTestResult MyHitTest(SDL_Window* win, const SDL_Point* area, void* data) {
  9.     int w=0, h = 0;
  10.     SDL_GetWindowSize(win, &w, &h);
  11.  
  12.     int borderWidth = 5;
  13.  
  14.     // Top
  15.     if (area->y < borderWidth) {
  16.         // Corners
  17.         if (area->x < borderWidth)
  18.             return SDL_HITTEST_RESIZE_TOPLEFT;
  19.         else if (area->x >= w - borderWidth)
  20.             return SDL_HITTEST_RESIZE_TOPRIGHT;
  21.         return SDL_HITTEST_RESIZE_TOP;
  22.     }
  23.  
  24.     // Bottom
  25.     else if (area->y >= h - borderWidth) {
  26.         // Corners
  27.         if (area->x < borderWidth)
  28.             return SDL_HITTEST_RESIZE_BOTTOMLEFT;
  29.         else if (area->x >= w - borderWidth)
  30.             return SDL_HITTEST_RESIZE_BOTTOMRIGHT;
  31.         return SDL_HITTEST_RESIZE_BOTTOM;
  32.     }
  33.  
  34.     // Left
  35.     else if (area->x < borderWidth) {
  36.         return SDL_HITTEST_RESIZE_LEFT;
  37.     }
  38.  
  39.     // Right
  40.     else if (area->x >= w - borderWidth) {
  41.         return SDL_HITTEST_RESIZE_RIGHT;
  42.     }
  43.  
  44.     // Drag the title bar
  45.     else if (area->y < clientArea.y) {
  46.         return SDL_HITTEST_DRAGGABLE;
  47.     }
  48.  
  49.     // Cursor is in the client area
  50.     return SDL_HITTEST_NORMAL;
  51. }
  52.  
  53. int main() {
  54.     assert(0 == SDL_Init(SDL_INIT_VIDEO));
  55.  
  56.     SDL_Window *window = SDL_CreateWindow(
  57.             "HelloSDL",
  58.             SDL_WINDOWPOS_CENTERED,
  59.             SDL_WINDOWPOS_CENTERED,
  60.             800,
  61.             600,
  62.             SDL_WINDOW_SHOWN | SDL_WINDOW_BORDERLESS
  63.             | SDL_WINDOW_RESIZABLE
  64.     );
  65.     assert(window);
  66.  
  67.     SDL_Renderer *renderer = SDL_CreateRenderer(
  68.             window,
  69.             -1,
  70.             SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC
  71.     );
  72.     assert(renderer);
  73.  
  74.     clientArea.x = 5;
  75.     clientArea.y = 30;
  76.     clientArea.w = 800 - 10;
  77.     clientArea.h = 600 - 35;
  78.  
  79.     SDL_SetWindowHitTest(window, MyHitTest, nullptr);
  80.     // The resizable flag doesn't work (?)
  81.     SDL_SetWindowResizable(window, SDL_TRUE);
  82.  
  83.     SDL_Event event;
  84.     do {
  85.         SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
  86.         SDL_RenderClear(renderer);
  87.         SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
  88.         SDL_RenderFillRect(renderer, &clientArea);
  89.         SDL_RenderPresent(renderer);
  90.  
  91.         SDL_WaitEvent(&event);
  92.         if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
  93.             clientArea.w = event.window.data1 - 10;
  94.             clientArea.h = event.window.data2 - 35;
  95.         }
  96.     } while (event.type != SDL_QUIT);
  97.  
  98.     SDL_DestroyRenderer(renderer);
  99.     SDL_DestroyWindow(window);
  100.     SDL_Quit();
  101.  
  102.     return 0;
  103. }
  104.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement