Add X11 implementation of SDL_GetDisplayDPI.
--- a/src/video/x11/SDL_x11modes.c Wed Jul 29 17:18:56 2015 -0700
+++ b/src/video/x11/SDL_x11modes.c Wed Jul 29 17:19:02 2015 -0700
@@ -533,6 +533,18 @@
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) {
@@ -923,6 +935,24 @@
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: */
--- a/src/video/x11/SDL_x11modes.h Wed Jul 29 17:18:56 2015 -0700
+++ b/src/video/x11/SDL_x11modes.h Wed Jul 29 17:19:02 2015 -0700
@@ -31,6 +31,9 @@
int scanline_pad;
int x;
int y;
+ float ddpi;
+ float hdpi;
+ float vdpi;
int use_xinerama;
int use_xrandr;
@@ -74,6 +77,7 @@
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 */
--- a/src/video/x11/SDL_x11video.c Wed Jul 29 17:18:56 2015 -0700
+++ b/src/video/x11/SDL_x11video.c Wed Jul 29 17:19:02 2015 -0700
@@ -216,6 +216,7 @@
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;