- Timestamp:
- Apr 13, 2019, 8:05:15 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/client/modules/Elezioni/grafici/jpgraph_text.inc.php
r2 r265 1 1 <?php 2 2 //======================================================================= 3 // File: 4 // Description: 5 // 6 // Created: 7 // Ver: $Id: jpgraph_text.inc.php 1048 2008-08-01 19:56:46Z ljp $3 // File: JPGRAPH_TEXT.INC.PHP 4 // Description: Class to handle text as object in the graph. 5 // The low level text layout engine is handled by the GD class 6 // Created: 2001-01-08 (Refactored to separate file 2008-08-01) 7 // Ver: $Id: jpgraph_text.inc.php 1844 2009-09-26 17:05:31Z ljp $ 8 8 // 9 // Copyright (c) A ditus Consulting. All rights reserved.9 // Copyright (c) Asial Corporation. All rights reserved. 10 10 //======================================================================== 11 11 … … 16 16 //=================================================== 17 17 class Text { 18 public $t ,$margin=0;18 public $t; 19 19 public $x=0,$y=0,$halign="left",$valign="top",$color=array(0,0,0); 20 20 public $hide=false, $dir=0; 21 21 public $iScalePosY=null,$iScalePosX=null; 22 22 public $iWordwrap=0; 23 public $font_family=FF_ FONT1,$font_style=FS_NORMAL,$font_size=12;24 protected $boxed=false; 23 public $font_family=FF_DEFAULT,$font_style=FS_NORMAL; // old. FF_FONT1 24 protected $boxed=false; // Should the text be boxed 25 25 protected $paragraph_align="left"; 26 26 protected $icornerradius=0,$ishadowwidth=3; 27 27 protected $fcolor='white',$bcolor='black',$shadow=false; 28 28 protected $iCSIMarea='',$iCSIMalt='',$iCSIMtarget='',$iCSIMWinTarget=''; 29 30 //--------------- 31 // CONSTRUCTOR 29 private $iBoxType = 1; // Which variant of filled box around text we want 30 31 // for __get, __set 32 private $_margin; 33 private $_font_size=8; // old. 12 34 35 //--------------- 36 // CONSTRUCTOR 32 37 33 38 // Create new text at absolute pixel coordinates 34 function Text($aTxt="",$aXAbsPos=0,$aYAbsPos=0) {35 36 37 38 39 40 41 42 } 43 //---------------44 // PUBLIC METHODS 39 function __construct($aTxt="",$aXAbsPos=0,$aYAbsPos=0) { 40 if( ! is_string($aTxt) ) { 41 JpGraphError::RaiseL(25050);//('First argument to Text::Text() must be s atring.'); 42 } 43 $this->t = $aTxt; 44 $this->x = round($aXAbsPos); 45 $this->y = round($aYAbsPos); 46 $this->margin = 0; 47 } 48 //--------------- 49 // PUBLIC METHODS 45 50 // Set the string in the text object 46 51 function Set($aTxt) { 47 48 } 49 52 $this->t = $aTxt; 53 } 54 50 55 // Alias for Pos() 51 56 function SetPos($aXAbsPos=0,$aYAbsPos=0,$aHAlign="left",$aVAlign="top") { 52 53 54 55 56 57 //$this->Pos($aXAbsPos,$aYAbsPos,$aHAlign,$aVAlign); 58 $this->x = $aXAbsPos; 59 $this->y = $aYAbsPos; 60 $this->halign = $aHAlign; 61 $this->valign = $aVAlign; 57 62 } 58 63 59 64 function SetScalePos($aX,$aY) { 60 61 62 } 63 65 $this->iScalePosX = $aX; 66 $this->iScalePosY = $aY; 67 } 68 64 69 // Specify alignment for the text 65 70 function Align($aHAlign,$aVAlign="top",$aParagraphAlign="") { 66 67 68 69 70 } 71 71 $this->halign = $aHAlign; 72 $this->valign = $aVAlign; 73 if( $aParagraphAlign != "" ) 74 $this->paragraph_align = $aParagraphAlign; 75 } 76 72 77 // Alias 73 78 function SetAlign($aHAlign,$aVAlign="top",$aParagraphAlign="") { 74 79 $this->Align($aHAlign,$aVAlign,$aParagraphAlign); 75 80 } 76 81 77 82 // Specifies the alignment for a multi line text 78 83 function ParagraphAlign($aAlign) { 79 84 $this->paragraph_align = $aAlign; 80 85 } 81 86 82 87 // Specifies the alignment for a multi line text 83 88 function SetParagraphAlign($aAlign) { 84 89 $this->paragraph_align = $aAlign; 85 90 } 86 91 87 92 function SetShadow($aShadowColor='gray',$aShadowWidth=3) { 88 89 90 93 $this->ishadowwidth=$aShadowWidth; 94 $this->shadow=$aShadowColor; 95 $this->boxed=true; 91 96 } 92 97 93 98 function SetWordWrap($aCol) { 94 95 } 96 99 $this->iWordwrap = $aCol ; 100 } 101 97 102 // Specify that the text should be boxed. fcolor=frame color, bcolor=border color, 98 103 // $shadow=drop shadow should be added around the text. 99 104 function SetBox($aFrameColor=array(255,255,255),$aBorderColor=array(0,0,0),$aShadowColor=false,$aCornerRadius=4,$aShadowWidth=3) { 100 if( $aFrameColor==false ) 101 $this->boxed=false; 102 else 103 $this->boxed=true; 104 $this->fcolor=$aFrameColor; 105 $this->bcolor=$aBorderColor; 106 // For backwards compatibility when shadow was just true or false 107 if( $aShadowColor === true ) 108 $aShadowColor = 'gray'; 109 $this->shadow=$aShadowColor; 110 $this->icornerradius=$aCornerRadius; 111 $this->ishadowwidth=$aShadowWidth; 112 } 113 105 if( $aFrameColor === false ) { 106 $this->boxed=false; 107 } 108 else { 109 $this->boxed=true; 110 } 111 $this->fcolor=$aFrameColor; 112 $this->bcolor=$aBorderColor; 113 // For backwards compatibility when shadow was just true or false 114 if( $aShadowColor === true ) { 115 $aShadowColor = 'gray'; 116 } 117 $this->shadow=$aShadowColor; 118 $this->icornerradius=$aCornerRadius; 119 $this->ishadowwidth=$aShadowWidth; 120 } 121 122 function SetBox2($aFrameColor=array(255,255,255),$aBorderColor=array(0,0,0),$aShadowColor=false,$aCornerRadius=4,$aShadowWidth=3) { 123 $this->iBoxType=2; 124 $this->SetBox($aFrameColor,$aBorderColor,$aShadowColor,$aCornerRadius,$aShadowWidth); 125 } 126 114 127 // Hide the text 115 128 function Hide($aHide=true) { 116 117 } 118 119 // This looks ugly since it's not a very orthogonal design 129 $this->hide=$aHide; 130 } 131 132 // This looks ugly since it's not a very orthogonal design 120 133 // but I added this "inverse" of Hide() to harmonize 121 // with some classes which I designed more recently (especially) 134 // with some classes which I designed more recently (especially) 122 135 // jpgraph_gantt 123 136 function Show($aShow=true) { 124 125 } 126 137 $this->hide=!$aShow; 138 } 139 127 140 // Specify font 128 141 function SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10) { 129 130 131 132 } 133 142 $this->font_family=$aFamily; 143 $this->font_style=$aStyle; 144 $this->font_size=$aSize; 145 } 146 134 147 // Center the text between $left and $right coordinates 135 148 function Center($aLeft,$aRight,$aYAbsPos=false) { 136 $this->x = $aLeft + ($aRight-$aLeft)/2;137 138 139 $this->y = $aYAbsPos; 140 } 141 149 $this->x = $aLeft + ($aRight-$aLeft )/2; 150 $this->halign = "center"; 151 if( is_numeric($aYAbsPos) ) 152 $this->y = $aYAbsPos; 153 } 154 142 155 // Set text color 143 156 function SetColor($aColor) { 144 145 } 146 157 $this->color = $aColor; 158 } 159 147 160 function SetAngle($aAngle) { 148 149 } 150 161 $this->SetOrientation($aAngle); 162 } 163 151 164 // Orientation of text. Note only TTF fonts can have an arbitrary angle 152 165 function SetOrientation($aDirection=0) { 153 if( is_numeric($aDirection) ) 154 $this->dir=$aDirection; 155 elseif( $aDirection=="h" ) 156 $this->dir = 0; 157 elseif( $aDirection=="v" ) 158 $this->dir = 90; 159 else JpGraphError::RaiseL(25051);//(" Invalid direction specified for text."); 160 } 161 166 if( is_numeric($aDirection) ) 167 $this->dir=$aDirection; 168 elseif( $aDirection=="h" ) 169 $this->dir = 0; 170 elseif( $aDirection=="v" ) 171 $this->dir = 90; 172 else 173 JpGraphError::RaiseL(25051);//(" Invalid direction specified for text."); 174 } 175 162 176 // Total width of text 163 177 function GetWidth($aImg) { 164 $aImg->SetFont($this->font_family,$this->font_style,$this->font_size);165 166 return $w; 167 } 168 178 $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size); 179 $w = $aImg->GetTextWidth($this->t,$this->dir); 180 return $w; 181 } 182 169 183 // Hight of font 170 184 function GetFontHeight($aImg) { 171 $aImg->SetFont($this->font_family,$this->font_style,$this->font_size);172 173 185 $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size); 186 $h = $aImg->GetFontHeight(); 187 return $h; 174 188 175 189 } 176 190 177 191 function GetTextHeight($aImg) { 178 $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); 179 180 192 $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size); 193 $h = $aImg->GetTextHeight($this->t,$this->dir); 194 return $h; 181 195 } 182 196 183 197 function GetHeight($aImg) { 184 185 $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); 186 187 198 // Synonym for GetTextHeight() 199 $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size); 200 $h = $aImg->GetTextHeight($this->t,$this->dir); 201 return $h; 188 202 } 189 203 … … 191 205 // on the context. 192 206 function SetMargin($aMarg) { 193 207 $this->margin = $aMarg; 194 208 } 195 209 196 210 function StrokeWithScale($aImg,$axscale,$ayscale) { 197 if( $this->iScalePosX === null || 198 $this->iScalePosY === null ) { 199 $this->Stroke($aImg); 200 } 201 else { 202 $this->Stroke($aImg, 203 round($axscale->Translate($this->iScalePosX)), 204 round($ayscale->Translate($this->iScalePosY))); 205 } 211 if( $this->iScalePosX === null || $this->iScalePosY === null ) { 212 $this->Stroke($aImg); 213 } 214 else { 215 $this->Stroke($aImg, 216 round($axscale->Translate($this->iScalePosX)), 217 round($ayscale->Translate($this->iScalePosY))); 218 } 206 219 } 207 220 208 221 function SetCSIMTarget($aURITarget,$aAlt='',$aWinTarget='') { 209 210 211 222 $this->iCSIMtarget = $aURITarget; 223 $this->iCSIMalt = $aAlt; 224 $this->iCSIMWinTarget = $aWinTarget; 212 225 } 213 226 214 227 function GetCSIMareas() { 215 if( $this->iCSIMtarget !== '' ) 216 return $this->iCSIMarea; 217 else 218 return ''; 228 if( $this->iCSIMtarget !== '' ) { 229 return $this->iCSIMarea; 230 } 231 else { 232 return ''; 233 } 219 234 } 220 235 … … 222 237 function Stroke($aImg,$x=null,$y=null) { 223 238 224 if( !empty($x) ) $this->x = round($x); 225 if( !empty($y) ) $this->y = round($y); 226 227 // Insert newlines 228 if( $this->iWordwrap > 0 ) { 229 $this->t = wordwrap($this->t,$this->iWordwrap,"\n"); 230 } 231 232 // If position been given as a fraction of the image size 233 // calculate the absolute position 234 if( $this->x < 1 && $this->x > 0 ) $this->x *= $aImg->width; 235 if( $this->y < 1 && $this->y > 0 ) $this->y *= $aImg->height; 236 237 $aImg->PushColor($this->color); 238 $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); 239 $aImg->SetTextAlign($this->halign,$this->valign); 240 if( $this->boxed ) { 241 if( $this->fcolor=="nofill" ) 242 $this->fcolor=false; 243 $aImg->SetLineWeight(1); 244 $bbox = $aImg->StrokeBoxedText($this->x,$this->y,$this->t, 245 $this->dir,$this->fcolor,$this->bcolor,$this->shadow, 246 $this->paragraph_align,5,5,$this->icornerradius, 247 $this->ishadowwidth); 248 } 249 else { 250 $bbox = $aImg->StrokeText($this->x,$this->y,$this->t,$this->dir,$this->paragraph_align); 251 } 252 253 // Create CSIM targets 254 $coords = $bbox[0].','.$bbox[1].','.$bbox[2].','.$bbox[3].','.$bbox[4].','.$bbox[5].','.$bbox[6].','.$bbox[7]; 255 $this->iCSIMarea = "<area shape=\"poly\" coords=\"$coords\" href=\"".htmlentities($this->iCSIMtarget)."\" "; 256 if( trim($this->iCSIMalt) != '' ) { 257 $this->iCSIMarea .= " alt=\"".$this->iCSIMalt."\" "; 258 $this->iCSIMarea .= " title=\"".$this->iCSIMalt."\" "; 259 } 260 if( trim($this->iCSIMWinTarget) != '' ) { 261 $this->iCSIMarea .= " target=\"".$this->iCSIMWinTarget."\" "; 262 } 263 $this->iCSIMarea .= " />\n"; 264 265 $aImg->PopColor($this->color); 266 239 if( $x !== null ) $this->x = round($x); 240 if( $y !== null ) $this->y = round($y); 241 242 // Insert newlines 243 if( $this->iWordwrap > 0 ) { 244 $this->t = wordwrap($this->t,$this->iWordwrap,"\n"); 245 } 246 247 // If position been given as a fraction of the image size 248 // calculate the absolute position 249 if( $this->x < 1 && $this->x > 0 ) $this->x *= $aImg->width; 250 if( $this->y < 1 && $this->y > 0 ) $this->y *= $aImg->height; 251 252 $aImg->PushColor($this->color); 253 $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size); 254 $aImg->SetTextAlign($this->halign,$this->valign); 255 256 if( $this->boxed ) { 257 if( $this->fcolor=="nofill" ) { 258 $this->fcolor=false; 259 } 260 261 $oldweight=$aImg->SetLineWeight(1); 262 263 if( $this->iBoxType == 2 && $this->font_family > FF_FONT2+2 ) { 264 265 $bbox = $aImg->StrokeBoxedText2($this->x, $this->y, 266 $this->t, $this->dir, 267 $this->fcolor, 268 $this->bcolor, 269 $this->shadow, 270 $this->paragraph_align, 271 2,4, 272 $this->icornerradius, 273 $this->ishadowwidth); 274 } 275 else { 276 $bbox = $aImg->StrokeBoxedText($this->x,$this->y,$this->t, 277 $this->dir,$this->fcolor,$this->bcolor,$this->shadow, 278 $this->paragraph_align,3,3,$this->icornerradius, 279 $this->ishadowwidth); 280 } 281 282 $aImg->SetLineWeight($oldweight); 283 } 284 else { 285 $debug=false; 286 $bbox = $aImg->StrokeText($this->x,$this->y,$this->t,$this->dir,$this->paragraph_align,$debug); 287 } 288 289 // Create CSIM targets 290 $coords = $bbox[0].','.$bbox[1].','.$bbox[2].','.$bbox[3].','.$bbox[4].','.$bbox[5].','.$bbox[6].','.$bbox[7]; 291 $this->iCSIMarea = "<area shape=\"poly\" coords=\"$coords\" href=\"".htmlentities($this->iCSIMtarget)."\" "; 292 if( trim($this->iCSIMalt) != '' ) { 293 $this->iCSIMarea .= " alt=\"".$this->iCSIMalt."\" "; 294 $this->iCSIMarea .= " title=\"".$this->iCSIMalt."\" "; 295 } 296 if( trim($this->iCSIMWinTarget) != '' ) { 297 $this->iCSIMarea .= " target=\"".$this->iCSIMWinTarget."\" "; 298 } 299 $this->iCSIMarea .= " />\n"; 300 301 $aImg->PopColor($this->color); 302 } 303 304 function __get($name) { 305 306 if (strpos($name, 'raw_') !== false) { 307 // if $name == 'raw_left_margin' , return $this->_left_margin; 308 $variable_name = '_' . str_replace('raw_', '', $name); 309 return $this->$variable_name; 310 } 311 312 $variable_name = '_' . $name; 313 314 if (isset($this->$variable_name)) { 315 return $this->$variable_name * SUPERSAMPLING_SCALE; 316 } else { 317 JpGraphError::RaiseL('25132', $name); 318 } 319 } 320 321 function __set($name, $value) { 322 $this->{'_'.$name} = $value; 267 323 } 268 324 } // Class
Note:
See TracChangeset
for help on using the changeset viewer.