bool CMouse::SelectCursor(const CPoint& screenPoint, const CPoint& clientPoint, UINT nFlags) { const auto& s = AfxGetAppSettings(); if (m_bD3DFS && m_pMainFrame->m_OSD.OnMouseMove(nFlags, clientPoint)) { StopMouseHider(); m_cursor = Cursor::HAND; return true; } if (m_pMainFrame->GetLoadState() == MLS::LOADED && m_pMainFrame->GetPlaybackMode() == PM_DVD && (m_pMainFrame->IsD3DFullScreenMode() ^ m_bD3DFS) == 0 && (m_pMainFrame->m_pDVDC->SelectAtPosition(GetVideoPoint(clientPoint)) == S_OK)) { StopMouseHider(); m_cursor = Cursor::HAND; return true; } bool bMouseButtonDown = !!(nFlags & ~(MK_CONTROL | MK_SHIFT)); bool bHidden = (m_cursor == Cursor::NONE); bool bHiddenAndMoved = bHidden && !PointEqualsImprecise(screenPoint, m_hideCursorPoint); bool bCanHide = !bMouseButtonDown && (m_pMainFrame->GetLoadState() == MLS::LOADED || m_pMainFrame->m_controls.DelayShowNotLoaded()) && !m_pMainFrame->IsInteractiveVideo() && (m_switchingToFullscreen.first || IsOnFullscreenWindow() || (s.bHideWindowedMousePointer && !(m_pMainFrame->IsD3DFullScreenMode() ^ m_bD3DFS))); if (m_switchingToFullscreen.first) { if (bCanHide && PointEqualsImprecise(screenPoint, m_switchingToFullscreen.second)) { StopMouseHider(); m_cursor = Cursor::NONE; m_hideCursorPoint = screenPoint; return true; } } if (!bHidden || bHiddenAndMoved || !bCanHide) { m_cursor = Cursor::ARROW; if (bCanHide) { if (!m_bMouseHiderStarted || screenPoint != m_mouseHiderStartScreenPoint) { StartMouseHider(screenPoint); } } else if (m_bMouseHiderStarted) { StopMouseHider(); } } return true; }
void CMouse::InternalOnMouseLeave() { StopMouseHider(); m_bTrackingMouseLeave = false; m_cursor = Cursor::ARROW; if (m_bD3DFS) { m_pMainFrame->m_OSD.OnMouseLeave(); } }
void CMouse::ResetToBlankState() { StopMouseHider(); m_bLeftDown = false; m_bTrackingMouseLeave = false; m_drag = Drag::NO_DRAG; m_cursor = Cursor::ARROW; m_switchingToFullscreen.first = false; }
void CMouse::MouseHiderCallback() { ASSERT(!m_pMainFrame->IsInteractiveVideo()); if (GetTickCount() > m_dwMouseHiderStartTick + CURSOR_HIDE_TIMEOUT) { StopMouseHider(); ASSERT(m_cursor != Cursor::NONE); m_cursor = Cursor::NONE; CPoint screenPoint; VERIFY(GetCursorPos(&screenPoint)); m_hideCursorPoint = screenPoint; ::SetCursor(m_cursors[m_cursor]); } }
CMouse::~CMouse() { StopMouseHider(); }
void CMouse::InternalOnMouseLeave() { StopMouseHider(); m_bTrackingMouseLeave = false; m_cursor = Cursor::ARROW; }