diff options
author | Micah Tigley <mtigley@mozilla.com> | 2019-10-16 11:31:57 -0400 |
---|---|---|
committer | Micah Tigley <mtigley@mozilla.com> | 2019-10-17 15:32:44 -0400 |
commit | 4b93a2350c5a268d90ec54d35dcda5b3bdd92e05 (patch) | |
tree | 787d6ed87bd3a5cc15df0d87411909de8bc3b3ff /components/script/dom/mouseevent.rs | |
parent | 58c61d3aed273f29d0b19d80b194dc384ce147f0 (diff) | |
download | servo-4b93a2350c5a268d90ec54d35dcda5b3bdd92e05.tar.gz servo-4b93a2350c5a268d90ec54d35dcda5b3bdd92e05.zip |
Implements pageX and pageY attributes
Diffstat (limited to 'components/script/dom/mouseevent.rs')
-rw-r--r-- | components/script/dom/mouseevent.rs | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/components/script/dom/mouseevent.rs b/components/script/dom/mouseevent.rs index 9b184a96da6..fc0f777ecd5 100644 --- a/components/script/dom/mouseevent.rs +++ b/components/script/dom/mouseevent.rs @@ -7,7 +7,7 @@ use crate::dom::bindings::codegen::Bindings::MouseEventBinding::MouseEventMethod use crate::dom::bindings::codegen::Bindings::UIEventBinding::UIEventMethods; use crate::dom::bindings::error::Fallible; use crate::dom::bindings::inheritance::Castable; -use crate::dom::bindings::reflector::reflect_dom_object; +use crate::dom::bindings::reflector::{reflect_dom_object, DomObject}; use crate::dom::bindings::root::{DomRoot, MutNullableDom}; use crate::dom::bindings::str::DOMString; use crate::dom::event::{Event, EventBubbles, EventCancelable}; @@ -27,6 +27,8 @@ pub struct MouseEvent { screen_y: Cell<i32>, client_x: Cell<i32>, client_y: Cell<i32>, + page_x: Cell<i32>, + page_y: Cell<i32>, ctrl_key: Cell<bool>, shift_key: Cell<bool>, alt_key: Cell<bool>, @@ -45,6 +47,8 @@ impl MouseEvent { screen_y: Cell::new(0), client_x: Cell::new(0), client_y: Cell::new(0), + page_x: Cell::new(0), + page_y: Cell::new(0), ctrl_key: Cell::new(false), shift_key: Cell::new(false), alt_key: Cell::new(false), @@ -104,6 +108,9 @@ impl MouseEvent { ); ev.buttons.set(buttons); ev.point_in_target.set(point_in_target); + // TODO: Set proper values in https://github.com/servo/servo/issues/24415 + ev.page_x.set(client_x); + ev.page_y.set(client_y); ev } @@ -163,6 +170,28 @@ impl MouseEventMethods for MouseEvent { self.client_y.get() } + // https://drafts.csswg.org/cssom-view/#dom-mouseevent-pagex + fn PageX(&self) -> i32 { + if self.upcast::<Event>().dispatching() { + self.page_x.get() + } else { + let global = self.global(); + let window = global.as_window(); + window.current_viewport().origin.x.to_px() + self.client_x.get() + } + } + + // https://drafts.csswg.org/cssom-view/#dom-mouseevent-pagey + fn PageY(&self) -> i32 { + if self.upcast::<Event>().dispatching() { + self.page_y.get() + } else { + let global = self.global(); + let window = global.as_window(); + window.current_viewport().origin.y.to_px() + self.client_y.get() + } + } + // https://w3c.github.io/uievents/#widl-MouseEvent-ctrlKey fn CtrlKey(&self) -> bool { self.ctrl_key.get() |