37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
from __future__ import annotations
|
|
from backend.node_registry import register_node
|
|
from backend.data_types import CUSTOM_FILE_FONT, SYSTEM_DEFAULT_FONT, list_overlay_font_choices, normalize_font_spec
|
|
|
|
|
|
@register_node(display_name="Font")
|
|
class Font:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"family": ([SYSTEM_DEFAULT_FONT, *list_overlay_font_choices(), CUSTOM_FILE_FONT], {
|
|
"default": SYSTEM_DEFAULT_FONT,
|
|
}),
|
|
"font_file": ("FILE_PICKER", {
|
|
"default": "",
|
|
"show_when_widget_value": {"family": [CUSTOM_FILE_FONT]},
|
|
}),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("FONT",)
|
|
RETURN_NAMES = ("font",)
|
|
FUNCTION = "build"
|
|
|
|
DESCRIPTION = (
|
|
"Build a reusable font spec for annotation overlays. Choose a discovered system font, "
|
|
"use the default fallback stack, or point to a custom font file."
|
|
)
|
|
|
|
def build(self, family: str, font_file: str = "") -> tuple:
|
|
if family == SYSTEM_DEFAULT_FONT:
|
|
return (None,)
|
|
if family == CUSTOM_FILE_FONT:
|
|
return (normalize_font_spec({"path": font_file}),)
|
|
return (normalize_font_spec({"family": family}),)
|