Source code for webtraversallibrary.color

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at

#   http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

"""Representation of an RGB(A) color."""

from __future__ import annotations

from dataclasses import dataclass
from typing import Tuple


[docs]@dataclass(order=True) class Color: """Representation of an 8-bit RGBA color.""" r: int g: int b: int a: int = 255 def __post_init__(self): assert all(0 <= channel <= 255 for channel in (self.r, self.g, self.b, self.a))
[docs] @staticmethod def from_str(color: str) -> Color: """Creates a color from a "#RRGGBBAA" representation. Alpha is optional.""" if color.startswith("#"): color = color[1:] r = int(color[0:2], 16) g = int(color[2:4], 16) b = int(color[4:6], 16) a = int(color[6:], 16) if len(color) == 8 else 255 return Color(r, g, b, a)
[docs] def to_str(self, with_alpha: bool = False) -> str: """Creates an "#RRGGBBAA" string from this color. Alpha is optional.""" def _hex(n): return hex(n)[2:].zfill(2) color = f"#{_hex(self.r)}{_hex(self.g)}{_hex(self.b)}" if with_alpha: color += f"{hex(self.a)[2:]}" return color.upper()
[docs] def to_tuple(self, with_alpha: bool = False) -> Tuple: """ Returns either a 3- or a 4-tuple with the values, depending on the value of `with_alpha`. """ if with_alpha: return (self.r, self.g, self.b, self.a) return (self.r, self.g, self.b)