mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2024-12-29 20:27:12 +01:00
Add X11 implementation of SDL_GetDisplayDPI.
This commit is contained in:
parent
61c7415071
commit
51c72e10f7
@ -533,6 +533,18 @@ X11_InitModes(_THIS)
|
|||||||
displaydata->visual = vinfo.visual;
|
displaydata->visual = vinfo.visual;
|
||||||
displaydata->depth = vinfo.depth;
|
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;
|
displaydata->scanline_pad = SDL_BYTESPERPIXEL(mode.format) * 8;
|
||||||
pixmapFormats = X11_XListPixmapFormats(data->display, &n);
|
pixmapFormats = X11_XListPixmapFormats(data->display, &n);
|
||||||
if (pixmapFormats) {
|
if (pixmapFormats) {
|
||||||
@ -923,6 +935,24 @@ X11_GetDisplayBounds(_THIS, SDL_VideoDisplay * sdl_display, SDL_Rect * rect)
|
|||||||
return 0;
|
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 */
|
#endif /* SDL_VIDEO_DRIVER_X11 */
|
||||||
|
|
||||||
/* vi: set ts=4 sw=4 expandtab: */
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
|
@ -31,6 +31,9 @@ typedef struct
|
|||||||
int scanline_pad;
|
int scanline_pad;
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
|
float ddpi;
|
||||||
|
float hdpi;
|
||||||
|
float vdpi;
|
||||||
|
|
||||||
int use_xinerama;
|
int use_xinerama;
|
||||||
int use_xrandr;
|
int use_xrandr;
|
||||||
@ -74,6 +77,7 @@ extern int X11_GetVisualInfoFromVisual(Display * display, Visual * visual,
|
|||||||
extern Uint32 X11_GetPixelFormatFromVisualInfo(Display * display,
|
extern Uint32 X11_GetPixelFormatFromVisualInfo(Display * display,
|
||||||
XVisualInfo * vinfo);
|
XVisualInfo * vinfo);
|
||||||
extern int X11_GetDisplayBounds(_THIS, SDL_VideoDisplay * sdl_display, SDL_Rect * rect);
|
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 */
|
#endif /* _SDL_x11modes_h */
|
||||||
|
|
||||||
|
@ -216,6 +216,7 @@ X11_CreateDevice(int devindex)
|
|||||||
device->VideoQuit = X11_VideoQuit;
|
device->VideoQuit = X11_VideoQuit;
|
||||||
device->GetDisplayModes = X11_GetDisplayModes;
|
device->GetDisplayModes = X11_GetDisplayModes;
|
||||||
device->GetDisplayBounds = X11_GetDisplayBounds;
|
device->GetDisplayBounds = X11_GetDisplayBounds;
|
||||||
|
device->GetDisplayDPI = X11_GetDisplayDPI;
|
||||||
device->SetDisplayMode = X11_SetDisplayMode;
|
device->SetDisplayMode = X11_SetDisplayMode;
|
||||||
device->SuspendScreenSaver = X11_SuspendScreenSaver;
|
device->SuspendScreenSaver = X11_SuspendScreenSaver;
|
||||||
device->PumpEvents = X11_PumpEvents;
|
device->PumpEvents = X11_PumpEvents;
|
||||||
|
Loading…
Reference in New Issue
Block a user