78 lines
2.1 KiB
Python
78 lines
2.1 KiB
Python
#
|
|
# Python GUI - Fonts - PyObjC
|
|
#
|
|
|
|
import sys
|
|
from AppKit import NSFont, NSFontManager, NSBoldFontMask, NSItalicFontMask, \
|
|
NSLayoutManager
|
|
from GUI import export
|
|
from GUI.GFonts import Font as GFont
|
|
|
|
_ns_font_manager = NSFontManager.sharedFontManager()
|
|
_ns_layout_manager = NSLayoutManager.alloc().init()
|
|
|
|
class Font(GFont):
|
|
# _ns_font NSFont
|
|
|
|
def _from_ns_font(cls, ns_font):
|
|
font = cls.__new__(cls)
|
|
font._ns_font = ns_font
|
|
return font
|
|
|
|
_from_ns_font = classmethod(_from_ns_font)
|
|
|
|
def __init__(self, family, size = 12, style = []):
|
|
traits = 0
|
|
if 'bold' in style:
|
|
traits |= NSBoldFontMask
|
|
if 'italic' in style:
|
|
traits |= NSItalicFontMask
|
|
self._ns_font = _ns_font_manager.fontWithFamily_traits_weight_size_(
|
|
family, traits, 5, size)
|
|
if not self._ns_font:
|
|
import StdFonts
|
|
self._ns_font = StdFonts.application_font._ns_font
|
|
|
|
def get_family(self):
|
|
return self._ns_font.familyName()
|
|
|
|
def get_size(self):
|
|
return self._ns_font.pointSize()
|
|
|
|
def get_style(self):
|
|
style = []
|
|
traits = _ns_font_manager.traitsOfFont_(self._ns_font)
|
|
if traits & NSBoldFontMask:
|
|
style.append('bold')
|
|
if traits & NSItalicFontMask:
|
|
style.append('italic')
|
|
return style
|
|
|
|
def get_ascent(self):
|
|
return self._ns_font.ascender()
|
|
|
|
def get_descent(self):
|
|
return -self._ns_font.descender()
|
|
|
|
def get_height(self):
|
|
ns_font = self._ns_font
|
|
a = ns_font.ascender()
|
|
d = ns_font.descender()
|
|
return a - d
|
|
|
|
def get_cap_height(self):
|
|
return self._ns_font.capHeight()
|
|
|
|
def get_x_height(self):
|
|
return self._ns_font.xHeight()
|
|
|
|
def get_line_height(self):
|
|
# Adding 1 here to match what NSTextField seems to do
|
|
return _ns_layout_manager.defaultLineHeightForFont_(self._ns_font) + 1
|
|
|
|
def width(self, s, start = 0, end = sys.maxint):
|
|
return self._ns_font.widthOfString_(s[start:end])
|
|
|
|
export(Font)
|
|
|