191 lines
5.3 KiB
Python
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']
|