TAStudio edits:
-Bugfix: TAStudio was refreshing before autoscrolling to cursor. -Partial fix: Made setting last visible frame more accurate when lag frames are hidden. -Removed a line that set an unused local variable. -Bugfix: Scrolling away from selection with lag frames hidden messed up the display.
This commit is contained in:
parent
f305ca5666
commit
7624a92021
|
@ -560,6 +560,16 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int LastFullyVisibleRow
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
int HalfRow = 0;
|
||||||
|
if ((DrawHeight - ColumnHeight - 3) % CellHeight < CellHeight / 2)
|
||||||
|
HalfRow = 1;
|
||||||
|
return FirstVisibleRow + VisibleRows - HalfRow + CountLagFramesDisplay(VisibleRows);
|
||||||
|
}
|
||||||
|
}
|
||||||
public int LastVisibleRow
|
public int LastVisibleRow
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
@ -569,17 +579,34 @@ namespace BizHawk.Client.EmuHawk
|
||||||
|
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
FirstVisibleRow = Math.Max(value - VisibleRows, 0);
|
int HalfRow = 0;
|
||||||
if (LastVisibleRow != value)
|
if ((DrawHeight - ColumnHeight - 3) % CellHeight < CellHeight / 2)
|
||||||
|
HalfRow = 1;
|
||||||
|
if (LagFramesToHide == 0)
|
||||||
{
|
{
|
||||||
FirstVisibleRow -= (LastVisibleRow - value);
|
FirstVisibleRow = Math.Max(value - (VisibleRows - HalfRow), 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int Last = LastVisibleRow - HalfRow;
|
||||||
|
|
||||||
|
if (Math.Abs(Last - value) > VisibleRows) // Big jump
|
||||||
|
FirstVisibleRow = Math.Max(value - (ExpectedDisplayRange() - HalfRow), 0);
|
||||||
|
else // Small jump
|
||||||
|
FirstVisibleRow -= (Last - value);
|
||||||
|
|
||||||
|
// SuuperW: This can cause an infinite loop, don't have time to debug it right now.
|
||||||
|
//// Now a second re-check, with lagFrames[] updated.
|
||||||
|
//SetLagFramesArray();
|
||||||
|
//if (Math.Abs(LastFullyVisibleRow - value) > LagFramesToHide)
|
||||||
|
// LastVisibleRow = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsVisible(int index)
|
public bool IsVisible(int index)
|
||||||
{
|
{
|
||||||
return (index >= FirstVisibleRow) && (index <= LastVisibleRow);
|
return (index >= FirstVisibleRow) && (index <= LastFullyVisibleRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -596,7 +623,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
return (DrawWidth - ColumnWidth) / CellWidth;
|
return (DrawWidth - ColumnWidth) / CellWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (DrawHeight - ColumnHeight) / CellHeight;
|
return (DrawHeight - ColumnHeight - 3) / CellHeight; // Minus three makes it work
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1064,11 +1091,13 @@ namespace BizHawk.Client.EmuHawk
|
||||||
Color Highlight_Color = new Color();
|
Color Highlight_Color = new Color();
|
||||||
foreach (var cell in SelectedItems)
|
foreach (var cell in SelectedItems)
|
||||||
{
|
{
|
||||||
|
if (cell.RowIndex > LastVisibleRow || cell.RowIndex < FirstVisibleRow)
|
||||||
|
continue;
|
||||||
|
|
||||||
var relativeCell = new Cell
|
var relativeCell = new Cell
|
||||||
{
|
{
|
||||||
RowIndex = cell.RowIndex - FirstVisibleRow,
|
RowIndex = cell.RowIndex - FirstVisibleRow,
|
||||||
Column = cell.Column,
|
Column = cell.Column,
|
||||||
CurrentText = cell.CurrentText
|
|
||||||
};
|
};
|
||||||
relativeCell.RowIndex -= CountLagFramesAbsolute(relativeCell.RowIndex.Value);
|
relativeCell.RowIndex -= CountLagFramesAbsolute(relativeCell.RowIndex.Value);
|
||||||
|
|
||||||
|
@ -1993,13 +2022,13 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
// Count lag frames between FirstDisplayed and given frame index (plus FirstDisplayed)
|
// Count lag frames between FirstDisplayed and given relative frame index
|
||||||
private int CountLagFramesAbsolute(int index)
|
private int CountLagFramesAbsolute(int relativeIndex)
|
||||||
{
|
{
|
||||||
if (QueryFrameLag != null && LagFramesToHide != 0)
|
if (QueryFrameLag != null && LagFramesToHide != 0)
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (int i = 0; i + count <= index; i++)
|
for (int i = 0; i + count <= relativeIndex; i++)
|
||||||
count += lagFrames[i];
|
count += lagFrames[i];
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
|
@ -2067,6 +2096,12 @@ namespace BizHawk.Client.EmuHawk
|
||||||
lagFrames[0] = 0;
|
lagFrames[0] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Number of displayed + hidden frames, if fps is as expected
|
||||||
|
private int ExpectedDisplayRange()
|
||||||
|
{
|
||||||
|
return (VisibleRows + 1) * LagFramesToHide;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Classes
|
#region Classes
|
||||||
|
|
|
@ -30,13 +30,13 @@ namespace BizHawk.Client.EmuHawk
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
RefreshDialog();
|
|
||||||
|
|
||||||
if (TasPlaybackBox.FollowCursor) // TODO: we already refreshed in RefreshDialog now we will do it again, make this more efficient
|
if (TasPlaybackBox.FollowCursor) // TODO: we already refreshed in RefreshDialog now we will do it again, make this more efficient
|
||||||
{
|
{
|
||||||
SetVisibleIndex();
|
SetVisibleIndex();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
RefreshDialog();
|
||||||
|
}
|
||||||
|
|
||||||
public void FastUpdate()
|
public void FastUpdate()
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,7 +25,7 @@ namespace BizHawk.Client.EmuHawk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SuuperW: I changed this to public so that it could be used by MarkerControl.cs
|
// SuuperW: I changed this to public so that it could be used by MarkerControl.cs
|
||||||
public void GoToFrame(int frame)
|
public void GoToFrame(int frame)
|
||||||
{
|
{
|
||||||
// If past greenzone, emulate and capture states
|
// If past greenzone, emulate and capture states
|
||||||
|
@ -156,6 +156,6 @@ namespace BizHawk.Client.EmuHawk
|
||||||
public void GoToMarker(TasMovieMarker marker)
|
public void GoToMarker(TasMovieMarker marker)
|
||||||
{
|
{
|
||||||
GoToFrame(marker.Frame);
|
GoToFrame(marker.Frame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue