static int window_flags;
#endif
static SDL_Surface *vid_softsurface;
+static vid_mode_t desktop_mode;
/////////////////////////
// Input handling
if (skip != 11) \
VID_TouchscreenArea( 0, 0, 0, 0, 0, NULL , 0.0f, NULL, NULL, &buttons[11], (keynum_t)'b', NULL, 0, 0, 0, false); \
if (skip != 12) \
- VID_TouchscreenArea( 0, 0, 0, 0, 0, NULL , 0.0f, NULL, NULL, &buttons[12], 'q', NULL, 0, 0, 0, false); \
+ VID_TouchscreenArea( 0, 0, 0, 0, 0, NULL , 0.0f, NULL, NULL, &buttons[12], (keynum_t)'q', NULL, 0, 0, 0, false); \
if (skip != 13) \
VID_TouchscreenArea( 0, 0, 0, 0, 0, NULL , 0.0f, NULL, NULL, &buttons[13], (keynum_t)'`', NULL, 0, 0, 0, false); \
if (skip != 14) \
{
VID_TouchscreenCursor(0, 0, 0, 0, &buttons[0], K_MOUSE1);
- VID_TouchscreenArea( 2,16*xscale,-240*yscale, 224*xscale, 224*yscale, "gfx/gui/touch_l_thumb_dpad.tga", 0.0f, NULL, move, &buttons[1], 0, NULL, 0.15, 112*xscale, 112*yscale, false);
+ VID_TouchscreenArea( 2,16*xscale,-240*yscale, 224*xscale, 224*yscale, "gfx/gui/touch_l_thumb_dpad.tga", 0.0f, NULL, move, &buttons[1], (keynum_t)0, NULL, 0.15, 112*xscale, 112*yscale, false);
- VID_TouchscreenArea( 3,-240*xscale,-160*yscale, 224*xscale, 128*yscale, "gfx/gui/touch_r_thumb_turn_n_shoot.tga" , 0.0f, NULL, NULL, 0, 0, NULL, 0, 56*xscale, 0, false);
- VID_TouchscreenArea( 3,-240*xscale,-256*yscale, 224*xscale, 224*yscale, NULL , 0.0f, NULL, aim, &buttons[2], 0, NULL, 0.2, 56*xscale, 0, false);
+ VID_TouchscreenArea( 3,-240*xscale,-160*yscale, 224*xscale, 128*yscale, "gfx/gui/touch_r_thumb_turn_n_shoot.tga" , 0.0f, NULL, NULL, 0, (keynum_t)0, NULL, 0, 56*xscale, 0, false);
+ VID_TouchscreenArea( 3,-240*xscale,-256*yscale, 224*xscale, 224*yscale, NULL , 0.0f, NULL, aim, &buttons[2], (keynum_t)0, NULL, 0.2, 56*xscale, 0, false);
VID_TouchscreenArea( 2, (vid_conwidth.value / 2) - 128,-80, 256, 80, NULL, 0.0f, NULL, NULL, &buttons[3], K_SHIFT, NULL, 0, 0, 0, true);
VID_TouchscreenArea( 1,-100, 0, 100, 100, NULL , 0.0f, NULL, NULL, &buttons[10], (keynum_t)'m', NULL, 0, 0, 0, true);
VID_TouchscreenArea( 1,-100, 120, 100, 100, NULL , 0.0f, NULL, NULL, &buttons[11], (keynum_t)'b', NULL, 0, 0, 0, true);
- VID_TouchscreenArea( 0, 0, 0, 64, 64, NULL , 0.0f, NULL, NULL, &buttons[12], 'q', NULL, 0, 0, 0, true);
+ VID_TouchscreenArea( 0, 0, 0, 64, 64, NULL , 0.0f, NULL, NULL, &buttons[12], (keynum_t)'q', NULL, 0, 0, 0, true);
if (developer.integer)
VID_TouchscreenArea( 0, 0, 96, 64, 64, NULL , 0.0f, NULL, NULL, &buttons[13], (keynum_t)'`', NULL, 0, 0, 0, true);
else
case SDL_VIDEOEXPOSE:
break;
case SDL_VIDEORESIZE:
- if(vid_resizable.integer < 2)
+ if(vid_resizable.integer < 2 || vid_isfullscreen)
{
vid.width = event.resize.w;
vid.height = event.resize.h;
- screen = SDL_SetVideoMode(vid.width, vid.height, video_bpp, video_flags);
+ if (!vid_isfullscreen)
+ screen = SDL_SetVideoMode(vid.width, vid.height, video_bpp, video_flags);
if (vid_softsurface)
{
SDL_FreeSurface(vid_softsurface);
// Knghtbrd: should do platform-specific extension string function here
vid_isfullscreen = false;
- if (mode->fullscreen) {
#if SDL_MAJOR_VERSION == 1
- flags |= SDL_FULLSCREEN;
+ {
+ const SDL_VideoInfo *vi = SDL_GetVideoInfo();
+ desktop_mode.width = vi->current_w;
+ desktop_mode.height = vi->current_h;
+ desktop_mode.bpp = vi->vfmt->BitsPerPixel;
+ desktop_mode.pixelheight_num = 1;
+ desktop_mode.pixelheight_denom = 1; // SDL does not provide this
+ if (mode->fullscreen) {
+ if (vid_desktopfullscreen.integer)
+ {
+ mode->width = vi->current_w;
+ mode->height = vi->current_h;
+ mode->bitsperpixel = vi->vfmt->BitsPerPixel;
+ }
+ flags |= SDL_FULLSCREEN;
+ vid_isfullscreen = true;
+ }
+ }
#else
- windowflags |= SDL_WINDOW_FULLSCREEN;
-#endif
- vid_isfullscreen = true;
+ {
+ if (mode->fullscreen) {
+ if (vid_desktopfullscreen.integer)
+ windowflags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
+ else
+ windowflags |= SDL_WINDOW_FULLSCREEN;
+ vid_isfullscreen = true;
+ }
}
+#endif
//flags |= SDL_HWSURFACE;
SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1);
vid_isfullscreen = false;
if (mode->fullscreen) {
#if SDL_MAJOR_VERSION == 1
+ const SDL_VideoInfo *vi = SDL_GetVideoInfo();
+ mode->width = vi->current_w;
+ mode->height = vi->current_h;
+ mode->bitsperpixel = vi->vfmt->BitsPerPixel;
flags |= SDL_FULLSCREEN;
#else
- windowflags |= SDL_WINDOW_FULLSCREEN;
+ if (vid_desktopfullscreen.integer)
+ windowflags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
+ else
+ windowflags |= SDL_WINDOW_FULLSCREEN;
#endif
vid_isfullscreen = true;
}
}
}
+vid_mode_t *VID_GetDesktopMode(void)
+{
+#if SDL_MAJOR_VERSION != 1
+ SDL_DisplayMode mode;
+ int bpp;
+ Uint32 rmask, gmask, bmask, amask;
+ SDL_GetDesktopDisplayMode(0, &mode);
+ SDL_PixelFormatEnumToMasks(mode.format, &bpp, &rmask, &gmask, &bmask, &amask);
+ modes[k].width = mode.w;
+ modes[k].height = mode.h;
+ modes[k].bpp = bpp;
+ modes[k].refreshrate = mode.refreshrate;
+ modes[k].pixelheight_num = 1;
+ modes[k].pixelheight_denom = 1; // SDL does not provide this
+ // TODO check whether this actually works, or whether we do still need
+ // a read-window-size-after-entering-desktop-fullscreen hack for
+ // multiscreen setups.
+#endif
+ return &desktop_mode;
+}
+
size_t VID_ListModes(vid_mode_t *modes, size_t maxcount)
{
size_t k = 0;
continue;
modes[k].width = mode.w;
modes[k].height = mode.h;
+ // FIXME bpp?
modes[k].refreshrate = mode.refresh_rate;
modes[k].pixelheight_num = 1;
- modes[k].pixelheight_num = 1;
modes[k].pixelheight_denom = 1; // SDL does not provide this
k++;
}