mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-09-24 23:31:36 +08:00
UI: Use rect intersection test for validating position
Instead of checking to see if the window's position is valid, check to see if the rectangles of the window and the monitor intersect via a rectangle intersection test.
This commit is contained in:
+7
-5
@@ -1518,17 +1518,19 @@ bool GetClosestUnusedFileName(std::string &path, const char *extension)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WindowPositionValid(int x, int y)
|
||||
bool WindowPositionValid(QRect rect)
|
||||
{
|
||||
vector<MonitorInfo> monitors;
|
||||
GetMonitors(monitors);
|
||||
|
||||
for (auto &monitor : monitors) {
|
||||
int br_x = monitor.x + monitor.cx;
|
||||
int br_y = monitor.y + monitor.cy;
|
||||
int left = int(monitor.x);
|
||||
int top = int(monitor.y);
|
||||
int right = left + int(monitor.cx);
|
||||
int bottom = top + int(monitor.cy);
|
||||
|
||||
if (x >= monitor.x && x < br_x &&
|
||||
y >= monitor.y && y < br_y)
|
||||
if ((rect.left() - right) < 0 && (left - rect.right()) < 0 &&
|
||||
(rect.top() - bottom) < 0 && (top - rect.bottom()) < 0)
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user