analog control panel - fix bug that was causing things to not update on mouse move

This commit is contained in:
adelikat 2013-11-16 03:27:43 +00:00
parent cce98bcfe4
commit d840c9fb8c
1 changed files with 29 additions and 30 deletions

View File

@ -10,18 +10,15 @@ namespace BizHawk.Client.EmuHawk
public bool HasValue { get; private set; } public bool HasValue { get; private set; }
private readonly Brush WhiteBrush = Brushes.White; private readonly Brush _white_brush = Brushes.White;
private readonly Brush BlackBrush = Brushes.Black; private readonly Brush _black_brush = Brushes.Black;
private readonly Brush GrayBrush = Brushes.LightGray; private readonly Brush _gray_brush = Brushes.LightGray;
private readonly Brush RedBrush = Brushes.Red; private readonly Brush _red_brush = Brushes.Red;
private readonly Brush BlueBrush = Brushes.DarkBlue; private readonly Brush _blue_brush = Brushes.DarkBlue;
private readonly Pen _white_pen; private readonly Pen _black_pen;
private readonly Pen BlackPen; private readonly Pen _blue_pen;
private readonly Pen GrayPen;
private readonly Pen RedPen;
private readonly Pen BluePen;
private Bitmap dot = new Bitmap(7, 7); private readonly Bitmap dot = new Bitmap(7, 7);
public AnalogControlPanel() public AnalogControlPanel()
{ {
@ -33,19 +30,19 @@ namespace BizHawk.Client.EmuHawk
SetStyle(ControlStyles.Opaque, true); SetStyle(ControlStyles.Opaque, true);
BackColor = Color.Gray; BackColor = Color.Gray;
Paint += AnalogControlPanel_Paint; Paint += AnalogControlPanel_Paint;
_white_pen = new Pen(WhiteBrush); new Pen(_white_brush);
BlackPen = new Pen(BlackBrush); _black_pen = new Pen(_black_brush);
GrayPen = new Pen(GrayBrush); new Pen(_gray_brush);
RedPen = new Pen(RedBrush); new Pen(_red_brush);
BluePen = new Pen(BlueBrush); _blue_pen = new Pen(_blue_brush);
BorderStyle = BorderStyle.Fixed3D; BorderStyle = BorderStyle.Fixed3D;
// Draw the dot into a bitmap // Draw the dot into a bitmap
Graphics g = Graphics.FromImage(dot); Graphics g = Graphics.FromImage(dot);
g.Clear(Color.Transparent); g.Clear(Color.Transparent);
g.FillRectangle(RedBrush, 2, 0, 3, 7); g.FillRectangle(_red_brush, 2, 0, 3, 7);
g.FillRectangle(RedBrush, 1, 1, 5, 5); g.FillRectangle(_red_brush, 1, 1, 5, 5);
g.FillRectangle(RedBrush, 0, 2, 7, 3); g.FillRectangle(_red_brush, 0, 2, 7, 3);
} }
private int RealToGFX(int val) private int RealToGFX(int val)
@ -66,16 +63,16 @@ namespace BizHawk.Client.EmuHawk
unchecked unchecked
{ {
//Background //Background
e.Graphics.FillRectangle(GrayBrush, 0, 0, 128, 128); e.Graphics.FillRectangle(_gray_brush, 0, 0, 128, 128);
e.Graphics.FillEllipse(WhiteBrush, 0, 0, 127, 127); e.Graphics.FillEllipse(_white_brush, 0, 0, 127, 127);
e.Graphics.DrawEllipse(BlackPen, 0, 0, 127, 127); e.Graphics.DrawEllipse(_black_pen, 0, 0, 127, 127);
e.Graphics.DrawLine(BlackPen, 64, 0, 64, 127); e.Graphics.DrawLine(_black_pen, 64, 0, 64, 127);
e.Graphics.DrawLine(BlackPen, 0, 63, 127, 63); e.Graphics.DrawLine(_black_pen, 0, 63, 127, 63);
//Line //Line
if (HasValue) if (HasValue)
{ {
e.Graphics.DrawLine(BluePen, 64, 63, RealToGFX(X), 127 - RealToGFX(Y)); e.Graphics.DrawLine(_blue_pen, 64, 63, RealToGFX(X), 127 - RealToGFX(Y));
e.Graphics.DrawImage(dot, RealToGFX(X) - 3, 127 - RealToGFX(Y) - 3); e.Graphics.DrawImage(dot, RealToGFX(X) - 3, 127 - RealToGFX(Y) - 3);
} }
} }
@ -89,12 +86,14 @@ namespace BizHawk.Client.EmuHawk
Y = GFXToReal(-(e.Y - 63)); Y = GFXToReal(-(e.Y - 63));
HasValue = true; HasValue = true;
} }
if (e.Button == System.Windows.Forms.MouseButtons.Right) if (e.Button == MouseButtons.Right)
{ {
Clear(); Clear();
} }
Refresh(); Refresh();
base.OnMouseMove(e);
} }
protected override void OnMouseUp(MouseEventArgs e) protected override void OnMouseUp(MouseEventArgs e)
@ -123,7 +122,7 @@ namespace BizHawk.Client.EmuHawk
Y = GFXToReal(-(e.Y - 63)); Y = GFXToReal(-(e.Y - 63));
HasValue = true; HasValue = true;
} }
if (e.Button == System.Windows.Forms.MouseButtons.Right) if (e.Button == MouseButtons.Right)
{ {
Clear(); Clear();
} }
@ -138,10 +137,10 @@ namespace BizHawk.Client.EmuHawk
HasValue = false; HasValue = false;
} }
public void SetPosition(int Xval, int Yval) public void SetPosition(int xval, int yval)
{ {
X = Xval; X = xval;
Y = Yval; Y = yval;
HasValue = true; HasValue = true;
Refresh(); Refresh();