/** * Calculate elements position using parent and posref * * @param ElementInterface $elm */ public function placeElement(ElementInterface $elm) { // element real bbox $bbox = $elm->getBbox(); // element requested pos and size list($nodeX, $nodeY) = $elm->getPos(); list($nodeW, $nodeH) = $elm->getSize(); if ($nodeW === null) { $nodeW = $bbox[2]; } if ($nodeH === null) { $nodeH = $bbox[3]; } // final size (only image is resized, // text/polygon will not be clipped or resized) $elm->setSize($nodeW, $nodeH); $parent = $this->getParent($elm); if (!empty($parent)) { list($parentX, $parentY) = $parent->getPos(); list($parentW, $parentH) = $parent->getSize(); } else { // root element $parentX = 0; $parentY = 0; $parentW = $this->width; $parentH = $this->height; } // first is parent, second is node $posref = explode(' ', $elm->getPosref()); if (empty($posref)) { $posref = array('TL', 'TL'); } elseif (empty($posref[1])) { $posref[1] = 'TL'; } // modify parent x/y so that x/y points to anchor list($offsetX, $offsetY) = $this->evalPosref($posref[0], $parentW, $parentH); $parentX += $offsetX; $parentY += $offsetY; // modify element x/y so that x/y points to anchor list($offsetX, $offsetY) = $this->evalPosref($posref[1], $nodeW, $nodeH); $x = $nodeX - $offsetX + $parentX; $y = $nodeY - $offsetY + $parentY; // final position $elm->setPos($x, $y); }
/** * {@inheritdoc} */ public function add(ElementInterface $elm) { $id = $elm->getId(); $this->elements[$id] = $elm; }