diff --git a/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexColor.Designer.cs b/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexColor.Designer.cs
index bcc5d09b2bf..5f15793babe 100644
--- a/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexColor.Designer.cs
+++ b/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexColor.Designer.cs
@@ -41,7 +41,9 @@ private void InitializeComponent()
this.HexMenubar = new System.Windows.Forms.Panel();
this.label2 = new BizHawk.WinForms.Controls.LocLabelEx();
this.HexBackgrnd = new System.Windows.Forms.Panel();
- this.colorDialog1 = new System.Windows.Forms.ColorDialog();
+ this.label7 = new BizHawk.WinForms.Controls.LocLabelEx();
+ this.Hex00 = new System.Windows.Forms.Panel();
+ this.colorDialog1 = new System.Windows.Forms.ColorDialog();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
@@ -59,9 +61,11 @@ private void InitializeComponent()
this.groupBox1.Controls.Add(this.HexMenubar);
this.groupBox1.Controls.Add(this.label2);
this.groupBox1.Controls.Add(this.HexBackgrnd);
- this.groupBox1.Location = new System.Drawing.Point(3, 2);
+ this.groupBox1.Controls.Add(this.label7);
+ this.groupBox1.Controls.Add(this.Hex00);
+ this.groupBox1.Location = new System.Drawing.Point(3, 2);
this.groupBox1.Name = "groupBox1";
- this.groupBox1.Size = new System.Drawing.Size(144, 192);
+ this.groupBox1.Size = new System.Drawing.Size(144, 222);
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
//
@@ -154,12 +158,27 @@ private void InitializeComponent()
this.HexBackgrnd.Size = new System.Drawing.Size(20, 20);
this.HexBackgrnd.TabIndex = 6;
this.HexBackgrnd.MouseClick += new System.Windows.Forms.MouseEventHandler(this.HexBackground_Click);
- //
- // HexColors_Form
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ //
+ // label7
+ //
+ this.label7.Location = new System.Drawing.Point(30, 200);
+ this.label7.Name = "label7";
+ this.label7.Text = "Zero Color";
+ //
+ // Hex00
+ //
+ this.Hex00.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ this.Hex00.Location = new System.Drawing.Point(5, 196);
+ this.Hex00.Name = "Hex00";
+ this.Hex00.Size = new System.Drawing.Size(20, 20);
+ this.Hex00.TabIndex = 18;
+ this.Hex00.MouseClick += new System.Windows.Forms.MouseEventHandler(this.Hex00_Click);
+ //
+ // HexColors_Form
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(149, 197);
+ this.ClientSize = new System.Drawing.Size(149, 230);
this.Controls.Add(this.groupBox1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
@@ -190,6 +209,7 @@ private void InitializeComponent()
private System.Windows.Forms.Panel HexFreeze;
private BizHawk.WinForms.Controls.LocLabelEx label4;
private System.Windows.Forms.Panel HexHighlight;
-
- }
+ private BizHawk.WinForms.Controls.LocLabelEx label7;
+ private System.Windows.Forms.Panel Hex00;
+ }
}
\ No newline at end of file
diff --git a/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexColor.cs b/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexColor.cs
index 1f33915efba..1a188cda8ae 100644
--- a/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexColor.cs
+++ b/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexColor.cs
@@ -20,6 +20,7 @@ private void HexColors_Form_Load(object sender, EventArgs e)
HexFreeze.BackColor = _hexEditor.Colors.Freeze;
HexFreezeHL.BackColor = _hexEditor.Colors.HighlightFreeze;
HexHighlight.BackColor = _hexEditor.Colors.Highlight;
+ Hex00.BackColor = _hexEditor.Colors.Foreground00;
}
private void HexBackground_Click(object sender, MouseEventArgs e)
@@ -33,6 +34,15 @@ private void HexBackground_Click(object sender, MouseEventArgs e)
}
}
+ private void Hex00_Click(object sender, MouseEventArgs e)
+ {
+ if (colorDialog1.ShowDialog().IsOk())
+ {
+ _hexEditor.Colors.Foreground00 = colorDialog1.Color;
+ Hex00.BackColor = colorDialog1.Color;
+ }
+ }
+
private void HexForeground_Click(object sender, MouseEventArgs e)
{
if (colorDialog1.ShowDialog().IsOk())
diff --git a/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.Designer.cs b/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.Designer.cs
index cb3c8f8543e..0da38ef6c8b 100644
--- a/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.Designer.cs
+++ b/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.Designer.cs
@@ -89,7 +89,7 @@ private void InitializeComponent()
this.MemoryViewerBox = new System.Windows.Forms.GroupBox();
this.HexScrollBar = new System.Windows.Forms.VScrollBar();
this.AddressLabel = new BizHawk.WinForms.Controls.LocLabelEx();
- this.AddressesLabel = new BizHawk.WinForms.Controls.LocLabelEx();
+ this.AddressesLabel = new BizHawk.WinForms.Controls.HexLabelEx();
this.Header = new BizHawk.WinForms.Controls.LocLabelEx();
this.HexMenuStrip.SuspendLayout();
this.ViewerContextMenuStrip.SuspendLayout();
@@ -511,7 +511,7 @@ private void InitializeComponent()
private BizHawk.WinForms.Controls.ToolStripMenuItemEx AddToRamWatchMenuItem;
private BizHawk.WinForms.Controls.ToolStripMenuItemEx FreezeAddressMenuItem;
public System.Windows.Forms.GroupBox MemoryViewerBox;
- private BizHawk.WinForms.Controls.LocLabelEx AddressesLabel;
+ private BizHawk.WinForms.Controls.HexLabelEx AddressesLabel;
private System.Windows.Forms.VScrollBar HexScrollBar;
private BizHawk.WinForms.Controls.ToolStripMenuItemEx UnfreezeAllMenuItem;
private BizHawk.WinForms.Controls.ToolStripMenuItemEx UnfreezeAllContextItem;
diff --git a/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs b/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs
index 1fec01de636..99349a158f1 100644
--- a/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs
+++ b/src/BizHawk.Client.EmuHawk/tools/HexEditor/HexEditor.cs
@@ -133,6 +133,7 @@ internal class ColorConfig
public Color Freeze { get; set; }= Color.LightBlue;
public Color Highlight { get; set; } = Color.Pink;
public Color HighlightFreeze { get; set; } = Color.Violet;
+ public Color Foreground00 { get; set; } = Color.SlateGray;
}
[ConfigPersist]
@@ -219,11 +220,21 @@ private void HexEditor_Load(object sender, EventArgs e)
protected override void UpdateAfter()
{
+ if (AddressesLabel.ZeroColor != Colors.Foreground00)
+ {
+ AddressesLabel.ZeroColor = Colors.Foreground00;
+ }
+
AddressesLabel.Text = GenerateMemoryViewString(true);
}
protected override void GeneralUpdate()
{
+ if (AddressesLabel.ZeroColor != Colors.Foreground00)
+ {
+ AddressesLabel.ZeroColor = Colors.Foreground00;
+ }
+
AddressesLabel.Text = GenerateMemoryViewString(true);
AddressLabel.Text = GenerateAddressString();
}
diff --git a/src/BizHawk.WinForms.Controls/BizHawk.WinForms.Controls.csproj b/src/BizHawk.WinForms.Controls/BizHawk.WinForms.Controls.csproj
index 31744f1864b..e26be95279e 100644
--- a/src/BizHawk.WinForms.Controls/BizHawk.WinForms.Controls.csproj
+++ b/src/BizHawk.WinForms.Controls/BizHawk.WinForms.Controls.csproj
@@ -10,4 +10,9 @@
+
+
+ Component
+
+
diff --git a/src/BizHawk.WinForms.Controls/LabelEx/HexLabelEx.cs b/src/BizHawk.WinForms.Controls/LabelEx/HexLabelEx.cs
new file mode 100644
index 00000000000..be679551b49
--- /dev/null
+++ b/src/BizHawk.WinForms.Controls/LabelEx/HexLabelEx.cs
@@ -0,0 +1,128 @@
+using System.ComponentModel;
+using System.Drawing;
+using System.Windows.Forms;
+using BizHawk.Common;
+
+
+namespace BizHawk.WinForms.Controls
+{
+ ///
+ public class HexLabelEx : LabelExBase
+ {
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new bool AutoSize => base.AutoSize;
+
+ [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
+ public new Size Size => base.Size;
+
+ public Color ZeroColor { get; set; } = Color.SlateGray;
+
+ private float spacingHexModifier;
+ private float spacingPreDivider;
+ private float spacingPostDividerModifier;
+ private float spacingAscii;
+ private float spacingLineModifier;
+
+ public HexLabelEx()
+ {
+ base.AutoSize = true;
+ this.BackColor = Color.Transparent;
+
+ spacingHexModifier = 0.7F;
+ spacingPreDivider = 3.0F;
+ spacingPostDividerModifier = 3.5F;
+ spacingAscii = 7.0F;
+ spacingLineModifier = 0.56F;
+
+ if (OSTailoredCode.IsUnixHost)
+ {
+ // TODO: spacing values will probably be different on linux
+ }
+ }
+
+ protected override void OnPaint(PaintEventArgs e)
+ {
+ string text = this.Text;
+ Font font = this.Font;
+ PointF point = new PointF(0, 0);
+ char gap = ' ';
+
+ string[] lines = text.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
+
+ Color color = this.ForeColor;
+
+ foreach (string line in lines)
+ {
+ // split left and right panes
+ string[] panes = line.Split('|');
+
+ if (panes.Length < 2)
+ {
+ // skip - last line appears to be empty
+ continue;
+ }
+ else if (panes.Length > 2)
+ {
+ // pipe character present in the ascii pane?
+ for (int i = 2; i < panes.Length; i++)
+ {
+ panes[1] += "|" + panes[i];
+ }
+ }
+
+ // hex pane
+ string[] words = panes[0].Split(gap);
+ foreach (var word in words)
+ {
+ SizeF size = e.Graphics.MeasureString(word, font);
+
+ switch (word)
+ {
+ case "00":
+ color = ZeroColor;
+ break;
+
+ default:
+ color = this.ForeColor;
+ break;
+ }
+
+ DrawString(word, font, point, color);
+
+ point.X += size.Width + e.Graphics.MeasureString(gap.ToString(), font).Width + spacingHexModifier;
+ }
+
+ // divider
+ string div = "|";
+ point.X -= spacingPreDivider;
+ SizeF sizeDiv = e.Graphics.MeasureString(div, font);
+
+ DrawString(div, font, point, this.ForeColor);
+
+ point.X += e.Graphics.MeasureString(gap.ToString(), font).Width + spacingPostDividerModifier;
+
+ // ascii pane
+ char[] chars = panes[1].ToCharArray();
+ foreach (var c in chars)
+ {
+ string str = c.ToString();
+ DrawString(str, font, point, this.ForeColor);
+
+ // fixed size
+ point.X += spacingAscii;
+ }
+
+ point.X = 0;
+ point.Y += e.Graphics.MeasureString(line, font).Height + spacingLineModifier;
+ }
+
+ void DrawString(string s, Font f, PointF p, Color color)
+ {
+ using (Brush brush = new SolidBrush(color))
+ {
+ e.Graphics.DrawString(s, f, brush, p);
+ }
+ }
+ }
+ }
+}