Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cassert>
- #define SDL_MAIN_HANDLED
- #include <SDL2/SDL.h>
- SDL_Rect clientArea;
- SDL_HitTestResult MyHitTest(SDL_Window* win, const SDL_Point* area, void* data) {
- int w=0, h = 0;
- SDL_GetWindowSize(win, &w, &h);
- int borderWidth = 5;
- // Top
- if (area->y < borderWidth) {
- // Corners
- if (area->x < borderWidth)
- return SDL_HITTEST_RESIZE_TOPLEFT;
- else if (area->x >= w - borderWidth)
- return SDL_HITTEST_RESIZE_TOPRIGHT;
- return SDL_HITTEST_RESIZE_TOP;
- }
- // Bottom
- else if (area->y >= h - borderWidth) {
- // Corners
- if (area->x < borderWidth)
- return SDL_HITTEST_RESIZE_BOTTOMLEFT;
- else if (area->x >= w - borderWidth)
- return SDL_HITTEST_RESIZE_BOTTOMRIGHT;
- return SDL_HITTEST_RESIZE_BOTTOM;
- }
- // Left
- else if (area->x < borderWidth) {
- return SDL_HITTEST_RESIZE_LEFT;
- }
- // Right
- else if (area->x >= w - borderWidth) {
- return SDL_HITTEST_RESIZE_RIGHT;
- }
- // Drag the title bar
- else if (area->y < clientArea.y) {
- return SDL_HITTEST_DRAGGABLE;
- }
- // Cursor is in the client area
- return SDL_HITTEST_NORMAL;
- }
- int main() {
- assert(0 == SDL_Init(SDL_INIT_VIDEO));
- SDL_Window *window = SDL_CreateWindow(
- "HelloSDL",
- SDL_WINDOWPOS_CENTERED,
- SDL_WINDOWPOS_CENTERED,
- 800,
- 600,
- SDL_WINDOW_SHOWN | SDL_WINDOW_BORDERLESS
- | SDL_WINDOW_RESIZABLE
- );
- assert(window);
- SDL_Renderer *renderer = SDL_CreateRenderer(
- window,
- -1,
- SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC
- );
- assert(renderer);
- clientArea.x = 5;
- clientArea.y = 30;
- clientArea.w = 800 - 10;
- clientArea.h = 600 - 35;
- SDL_SetWindowHitTest(window, MyHitTest, nullptr);
- // The resizable flag doesn't work (?)
- SDL_SetWindowResizable(window, SDL_TRUE);
- SDL_Event event;
- do {
- SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF);
- SDL_RenderClear(renderer);
- SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
- SDL_RenderFillRect(renderer, &clientArea);
- SDL_RenderPresent(renderer);
- SDL_WaitEvent(&event);
- if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
- clientArea.w = event.window.data1 - 10;
- clientArea.h = event.window.data2 - 35;
- }
- } while (event.type != SDL_QUIT);
- SDL_DestroyRenderer(renderer);
- SDL_DestroyWindow(window);
- SDL_Quit();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement