InputRoll: Cleanup horizontal column calculations.

This commit is contained in:
J.D. Purcell 2020-02-18 09:40:01 -05:00
parent 61fff4cbce
commit ada40bbdc7
2 changed files with 16 additions and 30 deletions

View File

@ -78,20 +78,13 @@ namespace BizHawk.Client.EmuHawk
private void CalculateHorizontalColumnPositions(List<RollColumn> visibleColumns) private void CalculateHorizontalColumnPositions(List<RollColumn> visibleColumns)
{ {
int firstVisibleRow = FirstVisibleRow; if (_horizontalColumnTops == null || _horizontalColumnTops.Length != visibleColumns.Count + 1)
if (!HorizontalOrientation)
{ {
_horizontalColumnHeights = null; _horizontalColumnTops = new int[visibleColumns.Count + 1];
_horizontalColumnTops = null;
return;
} }
_horizontalColumnHeights = new int[visibleColumns.Count];
_horizontalColumnTops = new int[visibleColumns.Count];
int top = 0; int top = 0;
int startRow = firstVisibleRow; int startRow = FirstVisibleRow;
for (int j = 0; j < visibleColumns.Count; j++) for (int j = 0; j < visibleColumns.Count; j++)
{ {
RollColumn col = visibleColumns[j]; RollColumn col = visibleColumns[j];
@ -108,10 +101,10 @@ namespace BizHawk.Client.EmuHawk
int textWidth = (int)_renderer.MeasureString(text, Font).Width; int textWidth = (int)_renderer.MeasureString(text, Font).Width;
height = Math.Max(height, textWidth + (CellWidthPadding * 2)); height = Math.Max(height, textWidth + (CellWidthPadding * 2));
} }
_horizontalColumnHeights[j] = height;
_horizontalColumnTops[j] = top; _horizontalColumnTops[j] = top;
top += height; top += height;
} }
_horizontalColumnTops[visibleColumns.Count] = top;
} }
private void DrawColumnDrag(List<RollColumn> visibleColumns) private void DrawColumnDrag(List<RollColumn> visibleColumns)

View File

@ -36,9 +36,7 @@ namespace BizHawk.Client.EmuHawk
private int _rowCount; private int _rowCount;
private SizeF _charSize; private SizeF _charSize;
// Updated on paint private int[] _horizontalColumnTops; // Updated on paint, contains one extra item to allow inference of last column height
private int[] _horizontalColumnHeights;
private int[] _horizontalColumnTops;
private RollColumn _columnDown; private RollColumn _columnDown;
private RollColumn _columnResizing; private RollColumn _columnResizing;
@ -1876,7 +1874,7 @@ namespace BizHawk.Client.EmuHawk
if (_horizontalOrientation) if (_horizontalOrientation)
{ {
return _columns.VisibleColumns.Select((n, i) => new { Column = n, Index = i }) return _columns.VisibleColumns.Select((n, i) => new { Column = n, Index = i })
.FirstOrDefault(anonObj => (GetHColTop(anonObj.Index) - _vBar.Value).RangeTo(GetHColBottom(anonObj.Index) - _vBar.Value).Contains(pixel)) .FirstOrDefault(item => (GetHColTop(item.Index) - _vBar.Value).RangeTo(GetHColBottom(item.Index) - _vBar.Value).Contains(pixel))
?.Column; ?.Column;
} }
return _columns.VisibleColumns.FirstOrDefault(column => (column.Left - _hBar.Value).RangeTo(column.Right - _hBar.Value).Contains(pixel)); return _columns.VisibleColumns.FirstOrDefault(column => (column.Left - _hBar.Value).RangeTo(column.Right - _hBar.Value).Contains(pixel));
@ -1912,23 +1910,18 @@ namespace BizHawk.Client.EmuHawk
return (int)Math.Floor((float)(pixels - ColumnHeight) / CellHeight); return (int)Math.Floor((float)(pixels - ColumnHeight) / CellHeight);
} }
private int GetHColHeight(int index) => private int GetHColTop(int index) =>
_horizontalColumnHeights != null && index < _horizontalColumnHeights.Length ? _horizontalColumnHeights[index] : CellHeight; _horizontalColumnTops != null && 0.RangeToExclusive(_horizontalColumnTops.Length).Contains(index)
private int GetHColTop(int index)
{
if (_horizontalColumnTops == null)
{
return 0;
}
return 0.RangeToExclusive(_horizontalColumnTops.Length).Contains(index)
? _horizontalColumnTops[index] ? _horizontalColumnTops[index]
: _horizontalColumnTops.Last() + _horizontalColumnHeights.Last(); : index * CellHeight;
}
private int GetHColHeight(int index) =>
_horizontalColumnTops != null && 0.RangeToExclusive(_horizontalColumnTops.Length - 1).Contains(index)
? _horizontalColumnTops[index + 1] - _horizontalColumnTops[index]
: CellHeight;
private int GetHColBottom(int index) => private int GetHColBottom(int index) =>
GetHColTop(index) + GetHColHeight(index); GetHColTop(index + 1);
// The width of the largest column cell in Horizontal Orientation // The width of the largest column cell in Horizontal Orientation
private int MaxColumnWidth { get; set; } private int MaxColumnWidth { get; set; }