/usr/share/php/Icinga/Chart/Render/RenderContext.php is in php-icinga 2.1.0-1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | <?php
/* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
namespace Icinga\Chart\Render;
use DOMDocument;
/**
* Context for rendering, handles ratio based coordinate calculations.
*
* The most important functions when rendering are the toAbsolute and roRelative
* values, taking world coordinates and translating them into local coordinates.
*/
class RenderContext
{
/**
* The base size of the viewport, i.e. how many units are available on a 1:1 ratio
*
* @var array
*/
private $viewBoxSize = array(1000, 1000);
/**
* The DOMDocument for modifying the elements
*
* @var DOMDocument
*/
private $document;
/**
* If true no ratio correction will be made
*
* @var bool
*/
private $respectRatio = false;
/**
* The ratio on the x side. A x ration of 2 means that the width of the SVG is divided in 2000
* units (see $viewBox)
*
* @var int
*/
private $xratio = 1;
/**
* The ratio on the y side. A y ration of 2 means that the height of the SVG is divided in 2000
* units (see $viewBox)
*
* @var int
*/
private $yratio = 1;
/**
* Creates a new context for the given DOM Document
*
* @param DOMDocument $document The DOM document represented by this context
* @param int $width The width (may be approximate) of the document
* (only required for ratio calculation)
* @param int $height The height (may be approximate) of the document
* (only required for ratio calculation)
*/
public function __construct(DOMDocument $document, $width, $height)
{
$this->document = $document;
if ($width > $height) {
$this->xratio = $width / $height;
} elseif ($height > $width) {
$this->yratio = $height / $width;
}
}
/**
* Return the document represented by this Rendering context
*
* @return DOMDocument The DOMDocument for creating files
*/
public function getDocument()
{
return $this->document;
}
/**
* Let successive toAbsolute operations ignore ratio correction
*
* This can be called to avoid distortion on certain elements like rectangles.
*/
public function keepRatio()
{
$this->respectRatio = true;
}
/**
* Let successive toAbsolute operations perform ratio correction
*
* This will cause distortion on certain elements like rectangles.
*/
public function ignoreRatio()
{
$this->respectRatio = false;
}
/**
* Return how many unit s are available in the Y axis
*
* @return int The number of units available on the y axis
*/
public function getNrOfUnitsY()
{
return intval($this->viewBoxSize[1] * $this->yratio);
}
/**
* Return how many unit s are available in the X axis
*
* @return int The number of units available on the x axis
*/
public function getNrOfUnitsX()
{
return intval($this->viewBoxSize[0] * $this->xratio);
}
/**
* Transforms the x,y coordinate from relative coordinates to absolute world coordinates
*
* (50, 50) would be a point in the middle of the document and map to 500, 1000 on a
* 1000 x 1000 viewbox with a 1:2 ratio.
*
* @param int $x The relative x coordinate
* @param int $y The relative y coordinate
*
* @return array An x,y tuple containing absolute coordinates
* @see RenderContext::toRelative
*/
public function toAbsolute($x, $y)
{
return array($this->xToAbsolute($x), $this->yToAbsolute($y));
}
/**
* Transforms the x,y coordinate from absolute coordinates to relative world coordinates
*
* This is the inverse function of toAbsolute
*
* @param int $x The absolute x coordinate
* @param int $y The absolute y coordinate
*
* @return array An x,y tupel containing absolute coordinates
* @see RenderContext::toAbsolute
*/
public function toRelative($x, $y)
{
return array($this->xToRelative($x), $this->yToRelative($y));
}
/**
* Calculates the scale transformation required to apply the padding on an Canvas
*
* @param array $padding A 4 element array containing top, right, bottom and left padding
*
* @return array An array containing the x and y scale
*/
public function paddingToScaleFactor(array $padding)
{
list($horizontalPadding, $verticalPadding) = $this->toAbsolute(
$padding[LayoutBox::PADDING_RIGHT] + $padding[LayoutBox::PADDING_LEFT],
$padding[LayoutBox::PADDING_TOP] + $padding[LayoutBox::PADDING_BOTTOM]
);
return array(
($this->getNrOfUnitsX() - $horizontalPadding) / $this->getNrOfUnitsX(),
($this->getNrOfUnitsY() - $verticalPadding) / $this->getNrOfUnitsY()
);
}
/**
* Transform a relative x coordinate to an absolute one
*
* @param int $x A relative x coordinate
*
* @return int An absolute x coordinate
**/
public function xToAbsolute($x)
{
return $this->getNrOfUnitsX() / 100 * $x / ($this->respectRatio ? $this->xratio : 1);
}
/**
* Transform a relative y coordinate to an absolute one
*
* @param int $y A relative y coordinate
*
* @return int An absolute y coordinate
*/
public function yToAbsolute($y)
{
return $this->getNrOfUnitsY() / 100 * $y / ($this->respectRatio ? $this->yratio : 1);
}
/**
* Transform a absolute x coordinate to an relative one
*
* @param int $x An absolute x coordinate
*
* @return int A relative x coordinate
*/
public function xToRelative($x)
{
return $x / $this->getNrOfUnitsX() * 100 * ($this->respectRatio ? $this->xratio : 1);
}
/**
* Transform a absolute y coordinate to an relative one
*
* @param int $y An absolute x coordinate
*
* @return int A relative x coordinate
*/
public function yToRelative($y)
{
return $y / $this->getNrOfUnitsY() * 100 * ($this->respectRatio ? $this->yratio : 1);
}
}
|