font = $font; } /** * Draw a text * * @param $drawer * @param $p Draw text at this point * @param &$text The text */ function draw($drawer, $p, &$text) { $angle = $text->getAngle(); if($angle !== 90 and $angle !== 0) { trigger_error("You can only use 0° and 90°", E_USER_ERROR); } if($angle === 90) { $function = 'imagestringup'; } else { $function = 'imagestring'; } if($angle === 90) { $add = $this->getTextHeight($text); } else { $add = 0; } $color = $text->getColor(); $rgb = $color->getColor($drawer->resource); $function( $drawer->resource, $this->font, $drawer->x + $p->x, $drawer->y + $p->y + $add, $text->getText(), $rgb ); } /** * Get the width of a string * * @param &$text A string */ function getTextWidth(&$text) { if($text->getAngle() === 90) { $text->setAngle(45); return $this->getTextHeight($text); } else if($text->getAngle() === 45) { $text->setAngle(90); } $font = $text->getFont(); $fontWidth = imagefontwidth($font->font); if($fontWidth === FALSE) { trigger_error("Unable to get font size", E_USER_ERROR); } return (int)$fontWidth * strlen($text->getText()); } /** * Get the height of a string * * @param &$text A string */ function getTextHeight(&$text) { if($text->getAngle() === 90) { $text->setAngle(45); return $this->getTextWidth($text); } else if($text->getAngle() === 45) { $text->setAngle(90); } $font = $text->getFont(); $fontHeight = imagefontheight($font->font); if($fontHeight === FALSE) { trigger_error("Unable to get font size", E_USER_ERROR); } return (int)$fontHeight; } } registerClass('Font'); /** * TTF fonts * * @package Artichow */ class awTTFFont extends awFont { /** * Font size * * @var int */ var $size; /** * Font file * * @param string $font Font file * @param int $size Font size */ function awTTFFont($font, $size) { parent::awFont($font); $this->size = (int)$size; } /** * Draw a text * * @param $drawer * @param $p Draw text at this point * @param &$text The text */ function draw($drawer, $p, &$text) { // Make easier font positionment $text->setText($text->getText()." "); $color = $text->getColor(); $rgb = $color->getColor($drawer->resource); $box = imagettfbbox($this->size, $text->getAngle(), $this->font, $text->getText()); $height = - $box[5]; $box = imagettfbbox($this->size, 90, $this->font, $text->getText()); $width = abs($box[6] - $box[2]); // Restore old text $text->setText(substr($text->getText(), 0, strlen($text->getText()) - 1)); imagettftext( $drawer->resource, $this->size, $text->getAngle(), $drawer->x + $p->x + $width * sin($text->getAngle() / 180 * M_PI), $drawer->y + $p->y + $height, $rgb, $this->font, $text->getText() ); } /** * Get the width of a string * * @param &$text A string */ function getTextWidth(&$text) { $box = imagettfbbox($this->size, $text->getAngle(), $this->font, $text->getText()); if($box === FALSE) { trigger_error("Unable to get font size", E_USER_ERROR); return; } list(, , $x2, $y2, , , $x1, $y1) = $box; return abs($x2 - $x1); } /** * Get the height of a string * * @param &$text A string */ function getTextHeight(&$text) { $box = imagettfbbox($this->size, $text->getAngle(), $this->font, $text->getText()); if($box === FALSE) { trigger_error("Unable to get font size", E_USER_ERROR); return; } list(, , $x2, $y2, , , $x1, $y1) = $box; return abs($y2 - $y1); } } registerClass('TTFFont'); $php = ''; for($i = 1; $i <= 5; $i++) { $php .= ' class awFont'.$i.' extends awFont { function awFont'.$i.'() { parent::awFont('.$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 awTTFFont { function aw'.$font.'($size) { parent::awTTFFont(\''.(ARTICHOW_FONT.DIRECTORY_SEPARATOR.$font.'.ttf').'\', $size); } } '; if(ARTICHOW_PREFIX !== 'aw') { $php .= ' class '.ARTICHOW_PREFIX.$font.' extends aw'.$font.' { } '; } } eval($php); ?>