SDL2-for-Pascal icon indicating copy to clipboard operation
SDL2-for-Pascal copied to clipboard

SDl window resize problem

Open pst-82 opened this issue 1 year ago • 7 comments

Hello how can I fix the problem that is visualized in the picture when resizing the sdl window. What do I need to do to make it scale with the window ? SDL_WINDOWEVENT: if Event.window.event = SDL_WINDOWEVENT_RESIZED then begin WindowWidth := Event.window.data1; WindowHeight := Event.window.data2; UpdateDestRect(); end; Code not working

sdl2_screen

pst-82 avatar Jan 01 '25 14:01 pst-82

You need to post more code.

  • How do you set up the SDL window?
  • What does your rendering function look like?

suve avatar Jan 01 '25 15:01 suve

program project1;

{$APPTYPE GUI}

uses
  sdl2, sdl2_image, Windows;

var
  SDLWindow: PSDL_Window;
  SDLRenderer: PSDL_Renderer;
  Running: Boolean;
  Event: TSDL_Event;

  WindowWidth, WindowHeight: Integer;

begin
  // Inicjalizacja SDL
  if SDL_Init(SDL_INIT_VIDEO) < 0 then
  begin
    MessageBox(0, 'SDL could not initialize!', 'Error', MB_ICONERROR or MB_OK);
    Halt(1);
  end;

  // Ustawienia początkowe okna
  WindowWidth := 800;
  WindowHeight := 600;

  // Tworzenie okna SDL
  SDLWindow := SDL_CreateWindow('SDL window', SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WindowWidth, WindowHeight, SDL_WINDOW_RESIZABLE);
  if SDLWindow = nil then
  begin
    MessageBox(0, 'Window could not be created!', 'Error', MB_ICONERROR or MB_OK);
    SDL_Quit;
    Halt(1);
  end;

  // Tworzenie renderera
  SDLRenderer := SDL_CreateRenderer(SDLWindow, -1, SDL_RENDERER_ACCELERATED or SDL_RENDERER_PRESENTVSYNC);
  if SDLRenderer = nil then
  begin
    MessageBox(0, 'Renderer could not be created!', 'Error', MB_ICONERROR or MB_OK);
    SDL_DestroyWindow(SDLWindow);
    SDL_Quit;
    Halt(1);
  end;


   // Pętla główna aplikacji
  Running := True;
  while Running do
  begin
    // Obsługa zdarzeń
    while SDL_PollEvent(@Event) <> 0 do
    begin
      case Event.type_ of
        SDL_QUITEV:
          Running := False;
        SDL_KEYDOWN:
          if Event.key.keysym.sym = SDLK_ESCAPE then
            Running := False;
        SDL_WINDOWEVENT:
          case Event.window.event of
            SDL_WINDOWEVENT_RESIZED:
              begin


              end;
          end;
    end;

   // Renderowanie tła
    SDL_SetRenderDrawColor(SDLRenderer, 72, 69, 71, 255); // Szary kolor
    SDL_RenderClear(SDLRenderer); // Wypełnij całe okno

    // Zaktualizuj ekran
    SDL_RenderPresent(SDLRenderer);
  end;

  // Sprzątanie zasobów
  SDL_DestroyRenderer(SDLRenderer);
  SDL_DestroyWindow(SDLWindow);
  SDL_Quit;
end.

pst-82 avatar Jan 01 '25 15:01 pst-82

Does anyone have any idea how this problem can be solved ?

pst-82 avatar Jan 02 '25 15:01 pst-82

Is this the actual code, though? It fails to compile for me because of an unclosed block.

while Running do
begin // <-- 1st block opened
    while SDL_PollEvent(@Event) <> 0 do
    begin // <-- 2nd block opened
      case Event.type_ of // <-- 3rd block opened
        SDL_QUITEV:
          Running := False;
        SDL_KEYDOWN:
          if Event.key.keysym.sym = SDLK_ESCAPE then
            Running := False;
        SDL_WINDOWEVENT:
          case Event.window.event of // <-- 4th block opened
            SDL_WINDOWEVENT_RESIZED:
              begin // <-- 5th block opened


              end; // <-- close 5th block
          end; // <-- close 4th block
    end; // <-- close 3rd block

    SDL_SetRenderDrawColor(SDLRenderer, 72, 69, 71, 255);
    SDL_RenderClear(SDLRenderer);

    // Zaktualizuj ekran
    SDL_RenderPresent(SDLRenderer);
  end; <-- close 2nd block

After I added another end; to the event handling bit, it works and resizes fine.

suve avatar Jan 02 '25 15:01 suve

program project1;

{$APPTYPE GUI}

uses
  sdl2, sdl2_image, Windows;

var
  SDLWindow: PSDL_Window;
  SDLRenderer: PSDL_Renderer;
  Running: Boolean;
  Event: TSDL_Event;

  WindowWidth, WindowHeight: Integer;

begin
  // Inicjalizacja SDL
  if SDL_Init(SDL_INIT_VIDEO) < 0 then
  begin
    MessageBox(0, 'SDL could not initialize!', 'Error', MB_ICONERROR or MB_OK);
    Halt(1);
  end;

  // Ustawienia początkowe okna
  WindowWidth := 800;
  WindowHeight := 600;

  // Tworzenie okna SDL
  SDLWindow := SDL_CreateWindow('SDL window', SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WindowWidth, WindowHeight, SDL_WINDOW_RESIZABLE);
  if SDLWindow = nil then
  begin
    MessageBox(0, 'Window could not be created!', 'Error', MB_ICONERROR or MB_OK);
    SDL_Quit;
    Halt(1);
  end;

  // Tworzenie renderera
  SDLRenderer := SDL_CreateRenderer(SDLWindow, -1, SDL_RENDERER_ACCELERATED or SDL_RENDERER_PRESENTVSYNC);
  if SDLRenderer = nil then
  begin
    MessageBox(0, 'Renderer could not be created!', 'Error', MB_ICONERROR or MB_OK);
    SDL_DestroyWindow(SDLWindow);
    SDL_Quit;
    Halt(1);
  end;


   // Pętla główna aplikacji
  Running := True;
  while Running do
  begin
    // Obsługa zdarzeń
    while SDL_PollEvent(@Event) <> 0 do
    begin
      case Event.type_ of
        SDL_QUITEV:
          Running := False;
        SDL_KEYDOWN:
          if Event.key.keysym.sym = SDLK_ESCAPE then
            Running := False;
        SDL_WINDOWEVENT:
          case Event.window.event of
            SDL_WINDOWEVENT_RESIZED:
              begin


              end;
          end;
    end;

    end;

   // Renderowanie tła
    SDL_SetRenderDrawColor(SDLRenderer, 72, 69, 71, 255); // Szary kolor
    SDL_RenderClear(SDLRenderer); // Wypełnij całe okno

    // Zaktualizuj ekran
    SDL_RenderPresent(SDLRenderer);
  end;



  // Sprzątanie zasobów
  SDL_DestroyRenderer(SDLRenderer);
  SDL_DestroyWindow(SDLWindow);
  SDL_Quit;
end.

I mean that the window scales only the background does not scale at the same time as the window

pst-82 avatar Jan 02 '25 16:01 pst-82

Hmm. I'm getting the exact same behaviour with an analogue C program - SDL does not create any events while dragging the window corner, only when I finish resizing the window (i.e. let go of the dragging action). You might be better off asking about this in the SDL forums.

suve avatar Jan 02 '25 17:01 suve

Thanks for the hint

pst-82 avatar Jan 02 '25 17:01 pst-82