View source
<?php
namespace Drupal\color_field;
use Exception;
class ColorHSL extends ColorBase {
protected $hue;
protected $sat;
protected $lum;
public function __construct($hue, $sat, $lum, $opacity) {
if ($hue < 0 || $hue > 360) {
throw new Exception("Invalid hue: {$hue}");
}
if ($sat < 0 || $sat > 100) {
throw new Exception("Invalid saturation: {$sat}");
}
if ($lum < 0 || $lum > 100) {
throw new Exception("Invalid luminosity: {$lum}");
}
$this->hue = $hue;
$this->sat = $sat;
$this->lum = $lum;
$this->opacity = floatval($opacity);
}
public function getHue() {
return $this->hue;
}
public function getSat() {
return $this->sat;
}
public function getLum() {
return $this->lum;
}
public function toString($opacity = TRUE) {
if ($opacity) {
$output = 'hsla(' . $this->hue . ',' . $this->sat . ',' . $this->lum . ',' . $this
->getOpacity() . ')';
}
else {
$output = 'hsl(' . $this->hue . ',' . $this->sat . ',' . $this->lum . ')';
}
return strtolower($output);
}
public function toHex() {
return $this
->toRGB()
->toHex();
}
public function toRgb() {
$h = $this
->getHue();
$s = $this
->getSat();
$l = $this
->getLum();
$h /= 60;
if ($h < 0) {
$h = 6 - fmod(-$h, 6);
}
$h = fmod($h, 6);
$s = max(0, min(1, $s / 100));
$l = max(0, min(1, $l / 100));
$c = (1 - abs(2 * $l - 1)) * $s;
$x = $c * (1 - abs(fmod($h, 2) - 1));
if ($h < 1) {
$r = $c;
$g = $x;
$b = 0;
}
elseif ($h < 2) {
$r = $x;
$g = $c;
$b = 0;
}
elseif ($h < 3) {
$r = 0;
$g = $c;
$b = $x;
}
elseif ($h < 4) {
$r = 0;
$g = $x;
$b = $c;
}
elseif ($h < 5) {
$r = $x;
$g = 0;
$b = $c;
}
else {
$r = $c;
$g = 0;
$b = $x;
}
$m = $l - $c / 2;
$r = round(($r + $m) * 255);
$g = round(($g + $m) * 255);
$b = round(($b + $m) * 255);
return new ColorRGB(intval($r), intval($g), intval($b), $this
->getOpacity());
}
public function toHsl() {
return $this;
}
}