view src/parpg/font.py @ 150:3fc7cfa80771

Modified InventoryGrid to set a name for each slot containing the index. Added getSlot method to InventoryGrid. Renamed InventoryGUI class to CharacterGUI. Added InventoryGUI class which handles the inventory part of the CharacterGUI. An InventoryGUI instance is now created in CharacterGUI.
author KarstenBock@gmx.net
date Wed, 05 Oct 2011 12:59:22 +0200
parents d60f1dab8469
children 59c9ce2b8351
line wrap: on
line source

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 = '/'.join(['fonts', 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)