. */ /** * For more information, please contact */ namespace Goat1000\SVGGraph; class SemiDonutGraph extends DonutGraph { /** * Override to set the options for semi-ness */ public function __construct($w, $h, array $settings, array $fixed_settings = []) { $reverse = isset($settings['reverse']) && $settings['reverse']; $flipped = isset($settings['flipped']) && $settings['flipped']; $start = 180; if($flipped) { $start = 0; $reverse = !$reverse; } if($reverse) { $start += 180; } $fixed = [ 'reverse' => $reverse, 'start_angle' => $start, 'end_angle' => $start + 180, 'slice_fit' => true ]; $fixed_settings = array_merge($fixed, $fixed_settings); parent::__construct($w, $h, $settings, $fixed_settings); } /** * Overridden to keep inner text in the middle */ public function dataLabelPosition($dataset, $index, &$item, $x, $y, $w, $h, $label_w, $label_h) { if($dataset === 'innertext') { if($this->getOption('flipped')) $y_offset = new Number($label_h / 2); else $y_offset = new Number($label_h / -2); return ['centre middle 0 ' . $y_offset, [$x, $y] ]; } return parent::dataLabelPosition($dataset, $index, $item, $x, $y, $w, $h, $label_w, $label_h); } }