function reflow(Frame_Decorator $block = null)
 {
     $fixed_children = array();
     $prev_child = null;
     $child = $this->_frame->get_first_child();
     $current_page = 0;
     while ($child) {
         $this->apply_page_style($this->_frame, $current_page + 1);
         $style = $this->_frame->get_style();
         $cb = $this->_frame->get_containing_block();
         $left = $style->length_in_pt($style->margin_left, $cb["w"]);
         $right = $style->length_in_pt($style->margin_right, $cb["w"]);
         $top = $style->length_in_pt($style->margin_top, $cb["h"]);
         $bottom = $style->length_in_pt($style->margin_bottom, $cb["h"]);
         $content_x = $cb["x"] + $left;
         $content_y = $cb["y"] + $top;
         $content_width = $cb["w"] - $left - $right;
         $content_height = $cb["h"] - $top - $bottom;
         if ($current_page == 0) {
             $children = $child->get_children();
             foreach ($children as $onechild) {
                 if ($onechild->get_style()->position === "fixed") {
                     $fixed_children[] = $onechild->deep_copy();
                 }
             }
             $fixed_children = array_reverse($fixed_children);
         }
         $child->set_containing_block($content_x, $content_y, $content_width, $content_height);
         $this->_check_callbacks("begin_page_reflow", $child);
         if ($current_page >= 1) {
             foreach ($fixed_children as $fixed_child) {
                 $child->insert_child_before($fixed_child->deep_copy(), $child->get_first_child());
             }
         }
         $child->reflow();
         $next_child = $child->get_next_sibling();
         $this->_check_callbacks("begin_page_render", $child);
         $renderer = $this->_frame->get_renderer();
         $renderer->render($child);
         Renderer::$stacking_first_pass = false;
         ksort($this->_stacking_context);
         foreach ($this->_stacking_context as $_frames) {
             foreach ($_frames as $_frame) {
                 $renderer->render($_frame);
             }
         }
         Renderer::$stacking_first_pass = true;
         $this->_stacking_context = array();
         $this->_check_callbacks("end_page_render", $child);
         if ($next_child) {
             $this->_frame->next_page();
         }
         if ($prev_child) {
             $prev_child->dispose(true);
         }
         $prev_child = $child;
         $child = $next_child;
         $current_page++;
     }
     if ($prev_child) {
         $prev_child->dispose(true);
     }
 }
 /**
  * Paged layout:
  * http://www.w3.org/TR/CSS21/page.html
  */
 function reflow(Frame_Decorator $block = null)
 {
     $fixed_children = array();
     $prev_child = null;
     $child = $this->_frame->get_first_child();
     $current_page = 0;
     while ($child) {
         $this->apply_page_style($this->_frame, $current_page + 1);
         $style = $this->_frame->get_style();
         // Pages are only concerned with margins
         $cb = $this->_frame->get_containing_block();
         $left = $style->length_in_pt($style->margin_left, $cb["w"]);
         $right = $style->length_in_pt($style->margin_right, $cb["w"]);
         $top = $style->length_in_pt($style->margin_top, $cb["h"]);
         $bottom = $style->length_in_pt($style->margin_bottom, $cb["h"]);
         $content_x = $cb["x"] + $left;
         $content_y = $cb["y"] + $top;
         $content_width = $cb["w"] - $left - $right;
         $content_height = $cb["h"] - $top - $bottom;
         // Only if it's the first page, we save the nodes with a fixed position
         if ($current_page == 0) {
             $children = $child->get_children();
             foreach ($children as $onechild) {
                 if ($onechild->get_style()->position === "fixed") {
                     $fixed_children[] = $onechild->deep_copy();
                 }
             }
             $fixed_children = array_reverse($fixed_children);
         }
         $child->set_containing_block($content_x, $content_y, $content_width, $content_height);
         // Check for begin reflow callback
         $this->_check_callbacks("begin_page_reflow", $child);
         //Insert a copy of each node which have a fixed position
         if ($current_page >= 1) {
             foreach ($fixed_children as $fixed_child) {
                 $child->insert_child_before($fixed_child->deep_copy(), $child->get_first_child());
             }
         }
         $child->reflow();
         $next_child = $child->get_next_sibling();
         // Check for begin render callback
         $this->_check_callbacks("begin_page_render", $child);
         $renderer = $this->_frame->get_renderer();
         // Render the page
         $renderer->render($child);
         Renderer::$stacking_first_pass = false;
         // http://www.w3.org/TR/CSS21/visuren.html#z-index
         ksort($this->_stacking_context);
         foreach ($this->_stacking_context as $_frames) {
             foreach ($_frames as $_frame) {
                 $renderer->render($_frame);
             }
         }
         Renderer::$stacking_first_pass = true;
         $this->_stacking_context = array();
         // Check for end render callback
         $this->_check_callbacks("end_page_render", $child);
         if ($next_child) {
             $this->_frame->next_page();
         }
         // Wait to dispose of all frames on the previous page
         // so callback will have access to them
         if ($prev_child) {
             $prev_child->dispose(true);
         }
         $prev_child = $child;
         $child = $next_child;
         $current_page++;
     }
     // Dispose of previous page if it still exists
     if ($prev_child) {
         $prev_child->dispose(true);
     }
 }