aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <ecoal95@gmail.com>2016-02-20 21:36:24 +0100
committerEmilio Cobos Álvarez <ecoal95@gmail.com>2016-03-02 20:14:15 +0100
commit48dee6413dae56e3a41832a8dc415d5cc6741fa8 (patch)
treea126899e943cce1ca7a5a2cc80531cbfbf0f16de /components/script
parentc3786437a39faf2c52b66f7dcc3b8a9430a62dbc (diff)
downloadservo-48dee6413dae56e3a41832a8dc415d5cc6741fa8.tar.gz
servo-48dee6413dae56e3a41832a8dc415d5cc6741fa8.zip
script/layout: Refactor mouse_over since it now basically uses hit_test
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/document.rs22
-rw-r--r--components/script/layout_interface.rs5
2 files changed, 8 insertions, 19 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 966d245628b..d3bbfded3b4 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -80,7 +80,7 @@ use html5ever::tree_builder::{LimitedQuirks, NoQuirks, Quirks, QuirksMode};
use ipc_channel::ipc::{self, IpcSender};
use js::jsapi::JS_GetRuntime;
use js::jsapi::{JSContext, JSObject, JSRuntime};
-use layout_interface::{HitTestResponse, MouseOverResponse};
+use layout_interface::HitTestResponse;
use layout_interface::{LayoutChan, Msg, ReflowQueryType};
use msg::constellation_msg::{ALT, CONTROL, SHIFT, SUPER};
use msg::constellation_msg::{ConstellationChan, Key, KeyModifiers, KeyState};
@@ -563,9 +563,9 @@ impl Document {
.map(Root::upcast)
}
- pub fn hit_test(&self, page_point: &Point2D<f32>) -> Option<UntrustedNodeAddress> {
+ pub fn hit_test(&self, page_point: &Point2D<f32>, update_cursor: bool) -> Option<UntrustedNodeAddress> {
assert!(self.GetDocumentElement().is_some());
- match self.window.layout().hit_test(*page_point) {
+ match self.window.layout().hit_test(*page_point, update_cursor) {
Ok(HitTestResponse(node_address)) => Some(node_address),
Err(()) => {
debug!("layout query error");
@@ -574,14 +574,6 @@ impl Document {
}
}
- pub fn get_node_under_mouse(&self, page_point: &Point2D<f32>) -> Option<UntrustedNodeAddress> {
- assert!(self.GetDocumentElement().is_some());
- match self.window.layout().mouse_over(*page_point) {
- Ok(MouseOverResponse(node_address)) => Some(node_address),
- Err(()) => None,
- }
- }
-
// https://html.spec.whatwg.org/multipage/#current-document-readiness
pub fn set_ready_state(&self, state: DocumentReadyState) {
match state {
@@ -693,7 +685,7 @@ impl Document {
let page_point = Point2D::new(client_point.x + self.window.PageXOffset() as f32,
client_point.y + self.window.PageYOffset() as f32);
- let node = match self.hit_test(&page_point) {
+ let node = match self.hit_test(&page_point, false) {
Some(node_address) => {
debug!("node address is {:?}", node_address);
node::from_untrusted_node_address(js_runtime, node_address)
@@ -811,7 +803,7 @@ impl Document {
let mouse_over_address = client_point.as_ref().map(|client_point| {
let page_point = Point2D::new(client_point.x + self.window.PageXOffset() as f32,
client_point.y + self.window.PageYOffset() as f32);
- self.get_node_under_mouse(&page_point)
+ self.hit_test(&page_point, true)
}).unwrap_or(None);
let mut mouse_over_targets = RootedVec::<JS<Element>>::new();
@@ -918,7 +910,7 @@ impl Document {
TouchEventType::Cancel => "touchcancel",
};
- let node = match self.hit_test(&point) {
+ let node = match self.hit_test(&point, false) {
Some(node_address) => node::from_untrusted_node_address(js_runtime, node_address),
None => return false,
};
@@ -2585,7 +2577,7 @@ impl DocumentMethods for Document {
let js_runtime = unsafe { JS_GetRuntime(window.get_cx()) };
- match self.hit_test(point) {
+ match self.hit_test(point, false) {
Some(untrusted_node_address) => {
let node = node::from_untrusted_node_address(js_runtime, untrusted_node_address);
let parent_node = node.GetParentNode().unwrap();
diff --git a/components/script/layout_interface.rs b/components/script/layout_interface.rs
index 4ad7c241f14..3976f0a8d20 100644
--- a/components/script/layout_interface.rs
+++ b/components/script/layout_interface.rs
@@ -105,9 +105,7 @@ pub trait LayoutRPC {
/// Requests the geometry of this node. Used by APIs such as `clientTop`.
fn node_geometry(&self) -> NodeGeometryResponse;
/// Requests the node containing the point of interest
- fn hit_test(&self, point: Point2D<f32>) -> Result<HitTestResponse, ()>;
- /// Query layout for the topmost node under the mouse.
- fn mouse_over(&self, point: Point2D<f32>) -> Result<MouseOverResponse, ()>;
+ fn hit_test(&self, point: Point2D<f32>, update_cursor: bool) -> Result<HitTestResponse, ()>;
/// Query layout for the resolved value of a given CSS property
fn resolved_style(&self) -> ResolvedStyleResponse;
fn offset_parent(&self) -> OffsetParentResponse;
@@ -140,7 +138,6 @@ pub struct NodeGeometryResponse {
pub client_rect: Rect<i32>,
}
pub struct HitTestResponse(pub UntrustedNodeAddress);
-pub struct MouseOverResponse(pub UntrustedNodeAddress);
pub struct ResolvedStyleResponse(pub Option<String>);
#[derive(Clone)]