font
This commit is contained in:
@@ -18,13 +18,14 @@ from .constants import (
|
||||
is_free_version,
|
||||
is_full_version
|
||||
)
|
||||
from .system import install_pillow, get_system_fonts, get_font_enum_items
|
||||
from .system import install_pillow, get_system_fonts, get_font_enum_items, find_default_truetype_font
|
||||
|
||||
__all__ = [
|
||||
'bl_info',
|
||||
'install_pillow',
|
||||
'get_system_fonts',
|
||||
'get_font_enum_items',
|
||||
'find_default_truetype_font',
|
||||
'has_image_overlays',
|
||||
'has_basic_utilities',
|
||||
'has_presets',
|
||||
@@ -38,4 +39,4 @@ __all__ = [
|
||||
'has_shader_generation',
|
||||
'is_free_version',
|
||||
'is_full_version'
|
||||
]
|
||||
]
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -7,6 +7,8 @@ import sys
|
||||
import platform
|
||||
import os
|
||||
|
||||
_DEFAULT_FONT_CACHE = None
|
||||
|
||||
def install_pillow():
|
||||
pass
|
||||
"""Install Pillow if not available"""
|
||||
@@ -98,4 +100,100 @@ def get_anchor_point_matrix():
|
||||
['TOP_LEFT', 'TOP_CENTER', 'TOP_RIGHT'],
|
||||
['MIDDLE_LEFT', 'MIDDLE_CENTER', 'MIDDLE_RIGHT'],
|
||||
['BOTTOM_LEFT', 'BOTTOM_CENTER', 'BOTTOM_RIGHT']
|
||||
]
|
||||
]
|
||||
|
||||
def find_default_truetype_font():
|
||||
pass
|
||||
"""Return a system font path that can act as scalable default."""
|
||||
global _DEFAULT_FONT_CACHE
|
||||
if _DEFAULT_FONT_CACHE is not None:
|
||||
pass
|
||||
return _DEFAULT_FONT_CACHE
|
||||
|
||||
system = platform.system().lower()
|
||||
preferred_fonts = []
|
||||
if system == "windows":
|
||||
preferred_fonts = [
|
||||
"C:/Windows/Fonts/arial.ttf",
|
||||
"C:/Windows/Fonts/segoeui.ttf",
|
||||
"C:/Windows/Fonts/calibri.ttf",
|
||||
"C:/Windows/Fonts/tahoma.ttf",
|
||||
]
|
||||
elif system == "darwin":
|
||||
preferred_fonts = [
|
||||
"/System/Library/Fonts/SFNS.ttf",
|
||||
"/System/Library/Fonts/SFNSDisplay.ttf",
|
||||
"/System/Library/Fonts/Helvetica.ttc",
|
||||
"/Library/Fonts/Arial.ttf",
|
||||
"/Library/Fonts/HelveticaNeue.ttc",
|
||||
]
|
||||
else:
|
||||
preferred_fonts = [
|
||||
"/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
|
||||
"/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf",
|
||||
"/usr/share/fonts/truetype/freefont/FreeSans.ttf",
|
||||
]
|
||||
|
||||
def _font_supports_basic_latin(font_path):
|
||||
pass
|
||||
try:
|
||||
from PIL import ImageFont
|
||||
except ImportError:
|
||||
return False
|
||||
|
||||
try:
|
||||
font = ImageFont.truetype(font_path, 48)
|
||||
except (OSError, IOError, TypeError, ValueError):
|
||||
return False
|
||||
|
||||
try:
|
||||
bbox_upper = font.getbbox("H")
|
||||
bbox_lower = font.getbbox("e")
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
if not bbox_upper or not bbox_lower:
|
||||
return False
|
||||
|
||||
try:
|
||||
upper_width = float(bbox_upper[2] - bbox_upper[0])
|
||||
upper_height = float(bbox_upper[3] - bbox_upper[1])
|
||||
lower_width = float(bbox_lower[2] - bbox_lower[0])
|
||||
lower_height = float(bbox_lower[3] - bbox_lower[1])
|
||||
except (TypeError, ValueError):
|
||||
return False
|
||||
|
||||
if min(upper_width, upper_height, lower_width, lower_height) <= 0:
|
||||
return False
|
||||
|
||||
if lower_height > upper_height * 1.3:
|
||||
return False
|
||||
|
||||
if lower_width > upper_width * 1.5:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
for candidate in preferred_fonts:
|
||||
if candidate and os.path.exists(candidate) and _font_supports_basic_latin(candidate):
|
||||
_DEFAULT_FONT_CACHE = candidate
|
||||
return _DEFAULT_FONT_CACHE
|
||||
|
||||
fonts = get_system_fonts()
|
||||
for _, font_path in sorted(fonts.items()):
|
||||
if os.path.exists(font_path) and _font_supports_basic_latin(font_path):
|
||||
_DEFAULT_FONT_CACHE = font_path
|
||||
return _DEFAULT_FONT_CACHE
|
||||
|
||||
try:
|
||||
from ..ui.preview import get_system_fallback_fonts
|
||||
fallback_fonts = get_system_fallback_fonts()
|
||||
for font_path in fallback_fonts:
|
||||
if os.path.exists(font_path) and _font_supports_basic_latin(font_path):
|
||||
_DEFAULT_FONT_CACHE = font_path
|
||||
return _DEFAULT_FONT_CACHE
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
_DEFAULT_FONT_CACHE = None
|
||||
return _DEFAULT_FONT_CACHE
|
||||
|
||||
Reference in New Issue
Block a user