Мы недавно портировали Bitfighter с GLUT на SDL.В этом было много преимуществ, но есть и некоторые недостатки, особенно в области управления окнами.
Bitfighter работает в окне с фиксированным соотношением сторон (800x600 пикселей).Пользователи могут создавать свои окна любого размера, который они хотят, но мы фиксируем событие изменения размера и вносим коррективы в запрошенный размер, чтобы гарантировать, что окно сохраняет правильные пропорции (используя SDL_SetVideoMode).
(Следующая проблема относится к Windows,но еще не был протестирован на других платформах. То, что я опишу ниже, относится конкретно к Windows, хотя я ищу независимое от платформы решение.)
Обычно это прекрасно работает, за исключением случаев, когда пользователи максимизируют свое окно с помощьюдвойной щелчок по строке заголовка или использование кнопки максимизации.В этом случае событие изменения размера окна вызывается с размером окна, приблизительно равным размеру экрана (за вычетом некоторых пикселей для оформления окна).К сожалению, когда окно развернуто, SDL_SetVideoMode не действует (в отличие от GLUT, который смог изменить размер развернутого окна).Кроме того, последующие вызовы SDL_GetVideoInfo сообщают о запрашиваемом размере, а не о текущем текущем размере окна, поэтому трудно сказать, сработала ли попытка изменения размера.
Я ищу независимый от платформы способ сделать любойследующего (в порядке убывания предпочтений):
- Изменить размер окна после того, как оно было развернуто
- Определить, когда окно было развернуто, чтобы, зная, что я не могу изменить его размерЯ могу, по крайней мере, настроить видео по центру
- Предотвращение максимизации окна (блокировка двойного щелчка по строке заголовка окна, использование кнопки максимизации и перетаскивание окна в верхнюю часть экрана)
Bitfighter написан на C ++, и мы используем последний официальный выпуск SDL.