From 2e532329a773dea3c04d243d5237f2c2eb4779f3 Mon Sep 17 00:00:00 2001 From: ed Date: Mon, 14 Jan 2019 10:28:59 +0000 Subject: [PATCH] Handle display lists without a (0, 0) root node --- .../juce_gui_basics/desktop/juce_Displays.cpp | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/modules/juce_gui_basics/desktop/juce_Displays.cpp b/modules/juce_gui_basics/desktop/juce_Displays.cpp index 7ef4a32ce8..f9c4c4c2a4 100644 --- a/modules/juce_gui_basics/desktop/juce_Displays.cpp +++ b/modules/juce_gui_basics/desktop/juce_Displays.cpp @@ -326,19 +326,36 @@ void Displays::updateToLogical() DisplayNode node; node.display = &d; + + if (d.totalArea.getTopLeft() == Point()) + node.isRoot = true; + displayNodes.add (node); } - DisplayNode* root = nullptr; - for (auto& node : displayNodes) + auto* root = [&displayNodes]() -> DisplayNode* { - if (node.display->totalArea.getTopLeft() == Point()) + for (auto& node : displayNodes) + if (node.isRoot) + return &node; + + auto minDistance = std::numeric_limits::max(); + DisplayNode* retVal = nullptr; + + for (auto& node : displayNodes) { - root = &node; - root->isRoot = true; - break; + auto distance = node.display->totalArea.getTopLeft().getDistanceFrom ({}); + + if (distance < minDistance) + { + minDistance = distance; + retVal = &node; + } } - } + + retVal->isRoot = true; + return retVal; + }(); // Must have a root node! jassert (root != nullptr);