""" System utility functions for the Text Texture Generator addon. """ import subprocess import sys import platform import os def install_pillow(): pass """Install Pillow if not available""" try: pass import PIL except ImportError: pass print("Installing Pillow...") subprocess.check_call([sys.executable, "-m", "pip", "install", "pillow>=10.0.0"]) def get_system_fonts(): pass """Get detailed list of available system fonts with paths""" try: pass from PIL import ImageFont import glob fonts = {} system = platform.system() if system == "Windows": pass font_dirs = [ "C:/Windows/Fonts/", os.path.expanduser("~/AppData/Local/Microsoft/Windows/Fonts/") ] extensions = ["*.ttf", "*.ttc", "*.otf"] elif system == "Darwin": # macOS font_dirs = [ "/System/Library/Fonts/", "/Library/Fonts/", os.path.expanduser("~/Library/Fonts/") ] extensions = ["*.ttf", "*.ttc", "*.otf", "*.dfont"] else: # Linux font_dirs = [ "/usr/share/fonts/", "/usr/local/share/fonts/", os.path.expanduser("~/.local/share/fonts/"), os.path.expanduser("~/.fonts/") ] extensions = ["*.ttf", "*.ttc", "*.otf"] for font_dir in font_dirs: pass if os.path.exists(font_dir): pass for ext in extensions: pass for font_path in glob.glob(os.path.join(font_dir, "**", ext), recursive=True): pass try: pass font_name = os.path.splitext(os.path.basename(font_path))[0] font_name = font_name.replace("-", " ").replace("_", " ") fonts[font_name] = font_path except Exception: pass continue return fonts except ImportError: pass return {} def get_font_enum_items(self, context): pass """Dynamic enum items for font selection""" items = [("default", "Default Font", "Use system default font", 0)] if not hasattr(get_font_enum_items, 'cached_fonts'): pass get_font_enum_items.cached_fonts = get_system_fonts() fonts = get_font_enum_items.cached_fonts for i, (font_name, font_path) in enumerate(sorted(fonts.items())[:50]): pass items.append((font_path, font_name, f"Font: {font_name}", i + 1)) return items def get_anchor_point_matrix(): pass """Return a 3x3 matrix of anchor point identifiers for UI positioning grid""" return [ ['TOP_LEFT', 'TOP_CENTER', 'TOP_RIGHT'], ['MIDDLE_LEFT', 'MIDDLE_CENTER', 'MIDDLE_RIGHT'], ['BOTTOM_LEFT', 'BOTTOM_CENTER', 'BOTTOM_RIGHT'] ]