diff --git a/src/video/windows/SDL_windowsmodes.c b/src/video/windows/SDL_windowsmodes.c index 73cae8f37..f583b0baa 100644 --- a/src/video/windows/SDL_windowsmodes.c +++ b/src/video/windows/SDL_windowsmodes.c @@ -50,6 +50,8 @@ WIN_GetDisplayMode(LPCTSTR deviceName, DWORD index, SDL_DisplayMode * mode) data->DeviceMode.dmFields = (DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY | DM_DISPLAYFLAGS); + data->ScaleX = 1.0f; + data->ScaleY = 1.0f; /* Fill in the mode information */ mode->format = SDL_PIXELFORMAT_UNKNOWN; @@ -63,6 +65,13 @@ WIN_GetDisplayMode(LPCTSTR deviceName, DWORD index, SDL_DisplayMode * mode) char bmi_data[sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)]; LPBITMAPINFO bmi; HBITMAP hbm; + int logical_width = GetDeviceCaps( hdc, HORZRES ); + int logical_height = GetDeviceCaps( hdc, VERTRES ); + + data->ScaleX = (float)logical_width / devmode.dmPelsWidth; + data->ScaleY = (float)logical_height / devmode.dmPelsHeight; + mode->w = logical_width; + mode->h = logical_height; SDL_zero(bmi_data); bmi = (LPBITMAPINFO) bmi_data; @@ -93,7 +102,7 @@ WIN_GetDisplayMode(LPCTSTR deviceName, DWORD index, SDL_DisplayMode * mode) } else if (bmi->bmiHeader.biBitCount == 4) { mode->format = SDL_PIXELFORMAT_INDEX4LSB; } - } else { + } else { /* FIXME: Can we tell what this will be? */ if ((devmode.dmFields & DM_BITSPERPEL) == DM_BITSPERPEL) { switch (devmode.dmBitsPerPel) { @@ -224,10 +233,10 @@ WIN_GetDisplayBounds(_THIS, SDL_VideoDisplay * display, SDL_Rect * rect) { SDL_DisplayModeData *data = (SDL_DisplayModeData *) display->current_mode.driverdata; - rect->x = (int)data->DeviceMode.dmPosition.x; - rect->y = (int)data->DeviceMode.dmPosition.y; - rect->w = data->DeviceMode.dmPelsWidth; - rect->h = data->DeviceMode.dmPelsHeight; + rect->x = (int)SDL_ceil(data->DeviceMode.dmPosition.x * data->ScaleX); + rect->y = (int)SDL_ceil(data->DeviceMode.dmPosition.y * data->ScaleY); + rect->w = (int)SDL_ceil(data->DeviceMode.dmPelsWidth * data->ScaleX); + rect->h = (int)SDL_ceil(data->DeviceMode.dmPelsHeight * data->ScaleY); return 0; } @@ -252,8 +261,7 @@ WIN_GetDisplayModes(_THIS, SDL_VideoDisplay * display) if (!SDL_AddDisplayMode(display, &mode)) { SDL_free(mode.driverdata); } - } - else { + } else { SDL_free(mode.driverdata); } } diff --git a/src/video/windows/SDL_windowsmodes.h b/src/video/windows/SDL_windowsmodes.h index fd622d56c..c13670b1c 100644 --- a/src/video/windows/SDL_windowsmodes.h +++ b/src/video/windows/SDL_windowsmodes.h @@ -31,6 +31,8 @@ typedef struct typedef struct { DEVMODE DeviceMode; + float ScaleX; + float ScaleY; } SDL_DisplayModeData; extern int WIN_InitModes(_THIS);