diff --git a/src/components/main/compositing/compositor_layer.rs b/src/components/main/compositing/compositor_layer.rs index de1e972c57c0..1583ad840332 100644 --- a/src/components/main/compositing/compositor_layer.rs +++ b/src/components/main/compositing/compositor_layer.rs @@ -109,7 +109,7 @@ impl CompositorLayer { } let child_layer = ~CompositorLayer::from_frame_tree(frame_tree, tile_size, max_mem); - container.add_child(ContainerLayerKind(child_layer.root_layer)); + container.add_child_start(ContainerLayerKind(child_layer.root_layer)); CompositorLayerChild { child: child_layer, @@ -342,25 +342,9 @@ impl CompositorLayer { self.root_layer.remove_child(trash); } - // Add child layers. - for child in self.children.mut_iter().filter(|x| !x.child.hidden) { - current_layer_child = match current_layer_child { - None => { - child.container.common.parent = None; - child.container.common.prev_sibling = None; - child.container.common.next_sibling = None; - self.root_layer.add_child(ContainerLayerKind(child.container)); - None - } - Some(_) => { - fail!("CompositorLayer: Layer tree failed to delete"); - } - }; - } - // Add new tiles. let quadtree = match self.quadtree { - NoTree(_, _) => fail!("CompositorLayer: cannot get buffer request for %?, + NoTree(_, _) => fail!("CompositorLayer: cannot get build layer tree for %?, no quadtree initialized", self.pipeline.id), Tree(ref mut quadtree) => quadtree, }; @@ -376,7 +360,7 @@ impl CompositorLayer { debug!("osmain: adding new texture layer"); texture_layer = @mut TextureLayer::new(@buffer.draw_target.clone() as @TextureManager, buffer.screen_pos.size); - self.root_layer.add_child(TextureLayerKind(texture_layer)); + self.root_layer.add_child_end(TextureLayerKind(texture_layer)); None } Some(TextureLayerKind(existing_texture_layer)) => { @@ -399,6 +383,23 @@ impl CompositorLayer { texture_layer.common.set_transform(transform); } + // Add child layers. + for child in self.children.mut_iter().filter(|x| !x.child.hidden) { + current_layer_child = match current_layer_child { + None => { + child.container.common.parent = None; + child.container.common.prev_sibling = None; + child.container.common.next_sibling = None; + self.root_layer.add_child_end(ContainerLayerKind(child.container)); + None + } + Some(_) => { + fail!("CompositorLayer: Layer tree failed to delete"); + } + }; + } + + } // Add LayerBuffers to the specified layer. Returns false if the layer is not found. @@ -472,7 +473,7 @@ impl CompositorLayer { clipping_rect.origin.y, 0.0)); let child = ~CompositorLayer::new(pipeline, page_size, tile_size, max_mem); - container.add_child(ContainerLayerKind(child.root_layer)); + container.add_child_start(ContainerLayerKind(child.root_layer)); self.children.push(CompositorLayerChild { child: child, container: container, diff --git a/src/components/main/compositing/mod.rs b/src/components/main/compositing/mod.rs index 4d96d9ebc82a..f5c7f48d3d9d 100644 --- a/src/components/main/compositing/mod.rs +++ b/src/components/main/compositing/mod.rs @@ -263,7 +263,7 @@ impl CompositorTask { let layer = CompositorLayer::from_frame_tree(frame_tree, self.opts.tile_size, Some(10000000u)); - root_layer.add_child(ContainerLayerKind(layer.root_layer)); + root_layer.add_child_start(ContainerLayerKind(layer.root_layer)); compositor_layer = Some(layer); constellation_chan = Some(new_constellation_chan); @@ -294,7 +294,7 @@ impl CompositorTask { Some(old_layer) => root_layer.remove_child(old_layer), None => {} } - root_layer.add_child(ContainerLayerKind(new_layer.root_layer)); + root_layer.add_child_start(ContainerLayerKind(new_layer.root_layer)); compositor_layer = Some(new_layer); ask_for_tiles(); diff --git a/src/components/main/compositing/quadtree.rs b/src/components/main/compositing/quadtree.rs index 84c5813d9c0b..dc304dce1c92 100644 --- a/src/components/main/compositing/quadtree.rs +++ b/src/components/main/compositing/quadtree.rs @@ -340,10 +340,15 @@ impl QuadtreeNode { } } - /// Get all tiles in the tree, parents last. + /// Get all tiles in the tree, parents first. fn get_all_tiles<'r>(&'r self) -> ~[&'r T] { let mut ret = ~[]; + match self.tile { + Some(ref tile) => ret = ret + ~[tile], + None => {} + } + for quad in self.quadrants.iter() { match *quad { Some(ref child) => ret = ret + child.get_all_tiles(), @@ -351,12 +356,6 @@ impl QuadtreeNode { } } - match self.tile { - Some(ref tile) => ret = ret + ~[tile], - None => {} - } - - return ret; } diff --git a/src/support/layers/rust-layers b/src/support/layers/rust-layers index 1383a7610349..8e469443a9fe 160000 --- a/src/support/layers/rust-layers +++ b/src/support/layers/rust-layers @@ -1 +1 @@ -Subproject commit 1383a7610349c9120013d9930a81cc0a659804ae +Subproject commit 8e469443a9fec36de8eec09036f8051723ee59bc