* @license http://www.gnu.org/licenses/gpl-2.0.txt GPL, version 2 * @author Icinga Development Team */ // {{{ICINGA_LICENSE_HEADER}}} namespace Icinga\Chart\Primitive; use Icinga\Chart\Render\LayoutBox; use Icinga\Chart\Render\RenderContext; use Icinga\Util\Dimension; class Canvas implements Drawable { private $name; private $children = array(); private $isClipPath = false; private $keepRatio = false; public function __construct($name, LayoutBox $rect) { $this->rect = $rect; $this->name = $name; } public function toClipPath() { $this->isClipPath = true; } public function toSvg(RenderContext $ctx) { $doc = $ctx->getDocument(); if ($this->isClipPath) { $outer = $doc->createElement('defs'); $innerContainer = $element = $doc->createElement('clipPath'); $outer->appendChild($element); } else { $outer = $element = $doc->createElement('g'); $innerContainer = $doc->createElement('g'); $innerContainer->setAttribute('x', 0); $innerContainer->setAttribute('y', 0); $innerContainer->setAttribute('id', $this->name . '_inner'); $innerContainer->setAttribute('transform', $this->rect->getInnerTransform($ctx)); $element->appendChild($innerContainer); } $element->setAttribute('id', $this->name); $element->setAttribute('transform', $this->rect->getOuterTranslate($ctx)); foreach($this->children as $child) { $innerContainer->appendChild($child->toSvg($ctx)); } return $outer; } public function getLayout() { return $this->rect; } public function addElement(Drawable $child) { $this->children[] = $child; } }