Odkryłem pewien fenomen już jakiś czas temu, ale do dziś nie ogarniam dlaczego on występuje. Podczas pisania Fairtrisa zauważyłem, że włączenie ekskluzywnego tryb wideo wtedy gdy okno jest zmaksymalizowane, powoduje, że rozmiar okna w trybie okienkowym zostaje zmodyfikowany i po wyjściu z trybu wideo, okno przybiera niepoprawne rozmiary. Czasem jest tak, że wyłączenie trybu wideo ustawia okno z powtorem jako zmaksymalizowane (czyli poprawnie), ale okno jest mniejsze od pulpitu lub jego belka znajduje się pod paskiem zadań (mam pasek u góry). Natomiast jeśli użyję przycisku restore
(czyli wyłączę maksymalizację), okno zostaje przywrócone, ale nadal ma rozmiar zgodny z rozmiarem okna zmaksymalizowanego. To się dzieje gdy używam SDL-a, w dowolnej wersji.
Dodam też, że dokładnie to samo zaobserwowałem w przypadku gry Nuclear Throne, która jest zrobiona w GameMaker Studio. Wygląda to tak — odpalam grę, ta startuje w małym oknie:
Teraz maksymalizuję okno, używając przycisku na jego belce:
Teraz wchodzę w ekskluzywny tryb wideo za pomocą Alt+Enter:
Następnie wyłączm tryb wideo tym samym skrótem, przywracając okno zmaksymalizowane. No i efekt jest taki:
Pozycja okna jest zła — belka częściowo chowa się pod paskiem zadań, a okno nie jest zmaksymalizowane, bo widać przycisk do maksymalizacji, nie do przywracania. Czyli okno nie jest zmaksymalizowane (jest zwyczajny tryb okienkowy), z nadpisanymi poprzednimi rozmiarami — okno powinno być malutkie, takie jak na pierwszym zrzucie.
Dokładnie to samo mi się dzieje w dowolnej mojej aplikacji pisanej z użyciem SDL2, jeśli włączę tryb wideo gdy okno jest zmaksymalizowane.
Czy ktoś wie o co w tym chodzi? Dlaczego tryb wideo psuje zapamiętany rozmiar małego okna? Czy to systemowy menedżer okien (czy po prostu system) nie ogarnia tego czy backend pokroju Direct3D/OpenGL nie potrafi poprawnie obsłużyć takiej sytuacji?
Na razie w ramach zabezpieczenia, za pomocą WinAPI zablokowałem przycisk maksymalizacji oraz napisałem sobie kod, który zapamiętuje rozmiar okna w trybie okienkowym, tak aby można było go przywrócić w dowolnej chwili. Ale wolałbym, aby maksymalizacja była jednak wspierana.
- screenshot-20220515205552.png (163 KB) - ściągnięć: 6
- screenshot-20220515205628.png (259 KB) - ściągnięć: 6
- screenshot-20220515205701.png (22 KB) - ściągnięć: 6
- screenshot-20220515205745.png (276 KB) - ściągnięć: 7