187 lines
6.5 KiB
Python
187 lines
6.5 KiB
Python
# Updated font loading and color scheme for Progression Loader
|
|
# Steam Collections page inspired design:
|
|
# - Dark blue theme matching Steam's signature colors
|
|
# - Steam blue (#66c0f4) for highlights and accents
|
|
# - Dark blue backgrounds (#1b2838, #2a475e) for depth
|
|
# - Light blue-gray text (#c7d5e0) for readability
|
|
# - Card-based layouts with rounded corners
|
|
# - Subtle shadows and glows for depth
|
|
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
def get_resource_path(relative_path):
|
|
"""Get absolute path to resource, works for dev and for PyInstaller"""
|
|
try:
|
|
# PyInstaller creates a temp folder and stores path in _MEIPASS
|
|
base_path = sys._MEIPASS
|
|
except Exception:
|
|
base_path = os.path.abspath(".")
|
|
|
|
return os.path.join(base_path, relative_path)
|
|
|
|
# Steam Collections inspired color constants
|
|
COLORS = {
|
|
'bg_primary': '#1b2838', # Steam dark blue background
|
|
'bg_secondary': '#2a475e', # Steam medium blue background
|
|
'bg_tertiary': '#1e2328', # Steam darker background for cards
|
|
'bg_card': '#16202d', # Steam card background
|
|
'bg_hover': '#2a475e', # Steam hover state
|
|
'text_primary': '#c7d5e0', # Steam primary text (light blue-gray)
|
|
'text_highlight': '#66c0f4', # Steam blue highlight color
|
|
'text_body': '#8f98a0', # Steam body text (muted blue-gray)
|
|
'text_secondary': '#acb2b8', # Steam secondary text
|
|
'text_muted': '#67707b', # Steam muted text
|
|
'accent_green': '#5ba32b', # Steam success green
|
|
'accent_red': '#cd5c5c', # Steam error red
|
|
'accent_yellow': '#ffa500', # Steam warning orange
|
|
'accent_blue': '#66c0f4', # Steam signature blue
|
|
'border_light': '#3c4043', # Steam light border
|
|
'border_dark': '#0e141b', # Steam dark border
|
|
}
|
|
|
|
def load_all_georgia_fonts():
|
|
"""Load all Georgia font variants using Windows AddFontResourceEx with private flag"""
|
|
custom_font_available = False
|
|
custom_font_family = None
|
|
|
|
# List of Georgia font files to load
|
|
georgia_fonts = [
|
|
"georgia.ttf", # Regular
|
|
"georgiab.ttf", # Bold
|
|
"georgiai.ttf", # Italic
|
|
"georgiaz.ttf" # Bold Italic
|
|
]
|
|
|
|
fonts_loaded = 0
|
|
|
|
try:
|
|
for font_file in georgia_fonts:
|
|
font_path = get_resource_path(os.path.join("art", font_file))
|
|
if os.path.exists(font_path):
|
|
abs_font_path = os.path.abspath(font_path)
|
|
|
|
# Use the Stack Overflow method with AddFontResourceEx
|
|
success = _load_font_private(abs_font_path)
|
|
|
|
if success:
|
|
fonts_loaded += 1
|
|
print(f"Successfully loaded font: {font_file}")
|
|
else:
|
|
print(f"Failed to load font: {font_file}")
|
|
else:
|
|
print(f"Font file not found: {font_path}")
|
|
|
|
if fonts_loaded > 0:
|
|
custom_font_available = True
|
|
custom_font_family = "Georgia"
|
|
print(f"Successfully loaded {fonts_loaded} Georgia font variants")
|
|
else:
|
|
print("No Georgia fonts could be loaded, using system fallback")
|
|
|
|
except Exception as e:
|
|
print(f"Error loading fonts: {e}")
|
|
custom_font_available = False
|
|
custom_font_family = None
|
|
|
|
return custom_font_available, custom_font_family
|
|
|
|
def _load_font_private(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 numFontsAdded > 0
|
|
|
|
except Exception as e:
|
|
print(f"Error in _load_font_private: {e}")
|
|
return False
|
|
|
|
def apply_steam_styling():
|
|
"""Apply Steam Collections page inspired styling to UI components"""
|
|
return {
|
|
'button_style': {
|
|
'relief': 'flat',
|
|
'borderwidth': 0,
|
|
'highlightthickness': 0,
|
|
'font': ('Georgia', 10, 'bold'),
|
|
'cursor': 'hand2'
|
|
},
|
|
'entry_style': {
|
|
'relief': 'flat',
|
|
'borderwidth': 2,
|
|
'highlightthickness': 0,
|
|
'font': ('Georgia', 9),
|
|
'insertbackground': COLORS['text_primary']
|
|
},
|
|
'label_style': {
|
|
'font': ('Georgia', 9),
|
|
'anchor': 'w'
|
|
},
|
|
'title_style': {
|
|
'font': ('Georgia', 14, 'bold'),
|
|
'anchor': 'center'
|
|
},
|
|
'card_style': {
|
|
'relief': 'flat',
|
|
'borderwidth': 1,
|
|
'highlightthickness': 0
|
|
}
|
|
}
|
|
|
|
def get_steam_button_colors(button_type='default'):
|
|
"""Get Steam-inspired button color schemes"""
|
|
button_colors = {
|
|
'default': {
|
|
'bg': COLORS['bg_secondary'],
|
|
'fg': COLORS['text_primary'],
|
|
'activebackground': COLORS['bg_hover'],
|
|
'activeforeground': COLORS['text_highlight']
|
|
},
|
|
'primary': {
|
|
'bg': COLORS['accent_blue'],
|
|
'fg': COLORS['bg_primary'],
|
|
'activebackground': COLORS['text_highlight'],
|
|
'activeforeground': COLORS['bg_primary']
|
|
},
|
|
'success': {
|
|
'bg': COLORS['accent_green'],
|
|
'fg': COLORS['text_primary'],
|
|
'activebackground': '#6bb33f',
|
|
'activeforeground': COLORS['text_primary']
|
|
},
|
|
'warning': {
|
|
'bg': COLORS['accent_yellow'],
|
|
'fg': COLORS['bg_primary'],
|
|
'activebackground': '#ffb733',
|
|
'activeforeground': COLORS['bg_primary']
|
|
},
|
|
'danger': {
|
|
'bg': COLORS['accent_red'],
|
|
'fg': COLORS['text_primary'],
|
|
'activebackground': '#d66f6f',
|
|
'activeforeground': COLORS['text_primary']
|
|
}
|
|
}
|
|
|
|
return button_colors.get(button_type, button_colors['default']) |