aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/mouseevent.rs
diff options
context:
space:
mode:
authorMicah Tigley <mtigley@mozilla.com>2019-10-16 11:31:57 -0400
committerMicah Tigley <mtigley@mozilla.com>2019-10-17 15:32:44 -0400
commit4b93a2350c5a268d90ec54d35dcda5b3bdd92e05 (patch)
tree787d6ed87bd3a5cc15df0d87411909de8bc3b3ff /components/script/dom/mouseevent.rs
parent58c61d3aed273f29d0b19d80b194dc384ce147f0 (diff)
downloadservo-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.rs31
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()