pre animation
This commit is contained in:
@@ -12,14 +12,6 @@ from dotenv import load_dotenv
|
||||
# Load environment variables
|
||||
load_dotenv()
|
||||
|
||||
# Try to import pyglet for font loading
|
||||
try:
|
||||
import pyglet
|
||||
PYGLET_AVAILABLE = True
|
||||
except ImportError:
|
||||
PYGLET_AVAILABLE = False
|
||||
print("pyglet not available - custom fonts may not work properly")
|
||||
|
||||
class SteamWorkshopGUI:
|
||||
def __init__(self, root):
|
||||
self.root = root
|
||||
@@ -54,108 +46,75 @@ class SteamWorkshopGUI:
|
||||
self.create_output_section(right_frame)
|
||||
|
||||
def load_custom_font(self):
|
||||
"""Load the RimWorld font using pyglet"""
|
||||
"""Load the RimWorld font using Windows AddFontResourceEx with private flag"""
|
||||
try:
|
||||
font_path = os.path.join("art", "RimWordFont4.ttf")
|
||||
if os.path.exists(font_path):
|
||||
abs_font_path = os.path.abspath(font_path)
|
||||
print(f"Font file found: {abs_font_path}")
|
||||
|
||||
if PYGLET_AVAILABLE:
|
||||
try:
|
||||
# Use pyglet to add the font
|
||||
pyglet.font.add_file(abs_font_path)
|
||||
|
||||
# Try to get the font family name from pyglet
|
||||
# Load the font to get its actual family name
|
||||
pyglet_font = pyglet.font.load(None, 12, bold=False, italic=False)
|
||||
|
||||
# Common RimWorld font family names to try
|
||||
possible_names = [
|
||||
"RimWorld",
|
||||
"RimWorldFont",
|
||||
"RimWordFont4",
|
||||
"Calibri",
|
||||
"Arial"
|
||||
]
|
||||
|
||||
# Test each possible font name
|
||||
for font_name in possible_names:
|
||||
try:
|
||||
test_font = font.Font(family=font_name, size=10)
|
||||
# If we get here, the font worked
|
||||
self.custom_font_family = font_name
|
||||
self.custom_font_available = True
|
||||
print(f"Successfully loaded font with pyglet: {font_name}")
|
||||
return
|
||||
except Exception as e:
|
||||
continue
|
||||
|
||||
print("pyglet loaded font but couldn't find working family name")
|
||||
self.custom_font_available = False
|
||||
|
||||
except Exception as e:
|
||||
print(f"pyglet font loading failed: {e}")
|
||||
self.custom_font_available = False
|
||||
# Use the Stack Overflow method with AddFontResourceEx
|
||||
success = self._load_font_private(abs_font_path)
|
||||
|
||||
if success:
|
||||
# Use the actual font family name from the TTF file
|
||||
self.custom_font_family = "RimWordFont"
|
||||
self.custom_font_available = True
|
||||
return
|
||||
|
||||
else:
|
||||
print("pyglet not available, trying Windows registration...")
|
||||
# Fall back to Windows registration method
|
||||
try:
|
||||
import ctypes
|
||||
from ctypes import wintypes
|
||||
|
||||
# Add font resource to Windows
|
||||
gdi32 = ctypes.windll.gdi32
|
||||
result = gdi32.AddFontResourceW(abs_font_path)
|
||||
|
||||
if result > 0:
|
||||
print(f"Successfully registered font with Windows")
|
||||
|
||||
# Notify Windows that fonts have changed
|
||||
try:
|
||||
HWND_BROADCAST = 0xFFFF
|
||||
WM_FONTCHANGE = 0x001D
|
||||
ctypes.windll.user32.SendMessageW(HWND_BROADCAST, WM_FONTCHANGE, 0, 0)
|
||||
print("Sent font change notification to Windows")
|
||||
except Exception as notify_error:
|
||||
print(f"Could not send font change notification: {notify_error}")
|
||||
|
||||
# For Windows registration, let's try using the actual font file name
|
||||
# Sometimes the family name is different from what we expect
|
||||
self.custom_font_family = "RimWorld" # Default assumption
|
||||
self.custom_font_available = True
|
||||
print(f"Using Windows-registered font: {self.custom_font_family}")
|
||||
else:
|
||||
print("Failed to register font with Windows")
|
||||
self.custom_font_available = False
|
||||
|
||||
except Exception as e:
|
||||
print(f"Windows font registration error: {e}")
|
||||
self.custom_font_available = False
|
||||
self.custom_font_available = False
|
||||
|
||||
else:
|
||||
print(f"Font file not found: {font_path}")
|
||||
self.custom_font_available = False
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error loading custom font: {e}")
|
||||
self.custom_font_available = False
|
||||
|
||||
# Initialize fallback values if font loading failed
|
||||
if not hasattr(self, 'custom_font_available'):
|
||||
self.custom_font_available = False
|
||||
if not hasattr(self, 'custom_font_family'):
|
||||
self.custom_font_family = None
|
||||
|
||||
def _load_font_private(self, fontpath):
|
||||
"""
|
||||
Load font privately using AddFontResourceEx
|
||||
Based on Stack Overflow solution by Felipe
|
||||
"""
|
||||
try:
|
||||
from ctypes import windll, byref, create_unicode_buffer
|
||||
|
||||
# Constants for AddFontResourceEx
|
||||
FR_PRIVATE = 0x10 # Font is private to this process
|
||||
FR_NOT_ENUM = 0x20 # Font won't appear in font enumeration
|
||||
|
||||
# Create unicode buffer for the font path
|
||||
pathbuf = create_unicode_buffer(fontpath)
|
||||
|
||||
# Use AddFontResourceExW for Unicode strings
|
||||
AddFontResourceEx = windll.gdi32.AddFontResourceExW
|
||||
|
||||
# Set flags: private (unloaded when process dies) and not enumerable
|
||||
flags = FR_PRIVATE | FR_NOT_ENUM
|
||||
|
||||
# Add the font resource
|
||||
numFontsAdded = AddFontResourceEx(byref(pathbuf), flags, 0)
|
||||
|
||||
return bool(numFontsAdded)
|
||||
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
def get_font(self, size=10, weight='normal'):
|
||||
"""Get font tuple for UI elements"""
|
||||
if self.custom_font_available:
|
||||
if self.custom_font_available and self.custom_font_family:
|
||||
try:
|
||||
# Use the registered font family name
|
||||
font_obj = font.Font(family=self.custom_font_family, size=size, weight=weight)
|
||||
print(f"Created font: {self.custom_font_family}, size={size}, weight={weight}")
|
||||
return font_obj
|
||||
except Exception as e:
|
||||
print(f"Error using custom font: {e}")
|
||||
# Fall back to a distinctive font so we can see the difference
|
||||
return font.Font(family='Courier New', size=size, weight=weight)
|
||||
else:
|
||||
print(f"Using fallback font: Courier New, size={size}")
|
||||
return font.Font(family='Courier New', size=size, weight=weight)
|
||||
return font.Font(family=self.custom_font_family, size=size, weight=weight)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Fall back to system font
|
||||
return font.Font(family='Arial', size=size, weight=weight)
|
||||
|
||||
def setup_dark_theme(self):
|
||||
"""Configure dark theme colors"""
|
||||
|
||||
Reference in New Issue
Block a user