diff options
author | Martin Renold <martin@log2.ch> | 2018-12-08 16:26:04 +0100 |
---|---|---|
committer | Loïc Blot <nerzhul@users.noreply.github.com> | 2018-12-08 16:26:04 +0100 |
commit | b02effdab9b837bd2197ffe7f7f26e0e49fe8acd (patch) | |
tree | 63e868b6748b236b105b4d209dab6a048ab19cfe /src | |
parent | f0dca284b3d4fe266e88f6df8c6e3ad9d1411496 (diff) | |
download | minetest-b02effdab9b837bd2197ffe7f7f26e0e49fe8acd.tar.gz minetest-b02effdab9b837bd2197ffe7f7f26e0e49fe8acd.tar.bz2 minetest-b02effdab9b837bd2197ffe7f7f26e0e49fe8acd.zip |
Fix crash if display resolution is not set (#7950)
On my wayland / gnome3 setup DisplayHeightMM() returns 0. This resulted in a
misleading startup error suggesting to fix my font paths.
Diffstat (limited to 'src')
-rw-r--r-- | src/client/fontengine.cpp | 5 | ||||
-rw-r--r-- | src/client/renderingengine.cpp | 21 |
2 files changed, 14 insertions, 12 deletions
diff --git a/src/client/fontengine.cpp b/src/client/fontengine.cpp index dc98fb1e4..59e5bedee 100644 --- a/src/client/fontengine.cpp +++ b/src/client/fontengine.cpp @@ -315,6 +315,11 @@ void FontEngine::initFont(unsigned int basesize, FontMode mode) } u32 size = std::floor(RenderingEngine::getDisplayDensity() * m_settings->getFloat("gui_scaling") * basesize); + if (size == 0) { + errorstream << "FontEngine: attempt to use font size 0" << std::endl; + errorstream << " display density: " << RenderingEngine::getDisplayDensity() << std::endl; + abort(); + } u32 font_shadow = 0; u32 font_shadow_alpha = 0; diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp index 82d1411d6..b18e91f6e 100644 --- a/src/client/renderingengine.cpp +++ b/src/client/renderingengine.cpp @@ -624,20 +624,17 @@ static float calcDisplayDensity() 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); - + int dh = DisplayHeight(x11display, 0); + int dw = DisplayWidth(x11display, 0); + int dh_mm = DisplayHeightMM(x11display, 0); + int dw_mm = DisplayWidthMM(x11display, 0); XCloseDisplay(x11display); - return std::max(dpi_height, dpi_width) / 96.0; + if (dh_mm != 0 && dw_mm != 0) { + float dpi_height = floor(dh / (dh_mm * 0.039370) + 0.5); + float dpi_width = floor(dw / (dw_mm * 0.039370) + 0.5); + return std::max(dpi_height, dpi_width) / 96.0; + } } } |