/** * Render the assigned data * * Will renderer all charts data in the remaining boundings after drawing * all other chart elements. The data will be rendered depending on the * settings in the dataset. * * @param ezcGraphRenderer $renderer Renderer * @param ezcGraphBoundings $boundings Remaining boundings * @return void */ protected function renderData(ezcGraphRenderer $renderer, ezcGraphBoundings $boundings, ezcGraphBoundings $innerBoundings) { // Use inner boundings for drawning chart data $boundings = $innerBoundings; $yAxisNullPosition = $this->elements['xAxis']->getCoordinate(false); // Initialize counters $nr = array(); $count = array(); foreach ($this->data as $data) { if (!isset($nr[$data->displayType->default])) { $nr[$data->displayType->default] = 0; $count[$data->displayType->default] = 0; } $nr[$data->displayType->default]++; $count[$data->displayType->default]++; } $checkedRegularSteps = false; // Display data foreach ($this->data as $datasetName => $data) { --$nr[$data->displayType->default]; // Check which axis should be used $xAxis = $data->xAxis->default ? $data->xAxis->default : $this->elements['xAxis']; $yAxis = $data->yAxis->default ? $data->yAxis->default : $this->elements['yAxis']; // Determine fill color for dataset if ($this->options->fillLines !== false) { $fillColor = clone $data->color->default; $fillColor->alpha = (int) round((255 - $fillColor->alpha) * ($this->options->fillLines / 255)); } else { $fillColor = null; } // Ensure regular steps on axis when used with bar charts and // precalculate some values use to render bar charts // // Called only once and only when bars should be rendered if ($checkedRegularSteps === false && $data->displayType->default === ezcGraph::BAR) { $height = $this->calculateStepWidth($yAxis, $xAxis, $boundings->height)->y; } // Draw lines for dataset $lastPoint = false; foreach ($data as $key => $value) { // Calculate point in chart $point = $xAxis->axisLabelRenderer->modifyChartDataPosition($yAxis->axisLabelRenderer->modifyChartDataPosition(new ezcGraphCoordinate($xAxis->getCoordinate($value), $yAxis->getCoordinate($key)))); // Render depending on display type of dataset switch (true) { case $data->displayType->default === ezcGraph::BAR: $renderer->drawHorizontalBar($boundings, new ezcGraphContext($datasetName, $key, $data->url[$key]), $data->color[$key], $point, $height, $nr[$data->displayType->default], $count[$data->displayType->default], $data->symbol[$key], $yAxisNullPosition); // Render highlight string if requested if ($data->highlight[$key]) { $renderer->drawDataHighlightText($boundings, new ezcGraphContext($datasetName, $key, $data->url[$key]), $point, $yAxisNullPosition, $nr[$data->displayType->default], $count[$data->displayType->default], $this->options->highlightFont, $data->highlightValue[$key] ? $data->highlightValue[$key] : $value, $this->options->highlightSize + $this->options->highlightFont->padding * 2, $this->options->highlightLines ? $data->color[$key] : null, $this->options->highlightXOffset ? $this->options->highlightXOffset : 0, $this->options->highlightYOffset ? $this->options->highlightYOffset : 0, $height, $data->displayType->default); } break; default: throw new ezcGraphInvalidDisplayTypeException($data->displayType->default); break; } // Store last point, used to connect lines in line chart. $lastPoint = $point; } } }