red = max(0, min(255, $red)); $this->green = max(0, min(255, $green)); $this->blue = max(0, min(255, $blue)); $this->alpha = max(0.0, min(1.0, $alpha)); } public function getRed(): int { return $this->red; } public function getGreen(): int { return $this->green; } public function getBlue(): int { return $this->blue; } public function getAlpha(): float { return $this->alpha; } public function shouldInherit(): bool { return false; } public function __toString(): string { if($this->alpha < 1.0) return sprintf('rgba(%d, %d, %d, %.3F)', $this->red, $this->green, $this->blue, $this->alpha); return sprintf('#%02x%02x%02x', $this->red, $this->green, $this->blue); } public static function fromRawRGB(int $raw): ColourRGB { return new ColourRGB( (($raw >> 16) & 0xFF), (($raw >> 8) & 0xFF), ($raw & 0xFF), 1.0 ); } public static function fromRawARGB(int $raw): ColourRGB { return new ColourRGB( (($raw >> 16) & 0xFF), (($raw >> 8) & 0xFF), ($raw & 0xFF), (($raw >> 24) & 0xFF) / 255.0, ); } public static function fromRawRGBA(int $raw): ColourRGB { return new ColourRGB( (($raw >> 24) & 0xFF), (($raw >> 16) & 0xFF), (($raw >> 8) & 0xFF), ($raw & 0xFF) / 255.0, ); } public static function convert(Colour $colour): ColourRGB { if($colour instanceof ColourRGB) return $colour; return new ColourRGB( $colour->getRed(), $colour->getGreen(), $colour->getBlue(), $colour->getAlpha() ); } }