Don't hardcode colours in InputRoll

This commit is contained in:
James Groom 2023-12-22 04:16:01 +00:00 committed by GitHub
parent 1e5d11bf84
commit bd3f919129
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 17 deletions
src/BizHawk.Client.EmuHawk/CustomControls/InputRoll

View File

@ -14,8 +14,8 @@ namespace BizHawk.Client.EmuHawk
using (_renderer.LockGraphics(e.Graphics))
{
// White Background
_renderer.SetBrush(Color.White);
_renderer.SetSolidPen(Color.White);
_renderer.SetBrush(_backColor);
_renderer.SetSolidPen(_backColor);
_renderer.FillRectangle(e.ClipRectangle);
// Lag frame calculations
@ -510,7 +510,6 @@ namespace BizHawk.Client.EmuHawk
private void DoSelectionBG(List<RollColumn> visibleColumns, Rectangle rect)
{
Color rowColor = Color.White;
var visibleRows = FirstVisibleRow.RangeTo(LastVisibleRow);
int lastRow = -1;
foreach (Cell cell in _selectedItems)
@ -527,6 +526,7 @@ namespace BizHawk.Client.EmuHawk
};
relativeCell.RowIndex -= CountLagFramesAbsolute(relativeCell.RowIndex.Value);
var rowColor = _backColor;
if (QueryRowBkColor != null && lastRow != cell.RowIndex.Value)
{
QueryRowBkColor(cell.RowIndex.Value, ref rowColor);
@ -603,27 +603,21 @@ namespace BizHawk.Client.EmuHawk
for (int i = 0, f = 0; f < range; i++, f++)
{
f += _lagFrames[i];
Color rowColor = Color.White;
var rowColor = _backColor;
QueryRowBkColor?.Invoke(f + startIndex, ref rowColor);
foreach (var column in visibleColumns)
{
Color itemColor = Color.White;
var itemColor = rowColor;
QueryItemBkColor?.Invoke(f + startIndex, column, ref itemColor);
if (itemColor == Color.White)
{
itemColor = rowColor;
}
else if (itemColor.A != 255 && itemColor.A != 0)
if (itemColor.A is not 0 or 255)
{
float alpha = (float)itemColor.A / 255;
itemColor = Color.FromArgb(rowColor.R - (int)((rowColor.R - itemColor.R) * alpha),
rowColor.G - (int)((rowColor.G - itemColor.G) * alpha),
rowColor.B - (int)((rowColor.B - itemColor.B) * alpha));
}
if (itemColor != Color.White) // An easy optimization, don't draw unless the user specified something other than the default
if (itemColor != _backColor) // An easy optimization, don't draw unless the user specified something other than the default
{
var cell = new Cell
{

View File

@ -31,8 +31,21 @@ namespace BizHawk.Client.EmuHawk
private readonly Timer _hoverTimer = new Timer();
private readonly byte[] _lagFrames = new byte[256]; // Large enough value that it shouldn't ever need resizing. // apparently not large enough for 4K
private readonly Color _foreColor;
private readonly Color _backColor;
private Color _backColor;
public override Color BackColor
{
get => _backColor;
set => base.BackColor = _backColor = value;
}
private Color _foreColor;
public override Color ForeColor
{
get => _foreColor;
set => base.ForeColor = _foreColor = value;
}
private RollColumns _columns = new RollColumns();
private bool _horizontalOrientation;
@ -117,8 +130,18 @@ namespace BizHawk.Client.EmuHawk
_hoverTimer.Tick += HoverTimerEventProcessor;
_hoverTimer.Stop();
_foreColor = ForeColor;
_backColor = BackColor;
if (OSTailoredCode.IsUnixHost)
{
// sorry dark theme users, but this needs to be readable
_backColor = Color.White;
_foreColor = Color.Black;
}
else
{
// this is the ctor, so these reads will always return the default values
_backColor = base.BackColor;
_foreColor = base.ForeColor;
}
}
private void HoverTimerEventProcessor(object sender, EventArgs e)