diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/InputRoll.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/InputRoll.cs
index d653384166..077c4e93f5 100644
--- a/BizHawk.Client.EmuHawk/tools/TAStudio/InputRoll.cs
+++ b/BizHawk.Client.EmuHawk/tools/TAStudio/InputRoll.cs
@@ -392,7 +392,7 @@ namespace BizHawk.Client.EmuHawk
{
if (NeedsHScrollbar)
{
- return HBar.Value;
+ return HBar.Value / CellWidth;
}
}
@@ -411,16 +411,18 @@ namespace BizHawk.Client.EmuHawk
if (NeedsHScrollbar)
{
_programmaticallyUpdatingScrollBarValues = true;
- HBar.Value = value;
+ HBar.Value = value * CellWidth;
_programmaticallyUpdatingScrollBarValues = false;
}
}
-
- if (NeedsVScrollbar)
+ else
{
- _programmaticallyUpdatingScrollBarValues = true;
- VBar.Value = value * CellHeight;
- _programmaticallyUpdatingScrollBarValues = false;
+ if (NeedsVScrollbar)
+ {
+ _programmaticallyUpdatingScrollBarValues = true;
+ VBar.Value = value * CellHeight;
+ _programmaticallyUpdatingScrollBarValues = false;
+ }
}
}
}
@@ -434,18 +436,13 @@ namespace BizHawk.Client.EmuHawk
set
{
- int i = value - VisibleRows;
- if (i < 0)
- {
- i = 0;
- }
-
+ int i = Math.Max(value - VisibleRows, 0);
FirstVisibleRow = i;
}
}
///
- /// Returns the number of rows currently visible including partially visible rows.
+ /// Gets the number of rows currently visible including partially visible rows.
///
[Browsable(false)]
[DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)]
@@ -455,7 +452,7 @@ namespace BizHawk.Client.EmuHawk
{
if (HorizontalOrientation)
{
- return (Width - ColumnWidth) / CellWidth;
+ return (int)Math.Ceiling((Decimal)(DrawWidth - ColumnWidth) / CellWidth);
}
return (int)Math.Ceiling((Decimal)DrawHeight / CellHeight) - 1;
}
@@ -491,17 +488,16 @@ namespace BizHawk.Client.EmuHawk
Gdi.SetSolidPen(Color.White);
Gdi.FillRectangle(0, 0, Width, Height);
- // Header
if (_columns.Any())
{
DrawColumnBg(e);
DrawColumnText(e);
}
- // Background
+ //Background
DrawBg(e);
- // ForeGround
+ //Foreground
DrawData(e);
Gdi.CopyToScreen();
@@ -559,20 +555,15 @@ namespace BizHawk.Client.EmuHawk
}
}
+ //TODO Centering text is buggy and only implemented for Horizontal Orientation
private void DrawData(PaintEventArgs e)
{
if (QueryItemText != null)
{
if (HorizontalOrientation)
{
- int startIndex = NeedsHScrollbar ? HBar.Value : 0;
- int endIndex = startIndex + (Width / CellWidth);
- if (endIndex >= RowCount)
- {
- endIndex = RowCount;
- }
-
- int range = endIndex - startIndex;
+ int startIndex = FirstVisibleRow;
+ int range = Math.Min(LastVisibleRow, RowCount - 1) - startIndex + 1;
Gdi.PrepDrawString(this.Font, this.ForeColor);
for (int i = 0; i < range; i++)
@@ -580,10 +571,12 @@ namespace BizHawk.Client.EmuHawk
for (int j = 0; j < _columns.Count; j++)
{
string text;
- int x = ColumnWidth + CellPadding + (CellWidth * i);
- int y = j * CellHeight;
- var point = new Point(x, y);
QueryItemText(i + startIndex, j, out text);
+
+ //Center Text
+ int x = RowsToPixels(i) + (CellWidth - text.Length * _charSize.Width) / 2;
+ int y = j * CellHeight + CellPadding;
+ var point = new Point(x, y);
if (!string.IsNullOrWhiteSpace(text))
{
Gdi.DrawString(text, point);
@@ -594,14 +587,7 @@ namespace BizHawk.Client.EmuHawk
else
{
int startRow = FirstVisibleRow;
- int endRow = LastVisibleRow;
-
- if (endRow >= RowCount)
- {
- endRow = RowCount;
- }
-
- int range = endRow - startRow;
+ int range = Math.Min(LastVisibleRow, RowCount - 1) - startRow + 1;
Gdi.PrepDrawString(this.Font, this.ForeColor);
int xPadding = CellPadding + 1 - HBar.Value;
@@ -609,8 +595,13 @@ namespace BizHawk.Client.EmuHawk
{
for (int j = 0; j < _columns.Count; j++)//Horizontal
{
+ var col = _columns[j];
+ if (col.Left.Value < 0 || col.Right.Value > DrawWidth)
+ {
+ continue;
+ }
string text;
- var point = new Point(_columns[j].Left.Value + xPadding, RowsToPixels(i));
+ var point = new Point(col.Left.Value + xPadding, RowsToPixels(i));
QueryItemText(i + startRow, j, out text);
if (!string.IsNullOrWhiteSpace(text))
{
@@ -629,13 +620,18 @@ namespace BizHawk.Client.EmuHawk
if (HorizontalOrientation)
{
- Gdi.DrawRectangle(0, 0, ColumnWidth + 1, Height);
- Gdi.FillRectangle(1, 1, ColumnWidth, Height - 3);
+ Gdi.FillRectangle(0, 0, ColumnWidth + 1, DrawHeight + 1);
+ Gdi.Line(0, 0, 0, _columns.Count * CellHeight + 1);
+ Gdi.Line(ColumnWidth, 0, ColumnWidth, _columns.Count * CellHeight + 1);
int start = 0;
foreach (var column in _columns)
{
+ Gdi.Line(1, start, ColumnWidth, start);
start += CellHeight;
+ }
+ if (_columns.Any())
+ {
Gdi.Line(1, start, ColumnWidth, start);
}
}
@@ -667,62 +663,20 @@ namespace BizHawk.Client.EmuHawk
{
if (HorizontalOrientation)
{
- int start = -HBar.Value;
for (int i = 0; i < _columns.Count; i++)
{
if (_columns[i] != CurrentCell.Column)
{
- start += _columns[i].Width.Value;
continue;
}
- int colWidth = _columns[i].Width.Value;
Gdi.SetBrush(SystemColors.Highlight);
- if (start >= 0)
- {
- if (start + colWidth < Width)//Left side and right side visible
- {
- Gdi.FillRectangle(
- 1,
- (i * CellHeight) + 1,
- ColumnWidth - 1,
- CellHeight - 1);
- }
- else//Only Left side visible
- {
- Gdi.FillRectangle(
- 1,
- (i * CellHeight) + 1,
- ColumnWidth - 1,
- CellHeight - 1);
- }
- }
- else
- {
- if (start + colWidth < Width)//Only rightLeft side visible
- {
- Gdi.FillRectangle(
- 1,
- (i * CellHeight) + 1,
- ColumnWidth - 1,
- CellHeight - 1);
- }
- else//Not Visible
- {
-
- }
- }
-
- start += _columns[i].Width.Value;
+ Gdi.FillRectangle(1, i * CellHeight + 1, ColumnWidth - 1, CellHeight - 1);
}
- //if (_columns[i] == CurrentCell.Column)
- //{
-
- //}
}
else
{
- //TODO multiple selected cells
+ //TODO multiple selected columns
for (int i = 0; i < _columns.Count; i++)
{
if (_columns[i] == CurrentCell.Column){
@@ -746,8 +700,6 @@ namespace BizHawk.Client.EmuHawk
///
private void DrawBg(PaintEventArgs e)
{
-
-
if (QueryItemBkColor != null && UseCustomBackground)
{
DoBackGroundCallback(e);
@@ -758,22 +710,22 @@ namespace BizHawk.Client.EmuHawk
if (HorizontalOrientation)
{
// Columns
- for (int i = 1; i < Width / CellWidth; i++)
+ for (int i = 1; i < VisibleRows + 1; i++)
{
- var x = ColumnWidth + 1 + (i * CellWidth);
+ var x = RowsToPixels(i);
var y2 = (_columns.Count * CellHeight) - 1;
if (y2 > Height)
{
y2 = Height - 2;
}
- Gdi.Line(x, 1, x, y2);
+ Gdi.Line(x, 1, x, DrawHeight);
}
// Rows
- for (int i = 1; i < _columns.Count + 1; i++)
+ for (int i = 0; i < _columns.Count + 1; i++)
{
- Gdi.Line(ColumnWidth + 1, i * CellHeight, Width - 2, i * CellHeight);
+ Gdi.Line(RowsToPixels(0) + 1, i * CellHeight, DrawWidth, i * CellHeight);
}
}
else
@@ -832,7 +784,7 @@ namespace BizHawk.Client.EmuHawk
if (HorizontalOrientation)
{
- x = RowsToPixels(cell.RowIndex.Value) + 2;
+ x = RowsToPixels(cell.RowIndex.Value) + 1;
w = CellWidth - 1;
y = (CellHeight * _columns.IndexOf(cell.Column)) + 1; // We can't draw without row and column, so assume they exist and fail catastrophically if they don't
h = CellHeight - 1;
@@ -861,14 +813,8 @@ namespace BizHawk.Client.EmuHawk
{
if (HorizontalOrientation)
{
- int startIndex = NeedsHScrollbar ? HBar.Value : 0;
- int endIndex = startIndex + (Width / CellWidth);
- if (endIndex >= RowCount)
- {
- endIndex = RowCount;
- }
-
- int range = endIndex - startIndex;
+ int startIndex = FirstVisibleRow;
+ int range = Math.Min(LastVisibleRow, RowCount - 1) - startIndex + 1;
for (int i = 0; i < range; i++)
{
@@ -892,14 +838,7 @@ namespace BizHawk.Client.EmuHawk
else
{
int startRow = FirstVisibleRow;
- int endRow = LastVisibleRow;
-
- if (endRow >= RowCount)
- {
- endRow = RowCount;
- }
-
- int range = endRow - startRow;
+ int range = Math.Min(LastVisibleRow, RowCount - 1) - startRow + 1;
for (int i = 0; i < range; i++)//Vertical
{
@@ -966,6 +905,7 @@ namespace BizHawk.Client.EmuHawk
base.OnMouseLeave(e);
}
+ //TODO add query callback of whether to select the cell or not
protected override void OnMouseDown(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left && InputPaintingMode)
@@ -1101,13 +1041,27 @@ namespace BizHawk.Client.EmuHawk
private void OrientationChanged()
{
- var temp = VBar.Clone();
- VBar.Value = HBar.Value;
- VBar.Maximum = HBar.Maximum;
- VBar.Minimum = HBar.Minimum;
- HBar.Value = temp.Value;
- HBar.Maximum = temp.Maximum;
- HBar.Minimum = temp.Minimum;
+ RecalculateScrollBars();
+
+ //TODO scroll to correct positions
+
+ if (HorizontalOrientation)
+ {
+ VBar.SmallChange = CellHeight;
+ HBar.SmallChange = CellWidth;
+ VBar.LargeChange = 10;
+ HBar.LargeChange = CellWidth * 20;
+ }
+ else
+ {
+ VBar.SmallChange = CellHeight;
+ HBar.SmallChange = 1;
+ VBar.LargeChange = CellHeight * 20;
+ HBar.LargeChange = 20;
+ }
+
+ RecalculateScrollBars();
+
Refresh();
}
@@ -1117,7 +1071,7 @@ namespace BizHawk.Client.EmuHawk
///
///
private void CellChanged(Cell newCell)
- {
+ {
if (PointedCellChanged != null && newCell != CurrentCell)
{
LastCell = CurrentCell;
@@ -1174,11 +1128,12 @@ namespace BizHawk.Client.EmuHawk
UpdateDrawSize();
+ //Update VBar
if (NeedsVScrollbar)
{
if (HorizontalOrientation)
{
- VBar.Maximum = (((_columns.Count * CellHeight) - Height) / CellHeight) + VBar.LargeChange;
+ VBar.Maximum = (((_columns.Count * CellHeight) - DrawHeight) / CellHeight) + VBar.LargeChange;
}
else
{
@@ -1190,18 +1145,17 @@ namespace BizHawk.Client.EmuHawk
}
else
{
-
VBar.Visible = false;
VBar.Value = 0;
}
+ //Update HBar
if (NeedsHScrollbar)
{
-
HBar.Visible = true;
if (HorizontalOrientation)
{
- HBar.Maximum = ((RowCount * ColumnWidth)) / CellWidth + HBar.LargeChange - 1;//TODO test this
+ HBar.Maximum = RowsToPixels(RowCount + 1) - DrawWidth + HBar.LargeChange - 1;
}
else
{
@@ -1219,7 +1173,6 @@ namespace BizHawk.Client.EmuHawk
}
else
{
-
HBar.Visible = false;
HBar.Value = 0;
}
@@ -1342,12 +1295,7 @@ namespace BizHawk.Client.EmuHawk
{
if (HorizontalOrientation)
{
- //TODO: Test this branch
- if (x < ColumnWidth)
- {
- newCell.RowIndex = null;
- }
- else
+ if (x >= ColumnWidth)
{
newCell.RowIndex = PixelsToRows(x);
}
@@ -1360,12 +1308,7 @@ namespace BizHawk.Client.EmuHawk
}
else
{
- if (y < CellHeight)
- {
- //Out of range or on columncell
- newCell.RowIndex = null;
- }
- else
+ if (y >= CellHeight)
{
newCell.RowIndex = PixelsToRows(y);
}