function get_float_offsets() { if (!DOMPDF_ENABLE_CSS_FLOAT) { return; } static $anti_infinite_loop = 500; // FIXME smelly hack $reflower = $this->_block_frame->get_reflower(); if (!$reflower) return; $cb_w = null; $block = $this->_block_frame; $root = $block->get_root(); $floating_frames = $this->get_floats_inside($root); foreach ($floating_frames as $child_key => $floating_frame) { $id = $floating_frame->get_id(); if (isset($this->floating_blocks[$id])) { continue; } $floating_style = $floating_frame->get_style(); $clear = $floating_style->clear; $float = $floating_style->float; $floating_width = $floating_frame->get_margin_width(); if (!$cb_w) { $cb_w = $floating_frame->get_containing_block("w"); } $line_w = $this->get_width(); if (!$floating_frame->_float_next_line && ($cb_w <= $line_w + $floating_width) && ($cb_w > $line_w)) { $floating_frame->_float_next_line = true; continue; } // If the child is still shifted by the floating element if ($anti_infinite_loop-- > 0 && $floating_frame->get_position("y") + $floating_frame->get_margin_height() > $this->y && $block->get_position("x") + $block->get_margin_width() > $floating_frame->get_position("x") ) { if ($float === "left") $this->left += $floating_width; else $this->right += $floating_width; $this->floating_blocks[$id] = true; } // else, the floating element won't shift anymore else { $root->remove_floating_frame($child_key); } } }
function get_float_offsets() { $enable_css_float = $this->_block_frame->get_dompdf()->get_option("enable_css_float"); if (!$enable_css_float) { return; } static $anti_infinite_loop = 500; // FIXME smelly hack $reflower = $this->_block_frame->get_reflower(); if (!$reflower) { return; } $cb_w = null; $block = $this->_block_frame; $root = $block->get_root(); if (!$root) { return; } $floating_frames = $this->get_floats_inside($root); foreach ($floating_frames as $child_key => $floating_frame) { $id = $floating_frame->get_id(); if (isset($this->floating_blocks[$id])) { continue; } $floating_style = $floating_frame->get_style(); $float = $floating_style->float; $floating_width = $floating_frame->get_margin_width(); if (!$cb_w) { $cb_w = $floating_frame->get_containing_block("w"); } $line_w = $this->get_width(); if (!$floating_frame->_float_next_line && $cb_w <= $line_w + $floating_width && $cb_w > $line_w) { $floating_frame->_float_next_line = true; continue; } // If the child is still shifted by the floating element if ($anti_infinite_loop-- > 0 && $floating_frame->get_position("y") + $floating_frame->get_margin_height() > $this->y && $block->get_position("x") + $block->get_margin_width() > $floating_frame->get_position("x")) { if ($float === "left") { $this->left += $floating_width; } else { $this->right += $floating_width; } $this->floating_blocks[$id] = true; } else { $root->remove_floating_frame($child_key); } } }
function get_float_offsets() { static $anti_infinite_loop; $reflower = $this->_block_frame->get_reflower(); if (!$reflower) { return; } $cb_w = null; if (DOMPDF_ENABLE_CSS_FLOAT) { $block = $this->_block_frame; $root = $block->get_root(); $floating_frames = $root->get_floating_frames(); foreach ($floating_frames as $child_key => $floating_frame) { $id = $floating_frame->get_id(); if (isset($this->floating_blocks[$id])) { continue; } $float = $floating_frame->get_style()->float; $floating_width = $floating_frame->get_margin_width(); if (!$cb_w) { $cb_w = $floating_frame->get_containing_block("w"); } $line_w = $this->get_width(); if (!$floating_frame->_float_next_line && $cb_w <= $line_w + $floating_width && $cb_w > $line_w) { $floating_frame->_float_next_line = true; continue; } // If the child is still shifted by the floating element if ($anti_infinite_loop++ < 1000 && $floating_frame->get_position("y") + $floating_frame->get_margin_height() > $this->y && $block->get_position("x") + $block->get_margin_width() > $floating_frame->get_position("x")) { if ($float === "left") { $this->left += $floating_width; } else { $this->right += $floating_width; } $this->floating_blocks[$id] = true; } else { $root->remove_floating_frame($child_key); } } } }
function get_float_offsets() { $reflower = $this->_block_frame->get_reflower(); if (!$reflower) { return; } $floating_children = $reflower->get_floating_children(); $cb_w = null; if (DOMPDF_ENABLE_CSS_FLOAT && !empty($floating_children)) { foreach ($floating_children as $child_key => $floating_child) { $id = $floating_child->get_id(); if (isset($this->floating_blocks[$id])) { continue; } $float = $floating_child->get_style()->float; $floating_width = $floating_child->get_margin_width(); if (!$cb_w) { $cb_w = $floating_child->get_containing_block("w"); } $line_w = $this->get_width(); if (!$floating_child->_float_next_line && $cb_w <= $line_w + $floating_width && $cb_w > $line_w) { $floating_child->_float_next_line = true; continue; } // If the child is still shifted by the floating element if ($floating_child->get_position("y") + $floating_child->get_margin_height() > $this->y) { if ($float === "left") { $this->left += $floating_width; } else { $this->right += $floating_width; } $this->floating_blocks[$id] = true; } else { $reflower->remove_floating_child($child_key); } } } }