diff src/parpg/font.py @ 0:1fd2201f5c36

Initial commit of parpg-core.
author M. George Hansen <technopolitica@gmail.com>
date Sat, 14 May 2011 01:12:35 -0700
parents
children d60f1dab8469
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/parpg/font.py	Sat May 14 01:12:35 2011 -0700
@@ -0,0 +1,54 @@
+import os
+
+from fife.extensions.pychan.fonts import Font
+from fife.extensions.pychan.internal import get_manager
+
+class PARPGFont(Font):
+    """ Font class for PARPG
+        This class behaves identical to PyChan's Font class except in
+        initialization. Ratherthan take a name and a get object, this class
+        takes a fontdef and settings object as explained below. This class is
+        necessary because the original Font class was too restrictive on how it
+        accepted objects
+
+        @param fontdef: defines the font's name, size, type, and optionally 
+                        row spacing as well as glyph spacing.
+        @type fontdef: dictionary
+        
+        @param settings: settings object used to dynamically determine the
+                         font's source location
+        @type settings: parpg.settings.Settings object
+    """
+    def __init__(self, fontdef, settings):
+        self.font = None
+        self.name = fontdef['name']
+        self.typename = fontdef['typename']
+
+        if self.typename == 'truetype':
+            self.filename = '{0}.ttf'.format(self.name.lower().split('_')[0])
+
+        self.source = os.path.join(settings.system_path,
+                                   settings.fife.FontsPath,
+                                   self.filename)
+        self.row_spacing = fontdef.get('row_spacing', 0)
+        self.glyph_spacing = fontdef.get('glyph_spacing', 0)
+
+        if self.typename == 'truetype':
+            self.size = fontdef['size']
+            self.antialias = fontdef['antialias']
+            self.color = fontdef.get('color', [255, 255, 255])
+            manager = get_manager().hook.engine.getGuiManager()
+            self.font = manager.createFont(self.source, self.size, '')
+
+            if not self.font:
+                raise InitializationError('Could not load font '
+                                          '{0}'.format(self.name))
+        
+            self.font.setAntiAlias(self.antialias)
+            self.font.setColor(*self.color)
+        else:
+            raise InitializationError('Unsupported font type '
+                                      '{0}'.format(self.typename))
+
+        self.font.setRowSpacing(self.row_spacing)
+        self.font.setGlyphSpacing(self.glyph_spacing)