void CPlayerSeekBar::SetRange(REFERENCE_TIME rtStart, REFERENCE_TIME rtStop) { if (rtStart < rtStop) { if (m_rtStart != rtStart || m_rtStop != rtStop) { m_rtStart = rtStart; m_rtStop = rtStop; auto hasChapters = [&]() { CAutoLock lock(&m_csChapterBag); return m_pChapterBag && m_pChapterBag->ChapGetCount(); }; if (!m_bHasDuration || hasChapters()) { Invalidate(); } m_bHasDuration = true; } } else { m_rtStart = 0; m_rtStop = 0; if (m_bHasDuration) { m_bHasDuration = false; HideToolTip(); if (DraggingThumb()) { ReleaseCapture(); KillTimer(TIMER_HOVER_CAPTURED); } Invalidate(); } } }
void CPlayerSeekBar::OnTimer(UINT_PTR nIDEvent) { CPoint point; VERIFY(GetCursorPos(&point)); ScreenToClient(&point); switch (nIDEvent) { case TIMER_SHOWHIDE_TOOLTIP: if (m_tooltipState == TOOLTIP_TRIGGERED && m_bHasDuration) { m_tooltipPoint = point; UpdateToolTipText(); m_tooltip.SendMessage(TTM_TRACKACTIVATE, TRUE, (LPARAM)&m_ti); UpdateToolTipPosition(); m_tooltipState = TOOLTIP_VISIBLE; VERIFY(SetTimer(TIMER_SHOWHIDE_TOOLTIP, TOOLTIP_HIDE_TIMEOUT, nullptr)); } else if (m_tooltipState == TOOLTIP_VISIBLE) { HideToolTip(); ASSERT(!m_bIgnoreLastTooltipPoint); KillTimer(TIMER_SHOWHIDE_TOOLTIP); } else { KillTimer(TIMER_SHOWHIDE_TOOLTIP); } break; case TIMER_HOVER_CAPTURED: if (DraggingThumb() && (!m_bHovered || m_rtHoverPos != m_rtPos)) { m_bHovered = true; m_rtHoverPos = m_rtPos; m_hoverPoint = point; SyncVideoToThumb(); } KillTimer(TIMER_HOVER_CAPTURED); break; default: ASSERT(FALSE); } }
void CPlayerSeekBar::SetPos(REFERENCE_TIME rtPos) { if (DraggingThumb()) { return; } SyncThumbToVideo(rtPos); }
void CPlayerSeekBar::OnMouseMove(UINT nFlags, CPoint point) { if (DraggingThumb() && (nFlags & MK_LBUTTON)) { MoveThumb(point); VERIFY(SetTimer(TIMER_HOVER_CAPTURED, HOVER_CAPTURED_TIMEOUT, nullptr)); } if (AfxGetAppSettings().fUseTimeTooltip) { UpdateTooltip(point); } }
void CPlayerSeekBar::OnLButtonUp(UINT nFlags, CPoint point) { if (DraggingThumb()) { ReleaseCapture(); KillTimer(TIMER_HOVER_CAPTURED); if (!m_bHovered || (!CMouse::PointEqualsImprecise(point.x, m_hoverPoint.x) && m_rtPos != m_rtHoverPos)) { SyncVideoToThumb(); } } }
void CPlayerSeekBar::OnXButtonDown(UINT nFlags, UINT nButton, CPoint point) { UNREFERENCED_PARAMETER(nFlags); UNREFERENCED_PARAMETER(point); // do medium jumps when clicking mouse navigation buttons on the seekbar // if not dragging the seekbar thumb if (!DraggingThumb()) { switch (nButton) { case XBUTTON1: SendMessage(WM_COMMAND, ID_PLAY_SEEKBACKWARDMED); break; case XBUTTON2: SendMessage(WM_COMMAND, ID_PLAY_SEEKFORWARDMED); break; } } }
void CPlayerSeekBar::SetRange(REFERENCE_TIME rtStart, REFERENCE_TIME rtStop) { if (rtStart < rtStop) { m_rtStart = rtStart; m_rtStop = rtStop; if (!m_bHasDuration) { m_bHasDuration = true; Invalidate(); } } else { m_rtStart = 0; m_rtStop = 0; if (m_bHasDuration) { m_bHasDuration = false; HideToolTip(); if (DraggingThumb()) { ReleaseCapture(); KillTimer(TIMER_HOVER_CAPTURED); } Invalidate(); } } }