From e4456347c498bffbda1b4b458482b27014a34fe2 Mon Sep 17 00:00:00 2001 From: Vlad Zagorodniy Date: Sun, 21 Apr 2019 00:52:15 +0300 Subject: [PATCH] Fix corner screen glows that suddenly pop up Summary: Depending on how pointer approaches a screen corner, the maximum distance between two may be smaller than 2 * edgeDistance. This can happen for example when approaching the corner along of any two adjacent screen edges. As a result, the calculated factor can be anywhere between 0 and 0.5 when pointer enters approachGeometry(). This change adjusts calculation of the factor, so it always ranges from 0 to 1 no matter how the pointer approaches corners. Reviewers: #kwin, davidedmundson Reviewed By: #kwin, davidedmundson Subscribers: kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D20707 --- screenedge.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/screenedge.cpp b/screenedge.cpp index e232c21a80..847628da6f 100644 --- a/screenedge.cpp +++ b/screenedge.cpp @@ -616,20 +616,21 @@ void Edge::updateApproaching(const QPoint &point) if (approachGeometry().contains(point)) { int factor = 0; const int edgeDistance = m_edges->cornerOffset(); - // manhattan length for our edge - const int cornerDistance = 2*edgeDistance; + auto cornerDistance = [=](const QPoint &corner) { + return qMax(qAbs(corner.x() - point.x()), qAbs(corner.y() - point.y())); + }; switch (border()) { case ElectricTopLeft: - factor = (point.manhattanLength()<<8) / cornerDistance; + factor = (cornerDistance(approachGeometry().topLeft())<<8) / edgeDistance; break; case ElectricTopRight: - factor = ((point - approachGeometry().topRight()).manhattanLength()<<8) / cornerDistance; + factor = (cornerDistance(approachGeometry().topRight())<<8) / edgeDistance; break; case ElectricBottomRight: - factor = ((point - approachGeometry().bottomRight()).manhattanLength()<<8) / cornerDistance; + factor = (cornerDistance(approachGeometry().bottomRight())<<8) / edgeDistance; break; case ElectricBottomLeft: - factor = ((point - approachGeometry().bottomLeft()).manhattanLength()<<8) / cornerDistance; + factor = (cornerDistance(approachGeometry().bottomLeft())<<8) / edgeDistance; break; case ElectricTop: factor = (qAbs(point.y() - approachGeometry().y())<<8) / edgeDistance;