123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- <?php
- namespace Drupal\color_field;
- /**
- * Hex represents the Hex color format
- */
- class ColorHex extends ColorBase {
- /**
- * The Hex triplet of the color.
- * @var int
- */
- private $color;
- /**
- * Create a new Hex from a string.
- *
- * @param string $color
- * The string hex value (i.e. "FFFFFF").
- * @param string $opacity
- * The opacity value.
- * @return ColorHex
- * The ColorHex object.
- * @throws Exception
- */
- public function __construct($color, $opacity) {
- $color = trim(strtolower($color));
- if (substr($color, 0, 1) === '#') {
- $color = substr($color, 1);
- }
- if (strlen($color) === 3) {
- $color = str_repeat($color[0], 2) . str_repeat($color[1], 2) . str_repeat($color[2], 2);
- }
- if (!preg_match('/[0-9A-F]{6}/i', $color)) {
- // @throws exception.
- }
- $this->color = hexdec($color);
- $this->setOpacity(floatval($opacity));
- return $this;
- }
- /**
- * A string representation of this color in the current format
- *
- * @param bool $opacity
- * Whether or not to display the opacity.
- *
- * @return string
- * The color in format: #RRGGBB
- */
- public function toString($opacity = TRUE) {
- $rgb = $this->toRGB();
- $hex = '#';
- $hex .= str_pad(dechex($rgb->getRed()), 2, "0", STR_PAD_LEFT);
- $hex .= str_pad(dechex($rgb->getGreen()), 2, "0", STR_PAD_LEFT);
- $hex .= str_pad(dechex($rgb->getBlue()), 2, "0", STR_PAD_LEFT);
- if ($opacity) {
- $hex .= ' ' . $this->getOpacity();
- }
- return strtoupper($hex);
- }
- /**
- * {@inheritdoc}
- */
- public function toHex() {
- return $this;
- }
- /**
- * {@inheritdoc}
- */
- public function toRGB() {
- $red = (($this->color & 0xFF0000) >> 16);
- $green = (($this->color & 0x00FF00) >> 8);
- $blue = (($this->color & 0x0000FF));
- $opacity = $this->getOpacity();
- return new ColorRGB($red, $green, $blue, $opacity);
- }
- }
|