/**
  * {@inheritdoc}
  */
 public function draw(CanvasInterface $canvas, Border $border, StyleInterface $style = null)
 {
     $rect = new Rectangle($canvas->getDimension());
     $color = $style ? $style->apply($canvas, $border) : $border->getColor();
     $rect->setColor($color)->setLineThickness($border->getSize())->draw($canvas);
     return $this;
 }
 /**
  * {@inheritdoc}
  */
 protected function doApply(CanvasInterface $canvas)
 {
     $colors = array(new RGBColor(0, 0, 150, 100), new RGBColor(255, 0, 0, 100), new RGBColor(0, 0, 0, 100), new RGBColor(150, 0, 0, 100), new RGBColor(255, 204, 0, 100), new RGBColor(100, 100, 100, 100));
     $width = round($canvas->getWidth() / 6);
     $dimension = new Dimension($width, $canvas->getHeight());
     $rect = new Rectangle($dimension);
     $rect->fill(true);
     for ($i = 0; $i < 6; $i++) {
         $rect->getStart()->move($width * $i, 0);
         $rect->setColor($colors[$i])->draw($canvas);
     }
     $actions = array(new Smooth(20), new Color\Contrast(35));
     foreach ($actions as $action) {
         $action->apply($canvas);
     }
 }
 /**
  * {@inheritdoc}
  */
 protected function doGenerate(CanvasInterface $canvas)
 {
     $width = $canvas->getWidth();
     $height = $canvas->getHeight();
     $n = max($width, $height) / 2;
     $rect = new Rectangle();
     $rect->fill(true);
     for ($i = 0; $i < $n; $i += $this->getStep() + 1) {
         $rect->getStart()->move($i * $width / $height, $i * $height / $width);
         $rect->getDimension()->resize($width - $i * $width / $height - $rect->getStart()->getX(), $height - $i * $height / $width - $rect->getStart()->getY());
         $rect->setColor($this->getColor($i / $n))->draw($canvas);
     }
 }
 /**
  * {@inheritdoc}
  */
 protected function doGenerate(CanvasInterface $canvas)
 {
     $n = $w = null;
     if (self::GRADIENT_VERTICAL == $this->getType()) {
         $n = $canvas->getHeight();
         $w = $canvas->getWidth();
     } else {
         $w = $canvas->getHeight();
         $n = $canvas->getWidth();
     }
     $rect = new Rectangle();
     $rect->fill(true);
     for ($i = 0; $i < $n; $i += $this->getStep() + 1) {
         if (self::GRADIENT_VERTICAL == $this->getType()) {
             $rect->getStart()->move(0, $i);
             $rect->getDimension()->resize($w, $i + $this->getStep());
         } else {
             $rect->getStart()->move($i, 0);
             $rect->getDimension()->resize($i + $this->getStep(), $w);
         }
         $rect->setColor($this->getColor($i / $n))->draw($canvas);
     }
 }