Subversion Repositories Applications.gtt

Rev

Rev 61 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php
/*
 * This work is hereby released into the Public Domain.
 * To view a copy of the public domain dedication,
 * visit http://creativecommons.org/licenses/publicdomain/ or send a letter to
 * Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
 *
 */

require_once dirname(__FILE__)."/../Graph.class.php";

/**
 * Common font characteristics and methods.
 * Declared abstract only so that it can't be instanciated.
 * Users have to call 'new awPHPFont' or 'new awFileFont',
 * or any of their inherited classes (awFont1, awTuffy, awTTFFont, etc.)
 *
 * @package Artichow
 */
abstract class awFont {

        /**
         * Build the font
         *
         */
        public function __construct() {
                
        }

        /**
         * Draw a text
         *
         * @param awDriver $driver
         * @param awPoint $p Draw text at this point
         * @param awText $text The text
         * @param int $width Text box width
         */
        public function draw(awDriver $driver, awPoint $point, awText $text, $width = NULL) {
                
                $driver->string($this, $text, $point, $width);
                
        }

}

registerClass('Font', TRUE);

/**
 * Class for fonts that cannot be transformed,
 * like the built-in PHP fonts for example.
 * 
 * @package Artichow
 */
class awPHPFont extends awFont {
        
        /**
         * The used font identifier
         * 
         * @var int
         */
        public $font;
        
        public function __construct($font = NULL) {
                parent::__construct();
                
                if($font !== NULL) {
                        $this->font = (int)$font;
                }
        }
        
}

registerClass('PHPFont');

/**
 * Class for fonts that can be transformed (rotated, skewed, etc.),
 * like TTF or FDB fonts for example.
 *
 * @package Artichow
 */
class awFileFont extends awFont {
        
        /**
         * The name of the font, without the extension
         *
         * @var string
         */
        protected $name;
        
        /**
         * The size of the font
         *
         * @var int
         */
        protected $size;
        
        /**
         * The font filename extension
         * 
         * @var string
         */
        protected $extension;
        
        public function __construct($name, $size) {
                parent::__construct();
                
                $this->setName($name);
                $this->setSize($size);
        }
        
        /**
         * Set the name of the font. The $name variable can contain the full path,
         * or just the filename. Artichow will try to do The Right Thing,
         * as well as set the extension property correctly if possible.
         *
         * @param string $name
         */
        public function setName($name) {
                $fontInfo = pathinfo((string)$name);
                
                if(strpos($fontInfo['dirname'], '/') !== 0) {
                        // Path is not absolute, use ARTICHOW_FONT
                        $name = ARTICHOW_FONT.DIRECTORY_SEPARATOR.$fontInfo['basename'];
                        $fontInfo = pathinfo($name);
                }
                
                $this->name = $fontInfo['dirname'].DIRECTORY_SEPARATOR.$fontInfo['basename'];
                
                if(array_key_exists('extension', $fontInfo) and $fontInfo['extension'] !== '') {
                        $this->setExtension($fontInfo['extension']);
                }
        }
        
        /**
         * Return the name of the font, i.e. the absolute path and the filename, without the extension.
         *
         * @return string
         */
        public function getName() {
                return $this->name;
        }
        
        /**
         * Set the size of the font, in pixels
         *
         * @param int $size
         */
        public function setSize($size) {
                $this->size = (int)$size;
        }
        
        /**
         * Return the size of the font, in pixels
         *
         * @return int
         */
        public function getSize() {
                return $this->size;
        }
        
        /**
         * Set the extension, without the dot
         *
         * @param string $extension
         */
        public function setExtension($extension) {
                $this->extension = (string)$extension;
        }
        
        /**
         * Get the filename extension for that font
         * 
         * @return string
         */
        public function getExtension() {
                return $this->extension;
        }

}

registerClass('FileFont');

/**
 * Class representing TTF fonts
 * 
 * @package Artichow
 */
class awTTFFont extends awFileFont {
        
        public function __construct($name, $size) {
                parent::__construct($name, $size);
                
                if($this->getExtension() === NULL) {
                        $this->setExtension('ttf');
                }
        }

}

registerClass('TTFFont');



$php = '';

for($i = 1; $i <= 5; $i++) {

        $php .= '
        class awFont'.$i.' extends awPHPFont {

                public function __construct() {
                        parent::__construct('.$i.');
                }

        }
        ';

        if(ARTICHOW_PREFIX !== 'aw') {
                $php .= '
                class '.ARTICHOW_PREFIX.'Font'.$i.' extends awFont'.$i.' {
                }
                ';
        }

}

eval($php);

$php = '';

foreach($fonts as $font) {

        $php .= '
        class aw'.$font.' extends awFileFont {

                public function __construct($size) {
                        parent::__construct(\''.$font.'\', $size);
                }

        }
        ';

        if(ARTICHOW_PREFIX !== 'aw') {
                $php .= '
                class '.ARTICHOW_PREFIX.$font.' extends aw'.$font.' {
                }
                ';
        }

}

eval($php);



/*
 * Environment modification for GD2 and TTF fonts
 */
if(function_exists('putenv')) {
        putenv('GDFONTPATH='.ARTICHOW_FONT);
}

?>