MCPcopy Create free account
hub / github.com/Serial-Studio/Serial-Studio / cascadeLayout

Method cascadeLayout

app/src/UI/WindowManager.cpp:963–1053  ·  view source on GitHub ↗

* @brief Arranges windows using a macOS-inspired smart cascade layout. */

Source from the content-addressed store, hash-verified

961 * @brief Arranges windows using a macOS-inspired smart cascade layout.
962 */
963void UI::WindowManager::cascadeLayout()
964{
965 const int canvasW = static_cast<int>(width());
966 const int canvasH = static_cast<int>(height());
967
968 if (canvasW <= 0 || canvasH <= 0)
969 return;
970
971 if (anyWindowMaximized(m_windows))
972 return;
973
974 QList<QQuickItem*> visibleWindows;
975 for (int id : std::as_const(m_windowOrder)) {
976 auto* win = m_windows.value(id);
977 if (win && win->state() == "normal")
978 visibleWindows.append(win);
979 }
980
981 if (visibleWindows.isEmpty())
982 return;
983
984 const int margin = 8;
985 const int cascadeOffsetX = 26;
986 const int cascadeOffsetY = 26;
987
988 const int availableW = canvasW - 2 * margin;
989 const int availableH = canvasH - 2 * margin;
990
991 for (int i = 0; i < visibleWindows.size(); ++i) {
992 QQuickItem* win = visibleWindows[i];
993 if (!win)
994 continue;
995
996 int minW = qMax(static_cast<int>(win->implicitWidth()), 200);
997 int minH = qMax(static_cast<int>(win->implicitHeight()), 150);
998
999 int winW = qMax(minW, availableW * 55 / 100);
1000 int winH = qMax(minH, availableH * 60 / 100);
1001
1002 winW = qMin(winW, availableW);
1003 winH = qMin(winH, availableH);
1004
1005 int baseX = margin + (availableW - winW) / 2;
1006 int baseY = margin + (availableH - winH) / 2;
1007
1008 int offsetX = i * cascadeOffsetX;
1009 int offsetY = i * cascadeOffsetY;
1010
1011 int wrapCount = 0;
1012 while (baseY + offsetY + winH > canvasH - margin && wrapCount < 10) {
1013 offsetY -= (availableH - winH);
1014 offsetX += cascadeOffsetX * 2;
1015 wrapCount++;
1016 }
1017
1018 while (baseX + offsetX + winW > canvasW - margin && wrapCount < 20) {
1019 offsetX -= (availableW - winW);
1020 wrapCount++;

Callers

nothing calls this directly

Calls 5

anyWindowMaximizedFunction · 0.85
isEmptyMethod · 0.80
valueMethod · 0.45
appendMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected