Skip to content

Commit

Permalink
Add X11 implementation of SDL_GetDisplayDPI.
Browse files Browse the repository at this point in the history
  • Loading branch information
alfred-valve committed Jul 30, 2015
1 parent 61c7415 commit 51c72e1
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/video/x11/SDL_x11modes.c
Expand Up @@ -533,6 +533,18 @@ X11_InitModes(_THIS)
displaydata->visual = vinfo.visual;
displaydata->depth = vinfo.depth;

// We use the displaydata screen index here so that this works
// for both the Xinerama case, where we get the overall DPI,
// and the regular X11 screen info case.
displaydata->hdpi = (float)DisplayWidth(data->display, displaydata->screen) * 25.4f /
DisplayWidthMM(data->display, displaydata->screen);
displaydata->vdpi = (float)DisplayHeight(data->display, displaydata->screen) * 25.4f /
DisplayHeightMM(data->display, displaydata->screen);
displaydata->ddpi = SDL_ComputeDiagonalDPI(DisplayWidth(data->display, displaydata->screen),
DisplayHeight(data->display, displaydata->screen),
(float)DisplayWidthMM(data->display, displaydata->screen) / 25.4f,
(float)DisplayHeightMM(data->display, displaydata->screen) / 25.4f);

displaydata->scanline_pad = SDL_BYTESPERPIXEL(mode.format) * 8;
pixmapFormats = X11_XListPixmapFormats(data->display, &n);
if (pixmapFormats) {
Expand Down Expand Up @@ -923,6 +935,24 @@ X11_GetDisplayBounds(_THIS, SDL_VideoDisplay * sdl_display, SDL_Rect * rect)
return 0;
}

int
X11_GetDisplayDPI(_THIS, SDL_VideoDisplay * sdl_display, float * ddpi, float * hdpi, float * vdpi)
{
SDL_DisplayData *data = (SDL_DisplayData *) sdl_display->driverdata;

if (ddpi) {
*ddpi = data->ddpi;
}
if (hdpi) {
*hdpi = data->hdpi;
}
if (vdpi) {
*vpid = data->vdpi;
}

return data->ddpi != 0.0f ? 0 : -1;
}

#endif /* SDL_VIDEO_DRIVER_X11 */

/* vi: set ts=4 sw=4 expandtab: */
4 changes: 4 additions & 0 deletions src/video/x11/SDL_x11modes.h
Expand Up @@ -31,6 +31,9 @@ typedef struct
int scanline_pad;
int x;
int y;
float ddpi;
float hdpi;
float vdpi;

int use_xinerama;
int use_xrandr;
Expand Down Expand Up @@ -74,6 +77,7 @@ extern int X11_GetVisualInfoFromVisual(Display * display, Visual * visual,
extern Uint32 X11_GetPixelFormatFromVisualInfo(Display * display,
XVisualInfo * vinfo);
extern int X11_GetDisplayBounds(_THIS, SDL_VideoDisplay * sdl_display, SDL_Rect * rect);
extern int X11_GetDisplayDPI(_THIS, SDL_VideoDisplay * sdl_display, float * ddpi, float * hdpi, float * vdpi);

#endif /* _SDL_x11modes_h */

Expand Down
1 change: 1 addition & 0 deletions src/video/x11/SDL_x11video.c
Expand Up @@ -216,6 +216,7 @@ X11_CreateDevice(int devindex)
device->VideoQuit = X11_VideoQuit;
device->GetDisplayModes = X11_GetDisplayModes;
device->GetDisplayBounds = X11_GetDisplayBounds;
device->GetDisplayDPI = X11_GetDisplayDPI;
device->SetDisplayMode = X11_SetDisplayMode;
device->SuspendScreenSaver = X11_SuspendScreenSaver;
device->PumpEvents = X11_PumpEvents;
Expand Down

0 comments on commit 51c72e1

Please sign in to comment.