/** * Clip to current path * Uses the current path as clipping path, and terminate the path. * * @return bool Returns TRUE on success or FALSE on failure. */ public function clip() { if (!is_array($this->_last_geometry)) { $this->_errmsg = "No Geometry"; return false; } if (!$this->_page) { $this->_errmsg = "No Page"; return false; } $shape = $this->_last_geometry[0]; switch ($shape) { case 'rect': $this->_page->clipRectangle($this->_last_geometry[1][0], $this->_last_geometry[1][1], $this->_last_geometry[1][0] + $this->_last_geometry[1][2], $this->_last_geometry[1][1] + $this->_last_geometry[1][3]); return true; break; } $this->_errmsg = "Unknown shape '{$shape}'"; return false; }
/** * @param ZendPage $page * @param Viewport $viewport * @param float $x * @param float $y * @param float $width * @param float $height * @param bool $keepRatio */ private function translateAndClipToViewport(ZendPage $page, Viewport $viewport, $x, $y, $width, $height, $keepRatio = true) { $scaleX = $width / $viewport->getWidth(); $scaleY = $height / $viewport->getHeight(); $mx = -$viewport->getX(); $my = -$viewport->getY(); if ($keepRatio) { if ($scaleX < $scaleY) { $scaleY = $scaleX; // center viewport $my += ($height / $scaleY - $viewport->getHeight()) / 2; } else { $scaleX = $scaleY; // center viewport $mx += ($width / $scaleX - $viewport->getWidth()) / 2; } } // translate origin to $x/$y $page->translate($x, $y); // scale to viewport $page->scale($scaleX, $scaleY); // translate origin to (centered) $viewport origin $page->translate($mx, $my); // clip viewport $page->clipRectangle($viewport->getX(), $viewport->getY(), $viewport->getX() + $viewport->getHeight(), $viewport->getY() + $viewport->getWidth()); }