Merge pull request #725 from paulrouget/forceTouch

TouchpadPressure event
This commit is contained in:
tomaka 2016-02-26 11:18:50 +01:00
commit 6a6d7a29d5
3 changed files with 16 additions and 6 deletions

View file

@ -1,6 +1,6 @@
[package] [package]
name = "glutin" name = "glutin"
version = "0.4.8" version = "0.4.9"
authors = ["The glutin contributors, Pierre Krieger <pierre.krieger1708@gmail.com>"] authors = ["The glutin contributors, Pierre Krieger <pierre.krieger1708@gmail.com>"]
description = "Cross-platform OpenGL context provider." description = "Cross-platform OpenGL context provider."
keywords = ["windowing", "opengl"] keywords = ["windowing", "opengl"]
@ -40,7 +40,7 @@ objc = "0.1.8"
[target.x86_64-apple-darwin.dependencies] [target.x86_64-apple-darwin.dependencies]
objc = "0.1.8" objc = "0.1.8"
cgl = "0.1" cgl = "0.1"
cocoa = "0.2" cocoa = "0.2.4"
core-foundation = "0" core-foundation = "0"
core-graphics = "0" core-graphics = "0"

View file

@ -42,7 +42,7 @@ use std::sync::Mutex;
use std::ascii::AsciiExt; use std::ascii::AsciiExt;
use std::ops::Deref; use std::ops::Deref;
use events::Event::{Awakened, MouseInput, MouseMoved, ReceivedCharacter, KeyboardInput, MouseWheel, Closed, Focused}; use events::Event::{Awakened, MouseInput, MouseMoved, ReceivedCharacter, KeyboardInput, MouseWheel, Closed, Focused, TouchpadPressure};
use events::ElementState::{Pressed, Released}; use events::ElementState::{Pressed, Released};
use events::MouseButton; use events::MouseButton;
use events; use events;
@ -225,7 +225,7 @@ impl<'a> Iterator for PollEventsIterator<'a> {
let event: Option<Event>; let event: Option<Event>;
unsafe { unsafe {
let nsevent = NSApp().nextEventMatchingMask_untilDate_inMode_dequeue_( let nsevent = NSApp().nextEventMatchingMask_untilDate_inMode_dequeue_(
NSAnyEventMask.bits(), NSAnyEventMask.bits() | NSEventMaskPressure.bits(),
NSDate::distantPast(nil), NSDate::distantPast(nil),
NSDefaultRunLoopMode, NSDefaultRunLoopMode,
YES); YES);
@ -250,7 +250,7 @@ impl<'a> Iterator for WaitEventsIterator<'a> {
let event: Option<Event>; let event: Option<Event>;
unsafe { unsafe {
let nsevent = NSApp().nextEventMatchingMask_untilDate_inMode_dequeue_( let nsevent = NSApp().nextEventMatchingMask_untilDate_inMode_dequeue_(
NSAnyEventMask.bits(), NSAnyEventMask.bits() | NSEventMaskPressure.bits(),
NSDate::distantFuture(nil), NSDate::distantFuture(nil),
NSDefaultRunLoopMode, NSDefaultRunLoopMode,
YES); YES);
@ -810,7 +810,7 @@ impl Clone for IdRef {
unsafe fn NSEventToEvent(window: &Window, nsevent: id) -> Option<Event> { unsafe fn NSEventToEvent(window: &Window, nsevent: id) -> Option<Event> {
if nsevent == nil { return None; } if nsevent == nil { return None; }
let event_type = msg_send![nsevent, type]; let event_type = nsevent.eventType();
NSApp().sendEvent_(if let NSKeyDown = event_type { nil } else { nsevent }); NSApp().sendEvent_(if let NSKeyDown = event_type { nil } else { nsevent });
match event_type { match event_type {
@ -893,6 +893,9 @@ unsafe fn NSEventToEvent(window: &Window, nsevent: id) -> Option<Event> {
}; };
Some(MouseWheel(delta)) Some(MouseWheel(delta))
}, },
NSEventTypePressure => {
Some(TouchpadPressure(nsevent.pressure(), nsevent.stage()))
},
_ => { None }, _ => { None },
} }
} }

View file

@ -36,6 +36,13 @@ pub enum Event {
/// An event from the mouse has been received. /// An event from the mouse has been received.
MouseInput(ElementState, MouseButton), MouseInput(ElementState, MouseButton),
/// Touchpad pressure event.
///
/// At the moment, only supported on Apple forcetouch-capable macbooks.
/// The parameters are: pressure level (value between 0 and 1 representing how hard the touchpad
/// is being pressed) and stage (integer representing the click level).
TouchpadPressure(f32, i64),
/// The event loop was woken up by another thread. /// The event loop was woken up by another thread.
Awakened, Awakened,