Windowed mode functionality

Hello, I’m trying to get SDL to let me do windowed 3D the way I’d like it to
be done and I’m running into a few problems. I’m pretty sure they’ll require
making modifications to SDL, so I’m emailing to see if the missing
functionality / bugs I’m looking at really are missing functionality / bugs,
and if my plans sound like the right thing to do to you. Any advice would be
appriciated! I’m aiming to get these things working on both win32 and Linux
(KDE/GNOME) so my app can provide a spiffier windowed mode on those
platforms.

  • My window needs to start up maximized and the resulting window size needs to
    be known.

I’m not sure of the right way to do this, but a hack in X is to create the
window of size 4096x4096 and it results in it being properly maximized in X
at least (haven’t tested Windows yet). The problem is that the SDL surface
reports being size 4096x4096 even though the window wound up much smaller
than that. It takes a resize event occuring before SDL will return the true
numbers. I know xwininfo can get the right information, so I’d probably just
need to fix SDL_SetVideoMode to do the same query for the real width and
height.

  • To handle window resizing, when SDL gives me a resize event, I do
    SDL_SetVideoMode to change the width and height. This has a side-effect of
    clearing the ‘maximized’ state of the window in X, at least for KDE3.

I assume that’s either me not using the correct method to handle a resize
event, a bug somewhere underneath SDL’s SDL_SetVideoMode, or a bad SDL->Kwin
interaction. If there’s nothing wrong with my method, I figure it’d just
take a bugfix or workaround under SDL_SetVideoMode.

  • I need to be able to detect if my window is set ‘maximized’ vs. just large.

In Windows, I hear this is done via win32’s ‘IsZoomed()’. In X, the
’standard’ (accepted :)) way I believe is if there are
NET_WM_STATE_MAXIMIZED* properties on the window. If there’s not a better
way, I could add some sort of ‘isMaximized’ function to SDL’s WM stuff to
test these. As far as my app is concerned, it gest a SDL_VIDEOEXPOSE event
in X when the maximized state is toggled even if the window size doesn’t
change, so I’d then just need to do the isMaximized check in my expose
handling code to be notified when the maximized state of my window changes.