Ignore:
Timestamp:
Apr 13, 2019, 8:05:15 PM (5 years ago)
Author:
roby
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/client/modules/Elezioni/grafici/jpgraph_text.inc.php

    r2 r265  
    11<?php
    22//=======================================================================
    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 $
     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 $
    88//
    9 // Copyright (c) Aditus Consulting. All rights reserved.
     9// Copyright (c) Asial Corporation. All rights reserved.
    1010//========================================================================
    1111
     
    1616//===================================================
    1717class Text {
    18     public $t,$margin=0;
     18    public $t;
    1919    public $x=0,$y=0,$halign="left",$valign="top",$color=array(0,0,0);
    2020    public $hide=false, $dir=0;
    2121    public $iScalePosY=null,$iScalePosX=null;
    2222    public $iWordwrap=0;
    23     public $font_family=FF_FONT1,$font_style=FS_NORMAL,$font_size=12;
    24     protected $boxed=false;     // Should the text be boxed
     23    public $font_family=FF_DEFAULT,$font_style=FS_NORMAL; // old. FF_FONT1
     24    protected $boxed=false; // Should the text be boxed
    2525    protected $paragraph_align="left";
    2626    protected $icornerradius=0,$ishadowwidth=3;
    2727    protected $fcolor='white',$bcolor='black',$shadow=false;
    2828    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
    3237
    3338    // Create new text at absolute pixel coordinates
    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       
     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
    4550    // Set the string in the text object
    4651    function Set($aTxt) {
    47         $this->t = $aTxt;
    48     }
    49        
     52        $this->t = $aTxt;
     53    }
     54
    5055    // Alias for Pos()
    5156    function SetPos($aXAbsPos=0,$aYAbsPos=0,$aHAlign="left",$aVAlign="top") {
    52         //$this->Pos($aXAbsPos,$aYAbsPos,$aHAlign,$aVAlign);
    53         $this->x = $aXAbsPos;
    54         $this->y = $aYAbsPos;
    55         $this->halign = $aHAlign;
    56         $this->valign = $aVAlign;
     57    //$this->Pos($aXAbsPos,$aYAbsPos,$aHAlign,$aVAlign);
     58        $this->x = $aXAbsPos;
     59        $this->y = $aYAbsPos;
     60        $this->halign = $aHAlign;
     61        $this->valign = $aVAlign;
    5762    }
    5863
    5964    function SetScalePos($aX,$aY) {
    60         $this->iScalePosX = $aX;
    61         $this->iScalePosY = $aY;
    62     }
    63        
     65        $this->iScalePosX = $aX;
     66        $this->iScalePosY = $aY;
     67    }
     68
    6469    // Specify alignment for the text
    6570    function Align($aHAlign,$aVAlign="top",$aParagraphAlign="") {
    66         $this->halign = $aHAlign;
    67         $this->valign = $aVAlign;
    68         if( $aParagraphAlign != "" )
    69             $this->paragraph_align = $aParagraphAlign;
    70     }           
    71    
     71        $this->halign = $aHAlign;
     72        $this->valign = $aVAlign;
     73        if( $aParagraphAlign != "" )
     74            $this->paragraph_align = $aParagraphAlign;
     75    }
     76
    7277    // Alias
    7378    function SetAlign($aHAlign,$aVAlign="top",$aParagraphAlign="") {
    74         $this->Align($aHAlign,$aVAlign,$aParagraphAlign);
     79        $this->Align($aHAlign,$aVAlign,$aParagraphAlign);
    7580    }
    7681
    7782    // Specifies the alignment for a multi line text
    7883    function ParagraphAlign($aAlign) {
    79         $this->paragraph_align = $aAlign;
     84        $this->paragraph_align = $aAlign;
    8085    }
    8186
    8287    // Specifies the alignment for a multi line text
    8388    function SetParagraphAlign($aAlign) {
    84         $this->paragraph_align = $aAlign;
     89        $this->paragraph_align = $aAlign;
    8590    }
    8691
    8792    function SetShadow($aShadowColor='gray',$aShadowWidth=3) {
    88         $this->ishadowwidth=$aShadowWidth;
    89         $this->shadow=$aShadowColor;
    90         $this->boxed=true;
     93        $this->ishadowwidth=$aShadowWidth;
     94        $this->shadow=$aShadowColor;
     95        $this->boxed=true;
    9196    }
    9297
    9398    function SetWordWrap($aCol) {
    94         $this->iWordwrap = $aCol ;
    95     }
    96        
     99        $this->iWordwrap = $aCol ;
     100    }
     101
    97102    // Specify that the text should be boxed. fcolor=frame color, bcolor=border color,
    98103    // $shadow=drop shadow should be added around the text.
    99104    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
    114127    // Hide the text
    115128    function Hide($aHide=true) {
    116         $this->hide=$aHide;
    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
    120133    // 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)
    122135    // jpgraph_gantt
    123136    function Show($aShow=true) {
    124         $this->hide=!$aShow;
    125     }
    126        
     137        $this->hide=!$aShow;
     138    }
     139
    127140    // Specify font
    128141    function SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10) {
    129         $this->font_family=$aFamily;
    130         $this->font_style=$aStyle;
    131         $this->font_size=$aSize;
    132     }
    133                        
     142        $this->font_family=$aFamily;
     143        $this->font_style=$aStyle;
     144        $this->font_size=$aSize;
     145    }
     146
    134147    // Center the text between $left and $right coordinates
    135148    function Center($aLeft,$aRight,$aYAbsPos=false) {
    136         $this->x = $aLeft + ($aRight-$aLeft     )/2;
    137         $this->halign = "center";
    138         if( is_numeric($aYAbsPos) )
    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
    142155    // Set text color
    143156    function SetColor($aColor) {
    144         $this->color = $aColor;
    145     }
    146        
     157        $this->color = $aColor;
     158    }
     159
    147160    function SetAngle($aAngle) {
    148         $this->SetOrientation($aAngle);
    149     }
    150        
     161        $this->SetOrientation($aAngle);
     162    }
     163
    151164    // Orientation of text. Note only TTF fonts can have an arbitrary angle
    152165    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
    162176    // Total width of text
    163177    function GetWidth($aImg) {
    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        
     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
    169183    // Hight of font
    170184    function GetFontHeight($aImg) {
    171         $aImg->SetFont($this->font_family,$this->font_style,$this->font_size);
    172         $h = $aImg->GetFontHeight();
    173         return $h;
     185        $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size);
     186        $h = $aImg->GetFontHeight();
     187        return $h;
    174188
    175189    }
    176190
    177191    function GetTextHeight($aImg) {
    178         $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); 
    179         $h = $aImg->GetTextHeight($this->t,$this->dir);
    180         return $h;
     192        $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size);
     193        $h = $aImg->GetTextHeight($this->t,$this->dir);
     194        return $h;
    181195    }
    182196
    183197    function GetHeight($aImg) {
    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;
     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;
    188202    }
    189203
     
    191205    // on the context.
    192206    function SetMargin($aMarg) {
    193         $this->margin = $aMarg;
     207        $this->margin = $aMarg;
    194208    }
    195209
    196210    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        }
    206219    }
    207220
    208221    function SetCSIMTarget($aURITarget,$aAlt='',$aWinTarget='') {
    209         $this->iCSIMtarget = $aURITarget;
    210         $this->iCSIMalt = $aAlt;
    211         $this->iCSIMWinTarget = $aWinTarget;
     222        $this->iCSIMtarget = $aURITarget;
     223        $this->iCSIMalt = $aAlt;
     224        $this->iCSIMWinTarget = $aWinTarget;
    212225    }
    213226
    214227    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        }
    219234    }
    220235
     
    222237    function Stroke($aImg,$x=null,$y=null) {
    223238
    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;
    267323    }
    268324} // Class
Note: See TracChangeset for help on using the changeset viewer.