- Timestamp:
- Apr 14, 2019, 2:31:40 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/client/modules/Elezioni/grafici/jpgraph_text.inc.php
r265 r267 1 1 <?php 2 2 //======================================================================= 3 // File: 4 // Description: 5 // 6 // Created: 7 // Ver: $Id: jpgraph_text.inc.php 1844 2009-09-26 17:05:31Z 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 1048 2008-08-01 19:56:46Z ljp $ 8 8 // 9 // Copyright (c) A sial Corporation. All rights reserved.9 // Copyright (c) Aditus Consulting. All rights reserved. 10 10 //======================================================================== 11 11 … … 16 16 //=================================================== 17 17 class Text { 18 public $t ;18 public $t,$margin=0; 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_ DEFAULT,$font_style=FS_NORMAL; // old. FF_FONT124 protected $boxed=false; 23 public $font_family=FF_FONT1,$font_style=FS_NORMAL,$font_size=12; 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 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 29 30 //--------------- 31 // CONSTRUCTOR 37 32 38 33 // Create new text at absolute pixel coordinates 39 function __construct($aTxt="",$aXAbsPos=0,$aYAbsPos=0) {40 41 42 43 44 45 46 47 } 48 49 // PUBLIC METHODS 34 function Text($aTxt="",$aXAbsPos=0,$aYAbsPos=0) { 35 if( ! is_string($aTxt) ) { 36 JpGraphError::RaiseL(25050);//('First argument to Text::Text() must be s atring.'); 37 } 38 $this->t = $aTxt; 39 $this->x = round($aXAbsPos); 40 $this->y = round($aYAbsPos); 41 $this->margin = 0; 42 } 43 //--------------- 44 // PUBLIC METHODS 50 45 // Set the string in the text object 51 46 function Set($aTxt) { 52 53 } 54 47 $this->t = $aTxt; 48 } 49 55 50 // Alias for Pos() 56 51 function SetPos($aXAbsPos=0,$aYAbsPos=0,$aHAlign="left",$aVAlign="top") { 57 58 59 60 61 52 //$this->Pos($aXAbsPos,$aYAbsPos,$aHAlign,$aVAlign); 53 $this->x = $aXAbsPos; 54 $this->y = $aYAbsPos; 55 $this->halign = $aHAlign; 56 $this->valign = $aVAlign; 62 57 } 63 58 64 59 function SetScalePos($aX,$aY) { 65 66 67 } 68 60 $this->iScalePosX = $aX; 61 $this->iScalePosY = $aY; 62 } 63 69 64 // Specify alignment for the text 70 65 function Align($aHAlign,$aVAlign="top",$aParagraphAlign="") { 71 72 73 74 75 } 76 66 $this->halign = $aHAlign; 67 $this->valign = $aVAlign; 68 if( $aParagraphAlign != "" ) 69 $this->paragraph_align = $aParagraphAlign; 70 } 71 77 72 // Alias 78 73 function SetAlign($aHAlign,$aVAlign="top",$aParagraphAlign="") { 79 74 $this->Align($aHAlign,$aVAlign,$aParagraphAlign); 80 75 } 81 76 82 77 // Specifies the alignment for a multi line text 83 78 function ParagraphAlign($aAlign) { 84 79 $this->paragraph_align = $aAlign; 85 80 } 86 81 87 82 // Specifies the alignment for a multi line text 88 83 function SetParagraphAlign($aAlign) { 89 84 $this->paragraph_align = $aAlign; 90 85 } 91 86 92 87 function SetShadow($aShadowColor='gray',$aShadowWidth=3) { 93 94 95 88 $this->ishadowwidth=$aShadowWidth; 89 $this->shadow=$aShadowColor; 90 $this->boxed=true; 96 91 } 97 92 98 93 function SetWordWrap($aCol) { 99 100 } 101 94 $this->iWordwrap = $aCol ; 95 } 96 102 97 // Specify that the text should be boxed. fcolor=frame color, bcolor=border color, 103 98 // $shadow=drop shadow should be added around the text. 104 99 function SetBox($aFrameColor=array(255,255,255),$aBorderColor=array(0,0,0),$aShadowColor=false,$aCornerRadius=4,$aShadowWidth=3) { 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 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 127 114 // Hide the text 128 115 function Hide($aHide=true) { 129 130 } 131 132 // This looks ugly since it's not a very orthogonal design 116 $this->hide=$aHide; 117 } 118 119 // This looks ugly since it's not a very orthogonal design 133 120 // but I added this "inverse" of Hide() to harmonize 134 // with some classes which I designed more recently (especially) 121 // with some classes which I designed more recently (especially) 135 122 // jpgraph_gantt 136 123 function Show($aShow=true) { 137 138 } 139 124 $this->hide=!$aShow; 125 } 126 140 127 // Specify font 141 128 function SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10) { 142 143 144 145 } 146 129 $this->font_family=$aFamily; 130 $this->font_style=$aStyle; 131 $this->font_size=$aSize; 132 } 133 147 134 // Center the text between $left and $right coordinates 148 135 function Center($aLeft,$aRight,$aYAbsPos=false) { 149 $this->x = $aLeft + ($aRight-$aLeft)/2;150 151 152 $this->y = $aYAbsPos; 153 } 154 136 $this->x = $aLeft + ($aRight-$aLeft )/2; 137 $this->halign = "center"; 138 if( is_numeric($aYAbsPos) ) 139 $this->y = $aYAbsPos; 140 } 141 155 142 // Set text color 156 143 function SetColor($aColor) { 157 158 } 159 144 $this->color = $aColor; 145 } 146 160 147 function SetAngle($aAngle) { 161 162 } 163 148 $this->SetOrientation($aAngle); 149 } 150 164 151 // Orientation of text. Note only TTF fonts can have an arbitrary angle 165 152 function SetOrientation($aDirection=0) { 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 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 176 162 // Total width of text 177 163 function GetWidth($aImg) { 178 $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size);179 180 return $w; 181 } 182 164 $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); 165 $w = $aImg->GetTextWidth($this->t,$this->dir); 166 return $w; 167 } 168 183 169 // Hight of font 184 170 function GetFontHeight($aImg) { 185 $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size);186 187 171 $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); 172 $h = $aImg->GetFontHeight(); 173 return $h; 188 174 189 175 } 190 176 191 177 function GetTextHeight($aImg) { 192 $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size); 193 194 178 $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); 179 $h = $aImg->GetTextHeight($this->t,$this->dir); 180 return $h; 195 181 } 196 182 197 183 function GetHeight($aImg) { 198 199 $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size); 200 201 184 // Synonym for GetTextHeight() 185 $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); 186 $h = $aImg->GetTextHeight($this->t,$this->dir); 187 return $h; 202 188 } 203 189 … … 205 191 // on the context. 206 192 function SetMargin($aMarg) { 207 193 $this->margin = $aMarg; 208 194 } 209 195 210 196 function StrokeWithScale($aImg,$axscale,$ayscale) { 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 } 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 } 219 206 } 220 207 221 208 function SetCSIMTarget($aURITarget,$aAlt='',$aWinTarget='') { 222 223 224 209 $this->iCSIMtarget = $aURITarget; 210 $this->iCSIMalt = $aAlt; 211 $this->iCSIMWinTarget = $aWinTarget; 225 212 } 226 213 227 214 function GetCSIMareas() { 228 if( $this->iCSIMtarget !== '' ) { 229 return $this->iCSIMarea; 230 } 231 else { 232 return ''; 233 } 215 if( $this->iCSIMtarget !== '' ) 216 return $this->iCSIMarea; 217 else 218 return ''; 234 219 } 235 220 … … 237 222 function Stroke($aImg,$x=null,$y=null) { 238 223 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; 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 323 267 } 324 268 } // Class
Note:
See TracChangeset
for help on using the changeset viewer.