// SPDX-License-Identifier: MIT #include "previewplacement.h" #include #include QPoint previewPosition(const QRect &button, const QRect &screen, const QSize &preview, int panelLocation) { const QRect anchor = button.isValid() ? button : screen; const int centerX = anchor.x() + (anchor.width() - preview.width()) / 2; const int centerY = anchor.y() + (anchor.height() - preview.height()) / 2; QPoint result; switch (panelLocation) { case Plasma::Types::TopEdge: result = {centerX, button.isValid() ? button.bottom() + 1 : screen.top()}; break; case Plasma::Types::LeftEdge: result = {button.isValid() ? button.right() + 1 : screen.left(), centerY}; break; case Plasma::Types::RightEdge: result = {button.isValid() ? button.left() - preview.width() : screen.right() + 1 - preview.width(), centerY}; break; default: result = {centerX, button.isValid() ? button.top() - preview.height() : screen.bottom() + 1 - preview.height()}; break; } result.setX(std::clamp(result.x(), screen.left(), std::max(screen.left(), screen.right() + 1 - preview.width()))); result.setY(std::clamp(result.y(), screen.top(), std::max(screen.top(), screen.bottom() + 1 - preview.height()))); return result; }