Add MouseEvent to the Event enum

This commit is contained in:
Alexandre Bury 2017-10-08 16:56:15 -07:00
parent 997895347c
commit a68fd3493b

View File

@ -18,6 +18,8 @@ use Cursive;
use std::ops::Deref; use std::ops::Deref;
use std::rc::Rc; use std::rc::Rc;
use vec::Vec2;
/// Callback is a function that can be triggered by an event. /// Callback is a function that can be triggered by an event.
/// It has a mutable access to the cursive root. /// It has a mutable access to the cursive root.
#[derive(Clone)] #[derive(Clone)]
@ -196,6 +198,34 @@ impl Key {
} }
} }
/// One of the buttons present on the mouse
#[derive(PartialEq, Eq, Clone, Copy, Hash, Debug)]
pub enum MouseButton {
/// The left button, used for main actions.
Left,
/// Middle button, probably the wheel. Often pastes text in X11 on linux.
Middle,
/// The right button, for special actions.
Right,
// TODO: handle more buttons?
#[doc(hidden)]
Other,
}
/// Represents a possible event sent by the mouse.
#[derive(PartialEq, Eq, Clone, Copy, Hash, Debug)]
pub enum MouseEvent {
/// A button was pressed.
Press(MouseButton),
/// A button was released.
Release(MouseButton),
/// The wheel was moved up.
WheelUp,
/// The wheel was moved down.
WheelDown,
}
/// Represents an event as seen by the application. /// Represents an event as seen by the application.
#[derive(PartialEq, Eq, Clone, Hash, Debug)] #[derive(PartialEq, Eq, Clone, Hash, Debug)]
pub enum Event { pub enum Event {
@ -205,6 +235,9 @@ pub enum Event {
/// Event fired regularly when a auto-refresh is set. /// Event fired regularly when a auto-refresh is set.
Refresh, Refresh,
// TODO: have Char(modifier, char) and Key(modifier, key) enums?
/// A character was entered (includes numbers, punctuation, ...). /// A character was entered (includes numbers, punctuation, ...).
Char(char), Char(char),
/// A character was entered with the Ctrl key pressed. /// A character was entered with the Ctrl key pressed.
@ -227,9 +260,22 @@ pub enum Event {
/// A non-character key was pressed with the Ctrl and Alt keys pressed. /// A non-character key was pressed with the Ctrl and Alt keys pressed.
CtrlAlt(Key), CtrlAlt(Key),
/// A mouse event was sent.
Mouse {
/// Position of the top-left corner of the view receiving this event.
offset: Vec2,
/// Position of the mouse when this event was fired.
position: Vec2,
/// The mouse event itself.
event: MouseEvent,
},
// TODO: use a backend-dependent type for the unknown values?
/// An unknown event was received. /// An unknown event was received.
Unknown(Vec<u8>), Unknown(Vec<u8>),
// Having a doc-hidden event prevents people from having exhaustive matches,
// allowing us to add events in the future.
#[doc(hidden)] #[doc(hidden)]
/// The application is about to exit. /// The application is about to exit.
Exit, Exit,