Skip to content

Commit

Permalink
Added current_w and current_h to the SDL_VideoInfo structure, which i…
Browse files Browse the repository at this point in the history
…s set to the desktop resolution during video intialization, and then set to the current resolution when a video mode is set.

SDL_SetVideoMode() now accepts 0 for width or height and will use the current video mode (or the desktop mode if no mode has been set.)
  • Loading branch information
slouken committed Mar 15, 2006
1 parent 49d0caf commit d532c73
Show file tree
Hide file tree
Showing 33 changed files with 140 additions and 37 deletions.
8 changes: 8 additions & 0 deletions WhatsNew
Expand Up @@ -4,7 +4,15 @@ This is a list of API changes in SDL's version history.
Version 1.0:

1.2.10:
Added current_w and current_h to the SDL_VideoInfo structure,
which is set to the desktop resolution during video intialization,
and then set to the current resolution when a video mode is set.

SDL_SetVideoMode() now accepts 0 for width or height and will use
the current video mode (or the desktop mode if no mode has been set.)

Added SDL_GetKeyRepeat()

Added SDL_config.h, with defaults for various build environments.

1.2.7:
Expand Down
2 changes: 2 additions & 0 deletions include/SDL_video.h
Expand Up @@ -161,6 +161,8 @@ typedef struct SDL_VideoInfo {
Uint32 UnusedBits3 :16;
Uint32 video_mem; /* The total amount of video memory (in K) */
SDL_PixelFormat *vfmt; /* Value: The format of the video surface */
int current_w; /* Value: The current video mode width */
int current_h; /* Value: The current video mode height */
} SDL_VideoInfo;


Expand Down
9 changes: 9 additions & 0 deletions src/video/SDL_video.c
Expand Up @@ -587,6 +587,13 @@ SDL_Surface * SDL_SetVideoMode (int width, int height, int bpp, Uint32 flags)
}
this = video = current_video;

/* Default to the current width and height */
if ( width == 0 ) {
width = video->info.current_w;
}
if ( height == 0 ) {
height = video->info.current_h;
}
/* Default to the current video bpp */
if ( bpp == 0 ) {
flags |= SDL_ANYFORMAT;
Expand Down Expand Up @@ -889,6 +896,8 @@ SDL_Surface * SDL_SetVideoMode (int width, int height, int bpp, Uint32 flags)
SDL_PublicSurface = SDL_VideoSurface;
}
video->info.vfmt = SDL_VideoSurface->format;
video->info.current_w = SDL_VideoSurface->w;
video->info.current_h = SDL_VideoSurface->h;

/* We're done! */
return(SDL_PublicSurface);
Expand Down
2 changes: 2 additions & 0 deletions src/video/bwindow/SDL_sysvideo.cc
Expand Up @@ -275,6 +275,8 @@ int BE_VideoInit(_THIS, SDL_PixelFormat *vformat)

/* Save the current display mode */
bscreen.GetMode(&saved_mode);
_this->info.current_w = saved_mode.virtual_width;
_this->info.current_h = saved_mode.virtual_height;

/* Determine the screen depth */
vformat->BitsPerPixel = ColorSpaceToBitsPerPixel(bscreen.ColorSpace());
Expand Down
6 changes: 2 additions & 4 deletions src/video/cybergfx/SDL_cgxvideo.c
Expand Up @@ -463,6 +463,8 @@ static int CGX_VideoInit(_THIS, SDL_PixelFormat *vformat)
SDL_SetError("Couldn't lock the display");
return(-1);
}
this->info.current_w = SDL_Display->Width;
this->info.current_h = SDL_Display->Height;

D(bug("Checking if we are using a CGX native display...\n"));

Expand Down Expand Up @@ -834,8 +836,6 @@ int CGX_CreateWindow(_THIS, SDL_Surface *screen,

if( !SDL_windowid ) {
CGX_SetSizeHints(this, w, h, flags);
current_w = w;
current_h = h;
}

/* Set our colormaps when not setting a GL mode */
Expand Down Expand Up @@ -885,8 +885,6 @@ int CGX_ResizeWindow(_THIS,
if ( ! SDL_windowid ) {
/* Resize the window manager window */
CGX_SetSizeHints(this, w, h, flags);
current_w = w;
current_h = h;

ChangeWindowBox(SDL_Window,SDL_Window->LeftEdge,SDL_Window->TopEdge, w+SDL_Window->BorderLeft+SDL_Window->BorderRight,
h+SDL_Window->BorderTop+SDL_Window->BorderBottom);
Expand Down
6 changes: 0 additions & 6 deletions src/video/cybergfx/SDL_cgxvideo.h
Expand Up @@ -67,10 +67,6 @@ struct SDL_PrivateVideoData {
Uint8 *Ximage; /* The X image for our window */
int swap_pixels; /* Flag: true if display is swapped endian */

/* The current width and height of the fullscreen mode */
int current_w;
int current_h;

/* Support for internal mouse warping */
struct {
int x;
Expand Down Expand Up @@ -132,8 +128,6 @@ struct SDL_PrivateVideoData {
#define SDL_Ximage (this->hidden->Ximage)
#define SDL_GC (this->hidden->gc)
#define swap_pixels (this->hidden->swap_pixels)
#define current_w (this->hidden->current_w)
#define current_h (this->hidden->current_h)
#define mouse_last (this->hidden->mouse_last)
#define mouse_accel (this->hidden->mouse_accel)
#define mouse_relative (this->hidden->mouse_relative)
Expand Down
4 changes: 4 additions & 0 deletions src/video/dga/SDL_dgavideo.c
Expand Up @@ -349,6 +349,10 @@ static int DGA_VideoInit(_THIS, SDL_PixelFormat *vformat)
}
DGA_event_base = event_base;

/* Determine the current screen size */
this->info.current_w = DisplayWidth(DGA_Display, DGA_Screen);
this->info.current_h = DisplayHeight(DGA_Display, DGA_Screen);

/* Determine the current screen depth */
visual = DefaultVisual(DGA_Display, DGA_Screen);
{
Expand Down
3 changes: 3 additions & 0 deletions src/video/epoc/SDL_epocvideo.cpp
Expand Up @@ -291,6 +291,9 @@ int EPOC_VideoInit(_THIS, SDL_PixelFormat *vformat)

#endif /* __WINS__ */

_this->info.current_w = Private->EPOC_ScreenSize.iWidth;
_this->info.current_h = Private->EPOC_ScreenSize.iHeight;

/* The "best" video format should be returned to caller. */

vformat->BitsPerPixel = /*!!GetBpp(displayMode) */ 8;
Expand Down
2 changes: 2 additions & 0 deletions src/video/fbcon/SDL_fbvideo.c
Expand Up @@ -636,6 +636,8 @@ static int FB_VideoInit(_THIS, SDL_PixelFormat *vformat)
}

/* Fill in our hardware acceleration capabilities */
this->info.current_w = current_w;
this->info.current_h = current_h;
this->info.wm_available = 0;
this->info.hw_available = 1;
this->info.video_mem = finfo.smem_len/1024;
Expand Down
4 changes: 4 additions & 0 deletions src/video/gapi/SDL_gapivideo.c
Expand Up @@ -529,6 +529,10 @@ int GAPI_VideoInit(_THIS, SDL_PixelFormat *vformat)
GAPI_AddMode(this, bpp, gapi->gxProperties.cxWidth, gapi->gxProperties.cyHeight);
}

/* Determine the current screen size */
this->info.current_w = gapi->gxProperties.cxWidth;
this->info.current_h = gapi->gxProperties.cyHeight;

/* Sort the mode lists */
for ( i=0; i<NUM_MODELISTS; ++i ) {
if ( gapi->SDL_nummodes[i] > 0 ) {
Expand Down
6 changes: 3 additions & 3 deletions src/video/gem/SDL_gemvideo.c
Expand Up @@ -430,9 +430,9 @@ int GEM_VideoInit(_THIS, SDL_PixelFormat *vformat)
/* Setup destination mfdb */
VDI_dst_mfdb.fd_addr = NULL;

/* Update hardware info */
this->info.hw_available = 0;
this->info.video_mem = 0;
/* Determine the current screen size */
this->info.current_w = VDI_w;
this->info.current_h = VDI_h;

/* Determine the screen depth */
/* we change this during the SDL_SetVideoMode implementation... */
Expand Down
4 changes: 4 additions & 0 deletions src/video/ggi/SDL_ggivideo.c
Expand Up @@ -197,6 +197,10 @@ int GGI_VideoInit(_THIS, SDL_PixelFormat *vformat)
GGI_VideoQuit(NULL);
}

/* Determine the current screen size */
this->info.current_w = mode.virt.x;
this->info.current_h = mode.virt.y;

/* Set a palette for palletized modes */
if (GT_SCHEME(mode.graphtype) == GT_PALETTE)
{
Expand Down
4 changes: 4 additions & 0 deletions src/video/ipod/SDL_ipodvideo.c
Expand Up @@ -287,6 +287,10 @@ static int iPod_VideoInit (_THIS, SDL_PixelFormat *vformat)

fcntl (kbfd, F_SETFL, O_RDWR | O_NONBLOCK);

/* Determine the current screen size */
this->info.current_w = lcd_width;
this->info.current_h = lcd_height;

if ((generation >= 60000) && (generation < 70000)) {
vformat->BitsPerPixel = 16;
vformat->Rmask = 0xF800;
Expand Down
17 changes: 10 additions & 7 deletions src/video/macdsp/SDL_dspvideo.c
Expand Up @@ -329,7 +329,7 @@ VideoBootStrap DSp_bootstrap = {
};

/* Use DSp/Display Manager to build mode list for given screen */
static SDL_Rect** DSp_BuildModeList (const GDHandle gDevice)
static SDL_Rect** DSp_BuildModeList (const GDHandle gDevice, int *displayWidth, int *displayHeight)
{
DSpContextAttributes attributes;
DSpContextReference context;
Expand All @@ -355,6 +355,9 @@ static SDL_Rect** DSp_BuildModeList (const GDHandle gDevice)

if ( DSpContext_GetAttributes (context, &attributes) != noErr )
return NULL;

*displayWidth = attributes.displayWidth;
*displayHeight = attributes.displayHeight;

for ( i = 0; i < SDL_arraysize(temp_list); i++ ) {
width = attributes.displayWidth;
Expand Down Expand Up @@ -556,14 +559,14 @@ static int DSp_VideoInit(_THIS, SDL_PixelFormat *vformat)
break;
}

if ( DSp_CreatePalette (this) < 0 ) {

SDL_SetError ("Could not create palette");
return (-1);
}
if ( DSp_CreatePalette (this) < 0 ) {
SDL_SetError ("Could not create palette");
return (-1);
}

/* Get a list of available fullscreen modes */
SDL_modelist = DSp_BuildModeList (SDL_Display);
SDL_modelist = DSp_BuildModeList (SDL_Display,
&this->info.current_w, &this->info.current_h);
if (SDL_modelist == NULL) {
SDL_SetError ("DrawSprocket could not build a mode list");
return (-1);
Expand Down
4 changes: 4 additions & 0 deletions src/video/macrom/SDL_romvideo.c
Expand Up @@ -203,6 +203,10 @@ static int ROM_VideoInit(_THIS, SDL_PixelFormat *vformat)
/* Get a handle to the main monitor */
SDL_Display = GetMainDevice();

/* Determine the current screen size */
this->info.current_w = (**SDL_Display).gdRect.right;
this->info.current_h = (**SDL_Display).gdRect.bottom;

/* Determine pixel format */
vformat->BitsPerPixel = (**(**SDL_Display).gdPMap).pixelSize;
switch (vformat->BitsPerPixel) {
Expand Down
4 changes: 4 additions & 0 deletions src/video/nanox/SDL_nxvideo.c
Expand Up @@ -209,6 +209,10 @@ int NX_VideoInit (_THIS, SDL_PixelFormat * vformat)
GrGetScreenInfo (& si) ;
SDL_Visual.bpp = si.bpp ;

/* Determine the current screen size */
this->info.current_w = si.cols ;
this->info.current_h = si.rows ;

// GetVideoMode
SDL_modelist = (SDL_Rect **) SDL_malloc (sizeof (SDL_Rect *) * 2) ;
if (SDL_modelist) {
Expand Down
4 changes: 4 additions & 0 deletions src/video/os2fslib/SDL_os2fslib.c
Expand Up @@ -2724,6 +2724,10 @@ static int os2fslib_VideoInit(_THIS, SDL_PixelFormat *vformat)
return -1;
}

/* Determine the current screen size */
_this->info.current_w = 0; // FIXME!
_this->info.current_h = 0; // FIXME!

/* Determine the screen depth */
vformat->BitsPerPixel = pDesktopMode->uiBPP;
vformat->BytesPerPixel = (vformat->BitsPerPixel+7)/8;
Expand Down
4 changes: 4 additions & 0 deletions src/video/photon/SDL_ph_video.c
Expand Up @@ -400,6 +400,10 @@ static int ph_VideoInit(_THIS, SDL_PixelFormat* vformat)
return -1;
}

/* Determine the current screen size */
this->info.current_w = desktop_mode.width;
this->info.current_h = desktop_mode.height;

/* We need to return BytesPerPixel as it in used by CreateRGBsurface */
vformat->BitsPerPixel = desktop_mode.bits_per_pixel;
vformat->BytesPerPixel = desktop_mode.bytes_per_scanline/desktop_mode.width;
Expand Down
4 changes: 4 additions & 0 deletions src/video/picogui/SDL_pgvideo.c
Expand Up @@ -166,6 +166,10 @@ int PG_VideoInit(_THIS, SDL_PixelFormat *vformat)

PG_InitEvents(this);

/* Determine the current screen size */
this->info.current_w = this->hidden->mi.lxres;
this->info.current_h = this->hidden->mi.lyres;

/* Determine the screen depth.
* We change this during the SDL_SetVideoMode implementation...
* Round up to the nearest Bytes per pixel
Expand Down
7 changes: 6 additions & 1 deletion src/video/ps2gs/SDL_gsvideo.c
Expand Up @@ -298,14 +298,19 @@ static int GS_VideoInit(_THIS, SDL_PixelFormat *vformat)
return(-1);
}

/* Determine the current screen depth */
if ( ioctl(console_fd, PS2IOC_GSCREENINFO, &vinfo) < 0 ) {
close(memory_fd);
close(console_fd);
console_fd = -1;
SDL_SetError("Couldn't get console pixel format");
return(-1);
}

/* Determine the current screen size */
this->info.current_w = vinfo.w;
this->info.current_h = vinfo.h;

/* Determine the current screen depth */
switch (vinfo.psm) {
/* Supported pixel formats */
case PS2_GS_PSMCT32:
Expand Down
4 changes: 4 additions & 0 deletions src/video/qtopia/SDL_sysvideo.cc
Expand Up @@ -226,6 +226,10 @@ extern "C" {
QT_AddMode(_this, ((vformat->BitsPerPixel+7)/8)-1,
desktop_size.height(), desktop_size.width());

/* Determine the current screen size */
this->info.current_w = desktop_size.width();
this->info.current_h = desktop_size.height();

/* Create the window / widget */
SDL_Win = new SDL_QWin(QSize(QT_HIDDEN_SIZE, QT_HIDDEN_SIZE));
((QPEApplication*)qApp)->showMainWidget(SDL_Win);
Expand Down
5 changes: 5 additions & 0 deletions src/video/quartz/SDL_QuartzVideo.m
Expand Up @@ -200,6 +200,11 @@ static int QZ_VideoInit (_THIS, SDL_PixelFormat *video_format) {
CFNumberGetValue (CFDictionaryGetValue (save_mode, kCGDisplayHeight),
kCFNumberSInt32Type, &device_height);

/* Determine the current screen size */
this->info.current_w = device_width;
this->info.current_h = device_height;

/* Determine the default screen depth */
video_format->BitsPerPixel = device_bpp;

/* Set misc globals */
Expand Down
4 changes: 4 additions & 0 deletions src/video/riscos/SDL_riscosvideo.c
Expand Up @@ -175,6 +175,10 @@ int RISCOS_VideoInit(_THIS, SDL_PixelFormat *vformat)
_kernel_swi(OS_ReadModeVariable, &regs, &regs);
vformat->BitsPerPixel = (1 << regs.r[2]);

/* Determine the current screen size */
this->info.current_w = 0; /* FIXME! */
this->info.current_h = 0; /* FIXME! */

/* Minimum bpp for SDL is 8 */
if (vformat->BitsPerPixel < 8) vformat->BitsPerPixel = 8;

Expand Down
4 changes: 4 additions & 0 deletions src/video/svga/SDL_svgavideo.c
Expand Up @@ -257,6 +257,10 @@ int SVGA_VideoInit(_THIS, SDL_PixelFormat *vformat)
}
keyboard_seteventhandler(SVGA_keyboardcallback);

/* Determine the current screen size */
this->info.current_w = 0;
this->info.current_h = 0;

/* Determine the screen depth (use default 8-bit depth) */
vformat->BitsPerPixel = 8;

Expand Down
6 changes: 6 additions & 0 deletions src/video/vgl/SDL_vglvideo.c
Expand Up @@ -257,6 +257,12 @@ int VGL_VideoInit(_THIS, SDL_PixelFormat *vformat)
return -1;
}

/* Determine the current screen size */
if (VGLCurMode != NULL) {
this->info.current_w = VGLCurMode->ModeInfo.Xsize;
this->info.current_h = VGLCurMode->ModeInfo.Ysize;
}

/* Determine the screen depth */
if (VGLCurMode != NULL)
vformat->BitsPerPixel = VGLCurMode->Depth;
Expand Down
2 changes: 2 additions & 0 deletions src/video/windib/SDL_dibvideo.c
Expand Up @@ -334,6 +334,8 @@ int DIB_VideoInit(_THIS, SDL_PixelFormat *vformat)
#endif
/* Query for the desktop resolution */
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &SDL_desktop_mode);
this->info.current_w = SDL_desktop_mode.dmPelsWidth;
this->info.current_h = SDL_desktop_mode.dmPelsHeight;

/* Query for the list of available video modes */
for ( i=0; EnumDisplaySettings(NULL, i, &settings); ++i ) {
Expand Down
2 changes: 2 additions & 0 deletions src/video/windx5/SDL_dx5video.c
Expand Up @@ -930,6 +930,8 @@ int DX5_VideoInit(_THIS, SDL_PixelFormat *vformat)
#ifndef NO_CHANGEDISPLAYSETTINGS
/* Query for the desktop resolution */
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &SDL_desktop_mode);
this->info.current_w = SDL_desktop_mode.dmPelsWidth;
this->info.current_h = SDL_desktop_mode.dmPelsHeight;
#endif

/* Enumerate the available fullscreen modes */
Expand Down
3 changes: 3 additions & 0 deletions src/video/wscons/SDL_wsconsvideo.c
Expand Up @@ -300,6 +300,9 @@ int WSCONS_VideoInit(_THIS, SDL_PixelFormat *vformat)
height = private->info.height;
}

this->info.current_w = width;
this->info.current_h = height;

if (private->shadowFB) {
private->shadowmem = (Uint8 *)SDL_malloc(len);
if (private->shadowmem == NULL) {
Expand Down

0 comments on commit d532c73

Please sign in to comment.