aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/element.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script/dom/element.rs')
-rw-r--r--src/components/script/dom/element.rs105
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")
}
}