void UIMouseHandler::releaseMouse() { /* Do not try to release mouse if its released already: */ if (!uisession()->isMouseCaptured()) return; /* If such viewport exists: */ if (m_viewports.contains(m_iMouseCaptureViewIndex)) { /* Store mouse-capturing state value: */ uisession()->setMouseCaptured(false); /* Return the cursor to where it was when we captured it: */ QCursor::setPos(m_capturedMousePos); #ifdef Q_WS_WIN /* Update mouse clipping: */ updateMouseCursorClipping(); #elif defined(Q_WS_MAC) /* Releasing grabbed mouse from that view: */ ::darwinMouseRelease(m_viewports[m_iMouseCaptureViewIndex]); #else /* Q_WS_MAC */ /* Releasing grabbed mouse from that view: */ m_viewports[m_iMouseCaptureViewIndex]->releaseMouse(); #endif /* !Q_WS_MAC */ /* Reset mouse-capture index: */ m_iMouseCaptureViewIndex = -1; /* Emit signal if required: */ emit mouseStateChanged(mouseState()); } }
/* Machine state-change handler: */ void UIMouseHandler::sltMachineStateChanged() { /* Get machine state: */ KMachineState state = uisession()->machineState(); /* Handle particular machine states: */ switch (state) { case KMachineState_Paused: case KMachineState_TeleportingPausedVM: case KMachineState_Stuck: { /* Release the mouse: */ releaseMouse(); break; } default: break; } /* Recall reminder about paused VM input * if we are not in paused VM state already: */ if (machineLogic()->activeMachineWindow() && state != KMachineState_Paused && state != KMachineState_TeleportingPausedVM) popupCenter().forgetAboutPausedVMInput(machineLogic()->activeMachineWindow()); // TODO: Is it really required? /* Notify all listeners: */ emit mouseStateChanged(mouseState()); }
void PhotoCropBox::mousePressEvent(QMouseEvent *e) { if (e->button() != Qt::LeftButton) return LayeredWidget::mousePressEvent(e); _downState = mouseState(e->pos()); _fromposx = e->pos().x(); _fromposy = e->pos().y(); _fromcropx = _cropx; _fromcropy = _cropy; _fromcropw = _cropw; return LayeredWidget::mousePressEvent(e); }
void UIMouseHandler::captureMouse(ulong uScreenId) { /* Do not try to capture mouse if its captured already: */ if (uisession()->isMouseCaptured()) return; /* If such viewport exists: */ if (m_viewports.contains(uScreenId)) { /* Store mouse-capturing state value: */ uisession()->setMouseCaptured(true); /* Memorize the index of machine-view-viewport captured mouse: */ m_iMouseCaptureViewIndex = uScreenId; /* Memorize the host position where the cursor was captured: */ m_capturedMousePos = QCursor::pos(); /* Acquiring visible viewport rectangle in global coodrinates: */ QRect visibleRectangle = m_viewports[m_iMouseCaptureViewIndex]->visibleRegion().boundingRect(); QPoint visibleRectanglePos = m_views[m_iMouseCaptureViewIndex]->mapToGlobal(m_viewports[m_iMouseCaptureViewIndex]->pos()); visibleRectangle.translate(visibleRectanglePos); visibleRectangle = visibleRectangle.intersected(QApplication::desktop()->availableGeometry()); #ifdef Q_WS_WIN /* Move the mouse to the center of the visible area: */ m_lastMousePos = visibleRectangle.center(); QCursor::setPos(m_lastMousePos); /* Update mouse clipping: */ updateMouseCursorClipping(); #elif defined (Q_WS_MAC) /* Grab all mouse events: */ ::darwinMouseGrab(m_viewports[m_iMouseCaptureViewIndex]); #else /* Q_WS_MAC */ /* Remember current mouse position: */ m_lastMousePos = QCursor::pos(); /* Grab all mouse events: */ m_viewports[m_iMouseCaptureViewIndex]->grabMouse(); #endif /* !Q_WS_MAC */ /* Switch guest mouse to the relative mode: */ CMouse mouse = session().GetConsole().GetMouse(); mouse.PutMouseEvent(0, 0, 0, 0, 0); /* Emit signal if required: */ emit mouseStateChanged(mouseState()); } }
/* Machine state-change handler: */ void UIMouseHandler::sltMachineStateChanged() { /* Get machine state: */ KMachineState state = uisession()->machineState(); /* Handle particular machine states: */ switch (state) { case KMachineState_Paused: case KMachineState_TeleportingPausedVM: case KMachineState_Stuck: { /* Release the mouse: */ releaseMouse(); break; } default: break; } /* Notify all listeners: */ emit mouseStateChanged(mouseState()); }
void PhotoCropBox::mouseMoveEvent(QMouseEvent *e) { if (_downState && !(e->buttons() & Qt::LeftButton)) { mouseReleaseEvent(e); } if (_downState) { if (_downState == 1) { int32 dx = e->pos().x() - _fromposx, dy = e->pos().y() - _fromposy, d = (dx < dy) ? dx : dy; if (_fromcropx + d < 0) { d = -_fromcropx; } if (_fromcropy + d < 0) { d = -_fromcropy; } if (_fromcropw - d < st::cropMinSize) { d = _fromcropw - st::cropMinSize; } if (_cropx != _fromcropx + d || _cropy != _fromcropy + d || _cropw != _fromcropw - d) { _cropx = _fromcropx + d; _cropy = _fromcropy + d; _cropw = _fromcropw - d; update(); } } else if (_downState == 2) { int32 dx = _fromposx - e->pos().x(), dy = e->pos().y() - _fromposy, d = (dx < dy) ? dx : dy; if (_fromcropx + _fromcropw - d > _thumbw) { d = _fromcropx + _fromcropw - _thumbw; } if (_fromcropy + d < 0) { d = -_fromcropy; } if (_fromcropw - d < st::cropMinSize) { d = _fromcropw - st::cropMinSize; } if (_cropy != _fromcropy + d || _cropw != _fromcropw - d) { _cropy = _fromcropy + d; _cropw = _fromcropw - d; update(); } } else if (_downState == 3) { int32 dx = _fromposx - e->pos().x(), dy = _fromposy - e->pos().y(), d = (dx < dy) ? dx : dy; if (_fromcropx + _fromcropw - d > _thumbw) { d = _fromcropx + _fromcropw - _thumbw; } if (_fromcropy + _fromcropw - d > _thumbh) { d = _fromcropy + _fromcropw - _thumbh; } if (_fromcropw - d < st::cropMinSize) { d = _fromcropw - st::cropMinSize; } if (_cropw != _fromcropw - d) { _cropw = _fromcropw - d; update(); } } else if (_downState == 4) { int32 dx = e->pos().x() - _fromposx, dy = _fromposy - e->pos().y(), d = (dx < dy) ? dx : dy; if (_fromcropx + d < 0) { d = -_fromcropx; } if (_fromcropy + _fromcropw - d > _thumbh) { d = _fromcropy + _fromcropw - _thumbh; } if (_fromcropw - d < st::cropMinSize) { d = _fromcropw - st::cropMinSize; } if (_cropx != _fromcropx + d || _cropw != _fromcropw - d) { _cropx = _fromcropx + d; _cropw = _fromcropw - d; update(); } } else if (_downState == 5) { int32 dx = e->pos().x() - _fromposx, dy = e->pos().y() - _fromposy; if (_fromcropx + dx < 0) { dx = -_fromcropx; } else if (_fromcropx + _fromcropw + dx > _thumbw) { dx = _thumbw - _fromcropx - _fromcropw; } if (_fromcropy + dy < 0) { dy = -_fromcropy; } else if (_fromcropy + _fromcropw + dy > _thumbh) { dy = _thumbh - _fromcropy - _fromcropw; } if (_cropx != _fromcropx + dx || _cropy != _fromcropy + dy) { _cropx = _fromcropx + dx; _cropy = _fromcropy + dy; update(); } } } int32 cursorState = _downState ? _downState : mouseState(e->pos()); QCursor cur(style::cur_default); if (cursorState == 1 || cursorState == 3) { cur = style::cur_sizefdiag; } else if (cursorState == 2 || cursorState == 4) { cur = style::cur_sizebdiag; } else if (cursorState == 5) { cur = style::cur_sizeall; } setCursor(cur); }