options = $options + [ 'up' => false, 'down' => false, 'fill_color' => null ]; $this->addClass(self::ZBX_STYLE_ARROW); if ($this->options['up'] && $this->options['down']) { $this->addClass(self::ZBX_STYLE_ARROW_UP_DOWN); } elseif ($this->options['up']) { $this->addClass(self::ZBX_STYLE_ARROW_UP); } elseif ($this->options['down']) { $this->addClass(self::ZBX_STYLE_ARROW_DOWN); } $fill_color = $this->options['fill_color'] ? 'fill: #'.$this->options['fill_color'] : null; $this ->setAttribute('viewBox', $this->viewbox) ->addItem( (new CSvgPolygon($this->drawArrow()))->addStyle($fill_color) ); } /** * Create polygon path for arrow shape. */ protected function drawArrow(): array { /** * Arrow pixel grid. * * XXXXXXX * 0123456 * Y0 ..cde.. * Y1 ..###.. * Y2 .#####. * Y3 b#a#g#f * Y4 ..###.. * Y5 ..###.. * Y6 ..###.. * Y7 m#n#h#i * Y8 .#####. * Y9 ..###.. * Y10..lkj.. */ [ $a, $b, $c, $d, $e, $f, $g, $h, $i, $j, $k, $l, $m, $n ] = [ [2, 3], [0, 3], [2, 0], [3, 0], [4, 0], [6, 3], [4, 3], [4, 7], [6, 7], [4, 10], [3, 10], [2, 10], [0, 7], [2, 7] ]; $head = $this->options['up'] ? [$a, $b, $d, $f, $g] : [$a, $c, $e, $g]; $foot = $this->options['down'] ? [$h, $i, $k, $m, $n] : [$h, $j, $l, $n]; return array_merge($head, $foot); } }