diff options
Diffstat (limited to 'src/components/script/dom/element.rs')
-rw-r--r-- | src/components/script/dom/element.rs | 105 |
1 files changed, 42 insertions, 63 deletions
diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index 3b29913fe2e..e1a778cb2ef 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -277,75 +277,54 @@ impl Element { } pub fn GetClientRects(&self, abstract_self: AbstractNode<ScriptView>) -> @mut ClientRectList { - let (rects, cx, scope) = match self.node.owner_doc { - Some(doc) => { - match doc.with_base(|doc| doc.window) { - Some(win) => { - let node = abstract_self; - assert!(node.is_element()); - let page = win.page; - let (port, chan) = comm::stream(); - match page.query_layout(ContentBoxesQuery(node, chan), port) { - ContentBoxesResponse(rects) => { - let cx = page.js_info.get_ref().js_compartment.cx.ptr; - let cache = win.get_wrappercache(); - let scope = cache.get_wrapper(); - let rects = do rects.map |r| { - ClientRect::new( - r.origin.y.to_f32(), - (r.origin.y + r.size.height).to_f32(), - r.origin.x.to_f32(), - (r.origin.x + r.size.width).to_f32(), - cx, - scope) - }; - Some((rects, cx, scope)) - }, - } - } - None => { - debug!("no window"); - None - } - } - } - None => { - debug!("no document"); - None - } - }.unwrap(); + let document = self.node.owner_doc.expect("no document"); + let win = document.with_base(|doc| doc.window).expect("no window"); + let node = abstract_self; + assert!(node.is_element()); + let page = win.page; + let (port, chan) = comm::stream(); + let (rects, cx, scope) = + match page.query_layout(ContentBoxesQuery(node, chan), port) { + ContentBoxesResponse(rects) => { + let cx = page.js_info.get_ref().js_compartment.cx.ptr; + let cache = win.get_wrappercache(); + let scope = cache.get_wrapper(); + let rects = do rects.map |r| { + ClientRect::new( + r.origin.y.to_f32(), + (r.origin.y + r.size.height).to_f32(), + r.origin.x.to_f32(), + (r.origin.x + r.size.width).to_f32(), + cx, + scope) + }; + (rects, cx, scope) + }, + }; ClientRectList::new(rects, cx, scope) } pub fn GetBoundingClientRect(&self, abstract_self: AbstractNode<ScriptView>) -> @mut ClientRect { - match self.node.owner_doc { - Some(doc) => { - match doc.with_base(|doc| doc.window) { - Some(win) => { - let page = win.page; - let node = abstract_self; - assert!(node.is_element()); - let (port, chan) = comm::stream(); - match page.query_layout(ContentBoxQuery(node, chan), port) { - ContentBoxResponse(rect) => { - let cx = page.js_info.get_ref().js_compartment.cx.ptr; - let cache = win.get_wrappercache(); - let scope = cache.get_wrapper(); - ClientRect::new( - rect.origin.y.to_f32(), - (rect.origin.y + rect.size.height).to_f32(), - rect.origin.x.to_f32(), - (rect.origin.x + rect.size.width).to_f32(), - cx, - scope) - } - } - } - None => fail!("no window") - } + let document = self.node.owner_doc.expect("no document"); + let win = document.with_base(|doc| doc.window).expect("no window"); + let page = win.page; + let node = abstract_self; + assert!(node.is_element()); + let (port, chan) = comm::stream(); + match page.query_layout(ContentBoxQuery(node, chan), port) { + ContentBoxResponse(rect) => { + let cx = page.js_info.get_ref().js_compartment.cx.ptr; + let cache = win.get_wrappercache(); + let scope = cache.get_wrapper(); + ClientRect::new( + rect.origin.y.to_f32(), + (rect.origin.y + rect.size.height).to_f32(), + rect.origin.x.to_f32(), + (rect.origin.x + rect.size.width).to_f32(), + cx, + scope) } - None => fail!("no document") } } |