#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*/
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using OpenTK.Input;
namespace OpenTK.Platform.X11
{
///
/// Drives Mouse devices on X11.
/// This class supports OpenTK, and is not intended for use by OpenTK programs.
///
internal sealed class X11Mouse : IMouseDriver
{
WindowInfo window;
List mice = new List();
#region Constructor
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
#region --- IMouseDriver Members ---
public IList Mouse
{
get { return mice; }
}
#endregion
///
/// Processes XButtonEvents.
///
/// The X11.XButtonEvent to process.
/// True if the event was processed, false otherwise.
internal bool ProcessButton(ref 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;
}
///
/// Processes XMotionEvents.
///
/// The X11.XMotionEvent to process.
/// True if the event was processed, false otherwise.
internal bool ProcessMotion(ref X11.XMotionEvent e)
{
Mouse m = mice[0];
m.X = e.x;
m.Y = e.y;
return true;
}
}
}