Added X11Mouse driver.

This commit is contained in:
the_fiddler 2007-09-24 20:56:50 +00:00
parent c8fa8a7b93
commit 9bd06cf09e
3 changed files with 79 additions and 6 deletions

View file

@ -1065,4 +1065,35 @@ XF86VidModeGetGammaRampSize(
#endregion
public enum MouseMask
{
Button1MotionMask = (1 << 8),
Button2MotionMask = (1 << 9),
Button3MotionMask = (1 << 10),
Button4MotionMask = (1 << 11),
Button5MotionMask = (1 << 12),
Button1Mask = (1 << 8),
Button2Mask = (1 << 9),
Button3Mask = (1 << 10),
Button4Mask = (1 << 11),
Button5Mask = (1 << 12),
ShiftMask = (1 << 0),
LockMask = (1 << 1),
ControlMask = (1 << 2),
Mod1Mask = (1 << 3),
Mod2Mask = (1 << 4),
Mod3Mask = (1 << 5),
Mod4Mask = (1 << 6),
Mod5Mask = (1 << 7),
}
public enum MouseButton
{
Button1 = 1,
Button2 = 2,
Button3 = 3,
Button4 = 4,
Button5 = 5,
}
}

View file

@ -135,6 +135,14 @@ namespace OpenTK.Platform.X11
{
keyboardDriver.ProcessKeyboardEvent(e.KeyEvent);
}
while (API.CheckMaskEvent(window.Display, EventMask.ButtonPressMask | EventMask.ButtonPressMask, ref e))
{
mouseDriver.ProcessButton(e.ButtonEvent);
}
while (API.CheckMaskEvent(window.Display, EventMask.PointerMotionMask | EventMask.PointerMotionHintMask, ref e))
{
mouseDriver.ProcessMotion(e.MotionEvent);
}
/*
if (API.Pending(window.Display) > 0)
{

View file

@ -25,6 +25,15 @@ namespace OpenTK.Platform.X11
public X11Mouse(WindowInfo window)
{
this.window = window;
// Just create one mouse now.
// TODO: support for multiple devices through evdev.
Mouse m = new Mouse();
m.Description = "Default X11 mouse";
m.DeviceID = IntPtr.Zero;
m.NumberOfButtons = 5;
m.NumberOfWheels = 1;
mice.Add(m);
}
#endregion
@ -33,14 +42,39 @@ namespace OpenTK.Platform.X11
public IList<Mouse> Mouse
{
get { }
}
public int RegisterDevices()
{
throw new Exception("The method or operation is not implemented.");
get { return mice; }
}
#endregion
/// <summary>
/// Processes XButtonEvents.
/// </summary>
/// <param name="e">The X11.XButtonEvent to process.</param>
/// <returns>True if the event was processed, false otherwise.</returns>
internal bool ProcessButton(X11.XButtonEvent e)
{
Mouse m = mice[0];
bool pressed = e.type == XEventName.ButtonPress;
if ((e.state & (int)X11.MouseMask.Button1Mask) != 0) m[OpenTK.Input.MouseButton.Button1] = pressed;
if ((e.state & (int)X11.MouseMask.Button2Mask) != 0) m[OpenTK.Input.MouseButton.Button2] = pressed;
if ((e.state & (int)X11.MouseMask.Button3Mask) != 0) m[OpenTK.Input.MouseButton.Button3] = pressed;
if ((e.state & (int)X11.MouseMask.Button4Mask) != 0) m[OpenTK.Input.MouseButton.Button4] = pressed;
if ((e.state & (int)X11.MouseMask.Button5Mask) != 0) m[OpenTK.Input.MouseButton.Button5] = pressed;
return true;
}
/// <summary>
/// Processes XMotionEvents.
/// </summary>
/// <param name="e">The X11.XMotionEvent to process.</param>
/// <returns>True if the event was processed, false otherwise.</returns>
internal bool ProcessMotion(X11.XMotionEvent e)
{
Mouse m = mice[0];
m.X = e.x;
m.Y = e.y;
return true;
}
}
}