From 71225e87ca6e1643493a33a83a51660f7853f56c Mon Sep 17 00:00:00 2001 From: Martin Robinson Date: Tue, 8 Jul 2014 13:00:54 -0700 Subject: [PATCH 1/5] Update to latest rust-layers Layers now store their complete boundaries, so we can eliminate the various ways these were stored in Servo. --- src/components/compositing/compositor.rs | 3 +- src/components/compositing/compositor_data.rs | 98 +++++++------------ src/components/compositing/events.rs | 37 +++---- src/support/layers/rust-layers | 2 +- 4 files changed, 47 insertions(+), 93 deletions(-) diff --git a/src/components/compositing/compositor.rs b/src/components/compositing/compositor.rs index b18682e0b24..016634c373b 100644 --- a/src/components/compositing/compositor.rs +++ b/src/components/compositing/compositor.rs @@ -372,7 +372,8 @@ impl IOCompositor { self.opts.cpu_painting, layer_properties.background_color); let size = layer_properties.rect.size; - let new_root = Rc::new(Layer::new(size, + let new_root = Rc::new(Layer::new(layer_properties.rect, + size, self.opts.tile_size, new_compositor_data)); diff --git a/src/components/compositing/compositor_data.rs b/src/components/compositing/compositor_data.rs index ac5adc53700..52fc08b9e33 100644 --- a/src/components/compositing/compositor_data.rs +++ b/src/components/compositing/compositor_data.rs @@ -8,7 +8,7 @@ use pipeline::CompositionPipeline; use azure::azure_hl::Color; use geom::matrix::identity; -use geom::point::{Point2D, TypedPoint2D}; +use geom::point::TypedPoint2D; use geom::rect::Rect; use geom::size::{Size2D, TypedSize2D}; use gfx::render_task::{ReRenderMsg, UnusedBufferMsg}; @@ -41,9 +41,6 @@ pub struct CompositorData { /// top left corner of the page. pub scroll_offset: TypedPoint2D, - /// The bounds of this layer in terms of its parent (a.k.a. the scissor box). - pub bounds: Rect, - /// The size of the underlying page in page coordinates. This is an option /// because we may not know the size of the page until layout is finished completely. /// if we have no size yet, the layer is hidden until a size message is recieved. @@ -65,8 +62,6 @@ pub struct CompositorData { /// The color to use for the unrendered-content void pub unrendered_color: Color, - pub scissor: Option>, - /// A monotonically increasing counter that keeps track of the current epoch. /// add_buffer() calls that don't match the current epoch will be ignored. pub epoch: Epoch, @@ -82,7 +77,6 @@ impl CompositorData { pub fn new(pipeline: CompositionPipeline, layer_id: LayerId, epoch: Epoch, - bounds: Rect, page_size: Option>, cpu_painting: bool, wants_scroll_events: WantsScrollEventsFlag, @@ -93,14 +87,12 @@ impl CompositorData { pipeline: pipeline, id: layer_id, scroll_offset: TypedPoint2D(0f32, 0f32), - bounds: bounds, page_size: page_size, hidden: false, wants_scroll_events: wants_scroll_events, scroll_policy: scroll_policy, cpu_painting: cpu_painting, unrendered_color: unrendered_color, - scissor: None, epoch: epoch, } } @@ -113,7 +105,6 @@ impl CompositorData { CompositorData::new(pipeline, LayerId::null(), epoch, - Rect(Point2D(0f32, 0f32), page_size), Some(page_size), cpu_painting, WantsScrollEvents, @@ -130,19 +121,16 @@ impl CompositorData { let new_compositor_data = CompositorData::new(layer.extra_data.borrow().pipeline.clone(), layer_properties.id, layer_properties.epoch, - layer_properties.rect, Some(page_size), layer.extra_data.borrow().cpu_painting, DoesntWantScrollEvents, layer_properties.scroll_policy, layer_properties.background_color); - let new_kid = Rc::new(Layer::new(page_size, + let new_kid = Rc::new(Layer::new(layer_properties.rect, + page_size, Layer::tile_size(layer.clone()), new_compositor_data)); - new_kid.extra_data.borrow_mut().scissor = Some(layer_properties.rect); - *new_kid.origin.borrow_mut() = layer_properties.rect.origin; - // Place the kid's layer in the container passed in. Layer::add_child(layer.clone(), new_kid.clone()); } @@ -178,30 +166,25 @@ impl CompositorData { } let send_child_buffer_request = |kid: &Rc>| -> bool { - match kid.extra_data.borrow().scissor { - Some(scissor) => { - let mut new_rect = window_rect; - let offset = kid.extra_data.borrow().scroll_offset.to_untyped(); - new_rect.origin.x = new_rect.origin.x - offset.x; - new_rect.origin.y = new_rect.origin.y - offset.y; - match new_rect.intersection(&scissor) { - Some(new_rect) => { - // Child layers act as if they are rendered at (0,0), so we - // subtract the layer's (x,y) coords in its containing page - // to make the child_rect appear in coordinates local to it. - let child_rect = Rect(new_rect.origin.sub(&scissor.origin), - new_rect.size); - CompositorData::send_buffer_requests_recursively(kid.clone(), - graphics_context, - child_rect, - scale) - } - None => { - false // Layer is offscreen - } - } + let mut new_rect = window_rect; + let offset = kid.extra_data.borrow().scroll_offset.to_untyped(); + new_rect.origin.x = new_rect.origin.x - offset.x; + new_rect.origin.y = new_rect.origin.y - offset.y; + match new_rect.intersection(&*kid.bounds.borrow()) { + Some(new_rect) => { + // Child layers act as if they are rendered at (0,0), so we + // subtract the layer's (x,y) coords in its containing page + // to make the child_rect appear in coordinates local to it. + let child_rect = Rect(new_rect.origin.sub(&kid.bounds.borrow().origin), + new_rect.size); + CompositorData::send_buffer_requests_recursively(kid.clone(), + graphics_context, + child_rect, + scale) + } + None => { + false // Layer is offscreen } - None => fail!("child layer not clipped!"), } }; @@ -225,16 +208,12 @@ impl CompositorData { layer_id) { Some(child_node) => { debug!("compositor_data: node found for set_clipping_rect()"); - *child_node.origin.borrow_mut() = new_rect.origin; - let old_rect = child_node.extra_data.borrow().scissor.clone(); - child_node.extra_data.borrow_mut().scissor = Some(new_rect); - match old_rect { - Some(old_rect) => { - // Rect is unhidden - Layer::set_status_page(layer.clone(), old_rect, Normal, false); - } - None => {} // Nothing to do - } + let old_rect = child_node.bounds.borrow().clone(); + *child_node.bounds.borrow_mut() = new_rect; + + // Rect is unhidden + Layer::set_status_page(layer.clone(), old_rect, Normal, false); + // Hide the new rect Layer::set_status_page(layer.clone(), new_rect, Hidden, false); @@ -276,20 +255,14 @@ impl CompositorData { let _ = layer.extra_data.borrow().pipeline.render_chan.send_opt(msg); } - let scissor_clone = layer.extra_data.borrow().scissor.clone(); - match scissor_clone { - Some(scissor) => { - // Call scroll for bounds checking if the page shrunk. Use (-1, -1) as the - // cursor position to make sure the scroll isn't propagated downwards. - let size: TypedSize2D = Size2D::from_untyped(&scissor.size); - events::handle_scroll_event(layer.clone(), + // Call scroll for bounds checking if the page shrunk. Use (-1, -1) as the + // cursor position to make sure the scroll isn't propagated downwards. + let size: TypedSize2D = Size2D::from_untyped(&layer.bounds.borrow().size); + events::handle_scroll_event(layer.clone(), TypedPoint2D(0f32, 0f32), TypedPoint2D(-1f32, -1f32), size); - layer.extra_data.borrow_mut().hidden = false; - } - None => {} // Nothing to do - } + layer.extra_data.borrow_mut().hidden = false; CompositorData::set_occlusions(layer.clone()); } @@ -437,12 +410,7 @@ impl CompositorData { fn set_occlusions(layer: Rc>) { for kid in layer.children().iter() { if !kid.extra_data.borrow().hidden { - match kid.extra_data.borrow().scissor { - None => {} // Nothing to do - Some(rect) => { - Layer::set_status_page(layer.clone(), rect, Hidden, false); - } - } + Layer::set_status_page(layer.clone(), *kid.bounds.borrow(), Hidden, false); } } diff --git a/src/components/compositing/events.rs b/src/components/compositing/events.rs index e32cc821902..9c464c91864 100644 --- a/src/components/compositing/events.rs +++ b/src/components/compositing/events.rs @@ -60,20 +60,13 @@ pub fn handle_scroll_event(layer: Rc>, // Allow children to scroll. let cursor = cursor - layer.extra_data.borrow().scroll_offset; for child in layer.children().iter() { - match child.extra_data.borrow().scissor { - None => { - error!("CompositorData: unable to perform cursor hit test for layer"); - } - Some(rect) => { - let rect: TypedRect = Rect::from_untyped(&rect); - if rect.contains(&cursor) && - handle_scroll_event(child.clone(), - delta, - cursor - rect.origin, - rect.size) { - return true - } - } + let rect: TypedRect = Rect::from_untyped(&*child.bounds.borrow()); + if rect.contains(&cursor) && + handle_scroll_event(child.clone(), + delta, + cursor - rect.origin, + rect.size) { + return true } } @@ -141,17 +134,10 @@ pub fn send_mouse_event(layer: Rc>, continue; } - match child.extra_data.borrow().scissor { - None => { - error!("CompositorData: unable to perform cursor hit test for layer"); - } - Some(rect) => { - let rect: TypedRect = Rect::from_untyped(&rect); - if rect.contains(&cursor) { - send_mouse_event(child.clone(), event, cursor - rect.origin); - return; - } - } + let rect: TypedRect = Rect::from_untyped(&*child.bounds.borrow()); + if rect.contains(&cursor) { + send_mouse_event(child.clone(), event, cursor - rect.origin); + return; } } @@ -215,4 +201,3 @@ pub fn move(layer: Rc>, let offset = layer.extra_data.borrow().scroll_offset.clone(); scroll(layer.clone(), offset) } - diff --git a/src/support/layers/rust-layers b/src/support/layers/rust-layers index f49717435a3..168305cc422 160000 --- a/src/support/layers/rust-layers +++ b/src/support/layers/rust-layers @@ -1 +1 @@ -Subproject commit f49717435a375a1e3beb26777b7303204e0a1a8a +Subproject commit 168305cc4229eb79fb33ad045ec0b39f8097966a From 1f21d3bd2f5b9d26dbe781f021e619b6157e0b09 Mon Sep 17 00:00:00 2001 From: Martin Robinson Date: Tue, 8 Jul 2014 13:16:30 -0700 Subject: [PATCH 2/5] Remove occlusion code from compositor This code tried to prevent buffer requests from parts of layers that were occluded by other layers. This doesn't really make sense when layers can potentially be semi-opaque, and also seems to have not been totally functional. --- src/components/compositing/compositor_data.rs | 29 +------------------ 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/src/components/compositing/compositor_data.rs b/src/components/compositing/compositor_data.rs index 52fc08b9e33..b5ade69b2f2 100644 --- a/src/components/compositing/compositor_data.rs +++ b/src/components/compositing/compositor_data.rs @@ -13,7 +13,7 @@ use geom::rect::Rect; use geom::size::{Size2D, TypedSize2D}; use gfx::render_task::{ReRenderMsg, UnusedBufferMsg}; use layers::layers::{Layer, Flip, LayerBuffer, LayerBufferSet, NoFlip, TextureLayer}; -use layers::quadtree::{Tile, Normal, Hidden}; +use layers::quadtree::Tile; use layers::platform::surface::{NativeCompositingGraphicsContext, NativeSurfaceMethods}; use layers::texturegl::{Texture, TextureTarget}; use servo_msg::compositor_msg::{Epoch, FixedPosition, LayerId}; @@ -208,15 +208,8 @@ impl CompositorData { layer_id) { Some(child_node) => { debug!("compositor_data: node found for set_clipping_rect()"); - let old_rect = child_node.bounds.borrow().clone(); *child_node.bounds.borrow_mut() = new_rect; - // Rect is unhidden - Layer::set_status_page(layer.clone(), old_rect, Normal, false); - - // Hide the new rect - Layer::set_status_page(layer.clone(), new_rect, Hidden, false); - // If possible, unhide child let mut child_data = child_node.extra_data.borrow_mut(); if child_data.hidden && child_data.page_size.is_some() { @@ -246,7 +239,6 @@ impl CompositorData { new_size: Size2D) { debug!("compositor_data: starting resize_helper()"); - debug!("compositor_data: layer found for resize_helper()"); layer.extra_data.borrow_mut().page_size = Some(new_size); let unused_buffers = Layer::resize(layer.clone(), new_size); @@ -262,9 +254,6 @@ impl CompositorData { TypedPoint2D(0f32, 0f32), TypedPoint2D(-1f32, -1f32), size); - layer.extra_data.borrow_mut().hidden = false; - - CompositorData::set_occlusions(layer.clone()); } // Returns whether the layer should be vertically flipped. @@ -405,22 +394,6 @@ impl CompositorData { return true; } - // Recursively sets occluded portions of quadtrees to Hidden, so that they do not ask for - // tile requests. If layers are moved, resized, or deleted, these portions may be updated. - fn set_occlusions(layer: Rc>) { - for kid in layer.children().iter() { - if !kid.extra_data.borrow().hidden { - Layer::set_status_page(layer.clone(), *kid.bounds.borrow(), Hidden, false); - } - } - - for kid in layer.children().iter() { - if !kid.extra_data.borrow().hidden { - CompositorData::set_occlusions(kid.clone()); - } - } - } - /// Destroys all quadtree tiles, sending the buffers back to the renderer to be destroyed or /// reused. fn clear(layer: Rc>) { From 601b8ec9704f4ab89b220a09f7e6b9aa9276ec26 Mon Sep 17 00:00:00 2001 From: Martin Robinson Date: Tue, 8 Jul 2014 14:32:11 -0700 Subject: [PATCH 3/5] Remove support for hiding compositor layers This is currently unused, because we always know the size of the layer. --- src/components/compositing/compositor.rs | 8 ++------ src/components/compositing/compositor_data.rs | 17 +---------------- src/components/compositing/events.rs | 9 --------- 3 files changed, 3 insertions(+), 31 deletions(-) diff --git a/src/components/compositing/compositor.rs b/src/components/compositing/compositor.rs index 016634c373b..2f9c76545a6 100644 --- a/src/components/compositing/compositor.rs +++ b/src/components/compositing/compositor.rs @@ -527,8 +527,7 @@ impl IOCompositor { point: Point2D) { let page_window = self.page_window(); let (ask, move): (bool, bool) = match self.scene.root { - Some(ref layer) if layer.extra_data.borrow().pipeline.id == pipeline_id && - !layer.extra_data.borrow().hidden => { + Some(ref layer) if layer.extra_data.borrow().pipeline.id == pipeline_id => { (true, events::move(layer.clone(), pipeline_id, layer_id, point, page_window)) } @@ -746,7 +745,7 @@ impl IOCompositor { let scale = self.device_pixels_per_page_px(); let page_window = self.page_window(); match self.scene.root { - Some(ref mut layer) if !layer.extra_data.borrow().hidden => { + Some(ref mut layer) => { let rect = Rect(Point2D(0f32, 0f32), page_window.to_untyped()); let recomposite = CompositorData::send_buffer_requests_recursively(layer.clone(), @@ -755,9 +754,6 @@ impl IOCompositor { scale.get()); self.recomposite = self.recomposite || recomposite; } - Some(_) => { - debug!("Compositor: root layer is hidden!"); - } None => { } } } diff --git a/src/components/compositing/compositor_data.rs b/src/components/compositing/compositor_data.rs index b5ade69b2f2..56f295f9f6f 100644 --- a/src/components/compositing/compositor_data.rs +++ b/src/components/compositing/compositor_data.rs @@ -43,13 +43,8 @@ pub struct CompositorData { /// The size of the underlying page in page coordinates. This is an option /// because we may not know the size of the page until layout is finished completely. - /// if we have no size yet, the layer is hidden until a size message is recieved. pub page_size: Option>, - /// When set to true, this layer is ignored by its parents. This is useful for - /// soft deletion or when waiting on a page size. - pub hidden: bool, - /// The behavior of this layer when a scroll message is received. pub wants_scroll_events: WantsScrollEventsFlag, @@ -88,7 +83,6 @@ impl CompositorData { id: layer_id, scroll_offset: TypedPoint2D(0f32, 0f32), page_size: page_size, - hidden: false, wants_scroll_events: wants_scroll_events, scroll_policy: scroll_policy, cpu_painting: cpu_painting, @@ -188,14 +182,11 @@ impl CompositorData { } }; - layer.children().iter().filter(|x| !x.extra_data.borrow().hidden) - .map(send_child_buffer_request) - .any(|b| b) || redisplay + layer.children().iter().map(send_child_buffer_request).any(|b| b) || redisplay } // Move the sublayer to an absolute position in page coordinates relative to its parent, // and clip the layer to the specified size in page coordinates. - // If the layer is hidden and has a defined page size, unhide it. // This method returns false if the specified layer is not found. pub fn set_clipping_rect(layer: Rc>, pipeline_id: PipelineId, @@ -209,12 +200,6 @@ impl CompositorData { Some(child_node) => { debug!("compositor_data: node found for set_clipping_rect()"); *child_node.bounds.borrow_mut() = new_rect; - - // If possible, unhide child - let mut child_data = child_node.extra_data.borrow_mut(); - if child_data.hidden && child_data.page_size.is_some() { - child_data.hidden = false; - } true } None => { diff --git a/src/components/compositing/events.rs b/src/components/compositing/events.rs index 9c464c91864..f10d1ce50d9 100644 --- a/src/components/compositing/events.rs +++ b/src/components/compositing/events.rs @@ -46,11 +46,6 @@ pub fn handle_scroll_event(layer: Rc>, cursor: TypedPoint2D, window_size: TypedSize2D) -> bool { - // If this layer is hidden, neither it nor its children will scroll. - if layer.extra_data.borrow().hidden { - return false - } - // If this layer doesn't want scroll events, neither it nor its children can handle scroll // events. if layer.extra_data.borrow().wants_scroll_events != WantsScrollEvents { @@ -130,10 +125,6 @@ pub fn send_mouse_event(layer: Rc>, event: MouseWindowEvent, cursor: TypedPoint2D) { let cursor = cursor - layer.extra_data.borrow().scroll_offset; for child in layer.children().iter() { - if child.extra_data.borrow().hidden { - continue; - } - let rect: TypedRect = Rect::from_untyped(&*child.bounds.borrow()); if rect.contains(&cursor) { send_mouse_event(child.clone(), event, cursor - rect.origin); From b743448b52966970a7041045d857f039539b83d9 Mon Sep 17 00:00:00 2001 From: Martin Robinson Date: Tue, 8 Jul 2014 16:58:01 -0700 Subject: [PATCH 4/5] Remove page_size member from CompositorData The page size is always the same as the layer boundaries since, SetLayerClipRect was always called after layer creation. --- src/components/compositing/compositor.rs | 8 ++---- src/components/compositing/compositor_data.rs | 25 +++---------------- src/components/compositing/events.rs | 11 ++------ 3 files changed, 7 insertions(+), 37 deletions(-) diff --git a/src/components/compositing/compositor.rs b/src/components/compositing/compositor.rs index 2f9c76545a6..5762277b4d1 100644 --- a/src/components/compositing/compositor.rs +++ b/src/components/compositing/compositor.rs @@ -368,16 +368,13 @@ impl IOCompositor { }; let new_compositor_data = CompositorData::new_root(root_pipeline, layer_properties.epoch, - layer_properties.rect.size, self.opts.cpu_painting, layer_properties.background_color); - let size = layer_properties.rect.size; let new_root = Rc::new(Layer::new(layer_properties.rect, - size, self.opts.tile_size, new_compositor_data)); - CompositorData::add_child(new_root.clone(), layer_properties, size); + CompositorData::add_child(new_root.clone(), layer_properties); // Release all tiles from the layer before dropping it. match self.scene.root { @@ -409,8 +406,7 @@ impl IOCompositor { layer_properties.pipeline_id, parent_layer_id) { Some(ref mut parent_layer) => { - let page_size = root_layer.extra_data.borrow().page_size.unwrap(); - CompositorData::add_child(parent_layer.clone(), layer_properties, page_size); + CompositorData::add_child(parent_layer.clone(), layer_properties); } None => { fail!("Compositor: couldn't find parent layer"); diff --git a/src/components/compositing/compositor_data.rs b/src/components/compositing/compositor_data.rs index 56f295f9f6f..5eca6289b4c 100644 --- a/src/components/compositing/compositor_data.rs +++ b/src/components/compositing/compositor_data.rs @@ -41,10 +41,6 @@ pub struct CompositorData { /// top left corner of the page. pub scroll_offset: TypedPoint2D, - /// The size of the underlying page in page coordinates. This is an option - /// because we may not know the size of the page until layout is finished completely. - pub page_size: Option>, - /// The behavior of this layer when a scroll message is received. pub wants_scroll_events: WantsScrollEventsFlag, @@ -72,7 +68,6 @@ impl CompositorData { pub fn new(pipeline: CompositionPipeline, layer_id: LayerId, epoch: Epoch, - page_size: Option>, cpu_painting: bool, wants_scroll_events: WantsScrollEventsFlag, scroll_policy: ScrollPolicy, @@ -82,7 +77,6 @@ impl CompositorData { pipeline: pipeline, id: layer_id, scroll_offset: TypedPoint2D(0f32, 0f32), - page_size: page_size, wants_scroll_events: wants_scroll_events, scroll_policy: scroll_policy, cpu_painting: cpu_painting, @@ -93,13 +87,11 @@ impl CompositorData { pub fn new_root(pipeline: CompositionPipeline, epoch: Epoch, - page_size: Size2D, cpu_painting: bool, unrendered_color: Color) -> CompositorData { CompositorData::new(pipeline, LayerId::null(), epoch, - Some(page_size), cpu_painting, WantsScrollEvents, FixedPosition, @@ -110,18 +102,15 @@ impl CompositorData { /// exist yet. The child layer will have the same pipeline, tile size, memory limit, and CPU /// painting status as its parent. pub fn add_child(layer: Rc>, - layer_properties: LayerProperties, - page_size: Size2D) { + layer_properties: LayerProperties) { let new_compositor_data = CompositorData::new(layer.extra_data.borrow().pipeline.clone(), layer_properties.id, layer_properties.epoch, - Some(page_size), layer.extra_data.borrow().cpu_painting, DoesntWantScrollEvents, layer_properties.scroll_policy, layer_properties.background_color); let new_kid = Rc::new(Layer::new(layer_properties.rect, - page_size, Layer::tile_size(layer.clone()), new_compositor_data)); @@ -210,23 +199,15 @@ impl CompositorData { new_rect)) } + } } pub fn update_layer(layer: Rc>, layer_properties: LayerProperties) { layer.extra_data.borrow_mut().epoch = layer_properties.epoch; layer.extra_data.borrow_mut().unrendered_color = layer_properties.background_color; - CompositorData::resize(layer.clone(), layer_properties.rect.size); - } - // Resize and unhide a pre-existing layer. A new layer's size is set during creation. - fn resize(layer: Rc>, - new_size: Size2D) { - debug!("compositor_data: starting resize_helper()"); - - layer.extra_data.borrow_mut().page_size = Some(new_size); - - let unused_buffers = Layer::resize(layer.clone(), new_size); + let unused_buffers = Layer::resize(layer.clone(), layer_properties.rect.size); if !unused_buffers.is_empty() { let msg = UnusedBufferMsg(unused_buffers); let _ = layer.extra_data.borrow().pipeline.render_chan.send_opt(msg); diff --git a/src/components/compositing/events.rs b/src/components/compositing/events.rs index f10d1ce50d9..5aa202d2bf0 100644 --- a/src/components/compositing/events.rs +++ b/src/components/compositing/events.rs @@ -71,11 +71,7 @@ pub fn handle_scroll_event(layer: Rc>, layer.extra_data.borrow_mut().scroll_offset = old_origin + delta; // bounds checking - let page_size = match layer.extra_data.borrow().page_size { - Some(size) => size, - None => fail!("CompositorData: tried to scroll with no page size set"), - }; - + let page_size = layer.bounds.borrow().size; let window_size = window_size.to_untyped(); let scroll_offset = layer.extra_data.borrow().scroll_offset.to_untyped(); @@ -172,10 +168,7 @@ pub fn move(layer: Rc>, layer.extra_data.borrow_mut().scroll_offset = Point2D::from_untyped(&(origin * -1.0)); // bounds checking - let page_size = match layer.extra_data.borrow().page_size { - Some(size) => size, - None => fail!("CompositorData: tried to scroll with no page size set"), - }; + let page_size = layer.bounds.borrow().size; let window_size = window_size.to_untyped(); let scroll_offset = layer.extra_data.borrow().scroll_offset.to_untyped(); From ecb5cc80916ed1ca9cc5875484e2cdc0db1f74d8 Mon Sep 17 00:00:00 2001 From: Martin Robinson Date: Wed, 9 Jul 2014 15:10:22 -0700 Subject: [PATCH 5/5] Update to latest rust-layers --- src/support/layers/rust-layers | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/support/layers/rust-layers b/src/support/layers/rust-layers index 168305cc422..3f116aef7db 160000 --- a/src/support/layers/rust-layers +++ b/src/support/layers/rust-layers @@ -1 +1 @@ -Subproject commit 168305cc4229eb79fb33ad045ec0b39f8097966a +Subproject commit 3f116aef7db600654e6311aad2ac1968cbabf88a