From dd249faae4bb77c09cc9625c24b80aceb8e784d6 Mon Sep 17 00:00:00 2001 From: jules Date: Fri, 27 Mar 2015 12:18:58 +0000 Subject: [PATCH] Fix for linux desktop scale on hi-res displays. --- .../native/juce_linux_Windowing.cpp | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/modules/juce_gui_basics/native/juce_linux_Windowing.cpp b/modules/juce_gui_basics/native/juce_linux_Windowing.cpp index fe867db167..0a40410114 100644 --- a/modules/juce_gui_basics/native/juce_linux_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_linux_Windowing.cpp @@ -3199,6 +3199,34 @@ void MouseInputSource::setRawMousePosition (Point newPosition) double Desktop::getDefaultMasterScale() { + // Ubuntu and derived distributions now save a per-display scale factor as a configuration + // variable. This can be changed in the Monitor system settings panel. + ChildProcess dconf; + + if (dconf.start ("dconf read /com/ubuntu/user-interface/scale-factor", ChildProcess::wantStdOut)) + { + if (dconf.waitForProcessToFinish (200)) + { + String jsonOutput = dconf.readAllProcessOutput().replaceCharacter ('\'', '"'); + + if (dconf.getExitCode() == 0 && jsonOutput.isNotEmpty()) + { + var jsonVar = JSON::parse (jsonOutput); + + if (DynamicObject* object = jsonVar.getDynamicObject()) + { + NamedValueSet& scaleFactors = object->getProperties(); + + double maxScaleFactor = 1.0; + for (int i = 0; i < scaleFactors.size(); ++i) + maxScaleFactor = jmax (maxScaleFactor, (double) (scaleFactors.getValueAt (i)) / 8.0); + + return maxScaleFactor; + } + } + } + } + return 1.0; }