diff options
author | Paul Rouget <me@paulrouget.com> | 2016-03-18 08:57:20 +0100 |
---|---|---|
committer | Paul Rouget <me@paulrouget.com> | 2016-04-05 18:42:28 +0800 |
commit | df6e7394d42595f34fa64dea01bb485c64589c73 (patch) | |
tree | 4e8b1e9845ecce90b33c37b976bceaad234cff7a /components/script/dom/forcetouchevent.rs | |
parent | 05a4dcdc3b38c0222ac417f826e06ce9d47068b2 (diff) | |
download | servo-df6e7394d42595f34fa64dea01bb485c64589c73.tar.gz servo-df6e7394d42595f34fa64dea01bb485c64589c73.zip |
forcetouch events support
This enables Apple forcetouch DOM events. It requires the preference dom.forcetouch.enabled.
The DOM events are described here:
- https://developer.apple.com/library/mac/documentation/AppleApplications/Conceptual/SafariJSProgTopics/RespondingtoForceTouchEventsfromJavaScript.html
The Cocoa mechanism is documented here:
- https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSEvent_Class/#//apple_ref/doc/uid/20000016-SW274
Diffstat (limited to 'components/script/dom/forcetouchevent.rs')
-rw-r--r-- | components/script/dom/forcetouchevent.rs | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/components/script/dom/forcetouchevent.rs b/components/script/dom/forcetouchevent.rs new file mode 100644 index 00000000000..b0fd6376760 --- /dev/null +++ b/components/script/dom/forcetouchevent.rs @@ -0,0 +1,59 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use dom::bindings::codegen::Bindings::ForceTouchEventBinding; +use dom::bindings::codegen::Bindings::ForceTouchEventBinding::ForceTouchEventMethods; +use dom::bindings::codegen::Bindings::UIEventBinding::UIEventMethods; +use dom::bindings::global::GlobalRef; +use dom::bindings::inheritance::Castable; +use dom::bindings::js::{Root}; +use dom::bindings::num::Finite; +use dom::bindings::reflector::reflect_dom_object; +use dom::uievent::UIEvent; +use dom::window::Window; +use util::str::DOMString; + +#[dom_struct] +pub struct ForceTouchEvent { + uievent: UIEvent, + force: f32, +} + +impl ForceTouchEvent { + fn new_inherited(force: f32) -> ForceTouchEvent { + ForceTouchEvent { + uievent: UIEvent::new_inherited(), + force: force, + } + } + + pub fn new(window: &Window, + type_: DOMString, + force: f32) -> Root<ForceTouchEvent> { + let event = box ForceTouchEvent::new_inherited(force); + let ev = reflect_dom_object(event, GlobalRef::Window(window), ForceTouchEventBinding::Wrap); + ev.upcast::<UIEvent>().InitUIEvent(type_, true, true, Some(window), 0); + ev + } +} + +impl<'a> ForceTouchEventMethods for &'a ForceTouchEvent { + + fn ServoForce(&self) -> Finite<f32> { + Finite::wrap(self.force) + } + + fn SERVO_FORCE_AT_MOUSE_DOWN(&self) -> Finite<f32> { + Finite::wrap(1.0) + } + + fn SERVO_FORCE_AT_FORCE_MOUSE_DOWN(&self) -> Finite<f32> { + Finite::wrap(2.0) + } + + // https://dom.spec.whatwg.org/#dom-event-istrusted + fn IsTrusted(&self) -> bool { + self.uievent.IsTrusted() + } +} |