forked from anton/matekasse
39 lines
1 KiB
Python
39 lines
1 KiB
Python
|
from typing import NamedTuple, Tuple
|
||
|
|
||
|
|
||
|
class ColorTriplet(NamedTuple):
|
||
|
"""The red, green, and blue components of a color."""
|
||
|
|
||
|
red: int
|
||
|
"""Red component in 0 to 255 range."""
|
||
|
green: int
|
||
|
"""Green component in 0 to 255 range."""
|
||
|
blue: int
|
||
|
"""Blue component in 0 to 255 range."""
|
||
|
|
||
|
@property
|
||
|
def hex(self) -> str:
|
||
|
"""get the color triplet in CSS style."""
|
||
|
red, green, blue = self
|
||
|
return f"#{red:02x}{green:02x}{blue:02x}"
|
||
|
|
||
|
@property
|
||
|
def rgb(self) -> str:
|
||
|
"""The color in RGB format.
|
||
|
|
||
|
Returns:
|
||
|
str: An rgb color, e.g. ``"rgb(100,23,255)"``.
|
||
|
"""
|
||
|
red, green, blue = self
|
||
|
return f"rgb({red},{green},{blue})"
|
||
|
|
||
|
@property
|
||
|
def normalized(self) -> Tuple[float, float, float]:
|
||
|
"""Convert components into floats between 0 and 1.
|
||
|
|
||
|
Returns:
|
||
|
Tuple[float, float, float]: A tuple of three normalized colour components.
|
||
|
"""
|
||
|
red, green, blue = self
|
||
|
return red / 255.0, green / 255.0, blue / 255.0
|