protected function drawArea(awDriver $driver, awPolygon $polygon) { $starts = array(); foreach ($this->areas as $area) { list($start) = $area; $starts[$start] = TRUE; } // Draw filled areas foreach ($this->areas as $area) { list($start, $stop, $background) = $area; $polygonArea = new awPolygon(); $p = $this->xAxisPoint($start); $polygonArea->append($p); for ($i = $start; $i <= $stop; $i++) { $p = clone $polygon->get($i); if ($i === $stop and array_key_exists($stop, $starts)) { $p = $p->move(-1, 0); } $polygonArea->append($p); } $p = $this->xAxisPoint($stop); if (array_key_exists($stop, $starts)) { $p = $p->move(-1, 0); } $polygonArea->append($p); // Draw area $driver->filledPolygon($background, $polygonArea); } }