diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/InputRoll.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/InputRoll.cs
index dd4e4d6778..36eadadd46 100644
--- a/BizHawk.Client.EmuHawk/tools/TAStudio/InputRoll.cs
+++ b/BizHawk.Client.EmuHawk/tools/TAStudio/InputRoll.cs
@@ -32,24 +32,6 @@ namespace BizHawk.Client.EmuHawk
public InputRoll()
{
- //TODO Figure out how to use the width and height properties of the scrollbars instead of 17
- VBar = new VScrollBar
- {
- Location = new Point(Width - 17, 0),
- Visible = false,
- Anchor = AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom,
- SmallChange = 1,
- LargeChange = 5
- };
-
- HBar = new HScrollBar
- {
- Location = new Point(0, Height - 17),
- Visible = false,
- Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right,
- SmallChange = 1,
- LargeChange = 20
- };
UseCustomBackground = true;
GridLines = true;
@@ -70,6 +52,25 @@ namespace BizHawk.Client.EmuHawk
_charSize = Gdi.MeasureString("A", this.Font);
}
+ //TODO Figure out how to use the width and height properties of the scrollbars instead of 17
+ VBar = new VScrollBar
+ {
+ Location = new Point(Width - 17, 0),
+ Visible = false,
+ Anchor = AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom,
+ SmallChange = CellHeight,
+ LargeChange = CellHeight * 20
+ };
+
+ HBar = new HScrollBar
+ {
+ Location = new Point(0, Height - 17),
+ Visible = false,
+ Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right,
+ SmallChange = 1,
+ LargeChange = 20
+ };
+
this.Controls.Add(VBar);
this.Controls.Add(HBar);
@@ -122,7 +123,7 @@ namespace BizHawk.Client.EmuHawk
}
///
- /// Gets or sets the sets the virtual number of rows to be displayed.
+ /// Gets or sets the sets the virtual number of rows to be displayed. Does not include the column header row.
///
[Category("Behavior")]
public int RowCount
@@ -377,7 +378,7 @@ namespace BizHawk.Client.EmuHawk
if (NeedsVScrollbar)
{
- return VBar.Value;
+ return VBar.Value / CellHeight;
}
return 0;
@@ -398,7 +399,7 @@ namespace BizHawk.Client.EmuHawk
if (NeedsVScrollbar)
{
_programmaticallyUpdatingScrollBarValues = true;
- VBar.Value = value;
+ VBar.Value = value * CellHeight;
_programmaticallyUpdatingScrollBarValues = false;
}
}
@@ -424,7 +425,7 @@ namespace BizHawk.Client.EmuHawk
}
///
- /// Returns the number of rows currently visible
+ /// Returns the number of rows currently visible including partially visible rows.
///
[Browsable(false)]
[DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
@@ -437,7 +438,7 @@ namespace BizHawk.Client.EmuHawk
//return (Width - _horizontalOrientedColumnWidth) / CellWidth;
}
- return (Height / CellHeight) - 1;
+ return (int)Math.Ceiling((Decimal)DrawHeight / CellHeight) - 1;
}
}
@@ -484,7 +485,6 @@ namespace BizHawk.Client.EmuHawk
// ForeGround
DrawData(e);
-
Gdi.CopyToScreen();
Gdi.EndOffScreenBitmap();
}
@@ -574,8 +574,8 @@ namespace BizHawk.Client.EmuHawk
}
else
{
- int startRow = NeedsVScrollbar ? VBar.Value : 0;
- int endRow = startRow + VisibleRows;
+ int startRow = FirstVisibleRow;
+ int endRow = LastVisibleRow;
if (endRow >= RowCount)
{
@@ -860,22 +860,22 @@ namespace BizHawk.Client.EmuHawk
}
else
{
- int startIndex = NeedsVScrollbar ? VBar.Value : 0;
- int endIndex = startIndex + (Height / CellHeight);
+ int startRow = FirstVisibleRow;
+ int endRow = LastVisibleRow;
- if (endIndex >= RowCount)
+ if (endRow >= RowCount)
{
- endIndex = RowCount;
+ endRow = RowCount;
}
- int range = endIndex - startIndex;
+ int range = endRow - startRow;
for (int i = 0; i < range; i++)//Vertical
{
for (int j = 0; j < _columns.Count; j++)//Horizontal
{
Color color = Color.White;
- QueryItemBkColor(i + startIndex, j, ref color);
+ QueryItemBkColor(i + startRow, j, ref color);
if (color != Color.White) // An easy optimization, don't draw unless the user specified something other than the default
{
var cell = new Cell()
@@ -1151,7 +1151,7 @@ namespace BizHawk.Client.EmuHawk
}
else
{
- VBar.Maximum = (((RowCount * CellHeight) - Height) / CellHeight) + VBar.LargeChange;
+ VBar.Maximum = ((RowCount + 1) * CellHeight) - DrawHeight + VBar.LargeChange - 1;
}
VBar.Size = new Size(VBar.Width, Height);
@@ -1335,7 +1335,7 @@ namespace BizHawk.Client.EmuHawk
}
else
{
- newCell.RowIndex = (y / CellHeight) + VBar.Value - 1;
+ newCell.RowIndex = (y + VBar.Value) / CellHeight - 1;
}
newCell.Column = ColumnAtX(x);
@@ -1460,6 +1460,11 @@ namespace BizHawk.Client.EmuHawk
return null;
}
+ //private int RowsToPixels(int index, int rowDimension)
+ //{
+ // return index * rowDimension;
+ //}
+
#endregion
#region Classes