From: sapier Date: Tue, 6 Jan 2015 21:40:34 +0000 (+0100) Subject: Implement X11 dpi autodetection X-Git-Tag: 0.4.12~135 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=0f1d33933d264fa84b2d97668258d066da0ca01c;p=oweals%2Fminetest.git Implement X11 dpi autodetection --- diff --git a/minetest.conf.example b/minetest.conf.example index 8570eb052..0b137c5a2 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -224,7 +224,7 @@ #directional_colored_fog = true # Delay showing tooltips, stated in milliseconds #tooltip_show_delay = 400 -# Adjust dpi configuration to your screen (Desktop only) e.g. for 4k screens +# Adjust dpi configuration to your screen (non X11/Android only) e.g. for 4k screens #screen_dpi = 72 # Default timeout for cURL, stated in milliseconds. # Only has an effect if compiled with cURL. diff --git a/src/porting.cpp b/src/porting.cpp index 025e5978c..219e1647d 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -570,17 +570,48 @@ void setXorgClassHint(const video::SExposedVideoData &video_data, } #ifndef SERVER -v2u32 getWindowSize() { +v2u32 getWindowSize() +{ return device->getVideoDriver()->getScreenSize(); } -#ifndef __ANDROID__ +#ifdef XORG_USED +float getDisplayDensity() +{ + const char* current_display = getenv("DISPLAY"); + + if (current_display != NULL) { + Display * x11display = XOpenDisplay(current_display); + + if (x11display != NULL) { + /* try x direct */ + float dpi_height = + floor(DisplayHeight(x11display, 0) / + (DisplayHeightMM(x11display, 0) * 0.039370) + 0.5); + float dpi_width = + floor(DisplayWidth(x11display, 0) / + (DisplayWidthMM(x11display, 0) * 0.039370) +0.5); + + XCloseDisplay(x11display); + + return (std::max(dpi_height,dpi_width) / 96.0); + } + } -float getDisplayDensity() { + /* return manually specified dpi */ return g_settings->getFloat("screen_dpi")/96.0; } -v2u32 getDisplaySize() { +#else +float getDisplayDensity() +{ + return g_settings->getFloat("screen_dpi")/96.0; +} +#endif + +#ifndef __ANDROID__ +v2u32 getDisplaySize() +{ IrrlichtDevice *nulldevice = createDevice(video::EDT_NULL); core::dimension2d deskres = nulldevice->getVideoModeList()->getDesktopResolution();