<?php
namespace App\Controller;
/**
* Color class example page.
*/
class Color extends Index
{
const STEP_SIZE = 0.02;
protected function _run()
{
$gamma = \Request::value('gamma', \Core\Format\Color::GAMMA);
$data = [
'gamma' => $gamma,
'gradient1' => $this->drawColorFade(['ff0000', '0000ff', '00ff00', 'ff0000'], $gamma),
'gradient2' => $this->drawColorFade(['ffff00', '00ffff', 'ff00ff', 'ffff00'], $gamma),
'gradient3' => $this->drawColorFade(['ffffff', '000000', '99ccff', 'ff99cc'], $gamma),
'brightness1' => $this->drawBrightness('00FF00', $gamma),
'brightness2' => $this->drawBrightness('99ccff', $gamma),
'brightness3' => $this->drawBrightness('000000', $gamma),
];
return $this->_output('Color fades', $this->_show('page/color', $data));
}
/**
* Draw color-fade, fading normally through all steps.
* @param array $blocks
* @param float $gamma
*/
private function drawColorFade($blocks, $gamma)
{
$previousBlock = array_shift($blocks);
$colors = [];
foreach ($blocks as $block) {
$from = new \Core\Format\Color($previousBlock, $gamma);
$to = new \Core\Format\Color($block, $gamma);
for ($i = 0; $i <= 1; $i += self::STEP_SIZE) {
$colors[] = $from->fadeTo($to, $i);
}
$previousBlock = $block;
}
return $this->_drawColors($colors);
}
/**
* Draw color-fade, fading normally through all steps.
* @param array $blocks
* @param float $gamma
*/
private function drawBrightness($color, $gamma)
{
$colors = [];
$color = new \Core\Format\Color($color, $gamma);
$stepsize = self::STEP_SIZE / 2;
for ($i = 0; $i <= 1; $i += $stepsize) {
$colors[] = $color->setBrightness($i);
}
return $this->_drawColors($colors);
}
/**
* Draw colors for testing.
* @param type $colors
* @return type
*/
private function _drawColors($colors)
{
$result = [];
foreach ($colors as $color) {
$result[] = "<div style=\"background: {$color}; overflow: hidden; height: 4px; \"> </div>";
}
return implode(PHP_EOL, $result);
}
}