Esempio n. 1
0
 public function getTextHeight(awText $text)
 {
     $font = $text->getFont();
     if ($font instanceof awPHPFont) {
         $fontDriver = $this->phpFontDriver;
     } else {
         $fontDriver = $this->fileFontDriver;
     }
     return $fontDriver->getTextHeight($text, $this);
 }
Esempio n. 2
0
	/**
	 * Draw a string
	 *
	 * @var awText $text Text to print
	 * @param awPoint $point Draw the text at this point
	 */
	public function string(awText $text, awPoint $point) {
		
		$font = $text->getFont();
		
		if($text->getBackground() !== NULL or $text->border->visible()) {
		
			list($left, $right, $top, $bottom) = $text->getPadding();
			
			$width = $font->getTextWidth($text);
			$height = $font->getTextHeight($text);
			
			$x1 = floor($point->x - $left);
			$y1 = floor($point->y - $top);
			$x2 = $x1 + $width + $left + $right;
			$y2 = $y1 + $height + $top + $bottom;
			
			$this->filledRectangle(
				$text->getBackground(),
				awLine::build($x1, $y1, $x2, $y2)
			);
			
			$text->border->rectangle(
				$this,
				new awPoint($x1 - 1, $y1 - 1),
				new awPoint($x2 + 1, $y2 + 1)
			);
			
		}
		
		$font->draw($this, $point, $text);
		
	}
Esempio n. 3
0
 private function getMingTextWidth(awText $text)
 {
     $font = $text->getFont();
     if ($font->getExtension() === NULL) {
         $font->setExtension('fdb');
     }
     $flashFont = new SWFFont(ARTICHOW_FONT . '/' . $font->name . '.' . $font->getExtension());
     $flashText = new SWFText();
     $flashText->setFont($flashFont);
     return $flashText->getWidth($text->getText());
 }
Esempio n. 4
0
 /**
  * Get a text from the labele
  *
  * @param mixed $key Key in the array text
  * @return Text
  */
 public function getText($key)
 {
     if (is_array($this->texts) and array_key_exists($key, $this->texts)) {
         $value = $this->texts[$key];
         if (is_string($this->function)) {
             $value = call_user_func($this->function, $value);
         }
         $text = new awText($value);
         $text->setFont($this->font);
         $text->setAngle($this->angle);
         $text->setColor($this->color);
         if ($this->background instanceof awColor) {
             $text->setBackgroundColor($this->background);
         } else {
             if ($this->background instanceof awGradient) {
                 $text->setBackgroundGradient($this->background);
             }
         }
         $text->border = $this->border;
         if ($this->padding !== NULL) {
             call_user_func_array(array($text, 'setPadding'), $this->padding);
         }
         return $text;
     } else {
         return NULL;
     }
 }
 function draw($drawer)
 {
     if ($this->hide) {
         return;
     }
     $count = $this->count();
     // No legend to print
     if ($count === 0) {
         return;
     }
     // Get text widths and heights of each element of the legend
     $widths = array();
     $heights = array();
     $texts = array();
     for ($i = 0; $i < $count; $i++) {
         list(, $title, ) = $this->legends[$i];
         $text = new awText($title, $this->textFont, $this->textColor, 0);
         $font = $text->getFont();
         $widths[$i] = $font->getTextWidth($text) + $this->textMargin->left + $this->textMargin->right;
         $heights[$i] = $font->getTextHeight($text);
         $texts[$i] = $text;
     }
     // Maximum height of the font used
     $heightMax = array_max($heights);
     // Get number of columns
     if ($this->columns !== NULL) {
         $columns = $this->columns;
     } else {
         if ($this->rows !== NULL) {
             $columns = ceil($count / $this->rows);
         } else {
             $columns = $count;
         }
     }
     // Number of  rows
     $rows = (int) ceil($count / $columns);
     // Get maximum with of each column
     $widthMax = array();
     for ($i = 0; $i < $count; $i++) {
         // Get column width
         $column = $i % $columns;
         if (array_key_exists($column, $widthMax) === FALSE) {
             $widthMax[$column] = $widths[$i];
         } else {
             $widthMax[$column] = max($widthMax[$column], $widths[$i]);
         }
     }
     $width = $this->padding[0] + $this->padding[1] - $this->space;
     for ($i = 0; $i < $columns; $i++) {
         $width += $this->space + 5 + 10 + $widthMax[$i];
     }
     $height = ($heightMax + $this->space) * $rows - $this->space + $this->padding[2] + $this->padding[3];
     // Look for legends position
     list($x, $y) = $drawer->getSize();
     $p = new awPoint($this->position->x * $x, $this->position->y * $y);
     switch ($this->hAlign) {
         case LEGEND_CENTER:
             $p->x -= $width / 2;
             break;
         case LEGEND_RIGHT:
             $p->x -= $width;
             break;
     }
     switch ($this->vAlign) {
         case LEGEND_MIDDLE:
             $p->y -= $height / 2;
             break;
         case LEGEND_BOTTOM:
             $p->y -= $height;
             break;
     }
     // Draw legend shadow
     $this->shadow->draw($drawer, $p, $p->move($width, $height), SHADOW_OUT);
     // Draw legends base
     $this->drawBase($drawer, $p, $width, $height);
     // Draw each legend
     for ($i = 0; $i < $count; $i++) {
         list($component, $title, $type) = $this->legends[$i];
         $column = $i % $columns;
         $row = (int) floor($i / $columns);
         // Get width of all previous columns
         $previousColumns = 0;
         for ($j = 0; $j < $column; $j++) {
             $previousColumns += $this->space + 10 + 5 + $widthMax[$j];
         }
         // Draw legend text
         $drawer->string($texts[$i], $p->move($this->padding[0] + $previousColumns + 10 + 5 + $this->textMargin->left, $this->padding[2] + $row * ($heightMax + $this->space) + $heightMax / 2 - $heights[$i] / 2));
         // Draw legend icon
         switch ($type) {
             case LEGEND_LINE:
             case LEGEND_MARK:
             case LEGEND_MARKONLY:
                 // Get vertical position
                 $x = $this->padding[0] + $previousColumns;
                 $y = $this->padding[2] + $row * ($heightMax + $this->space) + $heightMax / 2 - $component->getLegendLineThickness();
                 // Draw two lines
                 if ($component->getLegendLineColor() !== NULL) {
                     $color = $component->getLegendLineColor();
                     if (is_a($color, 'awColor') and $type !== LEGEND_MARKONLY) {
                         $drawer->line($color, new awLine($p->move($x, $y + $component->getLegendLineThickness() / 2), $p->move($x + 10, $y + $component->getLegendLineThickness() / 2), $component->getLegendLineStyle(), $component->getLegendLineThickness()));
                         $color->free();
                         unset($color);
                     }
                 }
                 if ($type === LEGEND_MARK or $type === LEGEND_MARKONLY) {
                     $mark = $component->getLegendMark();
                     if ($mark !== NULL) {
                         $mark->draw($drawer, $p->move($x + 5.5, $y + $component->getLegendLineThickness() / 2));
                     }
                     unset($mark);
                 }
                 break;
             case LEGEND_BACKGROUND:
                 // Get vertical position
                 $x = $this->padding[0] + $previousColumns;
                 $y = $this->padding[2] + $row * ($heightMax + $this->space) + $heightMax / 2 - 5;
                 $from = $p->move($x, $y);
                 $to = $p->move($x + 10, $y + 10);
                 $background = $component->getLegendBackground();
                 if ($background !== NULL) {
                     $drawer->filledRectangle($background, new awLine($from, $to));
                     // Draw rectangle border
                     $this->border->rectangle($drawer, $from->move(0, 0), $to->move(0, 0));
                 }
                 unset($background, $from, $to);
                 break;
         }
     }
 }
Esempio n. 6
0
 private function getGDTextHeight(awText $text)
 {
     $font = $text->getFont();
     if ($font->getExtension() === NULL) {
         $font->setExtension('ttf');
     }
     $filePath = $font->getName() . '.' . $font->getExtension();
     $box = imagettfbbox($font->getSize(), $text->getAngle(), $filePath, $text->getText());
     if ($box === FALSE) {
         awImage::drawError("Class FileFontDriver: Unable to get font height (GD).");
     }
     list(, , , $y2, , , , $y1) = $box;
     return abs($y2 - $y1);
 }
Esempio n. 7
0
 public function getTextHeight(awText $text)
 {
     $font = $text->getFont();
     if ($this->isCompatibleWithFont($font) === FALSE) {
         awImage::drawError('Class MingDriver: Incompatible font type (\'' . get_class($font) . '\')');
     }
     // Ming only supports FileFont
     $fontDriver = $this->fileFontDriver;
     return $fontDriver->getTextHeight($text, $this);
 }
Esempio n. 8
0
 /**
  * Get the height of a string
  *
  * @param awText $text A string
  */
 public function getTextHeight(awText $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);
 }