/** * 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') { return 'centre middle'; } return parent::DataLabelPosition($dataset, $index, $item, $x, $y, $w, $h, $label_w, $label_h); }
/** * Returns the position for the label */ public function DataLabelPosition($dataset, $index, &$item, $x, $y, $w, $h, $label_w, $label_h) { $pos = parent::DataLabelPosition($dataset, $index, $item, $x, $y, $w, $h, $label_w, $label_h); if (isset($this->slice_info[$index])) { list($xo, $yo) = $this->GetExplode($item, $this->slice_info[$index]->start_angle + $this->s_angle, $this->slice_info[$index]->end_angle + $this->s_angle); list($x1, $y1) = explode(' ', $pos); if (is_numeric($x1) && is_numeric($y1)) { $x1 += $xo; $y1 += $yo; } else { // this shouldn't happen, but just in case $x1 = $this->centre_x + $xo; $y1 = $this->centre_y + $yo; } $pos = "{$x1} {$y1}"; } else { $pos = 'middle centre'; } return $pos; }