Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move body of ScriptTask::handle_mouse_move_event into a method on #5032

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Move body of ScriptTask::handle_mouse_move_event into a method on

Document #4984
  • Loading branch information
JIoJIaJIu committed Feb 23, 2015
commit 1eef07c11a702d0be246d6e6d795be2e1c48dd6b
@@ -77,6 +77,7 @@ use std::ascii::AsciiExt;
use std::cell::{Cell, Ref};
use std::default::Default;
use std::sync::mpsc::channel;
use std::num::ToPrimitive;
use time;

#[derive(PartialEq)]
@@ -199,6 +200,7 @@ pub trait DocumentHelpers<'a> {
fn send_title_to_compositor(self);
fn dirty_all_nodes(self);
fn handle_click_event(self, js_runtime: *mut JSRuntime, _button: uint, point: Point2D<f32>);
fn handle_mouse_move_event(self, js_runtime: *mut JSRuntime, point: Point2D<f32>, mouse_over_targets: &mut Option<Vec<JS<Node>>>) -> bool;
}

impl<'a> DocumentHelpers<'a> for JSRef<'a, Document> {
@@ -450,6 +452,91 @@ impl<'a> DocumentHelpers<'a> for JSRef<'a, Document> {
None => {}
}
}

fn handle_mouse_move_event (self, js_runtime: *mut JSRuntime, point: Point2D<f32>, mouse_over_targets: &mut Option<Vec<JS<Node>>>) -> bool{

This comment has been minimized.

@kmcallister

kmcallister Feb 23, 2015

Contributor

Nit: space before (

This comment has been minimized.

@kmcallister

kmcallister Feb 23, 2015

Contributor

Also can you wrap this line, and the line added in the trait, to fit within 100 columns (ideally, 80)?

let window = self.window.root();
let window = window.r();
let page = window.page();
match page.get_nodes_under_mouse(&point) {
Some(node_address) => {
let mut target_list = vec!();
let mut target_compare = false;

match *mouse_over_targets {
Some(ref mut mouse_over_targets) => {
for node in mouse_over_targets.iter_mut() {
let node = node.root();
node.r().set_hover_state(false);
}
}
None => {}
}

if node_address.len() > 0 {
let top_most_node =
node::from_untrusted_node_address(js_runtime, node_address[0]).root();

if let Some(ref frame) = *page.frame() {
let window = frame.window.root();

let x = point.x.to_i32().unwrap_or(0);
let y = point.y.to_i32().unwrap_or(0);

let mouse_event = MouseEvent::new(window.r(),
"mousemove".to_owned(),
true,
true,
Some(window.r()),
0i32,
x, y, x, y,
false, false, false, false,
0i16,
None).root();

let event: JSRef<Event> = EventCast::from_ref(mouse_event.r());
let target: JSRef<EventTarget> = EventTargetCast::from_ref(top_most_node.r());
event.fire(target);
}
}

for node_address in node_address.iter() {
let temp_node =
node::from_untrusted_node_address(js_runtime, *node_address).root();

let maybe_node = temp_node.r().ancestors().find(|node| node.is_element());
match maybe_node {
Some(node) => {
node.set_hover_state(true);
match *mouse_over_targets {
Some(ref mouse_over_targets) if !target_compare => {
target_compare =
!mouse_over_targets.contains(&JS::from_rooted(node));
}
_ => {}
}
target_list.push(JS::from_rooted(node));
}
None => {}
}
}
match *mouse_over_targets {
Some(ref mouse_over_targets) => {
if mouse_over_targets.len() != target_list.len() {
target_compare = true
}
}
None => target_compare = true,
}

if target_compare {
*mouse_over_targets = Some(target_list);
}
target_compare
}

None => false
}
}
}

#[derive(PartialEq)]
@@ -27,7 +27,6 @@ use dom::event::{Event, EventHelpers};
use dom::uievent::UIEvent;
use dom::eventtarget::EventTarget;
use dom::keyboardevent::KeyboardEvent;
use dom::mouseevent::MouseEvent;
use dom::node::{self, Node, NodeHelpers, NodeDamage};
use dom::window::{Window, WindowHelpers, ScriptHelpers};
use dom::worker::{Worker, TrustedWorkerAddress};
@@ -986,7 +985,17 @@ impl ScriptTask {
MouseDownEvent(..) => {}
MouseUpEvent(..) => {}
MouseMoveEvent(point) => {
self.handle_mouse_move_event(pipeline_id, point);
let page = get_page(&*self.page.borrow(), pipeline_id);
let frame = page.frame();
let document = frame.as_ref().unwrap().document.root();
let mouse_over_targets = &mut *self.mouse_over_targets.borrow_mut();

if document.r().handle_mouse_move_event(self.js_runtime.ptr, point, mouse_over_targets) {

This comment has been minimized.

@kmcallister

kmcallister Feb 23, 2015

Contributor

Nit: don't need a blank line here

if mouse_over_targets.is_some() {
self.force_reflow(&page)
}
}
}

KeyEvent(key, state, modifiers) => {
@@ -1146,92 +1155,6 @@ impl ScriptTask {
}
}


fn handle_mouse_move_event(&self, pipeline_id: PipelineId, point: Point2D<f32>) {
let page = get_page(&*self.page.borrow(), pipeline_id);
match page.get_nodes_under_mouse(&point) {
Some(node_address) => {
let mut target_list = vec!();
let mut target_compare = false;

let mouse_over_targets = &mut *self.mouse_over_targets.borrow_mut();
match *mouse_over_targets {
Some(ref mut mouse_over_targets) => {
for node in mouse_over_targets.iter_mut() {
let node = node.root();
node.r().set_hover_state(false);
}
}
None => {}
}

if node_address.len() > 0 {
let top_most_node =
node::from_untrusted_node_address(self.js_runtime.ptr, node_address[0]).root();

if let Some(ref frame) = *page.frame() {
let window = frame.window.root();

let x = point.x.to_i32().unwrap_or(0);
let y = point.y.to_i32().unwrap_or(0);

let mouse_event = MouseEvent::new(window.r(),
"mousemove".to_owned(),
true,
true,
Some(window.r()),
0i32,
x, y, x, y,
false, false, false, false,
0i16,
None).root();

let event: JSRef<Event> = EventCast::from_ref(mouse_event.r());
let target: JSRef<EventTarget> = EventTargetCast::from_ref(top_most_node.r());
event.fire(target);
}
}

for node_address in node_address.iter() {
let temp_node =
node::from_untrusted_node_address(self.js_runtime.ptr, *node_address).root();

let maybe_node = temp_node.r().ancestors().find(|node| node.is_element());
match maybe_node {
Some(node) => {
node.set_hover_state(true);
match *mouse_over_targets {
Some(ref mouse_over_targets) if !target_compare => {
target_compare =
!mouse_over_targets.contains(&JS::from_rooted(node));
}
_ => {}
}
target_list.push(JS::from_rooted(node));
}
None => {}
}
}
match *mouse_over_targets {
Some(ref mouse_over_targets) => {
if mouse_over_targets.len() != target_list.len() {
target_compare = true
}
}
None => target_compare = true,
}

if target_compare {
if mouse_over_targets.is_some() {
self.force_reflow(&*page)
}
*mouse_over_targets = Some(target_list);
}
}

None => {}
}
}
}

/// Shuts down layout for the given page tree.
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.