From 976dd8912840817d65e115300a650ca1d4d370ad Mon Sep 17 00:00:00 2001 From: GPayne Date: Sun, 20 Feb 2022 21:57:14 -0700 Subject: [PATCH] Fix for monitor preview to handle windows os negative coordinates --- .../launcher/include/sgctedit/monitorbox.h | 2 ++ .../ext/launcher/src/sgctedit/monitorbox.cpp | 35 ++++++++++++------- .../ext/launcher/src/sgctedit/sgctedit.cpp | 2 -- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/apps/OpenSpace/ext/launcher/include/sgctedit/monitorbox.h b/apps/OpenSpace/ext/launcher/include/sgctedit/monitorbox.h index 2f331b373e..8e19d860ad 100644 --- a/apps/OpenSpace/ext/launcher/include/sgctedit/monitorbox.h +++ b/apps/OpenSpace/ext/launcher/include/sgctedit/monitorbox.h @@ -36,6 +36,7 @@ #include #include #include +#include #include #include @@ -71,6 +72,7 @@ private: unsigned int _nMonitors = 1; std::vector _monitorResolution; std::vector _monitorDimensionsScaled; + QRectF _negativeCorrectionOffsets = {0.f, 0.f, 0.f, 0.f}; std::vector _windowResolutions; std::vector _windowRendering = { {0.f, 0.f, 0.f, 0.f}, diff --git a/apps/OpenSpace/ext/launcher/src/sgctedit/monitorbox.cpp b/apps/OpenSpace/ext/launcher/src/sgctedit/monitorbox.cpp index d956c0485f..06df2c6a21 100644 --- a/apps/OpenSpace/ext/launcher/src/sgctedit/monitorbox.cpp +++ b/apps/OpenSpace/ext/launcher/src/sgctedit/monitorbox.cpp @@ -24,7 +24,7 @@ #include "sgctedit/monitorbox.h" -constexpr float MarginFractionOfWidgetSize = 0.025; +constexpr float MarginFractionOfWidgetSize = 0.025f; MonitorBox::MonitorBox(QRect widgetDims, std::vector monitorResolution, unsigned int nWindows, const std::array& winColors) @@ -33,7 +33,7 @@ MonitorBox::MonitorBox(QRect widgetDims, std::vector monitorResolution, , _nWindows(nWindows) , _colorsForWindows(winColors) { - _nMonitors = monitorResolution.size(); + _nMonitors = static_cast(monitorResolution.size()); _showLabel = (_nMonitors > 1); mapMonitorResolutionToWidgetCoordinates(); } @@ -102,7 +102,7 @@ void MonitorBox::paintWindowBeyondBounds(QPainter& painter, unsigned int winIdx) } void MonitorBox::paintWindow(QPainter& painter, size_t winIdx) { - setPenSpecificToWindow(painter, winIdx, true); + setPenSpecificToWindow(painter, static_cast(winIdx), true); if (winIdx <= _windowRendering.size()) { painter.drawRect(_windowRendering[winIdx]); QColor fillColor = _colorsForWindows[winIdx]; @@ -135,15 +135,22 @@ void MonitorBox::windowDimensionsChanged(unsigned int monitorIdx, unsigned int w } void MonitorBox::mapMonitorResolutionToWidgetCoordinates() { - QSize virtualDesktopResolution; + for (const QRect& m : _monitorResolution) { + if (m.x() < _negativeCorrectionOffsets.x()) { + _negativeCorrectionOffsets.setX(m.x()); + } + if (m.y() < _negativeCorrectionOffsets.y()) { + _negativeCorrectionOffsets.setY(m.y()); + } + } float maxWidth = 0.f; float maxHeight = 0.f; for (const QRect& m : _monitorResolution) { - if ((m.x() + m.width()) > maxWidth) { - maxWidth = m.x() + m.width(); + if ((m.x() + m.width() - _negativeCorrectionOffsets.x()) > maxWidth) { + maxWidth = m.x() + m.width() - _negativeCorrectionOffsets.x(); } - if ((m.y() + m.height()) > maxHeight) { - maxHeight = m.y() + m.height(); + if ((m.y() + m.height() - _negativeCorrectionOffsets.y()) > maxHeight) { + maxHeight = m.y() + m.height() - _negativeCorrectionOffsets.y(); } } float aspectRatio = maxWidth / maxHeight; @@ -172,9 +179,11 @@ void MonitorBox::computeScaledResolutionLandscape(float aspectRatio, float maxWi float newHeight = virtualWidth / aspectRatio; for (size_t m = 0; m < _monitorResolution.size(); ++m) { _monitorOffsets.push_back({ - _marginWidget + _monitorResolution[m].x() * _monitorScaleFactor, + _marginWidget + (_monitorResolution[m].x() - _negativeCorrectionOffsets.x()) + * _monitorScaleFactor, _marginWidget + (_monitorWidgetSize.height() - newHeight) / 2.0 + - _monitorResolution[m].y() * _monitorScaleFactor + (_monitorResolution[m].y() - _negativeCorrectionOffsets.y()) + * _monitorScaleFactor }); } } @@ -188,8 +197,10 @@ void MonitorBox::computeScaledResolutionPortrait(float aspectRatio, float maxHei for (size_t m = 0; m < _monitorResolution.size(); ++m) { _monitorOffsets.push_back({ _marginWidget + (_monitorWidgetSize.width() - newWidth) / 2.0 - + _monitorResolution[m].x() * _monitorScaleFactor, - _marginWidget + _monitorResolution[m].y() * _monitorScaleFactor + + (_monitorResolution[m].x() - _negativeCorrectionOffsets.x()) + * _monitorScaleFactor, + _marginWidget + (_monitorResolution[m].y() - _negativeCorrectionOffsets.y()) + * _monitorScaleFactor }); } } diff --git a/apps/OpenSpace/ext/launcher/src/sgctedit/sgctedit.cpp b/apps/OpenSpace/ext/launcher/src/sgctedit/sgctedit.cpp index 97cf4c996a..38ac9516b6 100644 --- a/apps/OpenSpace/ext/launcher/src/sgctedit/sgctedit.cpp +++ b/apps/OpenSpace/ext/launcher/src/sgctedit/sgctedit.cpp @@ -52,8 +52,6 @@ void SgctEdit::systemMonitorConfiguration(const QList& screenList) { actualWidth, actualHeight }); -std::cout << _monitorSizeList.back().width() << "x" << _monitorSizeList.back().height() << " @ " -<< _monitorSizeList.back().x() << "," << _monitorSizeList.back().y() << std::endl; } _nMaxWindows = (_monitorSizeList.size() == 1) ? 3 : 4; }