* Debugger: fixed Cycles counter reset when loading an earlier savestate
* Taseditor: small cleanup because of a failed experiment with different "Follow cursor" behavior
This commit is contained in:
parent
405c20d871
commit
4f0c7474df
|
@ -894,7 +894,7 @@ void UpdateDebugger(bool jump_to_pc)
|
|||
SetDlgItemText(hDebug, IDC_DEBUGGER_VAL_PPUPIXEL, str2);
|
||||
|
||||
// update counters
|
||||
uint64 counter_value = timestampbase + (uint64)timestamp - total_cycles_base;
|
||||
int64 counter_value = timestampbase + (uint64)timestamp - total_cycles_base;
|
||||
if (counter_value < 0) // sanity check
|
||||
{
|
||||
ResetDebugStatisticsCounters();
|
||||
|
@ -902,7 +902,7 @@ void UpdateDebugger(bool jump_to_pc)
|
|||
}
|
||||
sprintf(str, "%llu", counter_value);
|
||||
SetDlgItemText(hDebug, IDC_DEBUGGER_VAL_CYCLES_COUNT, str);
|
||||
counter_value = timestampbase + (long)timestamp - delta_cycles_base;
|
||||
counter_value = timestampbase + (uint64)timestamp - delta_cycles_base;
|
||||
if (counter_value < 0) // sanity check
|
||||
{
|
||||
ResetDebugStatisticsCounters();
|
||||
|
|
|
@ -74,7 +74,7 @@ using namespace std;
|
|||
#define HIGHLIGHT_ACTIVITY_NUM_COLORS 16
|
||||
#define PREVIOUS_VALUE_UNDEFINED -1
|
||||
|
||||
COLORREF highlightActivityColors[HIGHLIGHT_ACTIVITY_NUM_COLORS] = { 0x0, 0x005252, 0x227322, 0x768046, 0x99641f, 0xbf0003, 0xe00056, 0xd90090, 0xcc00b4, 0x8500ba, 0x7100d4, 0x1c00d1, 0x003ce0, 0x0069d9, 0x008ae5, 0x4ea2de };
|
||||
COLORREF highlightActivityColors[HIGHLIGHT_ACTIVITY_NUM_COLORS] = { 0x0, 0x004f4f, 0x1d611d, 0x757241, 0x994d00, 0xc70003, 0xe50058, 0xd90094, 0xcc00b4, 0x9400bd, 0x7e00d9, 0x0000cf, 0x0034e0, 0x0064d6, 0x0086e5, 0x4ea2de };
|
||||
|
||||
string memviewhelp = "HexEditor"; //Hex Editor Help Page
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ LRESULT APIENTRY markerDragBoxWndProc(HWND hwnd, UINT message, WPARAM wParam, LP
|
|||
char pianoRollSaveID[PIANO_ROLL_ID_LEN] = "PIANO_ROLL";
|
||||
char pianoRollSkipSaveID[PIANO_ROLL_ID_LEN] = "PIANO_ROLX";
|
||||
//COLORREF hotChangesColors[16] = { 0x0, 0x495249, 0x666361, 0x855a45, 0xa13620, 0xbd003f, 0xd6006f, 0xcc008b, 0xba00a1, 0x8b00ad, 0x5c00bf, 0x0003d1, 0x0059d6, 0x0077d9, 0x0096db, 0x00aede };
|
||||
COLORREF hotChangesColors[16] = { 0x0, 0x005252, 0x227322, 0x768046, 0x99641f, 0xbf0003, 0xe00056, 0xd90090, 0xcc00b4, 0x8500ba, 0x7100d4, 0x1c00d1, 0x003ce0, 0x0069d9, 0x008ae5, 0x4ea2de };
|
||||
COLORREF hotChangesColors[16] = { 0x0, 0x004f4f, 0x1d611d, 0x757241, 0x994d00, 0xc70003, 0xe50058, 0xd90094, 0xcc00b4, 0x9400bd, 0x7e00d9, 0x0000cf, 0x0034e0, 0x0064d6, 0x0086e5, 0x4ea2de };
|
||||
COLORREF headerLightsColors[11] = { 0x0, 0x007313, 0x009100, 0x1daf00, 0x42c700, 0x65d900, 0x91e500, 0xb0f000, 0xdaf700, 0xf0fc7c, 0xfcffba };
|
||||
|
||||
char markerDragBoxClassName[] = "MarkerDragBox";
|
||||
|
@ -417,6 +417,7 @@ void PIANO_ROLL::free()
|
|||
void PIANO_ROLL::reset()
|
||||
{
|
||||
mustRedrawList = mustCheckItemUnderMouse = true;
|
||||
playbackCursorOffset = 0;
|
||||
shiftHeld = ctrlHeld = altHeld = false;
|
||||
shiftTimer = ctrlTimer = shiftActionsÑount = ctrlActionsÑount = 0;
|
||||
nextHeaderUpdateTime = headerItemUnderMouse = 0;
|
||||
|
@ -455,32 +456,6 @@ void PIANO_ROLL::update()
|
|||
{
|
||||
updateLinesCount();
|
||||
|
||||
if (mustCheckItemUnderMouse)
|
||||
{
|
||||
// find row and column
|
||||
POINT p;
|
||||
if (GetCursorPos(&p))
|
||||
{
|
||||
ScreenToClient(hwndList, &p);
|
||||
// perform hit test
|
||||
LVHITTESTINFO info;
|
||||
info.pt.x = p.x;
|
||||
info.pt.y = p.y;
|
||||
ListView_SubItemHitTest(hwndList, &info);
|
||||
rowUnderMouse = info.iItem;
|
||||
realRowUnderMouse = rowUnderMouse;
|
||||
if (realRowUnderMouse < 0)
|
||||
{
|
||||
realRowUnderMouse = ListView_GetTopIndex(hwndList) + (p.y - listTopMargin) / listRowHeight;
|
||||
if (realRowUnderMouse < 0) realRowUnderMouse--;
|
||||
}
|
||||
columnUnderMouse = info.iSubItem;
|
||||
}
|
||||
// and don't check until mouse moves or Piano Roll scrolls
|
||||
mustCheckItemUnderMouse = false;
|
||||
taseditorWindow.mustUpdateMouseCursor = true;
|
||||
}
|
||||
|
||||
// update state of Shift/Ctrl/Alt holding
|
||||
bool last_shift_held = shiftHeld, last_ctrl_held = ctrlHeld, last_alt_held = altHeld;
|
||||
shiftHeld = (GetAsyncKeyState(VK_SHIFT) < 0);
|
||||
|
@ -522,6 +497,32 @@ void PIANO_ROLL::update()
|
|||
ctrlTimer = clock();
|
||||
}
|
||||
|
||||
if (mustCheckItemUnderMouse)
|
||||
{
|
||||
// find row and column
|
||||
POINT p;
|
||||
if (GetCursorPos(&p))
|
||||
{
|
||||
ScreenToClient(hwndList, &p);
|
||||
// perform hit test
|
||||
LVHITTESTINFO info;
|
||||
info.pt.x = p.x;
|
||||
info.pt.y = p.y;
|
||||
ListView_SubItemHitTest(hwndList, &info);
|
||||
rowUnderMouse = info.iItem;
|
||||
realRowUnderMouse = rowUnderMouse;
|
||||
if (realRowUnderMouse < 0)
|
||||
{
|
||||
realRowUnderMouse = ListView_GetTopIndex(hwndList) + (p.y - listTopMargin) / listRowHeight;
|
||||
if (realRowUnderMouse < 0) realRowUnderMouse--;
|
||||
}
|
||||
columnUnderMouse = info.iSubItem;
|
||||
}
|
||||
// and don't check until mouse moves or Piano Roll scrolls
|
||||
mustCheckItemUnderMouse = false;
|
||||
taseditorWindow.mustUpdateMouseCursor = true;
|
||||
}
|
||||
|
||||
// update dragging
|
||||
if (dragMode != DRAG_MODE_NONE)
|
||||
{
|
||||
|
@ -912,7 +913,6 @@ void PIANO_ROLL::updateLinesCount()
|
|||
bool PIANO_ROLL::isLineVisible(int frame)
|
||||
{
|
||||
int top = ListView_GetTopIndex(hwndList);
|
||||
// in fourscore there's horizontal scrollbar which takes one row for itself
|
||||
if (frame >= top && frame < top + ListView_GetCountPerPage(hwndList))
|
||||
return true;
|
||||
return false;
|
||||
|
@ -920,18 +920,40 @@ bool PIANO_ROLL::isLineVisible(int frame)
|
|||
|
||||
void PIANO_ROLL::centerListAroundLine(int rowIndex)
|
||||
{
|
||||
int list_items = ListView_GetCountPerPage(hwndList);
|
||||
int lower_border = (list_items - 1) / 2;
|
||||
int upper_border = (list_items - 1) - lower_border;
|
||||
int index = rowIndex + lower_border;
|
||||
int numItemsPerPage = ListView_GetCountPerPage(hwndList);
|
||||
int lowerBorder = (numItemsPerPage - 1) / 2;
|
||||
int upperBorder = (numItemsPerPage - 1) - lowerBorder;
|
||||
int index = rowIndex + lowerBorder;
|
||||
if (index >= currMovieData.getNumRecords())
|
||||
index = currMovieData.getNumRecords()-1;
|
||||
ListView_EnsureVisible(hwndList, index, false);
|
||||
index = rowIndex - upper_border;
|
||||
index = rowIndex - upperBorder;
|
||||
if (index < 0)
|
||||
index = 0;
|
||||
ListView_EnsureVisible(hwndList, index, false);
|
||||
}
|
||||
void PIANO_ROLL::setListTopRow(int rowIndex)
|
||||
{
|
||||
ListView_Scroll(hwndList, 0, listRowHeight * (rowIndex - ListView_GetTopIndex(hwndList)));
|
||||
}
|
||||
|
||||
void PIANO_ROLL::recalculatePlaybackCursorOffset()
|
||||
{
|
||||
int frame = playback.getPauseFrame();
|
||||
if (frame < 0)
|
||||
frame = currFrameCounter;
|
||||
|
||||
playbackCursorOffset = frame - ListView_GetTopIndex(hwndList);
|
||||
if (playbackCursorOffset < 0)
|
||||
{
|
||||
playbackCursorOffset = 0;
|
||||
} else
|
||||
{
|
||||
int numItemsPerPage = ListView_GetCountPerPage(hwndList);
|
||||
if (playbackCursorOffset > numItemsPerPage - 1)
|
||||
playbackCursorOffset = numItemsPerPage - 1;
|
||||
}
|
||||
}
|
||||
|
||||
void PIANO_ROLL::followPlaybackCursor()
|
||||
{
|
||||
|
@ -947,6 +969,14 @@ void PIANO_ROLL::followPlaybackCursorIfNeeded(bool followPauseframe)
|
|||
ListView_EnsureVisible(hwndList, playback.getPauseFrame(), FALSE);
|
||||
}
|
||||
}
|
||||
void PIANO_ROLL::updatePlaybackCursorPositionInPianoRoll()
|
||||
{
|
||||
if (taseditorConfig.followPlaybackCursor)
|
||||
{
|
||||
if (playback.getPauseFrame() < 0)
|
||||
setListTopRow(currFrameCounter - playbackCursorOffset);
|
||||
}
|
||||
}
|
||||
void PIANO_ROLL::followPauseframe()
|
||||
{
|
||||
if (playback.getPauseFrame() >= 0)
|
||||
|
|
|
@ -166,8 +166,11 @@ public:
|
|||
void updateLinesCount();
|
||||
bool isLineVisible(int frame);
|
||||
|
||||
void recalculatePlaybackCursorOffset();
|
||||
|
||||
void followPlaybackCursor();
|
||||
void followPlaybackCursorIfNeeded(bool followPauseframe = true);
|
||||
void updatePlaybackCursorPositionInPianoRoll();
|
||||
void followPauseframe();
|
||||
void followUndoHint();
|
||||
void followSelection();
|
||||
|
@ -223,6 +226,7 @@ public:
|
|||
|
||||
private:
|
||||
void centerListAroundLine(int rowIndex);
|
||||
void setListTopRow(int rowIndex);
|
||||
|
||||
void handlePlaybackCursorDragging();
|
||||
void finishDrag();
|
||||
|
@ -232,6 +236,7 @@ private:
|
|||
int nextHeaderUpdateTime;
|
||||
|
||||
bool mustRedrawList;
|
||||
int playbackCursorOffset;
|
||||
|
||||
HMENU hrMenu;
|
||||
|
||||
|
|
|
@ -152,7 +152,7 @@ void PLAYBACK::update()
|
|||
bookmarks.redrawChangedBookmarks(currFrameCounter);
|
||||
lastCursorPos = currFrameCounter;
|
||||
// follow the Playback cursor, but in case of seeking don't follow it
|
||||
pianoRoll.followPlaybackCursorIfNeeded(false);
|
||||
pianoRoll.followPlaybackCursorIfNeeded(false); //pianoRoll.updatePlaybackCursorPositionInPianoRoll(); // an unfinished experiment
|
||||
// enforce redrawing now
|
||||
UpdateWindow(pianoRoll.hwndList);
|
||||
// lazy update of "Playback's Marker text"
|
||||
|
|
|
@ -841,6 +841,7 @@ BOOL CALLBACK TASEditorWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPara
|
|||
break;
|
||||
case LVN_ENDSCROLL:
|
||||
pianoRoll.mustCheckItemUnderMouse = true;
|
||||
//pianoRoll.recalculatePlaybackCursorOffset(); // an unfinished experiment
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -500,7 +500,13 @@ void FCEUD_TraceInstruction(uint8 *opcode, int size)
|
|||
}
|
||||
if (logging_options & LOG_CYCLES_COUNT)
|
||||
{
|
||||
sprintf(str_temp, "c%-11llu ", (timestampbase + (uint64)timestamp - total_cycles_base));
|
||||
int64 counter_value = timestampbase + (uint64)timestamp - total_cycles_base;
|
||||
if (counter_value < 0) // sanity check
|
||||
{
|
||||
ResetDebugStatisticsCounters();
|
||||
counter_value = 0;
|
||||
}
|
||||
sprintf(str_temp, "c%-11llu ", counter_value);
|
||||
strcat(str_result, str_temp);
|
||||
}
|
||||
if (logging_options & LOG_INSTRUCTIONS_COUNT)
|
||||
|
|
|
@ -4364,7 +4364,13 @@ static int debugger_hitbreakpoint(lua_State *L)
|
|||
// debugger.getcyclescount()
|
||||
static int debugger_getcyclescount(lua_State *L)
|
||||
{
|
||||
lua_pushinteger(L, (timestampbase + (uint64)timestamp - total_cycles_base));
|
||||
int64 counter_value = timestampbase + (uint64)timestamp - total_cycles_base;
|
||||
if (counter_value < 0) // sanity check
|
||||
{
|
||||
ResetDebugStatisticsCounters();
|
||||
counter_value = 0;
|
||||
}
|
||||
lua_pushinteger(L, counter_value);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue