Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.X] Dynamiczna zmiana rozmiaru okna

Ostatnio zmodyfikowano 2025-05-20 21:44
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
[SFML 2.X] Dynamiczna zmiana rozmiaru okna
» 2025-05-19 21:48:10
Witam. Potrzebuję w sposób dynamiczny tzn ciągły zmieniać rozmiar okna.

Obecna statyczna funkcja (dopóki nie zwolnimy LPM okno się nie skaluje ... )
C/C++
// Aktualizacja widoku bez skalowania
sf::Event event;
while( window.pollEvent( event ) ) {
   
if( event.type == sf::Event::Resized )
   
{
       
// Aktualizacja widoku bez skalowania
       
sf::View view;
       
view.setSize( static_cast < float >( event.size.width ), static_cast < float >( event.size.height ) );
       
view.setCenter( view.getSize() / 2.f );
       
window.setView( view );
   
}
}

P-182373
tBane
Temat założony przez niniejszego użytkownika
» 2025-05-19 22:08:37
Zrobiłem też tak ale i to nie działa:

C/C++
sf::Vector2u currentSize = window->getSize();
if( currentSize != lastSize )
{
   
view.setSize( static_cast < float >( currentSize.x ), static_cast < float >( currentSize.y ) );
   
view.setCenter( view.getSize() / 2.f );
   
window->setView( view );
   
lastSize = currentSize;
   
   
render();
}
P-182374
pekfos
» 2025-05-19 22:47:11
SFML nie generuje zdarzenia Resized jeżeli cały czas ciągniesz za okno. Po to żeby aplikacja nie zmulała aktualizując się co 1px (zwłaszcza że dostaniesz je wszystkie naraz, o czym niżej). Możesz zmienić to w implementacji SFML:
https://github.com/SFML/SFML/blob/a31daf16b7a1b9c7e41d504100b9729e809286fb/src/SFML/Window/Win32/WindowImplWin32.cpp#L764
C/C++
// Resize event
case WM_SIZE:
{
   
// Consider only events triggered by a maximize or a un-maximize
   
if( wParam != SIZE_MINIMIZED && !m_resizing && m_lastSize != getSize() )
Usuń z warunku test na flagę m_resizing. Dalej będzie jednak problem że pętla zdarzeń nie kręci się gdy okno jest w trakcie zmiany rozmiaru lub pozycji, przez zachowanie windowsowego DispatchMessage().
https://stackoverflow.com/questions/71918222/dispatchmessagew-blocks-execution-when-moving-the-window
P-182377
tBane
Temat założony przez niniejszego użytkownika
» 2025-05-19 23:06:33
Mhm. Czyli się nie da, bo nie będzie można zaktualizować rendera ... :-/
P-182378
pekfos
» 2025-05-19 23:18:50
Powinno się dać, ale wymaga pracy. Najprościej pewnie metodą z SetTimer() opisaną tu https://stackoverflow.com/a/3103130.
P-182379
tBane
Temat założony przez niniejszego użytkownika
» 2025-05-20 13:45:15
To jest oficjalny problem SFML, więc chyba ustawię stały rozmiar notatnika i tyle /..

https://github.com/SFML/SFML/issues/3016
P-182381
pekfos
» 2025-05-20 21:42:23
Jak chcesz. Ja bym się nie przejmował artefaktami przy zmianie rozmiaru. Edytor tekstowy o stałym rozmiarze okna to słaba opcja, gorsza niż jeśli przez moment wygląda źle gdy rozmiar okna się zmienia.

Swoją drogą mógłbyś przycinać te screenshoty do interesującego fragmentu. mspaint, zaznacz, ctrl+shift+x, zapisz. Dosłownie 30 sekund.
P-182382
« 1 »
  Strona 1 z 1