mirror of
https://github.com/3b1b/manim.git
synced 2025-09-19 04:41:56 +00:00
Factor rgb_to_hex, hex_to_int and int_to_hex away from StringMobject and to utils/color
This commit is contained in:
parent
e0e7e24351
commit
073a62bf03
4 changed files with 26 additions and 21 deletions
|
@ -3,6 +3,8 @@ from __future__ import annotations
|
|||
import re
|
||||
|
||||
from manimlib.mobject.svg.string_mobject import StringMobject
|
||||
from manimlib.utils.color import color_to_hex
|
||||
from manimlib.utils.color import hex_to_int
|
||||
from manimlib.utils.tex_file_writing import tex_content_to_svg_file
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
@ -159,7 +161,7 @@ class MTex(StringMobject):
|
|||
|
||||
@staticmethod
|
||||
def get_color_command(rgb_hex: str) -> str:
|
||||
rgb = MTex.hex_to_int(rgb_hex)
|
||||
rgb = hex_to_int(rgb_hex)
|
||||
rg, b = divmod(rgb, 256)
|
||||
r, g = divmod(rg, 256)
|
||||
return f"\\color[RGB]{{{r}, {g}, {b}}}"
|
||||
|
@ -181,7 +183,7 @@ class MTex(StringMobject):
|
|||
suffix_lines = []
|
||||
if not is_labelled:
|
||||
prefix_lines.append(self.get_color_command(
|
||||
self.color_to_hex(self.base_color)
|
||||
color_to_hex(self.base_color)
|
||||
))
|
||||
if self.alignment:
|
||||
prefix_lines.append(self.alignment)
|
||||
|
|
|
@ -10,8 +10,9 @@ from manimlib.constants import WHITE
|
|||
from manimlib.logger import log
|
||||
from manimlib.mobject.svg.svg_mobject import SVGMobject
|
||||
from manimlib.mobject.types.vectorized_mobject import VGroup
|
||||
from manimlib.utils.color import color_to_rgb
|
||||
from manimlib.utils.color import rgb_to_hex
|
||||
from manimlib.utils.color import color_to_hex
|
||||
from manimlib.utils.color import hex_to_int
|
||||
from manimlib.utils.color import int_to_hex
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
|
@ -117,7 +118,7 @@ class StringMobject(SVGMobject, ABC):
|
|||
for submob, labelled_svg_submob in zip(
|
||||
self.submobjects, labelled_svg.submobjects
|
||||
):
|
||||
label = self.hex_to_int(self.color_to_hex(
|
||||
label = hex_to_int(color_to_hex(
|
||||
labelled_svg_submob.get_fill_color()
|
||||
))
|
||||
if label >= labels_count:
|
||||
|
@ -129,7 +130,7 @@ class StringMobject(SVGMobject, ABC):
|
|||
"Unrecognizable color labels detected (%s). " + \
|
||||
"The result could be unexpected.",
|
||||
", ".join(
|
||||
self.int_to_hex(color)
|
||||
int_to_hex(color)
|
||||
for color in unrecognizable_colors
|
||||
)
|
||||
)
|
||||
|
@ -196,18 +197,6 @@ class StringMobject(SVGMobject, ABC):
|
|||
def span_contains(span_0: Span, span_1: Span) -> bool:
|
||||
return span_0[0] <= span_1[0] and span_0[1] >= span_1[1]
|
||||
|
||||
@staticmethod
|
||||
def color_to_hex(color: ManimColor) -> str:
|
||||
return rgb_to_hex(color_to_rgb(color))
|
||||
|
||||
@staticmethod
|
||||
def hex_to_int(rgb_hex: str) -> int:
|
||||
return int(rgb_hex[1:], 16)
|
||||
|
||||
@staticmethod
|
||||
def int_to_hex(rgb_int: int) -> str:
|
||||
return f"#{rgb_int:06x}".upper()
|
||||
|
||||
# Parsing
|
||||
|
||||
def parse(self) -> None:
|
||||
|
@ -380,7 +369,7 @@ class StringMobject(SVGMobject, ABC):
|
|||
lambda label, flag, attr_dict: self.get_command_string(
|
||||
attr_dict,
|
||||
is_end=flag < 0,
|
||||
label_hex=self.int_to_hex(label) if is_labelled else None
|
||||
label_hex=int_to_hex(label) if is_labelled else None
|
||||
)
|
||||
)
|
||||
prefix, suffix = self.get_content_prefix_and_suffix(
|
||||
|
|
|
@ -15,6 +15,8 @@ from manimlib.constants import NORMAL
|
|||
from manimlib.logger import log
|
||||
from manimlib.mobject.svg.string_mobject import StringMobject
|
||||
from manimlib.utils.customization import get_customization
|
||||
from manimlib.utils.color import color_to_hex
|
||||
from manimlib.utils.color import int_to_hex
|
||||
from manimlib.utils.directories import get_downloads_dir
|
||||
from manimlib.utils.directories import get_text_dir
|
||||
from manimlib.utils.simple_functions import hash_string
|
||||
|
@ -366,7 +368,7 @@ class MarkupText(StringMobject):
|
|||
self, is_labelled: bool
|
||||
) -> tuple[str, str]:
|
||||
global_attr_dict = {
|
||||
"foreground": self.color_to_hex(self.base_color),
|
||||
"foreground": color_to_hex(self.base_color),
|
||||
"font_family": self.font,
|
||||
"font_style": self.slant,
|
||||
"font_weight": self.weight,
|
||||
|
@ -394,7 +396,7 @@ class MarkupText(StringMobject):
|
|||
self.get_command_string(
|
||||
global_attr_dict,
|
||||
is_end=is_end,
|
||||
label_hex=self.int_to_hex(0) if is_labelled else None
|
||||
label_hex=int_to_hex(0) if is_labelled else None
|
||||
)
|
||||
for is_end in (False, True)
|
||||
)
|
||||
|
|
|
@ -62,6 +62,18 @@ def color_to_int_rgba(color: ManimColor, opacity: float = 1.0) -> np.ndarray[int
|
|||
return np.array([*color_to_int_rgb(color), alpha], dtype=np.uint8)
|
||||
|
||||
|
||||
def color_to_hex(color: ManimColor) -> str:
|
||||
return rgb_to_hex(color_to_rgb(color))
|
||||
|
||||
|
||||
def hex_to_int(rgb_hex: str) -> int:
|
||||
return int(rgb_hex[1:], 16)
|
||||
|
||||
|
||||
def int_to_hex(rgb_int: int) -> str:
|
||||
return f"#{rgb_int:06x}".upper()
|
||||
|
||||
|
||||
def color_gradient(
|
||||
reference_colors: Iterable[ManimColor],
|
||||
length_of_output: int
|
||||
|
|
Loading…
Add table
Reference in a new issue