Changeset 75899 in vbox
- Timestamp:
- Dec 3, 2018 12:43:58 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp
r72692 r75899 953 953 954 954 #ifdef VBOX_WS_WIN 955 /* Bringing mouse to the opposite side to simulate the endless moving: */ 956 957 /* Get visible-viewport-rectangle in global coordinates: */ 955 /* Compose viewport-rectangle in local coordinates: */ 958 956 QRect viewportRectangle = m_mouseCursorClippingRect; 959 /* Get top-left point of full-viewport-rectangle in global coordinates: */960 957 QPoint viewportRectangleGlobalPos = m_views[uScreenId]->mapToGlobal(m_viewports[uScreenId]->pos()); 961 /* Shift visible-viewport-rectangle to local position because relative position is in local coordinates: */962 958 viewportRectangle.translate(-viewportRectangleGlobalPos); 963 959 964 /* Getboundaries: */965 int ix1 = viewportRectangle.left() + 1;966 int iy1 = viewportRectangle.top() + 1;967 int ix2 = viewportRectangle.right() - 1;968 int iy2 = viewportRectangle.bottom() - 1;960 /* Compose boundaries: */ 961 const int iX1 = viewportRectangle.left() + 1; 962 const int iY1 = viewportRectangle.top() + 1; 963 const int iX2 = viewportRectangle.right() - 1; 964 const int iY2 = viewportRectangle.bottom() - 1; 969 965 970 966 /* Simulate infinite movement: */ 971 967 QPoint p = relativePos; 972 if (relativePos.x() == i x1)973 p.setX(i x2 - 1);974 else if (relativePos.x() == i x2)975 p.setX(i x1 + 1);976 if (relativePos.y() == i y1)977 p.setY(i y2 - 1);978 else if (relativePos.y() == i y2)979 p.setY(i y1 + 1);968 if (relativePos.x() == iX1) 969 p.setX(iX2 - 1); 970 else if (relativePos.x() == iX2) 971 p.setX(iX1 + 1); 972 if (relativePos.y() == iY1) 973 p.setY(iY2 - 1); 974 else if (relativePos.y() == iY2) 975 p.setY(iY1 + 1); 980 976 if (p != relativePos) 981 977 { … … 1215 1211 if (uisession()->isMouseCaptured()) 1216 1212 { 1217 /* Get full-viewport-rectangle in local coordinates: */1213 /* Get full-viewport-rectangle in global coordinates: */ 1218 1214 QRect viewportRectangle = m_viewports[m_iMouseCaptureViewIndex]->visibleRegion().boundingRect(); 1219 /* Get top-left point of full-viewport-rectangle in global coordinates: */ 1220 QPoint viewportRectangleGlobalPos = m_views[m_iMouseCaptureViewIndex]->mapToGlobal(m_viewports[m_iMouseCaptureViewIndex]->pos()); 1221 /* Get full-viewport-rectangle in global coordinates: */ 1215 const QPoint viewportRectangleGlobalPos = m_views[m_iMouseCaptureViewIndex]->mapToGlobal(m_viewports[m_iMouseCaptureViewIndex]->pos()); 1222 1216 viewportRectangle.translate(viewportRectangleGlobalPos); 1217 1223 1218 /* Trim full-viewport-rectangle by available geometry: */ 1224 1219 viewportRectangle = viewportRectangle.intersected(gpDesktop->availableGeometry(machineLogic()->machineWindows()[m_iMouseCaptureViewIndex])); 1220 1225 1221 /* Trim partial-viewport-rectangle by top-most windows: */ 1226 QRegion viewportRegion(viewportRectangle); 1227 QRegion topMostRegion(NativeWindowSubsystem::areaCoveredByTopMostWindows()); 1228 viewportRegion -= topMostRegion; 1222 QRegion viewportRegion = QRegion(viewportRectangle) - NativeWindowSubsystem::areaCoveredByTopMostWindows(); 1229 1223 /* Check if partial-viewport-region consists of 1 rectangle: */ 1230 1224 if (viewportRegion.rectCount() > 1) 1231 1225 { 1232 1226 /* Choose the largest rectangle: */ 1233 QVector<QRect> rects = viewportRegion.rects();1234 1227 QRect largestRect; 1235 for (int i = 0; i < rects.size(); ++i)1236 largestRect = largestRect.width() * largestRect.height() < rect s[i].width() * rects[i].height() ? rects[i]: largestRect;1228 foreach (const QRect &rect, viewportRegion.rects()) 1229 largestRect = largestRect.width() * largestRect.height() < rect.width() * rect.height() ? rect : largestRect; 1237 1230 /* Assign the partial-viewport-region to the largest rect: */ 1238 1231 viewportRegion = largestRect; … … 1240 1233 /* Assign the partial-viewport-rectangle to the partial-viewport-region: */ 1241 1234 viewportRectangle = viewportRegion.boundingRect(); 1235 1242 1236 /* Assign the visible-viewport-rectangle to the partial-viewport-rectangle: */ 1243 1237 m_mouseCursorClippingRect = viewportRectangle; 1238 1244 1239 /* Prepare clipping area: */ 1245 RECT rect = { m_mouseCursorClippingRect.left() + 1, m_mouseCursorClippingRect.top() + 1, m_mouseCursorClippingRect.right(), m_mouseCursorClippingRect.bottom() };1240 RECT rect = { viewportRectangle.left() + 1, viewportRectangle.top() + 1, viewportRectangle.right(), viewportRectangle.bottom() }; 1246 1241 ::ClipCursor(&rect); 1247 1242 }
Note:
See TracChangeset
for help on using the changeset viewer.