diff --git a/Source/Project64/UserInterface/Debugger/Debugger-CPULogView.cpp b/Source/Project64/UserInterface/Debugger/Debugger-CPULogView.cpp index 91dff7693..316a5b420 100644 --- a/Source/Project64/UserInterface/Debugger/Debugger-CPULogView.cpp +++ b/Source/Project64/UserInterface/Debugger/Debugger-CPULogView.cpp @@ -195,14 +195,14 @@ LRESULT CDebugCPULogView::OnScroll(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, switch (type) { - case SB_LINEUP: newPos = scrollInfo.nPos - 1; break; - case SB_LINEDOWN: newPos = scrollInfo.nPos + 1; break; + case SB_LINEUP: newPos = max(scrollInfo.nMin, scrollInfo.nPos - 1); break; + case SB_LINEDOWN: newPos = min(scrollInfo.nMax, scrollInfo.nPos + 1); break; case SB_THUMBTRACK: newPos = scrollInfo.nTrackPos; break; default: return 0; } m_LogStartIndex = newPos; - ::SetScrollPos(hScrollbar, SB_CTL, m_LogStartIndex, TRUE); + ::SetScrollPos(hScrollbar, SB_CTL, newPos, TRUE); if (scrlId == IDC_SCRL_BAR) { @@ -218,9 +218,24 @@ void CDebugCPULogView::InterceptMouseWheel(WPARAM wParam, LPARAM lParam) if (MouseHovering(IDC_CPU_LIST) || MouseHovering(IDC_SCRL_BAR)) { + int scrlMin, scrlMax; + m_Scrollbar.GetScrollRange(&scrlMin, &scrlMax); + int scrollPos = m_Scrollbar.GetScrollPos(); - m_LogStartIndex = scrollPos + nScroll; - m_Scrollbar.SetScrollPos(m_LogStartIndex); + int newPos = scrollPos + nScroll; + + if (newPos < scrlMin) + { + newPos = scrlMin; + } + else if (newPos > scrlMax) + { + newPos = scrlMax; + } + + m_LogStartIndex = newPos; + m_Scrollbar.SetScrollPos(newPos, true); + RefreshList(false); } } @@ -283,6 +298,7 @@ void CDebugCPULogView::RefreshList(bool bUpdateBuffer) { m_LogStartIndex = scrollRangeMax; m_Scrollbar.SetScrollPos(m_LogStartIndex, true); + ShowRegStates(count - 1); } size_t start = m_Scrollbar.GetScrollPos(); @@ -324,8 +340,6 @@ void CDebugCPULogView::RefreshList(bool bUpdateBuffer) } m_CPUListView.SetRedraw(TRUE); - - ShowRegStates(count - 1); } void CDebugCPULogView::ShowRegStates(size_t stateIndex) diff --git a/Source/Project64/UserInterface/Debugger/Debugger.cpp b/Source/Project64/UserInterface/Debugger/Debugger.cpp index 9eb398de5..622733f14 100644 --- a/Source/Project64/UserInterface/Debugger/Debugger.cpp +++ b/Source/Project64/UserInterface/Debugger/Debugger.cpp @@ -658,6 +658,11 @@ void CDebuggerUI::HandleCartToRamDMA(void) // Called from the interpreter core at the beginning of every CPU step void CDebuggerUI::CPUStepStarted() { + if (isStepping() && bCPULoggingEnabled()) + { + Debug_RefreshCPULogWindow(); + } + uint32_t pc = g_Reg->m_PROGRAM_COUNTER; COpInfo opInfo(R4300iOp::m_Opcode); @@ -720,11 +725,6 @@ void CDebuggerUI::CPUStep() if (bCPULoggingEnabled()) { m_CPULog->PushState(); - - if (isStepping()) - { - Debug_RefreshCPULogWindow(); - } } }