mirror of
https://github.com/iperov/DeepFaceLive
synced 2025-08-20 13:33:25 -07:00
code release
This commit is contained in:
parent
b941ba41a3
commit
a902f11f74
354 changed files with 826570 additions and 1 deletions
89
resources/fonts/QXFontDB.py
Normal file
89
resources/fonts/QXFontDB.py
Normal file
|
@ -0,0 +1,89 @@
|
|||
from pathlib import Path
|
||||
|
||||
from localization import Localization
|
||||
from PyQt6.QtCore import *
|
||||
from PyQt6.QtGui import *
|
||||
from xlib import path as lib_path
|
||||
|
||||
|
||||
class QXFontDB():
|
||||
_cached = {}
|
||||
|
||||
_file_to_family = {}
|
||||
|
||||
_families_loaded = set()
|
||||
|
||||
@staticmethod
|
||||
def _load_family(name : str):
|
||||
if name in QXFontDB._families_loaded:
|
||||
return
|
||||
QXFontDB._families_loaded.add(name)
|
||||
|
||||
dir = Path(__file__).parent / name
|
||||
if not dir.exists() or not dir.is_dir():
|
||||
raise Exception(f'Font family directory is not found: {dir}')
|
||||
|
||||
filepaths = lib_path.get_files_paths(dir)
|
||||
|
||||
families_loaded = []
|
||||
|
||||
for filepath in filepaths:
|
||||
id = QFontDatabase.addApplicationFont(str(filepath))
|
||||
families_loaded += QFontDatabase.applicationFontFamilies(id)
|
||||
|
||||
families_loaded = list(set(families_loaded))
|
||||
|
||||
if len(families_loaded) > 1:
|
||||
raise Exception(f'More than one font family loaded from {dir}:\n{families_loaded}\nRemove unnecessary files.')
|
||||
|
||||
if name != families_loaded[0]:
|
||||
raise Exception(f'Loaded font family is different from requested: {name} != {families_loaded[0]}')
|
||||
|
||||
@staticmethod
|
||||
def _get(name : str, size : int, weight=None, italic=False, bold=False):
|
||||
key = (name, size, weight, italic)
|
||||
result = QXFontDB._cached.get(key, None)
|
||||
if result is None:
|
||||
QXFontDB._load_family(name)
|
||||
|
||||
result = QFont(name, size)
|
||||
if weight is not None:
|
||||
result.setWeight(weight)
|
||||
result.setItalic(italic)
|
||||
result.setBold(bold)
|
||||
|
||||
QXFontDB._cached[key] = result
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
def get_default_font(size=8, italic=False, bold=False):
|
||||
lang = Localization.lang
|
||||
|
||||
if lang == 'zh-CN':
|
||||
return QXFontDB.Noto_Sans_SC(size, italic=italic, bold=bold)
|
||||
else:
|
||||
return QXFontDB.Noto_Sans(size, italic=italic, bold=bold)
|
||||
|
||||
@staticmethod
|
||||
def get_fixedwidth_font(size=8):
|
||||
return QXFontDB.Noto_Mono(size)
|
||||
|
||||
@staticmethod
|
||||
def Digital7_Mono(size, italic=False, bold=False):
|
||||
return QXFontDB._get('Digital-7 Mono', size, italic=italic, bold=bold)
|
||||
|
||||
@staticmethod
|
||||
def Noto_Mono(size, italic=False, bold=False):
|
||||
return QXFontDB._get('Noto Mono', size, italic=italic, bold=bold)
|
||||
|
||||
@staticmethod
|
||||
def Noto_Sans(size, italic=False, bold=False):
|
||||
return QXFontDB._get('Noto Sans', size, italic=italic, bold=bold)
|
||||
|
||||
@staticmethod
|
||||
def Noto_Sans_SC(size, italic=False, bold=False):
|
||||
return QXFontDB._get('Noto Sans SC', size, italic=italic, bold=bold)
|
||||
|
||||
@staticmethod
|
||||
def Tahoma(size, italic=False, bold=False):
|
||||
return QXFontDB._get('Tahoma', size, italic=italic, bold=bold)
|
Loading…
Add table
Add a link
Reference in a new issue