historical/toontown-classic.git/panda/Pmw/Pmw_1_3/lib/PmwLogicalFont.py
2024-01-16 11:20:27 -06:00

191 lines
5.3 KiB
Python

import os
import string
def _font_initialise(root, size=None, fontScheme = None):
global _fontSize
if size is not None:
_fontSize = size
if fontScheme in ('pmw1', 'pmw2'):
if os.name == 'posix':
defaultFont = logicalfont('Helvetica')
menuFont = logicalfont('Helvetica', weight='bold', slant='italic')
scaleFont = logicalfont('Helvetica', slant='italic')
root.option_add('*Font', defaultFont, 'userDefault')
root.option_add('*Menu*Font', menuFont, 'userDefault')
root.option_add('*Menubutton*Font', menuFont, 'userDefault')
root.option_add('*Scale.*Font', scaleFont, 'userDefault')
if fontScheme == 'pmw1':
balloonFont = logicalfont('Helvetica', -6, pixel = '12')
else: # fontScheme == 'pmw2'
balloonFont = logicalfont('Helvetica', -2)
root.option_add('*Balloon.*Font', balloonFont, 'userDefault')
else:
defaultFont = logicalfont('Helvetica')
root.option_add('*Font', defaultFont, 'userDefault')
elif fontScheme == 'default':
defaultFont = ('Helvetica', '-%d' % (_fontSize,), 'bold')
entryFont = ('Helvetica', '-%d' % (_fontSize,))
textFont = ('Courier', '-%d' % (_fontSize,))
root.option_add('*Font', defaultFont, 'userDefault')
root.option_add('*Entry*Font', entryFont, 'userDefault')
root.option_add('*Text*Font', textFont, 'userDefault')
def logicalfont(name='Helvetica', sizeIncr = 0, **kw):
if not _fontInfo.has_key(name):
raise ValueError, 'font %s does not exist' % name
rtn = []
for field in _fontFields:
if kw.has_key(field):
logicalValue = kw[field]
elif _fontInfo[name].has_key(field):
logicalValue = _fontInfo[name][field]
else:
logicalValue = '*'
if _propertyAliases[name].has_key((field, logicalValue)):
realValue = _propertyAliases[name][(field, logicalValue)]
elif _propertyAliases[name].has_key((field, None)):
realValue = _propertyAliases[name][(field, None)]
elif _propertyAliases[None].has_key((field, logicalValue)):
realValue = _propertyAliases[None][(field, logicalValue)]
elif _propertyAliases[None].has_key((field, None)):
realValue = _propertyAliases[None][(field, None)]
else:
realValue = logicalValue
if field == 'size':
if realValue == '*':
realValue = _fontSize
realValue = str((realValue + sizeIncr) * 10)
rtn.append(realValue)
return string.join(rtn, '-')
def logicalfontnames():
return _fontInfo.keys()
if os.name == 'nt':
_fontSize = 16
else:
_fontSize = 14
_fontFields = (
'registry', 'foundry', 'family', 'weight', 'slant', 'width', 'style',
'pixel', 'size', 'xres', 'yres', 'spacing', 'avgwidth', 'charset', 'encoding')
# <_propertyAliases> defines other names for which property values may
# be known by. This is required because italics in adobe-helvetica
# are specified by 'o', while other fonts use 'i'.
_propertyAliases = {}
_propertyAliases[None] = {
('slant', 'italic') : 'i',
('slant', 'normal') : 'r',
('weight', 'light') : 'normal',
('width', 'wide') : 'normal',
('width', 'condensed') : 'normal',
}
# <_fontInfo> describes a 'logical' font, giving the default values of
# some of its properties.
_fontInfo = {}
_fontInfo['Helvetica'] = {
'foundry' : 'adobe',
'family' : 'helvetica',
'registry' : '',
'charset' : 'iso8859',
'encoding' : '1',
'spacing' : 'p',
'slant' : 'normal',
'width' : 'normal',
'weight' : 'normal',
}
_propertyAliases['Helvetica'] = {
('slant', 'italic') : 'o',
('weight', 'normal') : 'medium',
('weight', 'light') : 'medium',
}
_fontInfo['Times'] = {
'foundry' : 'adobe',
'family' : 'times',
'registry' : '',
'charset' : 'iso8859',
'encoding' : '1',
'spacing' : 'p',
'slant' : 'normal',
'width' : 'normal',
'weight' : 'normal',
}
_propertyAliases['Times'] = {
('weight', 'normal') : 'medium',
('weight', 'light') : 'medium',
}
_fontInfo['Fixed'] = {
'foundry' : 'misc',
'family' : 'fixed',
'registry' : '',
'charset' : 'iso8859',
'encoding' : '1',
'spacing' : 'c',
'slant' : 'normal',
'width' : 'normal',
'weight' : 'normal',
}
_propertyAliases['Fixed'] = {
('weight', 'normal') : 'medium',
('weight', 'light') : 'medium',
('style', None) : '',
('width', 'condensed') : 'semicondensed',
}
_fontInfo['Courier'] = {
'foundry' : 'adobe',
'family' : 'courier',
'registry' : '',
'charset' : 'iso8859',
'encoding' : '1',
'spacing' : 'm',
'slant' : 'normal',
'width' : 'normal',
'weight' : 'normal',
}
_propertyAliases['Courier'] = {
('weight', 'normal') : 'medium',
('weight', 'light') : 'medium',
('style', None) : '',
}
_fontInfo['Typewriter'] = {
'foundry' : 'b&h',
'family' : 'lucidatypewriter',
'registry' : '',
'charset' : 'iso8859',
'encoding' : '1',
'spacing' : 'm',
'slant' : 'normal',
'width' : 'normal',
'weight' : 'normal',
}
_propertyAliases['Typewriter'] = {
('weight', 'normal') : 'medium',
('weight', 'light') : 'medium',
}
if os.name == 'nt':
# For some reason 'fixed' fonts on NT aren't.
_fontInfo['Fixed'] = _fontInfo['Courier']
_propertyAliases['Fixed'] = _propertyAliases['Courier']