603 lines
16 KiB
C#
603 lines
16 KiB
C#
using System;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
|
|
using BizHawk.Client.Common;
|
|
|
|
namespace BizHawk.Client.EmuHawk
|
|
{
|
|
public partial class MessageConfig : Form
|
|
{
|
|
private int _dispFpSx = Global.Config.DispFPSx;
|
|
private int _dispFpSy = Global.Config.DispFPSy;
|
|
private int _dispFrameCx = Global.Config.DispFrameCx;
|
|
private int _dispFrameCy = Global.Config.DispFrameCy;
|
|
private int _dispLagx = Global.Config.DispLagx;
|
|
private int _dispLagy = Global.Config.DispLagy;
|
|
private int _dispInpx = Global.Config.DispInpx;
|
|
private int _dispInpy = Global.Config.DispInpy;
|
|
private int _lastInputColor = Global.Config.LastInputColor;
|
|
private int _dispRecx = Global.Config.DispRecx;
|
|
private int _dispRecy = Global.Config.DispRecy;
|
|
private int _dispMultix = Global.Config.DispMultix;
|
|
private int _dispMultiy = Global.Config.DispMultiy;
|
|
private int _dispMessagex = Global.Config.DispMessagex;
|
|
private int _dispMessagey = Global.Config.DispMessagey;
|
|
private int _dispAutoholdx = Global.Config.DispAutoholdx;
|
|
private int _dispAutoholdy = Global.Config.DispAutoholdy;
|
|
|
|
private int _messageColor = Global.Config.MessagesColor;
|
|
private int _alertColor = Global.Config.AlertMessageColor;
|
|
private int _movieInput = Global.Config.MovieInput;
|
|
|
|
private int _dispFpSanchor = Global.Config.DispFPSanchor;
|
|
private int _dispFrameanchor = Global.Config.DispFrameanchor;
|
|
private int _dispLaganchor = Global.Config.DispLaganchor;
|
|
private int _dispInputanchor = Global.Config.DispInpanchor;
|
|
private int _dispRecanchor = Global.Config.DispRecanchor;
|
|
private int _dispMultiAnchor = Global.Config.DispMultianchor;
|
|
private int _dispMessageAnchor = Global.Config.DispMessageanchor;
|
|
private int _dispAutoholdAnchor = Global.Config.DispAutoholdanchor;
|
|
|
|
private readonly Brush _brush = Brushes.Black;
|
|
private int _px;
|
|
private int _py;
|
|
private bool _mousedown;
|
|
|
|
public MessageConfig()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void MessageConfig_Load(object sender, EventArgs e)
|
|
{
|
|
SetMaxXY();
|
|
MessageColorDialog.Color = Color.FromArgb(_messageColor);
|
|
AlertColorDialog.Color = Color.FromArgb(_alertColor);
|
|
LInputColorDialog.Color = Color.FromArgb(_lastInputColor);
|
|
MovieInputColorDialog.Color = Color.FromArgb(_movieInput);
|
|
SetColorBox();
|
|
SetPositionInfo();
|
|
StackMessagesCheckbox.Checked = Global.Config.StackOSDMessages;
|
|
}
|
|
|
|
private void SetMaxXY()
|
|
{
|
|
var video = BizHawk.Emulation.Common.VideoProviderGlue.VideoProvider(Global.Emulator);
|
|
XNumeric.Maximum = video.BufferWidth - 12;
|
|
YNumeric.Maximum = video.BufferHeight - 12;
|
|
PositionPanel.Size = new Size(video.BufferWidth + 2, video.BufferHeight + 2);
|
|
|
|
PositionGroupBox.Size = new Size(
|
|
Math.Max(video.BufferWidth, UIHelper.ScaleX(128)) + UIHelper.ScaleX(44),
|
|
video.BufferHeight + UIHelper.ScaleY(52));
|
|
}
|
|
|
|
private void SetColorBox()
|
|
{
|
|
_messageColor = MessageColorDialog.Color.ToArgb();
|
|
ColorPanel.BackColor = MessageColorDialog.Color;
|
|
ColorText.Text = String.Format("{0:X8}", _messageColor);
|
|
|
|
_alertColor = AlertColorDialog.Color.ToArgb();
|
|
AlertColorPanel.BackColor = AlertColorDialog.Color;
|
|
AlertColorText.Text = String.Format("{0:X8}", _alertColor);
|
|
|
|
_lastInputColor = LInputColorDialog.Color.ToArgb();
|
|
LInputColorPanel.BackColor = LInputColorDialog.Color;
|
|
LInputText.Text = String.Format("{0:X8}", _lastInputColor);
|
|
|
|
_movieInput = MovieInputColorDialog.Color.ToArgb();
|
|
MovieInputColor.BackColor = MovieInputColorDialog.Color;
|
|
MovieInputText.Text = String.Format("{0:X8}", _movieInput);
|
|
}
|
|
|
|
private void SetAnchorRadio(int anchor)
|
|
{
|
|
switch (anchor)
|
|
{
|
|
default:
|
|
case 0:
|
|
TL.Checked = true; break;
|
|
case 1:
|
|
TR.Checked = true; break;
|
|
case 2:
|
|
BL.Checked = true; break;
|
|
case 3:
|
|
BR.Checked = true; break;
|
|
}
|
|
}
|
|
|
|
private void SetPositionInfo()
|
|
{
|
|
if (FPSRadio.Checked)
|
|
{
|
|
XNumeric.Value = _dispFpSx;
|
|
YNumeric.Value = _dispFpSy;
|
|
_px = _dispFpSx;
|
|
_py = _dispFpSy;
|
|
SetAnchorRadio(_dispFpSanchor);
|
|
}
|
|
else if (FrameCounterRadio.Checked)
|
|
{
|
|
XNumeric.Value = _dispFrameCx;
|
|
YNumeric.Value = _dispFrameCy;
|
|
_px = _dispFrameCx;
|
|
_py = _dispFrameCy;
|
|
SetAnchorRadio(_dispFrameanchor);
|
|
}
|
|
else if (LagCounterRadio.Checked)
|
|
{
|
|
XNumeric.Value = _dispLagx;
|
|
YNumeric.Value = _dispLagy;
|
|
_px = _dispLagx;
|
|
_py = _dispLagy;
|
|
SetAnchorRadio(_dispLaganchor);
|
|
}
|
|
else if (InputDisplayRadio.Checked)
|
|
{
|
|
XNumeric.Value = _dispInpx;
|
|
XNumeric.Value = _dispInpy;
|
|
_px = _dispInpx;
|
|
_py = _dispInpy;
|
|
SetAnchorRadio(_dispInputanchor);
|
|
}
|
|
else if (MessagesRadio.Checked)
|
|
{
|
|
XNumeric.Value = _dispMessagex;
|
|
YNumeric.Value = _dispMessagey;
|
|
_px = _dispMessagex;
|
|
_py = _dispMessagey;
|
|
SetAnchorRadio(_dispMessageAnchor);
|
|
}
|
|
else if (RerecordsRadio.Checked)
|
|
{
|
|
XNumeric.Value = _dispRecx;
|
|
YNumeric.Value = _dispRecy;
|
|
_px = _dispRecx;
|
|
_py = _dispRecy;
|
|
SetAnchorRadio(_dispRecanchor);
|
|
}
|
|
else if (MultitrackRadio.Checked)
|
|
{
|
|
XNumeric.Value = _dispMultix;
|
|
YNumeric.Value = _dispMultiy;
|
|
_px = _dispMultix;
|
|
_py = _dispMultiy;
|
|
SetAnchorRadio(_dispMultiAnchor);
|
|
}
|
|
else if (AutoholdRadio.Checked)
|
|
{
|
|
XNumeric.Value = _dispAutoholdx;
|
|
YNumeric.Value = _dispAutoholdy;
|
|
_px = _dispAutoholdx;
|
|
_py = _dispAutoholdy;
|
|
SetAnchorRadio(_dispAutoholdAnchor);
|
|
}
|
|
|
|
PositionPanel.Refresh();
|
|
XNumeric.Refresh();
|
|
YNumeric.Refresh();
|
|
SetPositionLabels();
|
|
}
|
|
|
|
private void SaveSettings()
|
|
{
|
|
Global.Config.DispFPSx = _dispFpSx;
|
|
Global.Config.DispFPSy = _dispFpSy;
|
|
Global.Config.DispFrameCx = _dispFrameCx;
|
|
Global.Config.DispFrameCy = _dispFrameCy;
|
|
Global.Config.DispLagx = _dispLagx;
|
|
Global.Config.DispLagy = _dispLagy;
|
|
Global.Config.DispInpx = _dispInpx;
|
|
Global.Config.DispInpy = _dispInpy;
|
|
Global.Config.DispRecx = _dispRecx;
|
|
Global.Config.DispRecy = _dispRecy;
|
|
Global.Config.DispMultix = _dispMultix;
|
|
Global.Config.DispMultiy = _dispMultiy;
|
|
Global.Config.DispMessagex = _dispMessagex;
|
|
Global.Config.DispMessagey = _dispMessagey;
|
|
Global.Config.DispAutoholdx = _dispAutoholdx;
|
|
Global.Config.DispAutoholdy = _dispAutoholdy;
|
|
|
|
Global.Config.MessagesColor = _messageColor;
|
|
Global.Config.AlertMessageColor = _alertColor;
|
|
Global.Config.LastInputColor = _lastInputColor;
|
|
Global.Config.MovieInput = _movieInput;
|
|
Global.Config.DispFPSanchor = _dispFpSanchor;
|
|
Global.Config.DispFrameanchor = _dispFrameanchor;
|
|
Global.Config.DispLaganchor = _dispLaganchor;
|
|
Global.Config.DispInpanchor = _dispInputanchor;
|
|
Global.Config.DispRecanchor = _dispRecanchor;
|
|
Global.Config.DispMultianchor = _dispMultiAnchor;
|
|
Global.Config.DispMessageanchor = _dispMessageAnchor;
|
|
Global.Config.DispAutoholdanchor = _dispAutoholdAnchor;
|
|
|
|
Global.Config.StackOSDMessages = StackMessagesCheckbox.Checked;
|
|
}
|
|
|
|
private void OK_Click(object sender, EventArgs e)
|
|
{
|
|
SaveSettings();
|
|
GlobalWin.OSD.AddMessage("Message settings saved");
|
|
Close();
|
|
}
|
|
|
|
private void MessageTypeRadio_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
SetPositionInfo();
|
|
}
|
|
|
|
private void XNumericChange()
|
|
{
|
|
_px = (int)XNumeric.Value;
|
|
SetPositionLabels();
|
|
PositionPanel.Refresh();
|
|
}
|
|
|
|
private void YNumericChange()
|
|
{
|
|
_py = (int)YNumeric.Value;
|
|
SetPositionLabels();
|
|
PositionPanel.Refresh();
|
|
}
|
|
|
|
private void Cancel_Click(object sender, EventArgs e)
|
|
{
|
|
GlobalWin.OSD.AddMessage("Message config aborted");
|
|
Close();
|
|
}
|
|
|
|
private void PositionPanel_MouseEnter(object sender, EventArgs e)
|
|
{
|
|
Cursor = Cursors.Hand;
|
|
}
|
|
|
|
private void PositionPanel_MouseLeave(object sender, EventArgs e)
|
|
{
|
|
Cursor = Cursors.Default;
|
|
}
|
|
|
|
private void PositionPanel_Paint(object sender, PaintEventArgs e)
|
|
{
|
|
int x = 0;
|
|
int y = 0;
|
|
|
|
if (TL.Checked)
|
|
{
|
|
x = _px;
|
|
y = _py;
|
|
}
|
|
else if (TR.Checked)
|
|
{
|
|
x = (int)XNumeric.Maximum - _px;
|
|
y = _py;
|
|
}
|
|
else if (BL.Checked)
|
|
{
|
|
x = _px;
|
|
y = (int)YNumeric.Maximum - _py;
|
|
}
|
|
else if (BR.Checked)
|
|
{
|
|
x = (int)XNumeric.Maximum - _px;
|
|
y = (int)YNumeric.Maximum - _py;
|
|
}
|
|
|
|
var p = new Pen(_brush);
|
|
e.Graphics.DrawLine(p, new Point(x, y), new Point(x + 8, y + 8));
|
|
e.Graphics.DrawLine(p, new Point(x + 8, y), new Point(x, y + 8));
|
|
e.Graphics.DrawRectangle(p, new Rectangle(x, y, 8, 8));
|
|
}
|
|
|
|
private void PositionPanel_MouseDown(object sender, MouseEventArgs e)
|
|
{
|
|
Cursor = Cursors.Arrow;
|
|
_mousedown = true;
|
|
SetNewPosition(e.X, e.Y);
|
|
}
|
|
|
|
private void PositionPanel_MouseUp(object sender, MouseEventArgs e)
|
|
{
|
|
Cursor = Cursors.Hand;
|
|
_mousedown = false;
|
|
}
|
|
|
|
private void SetNewPosition(int mx, int my)
|
|
{
|
|
if (mx < 0) mx = 0;
|
|
if (my < 0) my = 0;
|
|
if (mx > XNumeric.Maximum) mx = (int)XNumeric.Maximum;
|
|
if (my > YNumeric.Maximum) my = (int)YNumeric.Maximum;
|
|
|
|
|
|
if (TL.Checked)
|
|
{
|
|
//Do nothing
|
|
}
|
|
else if (TR.Checked)
|
|
{
|
|
mx = (int)XNumeric.Maximum - mx;
|
|
}
|
|
else if (BL.Checked)
|
|
{
|
|
my = (int)YNumeric.Maximum - my;
|
|
}
|
|
else if (BR.Checked)
|
|
{
|
|
mx = (int)XNumeric.Maximum - mx;
|
|
my = (int)YNumeric.Maximum - my;
|
|
}
|
|
|
|
XNumeric.Value = mx;
|
|
YNumeric.Value = my;
|
|
_px = mx;
|
|
_py = my;
|
|
|
|
PositionPanel.Refresh();
|
|
SetPositionLabels();
|
|
}
|
|
|
|
private void PositionPanel_MouseMove(object sender, MouseEventArgs e)
|
|
{
|
|
if (_mousedown)
|
|
{
|
|
SetNewPosition(e.X, e.Y);
|
|
}
|
|
}
|
|
|
|
private void SetPositionLabels()
|
|
{
|
|
if (FPSRadio.Checked)
|
|
{
|
|
_dispFpSx = _px;
|
|
_dispFpSy = _py;
|
|
}
|
|
else if (FrameCounterRadio.Checked)
|
|
{
|
|
_dispFrameCx = _px;
|
|
_dispFrameCy = _py;
|
|
}
|
|
else if (LagCounterRadio.Checked)
|
|
{
|
|
_dispLagx = _px;
|
|
_dispLagy = _py;
|
|
}
|
|
else if (InputDisplayRadio.Checked)
|
|
{
|
|
_dispInpx = _px;
|
|
_dispInpy = _py;
|
|
}
|
|
else if (RerecordsRadio.Checked)
|
|
{
|
|
_dispRecx = _px;
|
|
_dispRecy = _py;
|
|
}
|
|
else if (MultitrackRadio.Checked)
|
|
{
|
|
_dispMultix = _px;
|
|
_dispMultiy = _py;
|
|
}
|
|
else if (MessagesRadio.Checked)
|
|
{
|
|
_dispMessagex = _px;
|
|
_dispMessagey = _py;
|
|
}
|
|
else if (AutoholdRadio.Checked)
|
|
{
|
|
_dispAutoholdx = _px;
|
|
_dispAutoholdy = _py;
|
|
}
|
|
|
|
FpsPosLabel.Text = _dispFpSx + ", " + _dispFpSy;
|
|
FCLabel.Text = _dispFrameCx + ", " + _dispFrameCy;
|
|
LagLabel.Text = _dispLagx + ", " + _dispLagy;
|
|
InpLabel.Text = _dispInpx + ", " + _dispInpy;
|
|
RerecLabel.Text = _dispRecx + ", " + _dispRecy;
|
|
MultitrackLabel.Text = _dispMultix + ", " + _dispMultiy;
|
|
MessLabel.Text = _dispMessagex + ", " + _dispMessagey;
|
|
AutoholdLabel.Text = _dispAutoholdx + ", " + _dispAutoholdy;
|
|
}
|
|
|
|
private void ResetDefaultsButton_Click(object sender, EventArgs e)
|
|
{
|
|
Global.Config.DispFPSx = 0;
|
|
Global.Config.DispFPSy = 0;
|
|
Global.Config.DispFrameCx = 0;
|
|
Global.Config.DispFrameCy = 12;
|
|
Global.Config.DispLagx = 0;
|
|
Global.Config.DispLagy = 36;
|
|
Global.Config.DispInpx = 0;
|
|
Global.Config.DispInpy = 24;
|
|
Global.Config.DispRecx = 0;
|
|
Global.Config.DispRecy = 48;
|
|
Global.Config.DispMultix = 0;
|
|
Global.Config.DispMultiy = 14;
|
|
Global.Config.DispMessagex = 3;
|
|
Global.Config.DispMessagey = 0;
|
|
Global.Config.DispAutoholdx = 0;
|
|
Global.Config.DispAutoholdy = 0;
|
|
|
|
Global.Config.MessagesColor = -1;
|
|
Global.Config.AlertMessageColor = -65536;
|
|
Global.Config.LastInputColor = -23296;
|
|
Global.Config.MovieInput = -8355712;
|
|
|
|
_messageColor = Global.Config.MessagesColor;
|
|
_alertColor = Global.Config.AlertMessageColor;
|
|
_lastInputColor = Global.Config.LastInputColor;
|
|
_movieInput = Global.Config.MovieInput;
|
|
|
|
MessageColorDialog.Color = Color.FromArgb(_messageColor);
|
|
AlertColorDialog.Color = Color.FromArgb(_alertColor);
|
|
LInputColorDialog.Color = Color.FromArgb(_lastInputColor);
|
|
MovieInputColorDialog.Color = Color.FromArgb(_movieInput);
|
|
|
|
Global.Config.DispFPSanchor = 0;
|
|
Global.Config.DispFrameanchor = 0;
|
|
Global.Config.DispLaganchor = 0;
|
|
Global.Config.DispInpanchor = 0;
|
|
Global.Config.DispRecanchor = 0;
|
|
Global.Config.DispMultianchor = 1;
|
|
Global.Config.DispMessageanchor = 2;
|
|
Global.Config.DispAutoholdanchor = 1;
|
|
|
|
_dispFpSx = Global.Config.DispFPSx;
|
|
_dispFpSy = Global.Config.DispFPSy;
|
|
_dispFrameCx = Global.Config.DispFrameCx;
|
|
_dispFrameCy = Global.Config.DispFrameCy;
|
|
_dispLagx = Global.Config.DispLagx;
|
|
_dispLagy = Global.Config.DispLagy;
|
|
_dispInpx = Global.Config.DispInpx;
|
|
_dispInpy = Global.Config.DispInpy;
|
|
_dispRecx = Global.Config.DispRecx;
|
|
_dispRecy = Global.Config.DispRecy;
|
|
_dispMultix = Global.Config.DispMultix;
|
|
_dispMultiy = Global.Config.DispMultiy;
|
|
_dispMessagex = Global.Config.DispMessagex;
|
|
_dispMessagey = Global.Config.DispMessagey;
|
|
_dispAutoholdx = Global.Config.DispAutoholdx;
|
|
_dispAutoholdy = Global.Config.DispAutoholdy;
|
|
|
|
_dispFpSanchor = Global.Config.DispFPSanchor;
|
|
_dispFrameanchor = Global.Config.DispFrameanchor;
|
|
_dispLaganchor = Global.Config.DispLaganchor;
|
|
_dispInputanchor = Global.Config.DispInpanchor;
|
|
_dispRecanchor = Global.Config.DispRecanchor;
|
|
_dispMultiAnchor = Global.Config.DispMultianchor;
|
|
_dispMessageAnchor = Global.Config.DispMessageanchor;
|
|
_dispAutoholdAnchor = Global.Config.DispAutoholdanchor;
|
|
|
|
SetMaxXY();
|
|
SetColorBox();
|
|
SetPositionInfo();
|
|
|
|
StackMessagesCheckbox.Checked = Global.Config.StackOSDMessages = true;
|
|
}
|
|
|
|
private void SetAnchorValue(int value)
|
|
{
|
|
if (FPSRadio.Checked)
|
|
{
|
|
_dispFpSanchor = value;
|
|
}
|
|
else if (FrameCounterRadio.Checked)
|
|
{
|
|
_dispFrameanchor = value;
|
|
}
|
|
else if (LagCounterRadio.Checked)
|
|
{
|
|
_dispLaganchor = value;
|
|
}
|
|
else if (InputDisplayRadio.Checked)
|
|
{
|
|
_dispInputanchor = value;
|
|
}
|
|
else if (MessagesRadio.Checked)
|
|
{
|
|
_dispMessageAnchor = value;
|
|
}
|
|
else if (RerecordsRadio.Checked)
|
|
{
|
|
_dispRecanchor = value;
|
|
}
|
|
else if (MultitrackRadio.Checked)
|
|
{
|
|
_dispMultiAnchor = value;
|
|
}
|
|
else if (AutoholdRadio.Checked)
|
|
{
|
|
_dispAutoholdAnchor = value;
|
|
}
|
|
}
|
|
|
|
private void TL_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (TL.Checked)
|
|
{
|
|
SetAnchorValue(0);
|
|
}
|
|
PositionPanel.Refresh();
|
|
}
|
|
|
|
private void TR_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (TR.Checked)
|
|
{
|
|
SetAnchorValue(1);
|
|
}
|
|
PositionPanel.Refresh();
|
|
}
|
|
|
|
private void BL_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (BL.Checked)
|
|
{
|
|
SetAnchorValue(2);
|
|
}
|
|
PositionPanel.Refresh();
|
|
}
|
|
|
|
private void BR_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (BR.Checked)
|
|
{
|
|
SetAnchorValue(3);
|
|
}
|
|
PositionPanel.Refresh();
|
|
}
|
|
|
|
private void XNumeric_Click(object sender, EventArgs e)
|
|
{
|
|
XNumericChange();
|
|
}
|
|
|
|
private void YNumeric_Click(object sender, EventArgs e)
|
|
{
|
|
YNumericChange();
|
|
}
|
|
|
|
private void ColorPanel_Click(object sender, EventArgs e)
|
|
{
|
|
if (MessageColorDialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
SetColorBox();
|
|
}
|
|
}
|
|
|
|
private void AlertColorPanel_Click(object sender, EventArgs e)
|
|
{
|
|
if (AlertColorDialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
SetColorBox();
|
|
}
|
|
}
|
|
|
|
private void LInputColorPanel_Click(object sender, EventArgs e)
|
|
{
|
|
if (LInputColorDialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
SetColorBox();
|
|
}
|
|
}
|
|
|
|
private void MovieInputColor_Click(object sender, EventArgs e)
|
|
{
|
|
if (MovieInputColorDialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
SetColorBox();
|
|
}
|
|
}
|
|
|
|
private void XNumeric_KeyUp(object sender, KeyEventArgs e)
|
|
{
|
|
XNumericChange();
|
|
}
|
|
|
|
private void YNumeric_KeyUp(object sender, KeyEventArgs e)
|
|
{
|
|
YNumericChange();
|
|
}
|
|
}
|
|
}
|