123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- <?php
- declare(strict_types = 1);
- namespace BaconQrCode\Renderer\RendererStyle;
- use BaconQrCode\Exception\RuntimeException;
- use BaconQrCode\Renderer\Color\ColorInterface;
- use BaconQrCode\Renderer\Color\Gray;
- final class Fill
- {
- /**
- * @var ColorInterface
- */
- private $backgroundColor;
- /**
- * @var ColorInterface|null
- */
- private $foregroundColor;
- /**
- * @var Gradient|null
- */
- private $foregroundGradient;
- /**
- * @var EyeFill
- */
- private $topLeftEyeFill;
- /**
- * @var EyeFill
- */
- private $topRightEyeFill;
- /**
- * @var EyeFill
- */
- private $bottomLeftEyeFill;
- /**
- * @var self|null
- */
- private static $default;
- private function __construct(
- ColorInterface $backgroundColor,
- ?ColorInterface $foregroundColor,
- ?Gradient $foregroundGradient,
- EyeFill $topLeftEyeFill,
- EyeFill $topRightEyeFill,
- EyeFill $bottomLeftEyeFill
- ) {
- $this->backgroundColor = $backgroundColor;
- $this->foregroundColor = $foregroundColor;
- $this->foregroundGradient = $foregroundGradient;
- $this->topLeftEyeFill = $topLeftEyeFill;
- $this->topRightEyeFill = $topRightEyeFill;
- $this->bottomLeftEyeFill = $bottomLeftEyeFill;
- }
- public static function default() : self
- {
- return self::$default ?: self::$default = self::uniformColor(new Gray(100), new Gray(0));
- }
- public static function withForegroundColor(
- ColorInterface $backgroundColor,
- ColorInterface $foregroundColor,
- EyeFill $topLeftEyeFill,
- EyeFill $topRightEyeFill,
- EyeFill $bottomLeftEyeFill
- ) : self {
- return new self(
- $backgroundColor,
- $foregroundColor,
- null,
- $topLeftEyeFill,
- $topRightEyeFill,
- $bottomLeftEyeFill
- );
- }
- public static function withForegroundGradient(
- ColorInterface $backgroundColor,
- Gradient $foregroundGradient,
- EyeFill $topLeftEyeFill,
- EyeFill $topRightEyeFill,
- EyeFill $bottomLeftEyeFill
- ) : self {
- return new self(
- $backgroundColor,
- null,
- $foregroundGradient,
- $topLeftEyeFill,
- $topRightEyeFill,
- $bottomLeftEyeFill
- );
- }
- public static function uniformColor(ColorInterface $backgroundColor, ColorInterface $foregroundColor) : self
- {
- return new self(
- $backgroundColor,
- $foregroundColor,
- null,
- EyeFill::inherit(),
- EyeFill::inherit(),
- EyeFill::inherit()
- );
- }
- public static function uniformGradient(ColorInterface $backgroundColor, Gradient $foregroundGradient) : self
- {
- return new self(
- $backgroundColor,
- null,
- $foregroundGradient,
- EyeFill::inherit(),
- EyeFill::inherit(),
- EyeFill::inherit()
- );
- }
- public function hasGradientFill() : bool
- {
- return null !== $this->foregroundGradient;
- }
- public function getBackgroundColor() : ColorInterface
- {
- return $this->backgroundColor;
- }
- public function getForegroundColor() : ColorInterface
- {
- if (null === $this->foregroundColor) {
- throw new RuntimeException('Fill uses a gradient, thus no foreground color is available');
- }
- return $this->foregroundColor;
- }
- public function getForegroundGradient() : Gradient
- {
- if (null === $this->foregroundGradient) {
- throw new RuntimeException('Fill uses a single color, thus no foreground gradient is available');
- }
- return $this->foregroundGradient;
- }
- public function getTopLeftEyeFill() : EyeFill
- {
- return $this->topLeftEyeFill;
- }
- public function getTopRightEyeFill() : EyeFill
- {
- return $this->topRightEyeFill;
- }
- public function getBottomLeftEyeFill() : EyeFill
- {
- return $this->bottomLeftEyeFill;
- }
- }
|