Opentk/Source/Examples/Tests/InputLogger.cs
the_fiddler ec7315500e New sample browser with documentation and source code display.
Reduced example categories to OpenGL, OpenAL, OpenTK. Updated all samples to reflect this change.
Moved startup and loading code into separate files.
2009-04-20 07:20:25 +00:00

312 lines
11 KiB
C#

#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*/
#endregion
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using OpenTK;
using OpenTK.Platform;
using OpenTK.Input;
using System.Diagnostics;
using System.Threading;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
namespace Examples.Tests
{
[Example("Input Logger", ExampleCategory.OpenTK, "Test")]
public partial class InputLogger : Form
{
#region Fields
Thread thread;
GameWindow hidden;
bool start;
Dictionary<IntPtr, ListBox> keyboardListBoxes = new Dictionary<IntPtr, ListBox>(4);
#endregion
#region Constructors
public InputLogger()
{
InitializeComponent();
}
#endregion
#region GameWindow
void LaunchGameWindow()
{
hidden = new GameWindow(320, 240, GraphicsMode.Default, "OpenTK | Hidden input window");
hidden.Load += hidden_Load;
hidden.Unload += hidden_Unload;
hidden.RenderFrame += new OpenTK.RenderFrameEvent(hidden_RenderFrame);
hidden.Run(60.0, 0.0);
}
void hidden_RenderFrame(GameWindow sender, RenderFrameEventArgs e)
{
GL.Clear(ClearBufferMask.ColorBufferBit);
sender.SwapBuffers();
}
void hidden_Load(GameWindow sender, EventArgs e)
{
hidden.VSync = VSyncMode.On;
start = true;
GL.ClearColor(Color.Black);
}
void hidden_Unload(GameWindow sender, EventArgs e)
{
this.BeginInvoke(on_hidden_unload, sender, e, this);
}
delegate void CloseTrigger(GameWindow sender, EventArgs e, Form f);
CloseTrigger on_hidden_unload = delegate(GameWindow sender, EventArgs e, Form f) { f.Close(); };
#endregion
#region Protected Members
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
thread = new Thread(LaunchGameWindow);
thread.Start();
while (!start)
Thread.Sleep(100);
keyboardListBoxes.Add(hidden.Keyboard.DeviceID, listBox1);
// Add available mice to the mouse input logger.
ChooseMouse.Items.Add(String.Format("Mouse {0} ({1})", 0, hidden.Mouse.Description));
ChooseMouse.SelectedIndex = 0;
hidden.Mouse.Move += LogMouseMove;
hidden.Mouse.WheelChanged += LogMouseWheelChanged;
hidden.Mouse.ButtonDown += LogMouseButtonDown;
hidden.Mouse.ButtonUp += LogMouseButtonUp;
hidden.Keyboard.KeyDown += LogKeyDown;
hidden.Keyboard.KeyUp += LogKeyUp;
#region Joysticks
foreach (JoystickDevice joystick in hidden.Joysticks)
{
comboBoxActiveJoystick.Items.Add(joystick.Description);
joystick.Move += delegate(object sender, JoystickMoveEventArgs args)
{
this.BeginInvoke(ControlLogJoystickMoved, this, sender, args);
};
joystick.ButtonDown += delegate(object sender, JoystickButtonEventArgs args)
{
this.BeginInvoke(ControlLogJoystickButtonDown, this, sender, args);
};
joystick.ButtonUp += delegate(object sender, JoystickButtonEventArgs args)
{
this.BeginInvoke(ControlLogJoystickButtonUp, this, sender, args);
};
}
if (comboBoxActiveJoystick.Items.Count > 0)
comboBoxActiveJoystick.SelectedIndex = 0;
#endregion
}
protected override void OnClosing(CancelEventArgs e)
{
base.OnClosing(e);
hidden.Exit();
while (hidden.Exists)
Thread.Sleep(100);
e.Cancel = false;
}
#endregion
#region Private Members
private void ChooseMouse_SelectedIndexChanged(object sender, EventArgs e)
{
MouseButtonsBox.Items.Clear();
}
#endregion
#region Logging Delegates
#region Mice
delegate void ControlLogMouseKey(GameWindow input_window, InputLogger control, object sender, MouseButtonEventArgs e);
ControlLogMouseKey ControlLogMouseKeyDown =
delegate(GameWindow input_window, InputLogger control, object sender, MouseButtonEventArgs e)
{
if ((sender as MouseDevice).DeviceID == input_window.Mouse.DeviceID)
{
control.MouseButtonsBox.Items.Add(e.Button);
System.Diagnostics.Debug.Print("Button down: {0}", e.Button);
}
};
ControlLogMouseKey ControlLogMouseKeyUp =
delegate(GameWindow input_window, InputLogger control, object sender, MouseButtonEventArgs e)
{
if ((sender as MouseDevice).DeviceID == input_window.Mouse.DeviceID)
{
control.MouseButtonsBox.Items.Remove(e.Button);
System.Diagnostics.Debug.Print("Button up: {0}", e.Button);
}
};
delegate void ControlLogMouseMove(GameWindow input_window, InputLogger control, object sender, MouseMoveEventArgs e);
ControlLogMouseMove ControlLogMouseMoveChanges =
delegate(GameWindow input_window, InputLogger control, object sender, MouseMoveEventArgs e)
{
control.MouseXText.Text = e.X.ToString();
control.MouseYText.Text = e.Y.ToString();
};
delegate void ControlLogMouseWheel(GameWindow input_window, InputLogger control, object sender, MouseWheelEventArgs e);
ControlLogMouseWheel ControlLogMouseWheelChanges =
delegate(GameWindow input_window, InputLogger control, object sender, MouseWheelEventArgs e)
{
control.MouseWheelText.Text = e.Value.ToString();
};
#endregion
#region Keyboards
delegate void ControlLogKeyboard(GameWindow input_window, InputLogger control, OpenTK.Input.KeyboardDevice sender, Key key);
ControlLogKeyboard ControlLogKeyboardDown =
delegate(GameWindow input_window, InputLogger control, KeyboardDevice sender, Key key)
{
control.keyboardListBoxes[sender.DeviceID].Items.Add(key);
};
ControlLogKeyboard ControlLogKeyboardUp =
delegate(GameWindow input_window, InputLogger control, KeyboardDevice sender, Key key)
{
control.keyboardListBoxes[sender.DeviceID].Items.Remove(key);
};
#endregion
#region Joysticks
delegate void ControlLogJoystickMove(InputLogger control, object sender, JoystickMoveEventArgs e);
ControlLogJoystickMove ControlLogJoystickMoved =
delegate(InputLogger control, object sender, JoystickMoveEventArgs e)
{
// Yes, there are things such as arrays. Tell that to the visual studio designer!
switch (e.Axis)
{
case JoystickAxis.Axis0: control.textBoxAxis1.Text = e.Value.ToString(); break;
case JoystickAxis.Axis1: control.textBoxAxis2.Text = e.Value.ToString(); break;
case JoystickAxis.Axis2: control.textBoxAxis3.Text = e.Value.ToString(); break;
case JoystickAxis.Axis3: control.textBoxAxis4.Text = e.Value.ToString(); break;
case JoystickAxis.Axis4: control.textBoxAxis5.Text = e.Value.ToString(); break;
case JoystickAxis.Axis5: control.textBoxAxis6.Text = e.Value.ToString(); break;
case JoystickAxis.Axis6: control.textBoxAxis7.Text = e.Value.ToString(); break;
case JoystickAxis.Axis7: control.textBoxAxis8.Text = e.Value.ToString(); break;
case JoystickAxis.Axis8: control.textBoxAxis9.Text = e.Value.ToString(); break;
case JoystickAxis.Axis9: control.textBoxAxis10.Text = e.Value.ToString(); break;
}
};
delegate void ControlLogJoystickButton(InputLogger control, object sender, JoystickButtonEventArgs e);
ControlLogJoystickButton ControlLogJoystickButtonDown =
delegate(InputLogger control, object sender, JoystickButtonEventArgs e)
{
if ((sender as JoystickDevice).Description == control.comboBoxActiveJoystick.Text)
{
control.JoystickButtonsBox.Items.Add(e.Button);
System.Diagnostics.Debug.Print("Joystick button down: {0}", e.Button);
}
};
ControlLogJoystickButton ControlLogJoystickButtonUp =
delegate(InputLogger control, object sender, JoystickButtonEventArgs e)
{
if ((sender as JoystickDevice).Description == control.comboBoxActiveJoystick.Text)
{
control.JoystickButtonsBox.Items.Remove(e.Button);
System.Diagnostics.Debug.Print("Joystick button down: {0}", e.Button);
}
};
#endregion
#endregion
#region Input Event Handlers
void LogMouseMove(object sender, MouseMoveEventArgs e)
{
this.BeginInvoke(ControlLogMouseMoveChanges, hidden, this, sender, e);
}
void LogMouseWheelChanged(object sender, MouseWheelEventArgs e)
{
this.BeginInvoke(ControlLogMouseWheelChanges, hidden, this, sender, e);
}
void LogMouseButtonDown(object sender, MouseButtonEventArgs e)
{
this.BeginInvoke(ControlLogMouseKeyDown, hidden, this, sender, e);
}
void LogMouseButtonUp(object sender, MouseButtonEventArgs e)
{
this.BeginInvoke(ControlLogMouseKeyUp, hidden, this, sender, e);
}
void LogKeyDown(KeyboardDevice sender, Key key)
{
this.BeginInvoke(ControlLogKeyboardDown, hidden, this, sender, key);
}
void LogKeyUp(KeyboardDevice sender, Key key)
{
this.BeginInvoke(ControlLogKeyboardUp, hidden, this, sender, key);
}
#endregion
#region public static void Main()
/// <summary>
/// Entry point of this example.
/// </summary>
[STAThread]
public static void Main()
{
using (InputLogger example = new InputLogger())
{
// Get the title and category of this example using reflection.
ExampleAttribute info = ((ExampleAttribute)example.GetType().GetCustomAttributes(false)[0]);
example.Text = String.Format("OpenTK | {0} {1}: {2}", info.Category, info.Difficulty, info.Title);
example.ShowDialog();
}
}
#endregion
}
}