Ignore:
Timestamp:
Apr 14, 2019, 2:31:40 PM (5 years ago)
Author:
roby
Message:
 
File:
1 edited

Legend:

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

    r265 r267  
    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 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 $
    88//
    9 // Copyright (c) Asial Corporation. All rights reserved.
     9// Copyright (c) Aditus Consulting. All rights reserved.
    1010//========================================================================
    1111
     
    1616//===================================================
    1717class Text {
    18     public $t;
     18    public $t,$margin=0;
    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_DEFAULT,$font_style=FS_NORMAL; // old. FF_FONT1
    24     protected $boxed=false; // Should the text be boxed
     23    public $font_family=FF_FONT1,$font_style=FS_NORMAL,$font_size=12;
     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     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
    3732
    3833    // Create new text at absolute pixel coordinates
    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
     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       
    5045    // Set the string in the text object
    5146    function Set($aTxt) {
    52         $this->t = $aTxt;
    53     }
    54 
     47        $this->t = $aTxt;
     48    }
     49       
    5550    // Alias for Pos()
    5651    function SetPos($aXAbsPos=0,$aYAbsPos=0,$aHAlign="left",$aVAlign="top") {
    57     //$this->Pos($aXAbsPos,$aYAbsPos,$aHAlign,$aVAlign);
    58         $this->x = $aXAbsPos;
    59         $this->y = $aYAbsPos;
    60         $this->halign = $aHAlign;
    61         $this->valign = $aVAlign;
     52        //$this->Pos($aXAbsPos,$aYAbsPos,$aHAlign,$aVAlign);
     53        $this->x = $aXAbsPos;
     54        $this->y = $aYAbsPos;
     55        $this->halign = $aHAlign;
     56        $this->valign = $aVAlign;
    6257    }
    6358
    6459    function SetScalePos($aX,$aY) {
    65         $this->iScalePosX = $aX;
    66         $this->iScalePosY = $aY;
    67     }
    68 
     60        $this->iScalePosX = $aX;
     61        $this->iScalePosY = $aY;
     62    }
     63       
    6964    // Specify alignment for the text
    7065    function Align($aHAlign,$aVAlign="top",$aParagraphAlign="") {
    71         $this->halign = $aHAlign;
    72         $this->valign = $aVAlign;
    73         if( $aParagraphAlign != "" )
    74             $this->paragraph_align = $aParagraphAlign;
    75     }
    76 
     66        $this->halign = $aHAlign;
     67        $this->valign = $aVAlign;
     68        if( $aParagraphAlign != "" )
     69            $this->paragraph_align = $aParagraphAlign;
     70    }           
     71   
    7772    // Alias
    7873    function SetAlign($aHAlign,$aVAlign="top",$aParagraphAlign="") {
    79         $this->Align($aHAlign,$aVAlign,$aParagraphAlign);
     74        $this->Align($aHAlign,$aVAlign,$aParagraphAlign);
    8075    }
    8176
    8277    // Specifies the alignment for a multi line text
    8378    function ParagraphAlign($aAlign) {
    84         $this->paragraph_align = $aAlign;
     79        $this->paragraph_align = $aAlign;
    8580    }
    8681
    8782    // Specifies the alignment for a multi line text
    8883    function SetParagraphAlign($aAlign) {
    89         $this->paragraph_align = $aAlign;
     84        $this->paragraph_align = $aAlign;
    9085    }
    9186
    9287    function SetShadow($aShadowColor='gray',$aShadowWidth=3) {
    93         $this->ishadowwidth=$aShadowWidth;
    94         $this->shadow=$aShadowColor;
    95         $this->boxed=true;
     88        $this->ishadowwidth=$aShadowWidth;
     89        $this->shadow=$aShadowColor;
     90        $this->boxed=true;
    9691    }
    9792
    9893    function SetWordWrap($aCol) {
    99         $this->iWordwrap = $aCol ;
    100     }
    101 
     94        $this->iWordwrap = $aCol ;
     95    }
     96       
    10297    // Specify that the text should be boxed. fcolor=frame color, bcolor=border color,
    10398    // $shadow=drop shadow should be added around the text.
    10499    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       
    127114    // Hide the text
    128115    function Hide($aHide=true) {
    129         $this->hide=$aHide;
    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 
    133120    // 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) 
    135122    // jpgraph_gantt
    136123    function Show($aShow=true) {
    137         $this->hide=!$aShow;
    138     }
    139 
     124        $this->hide=!$aShow;
     125    }
     126       
    140127    // Specify font
    141128    function SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10) {
    142         $this->font_family=$aFamily;
    143         $this->font_style=$aStyle;
    144         $this->font_size=$aSize;
    145     }
    146 
     129        $this->font_family=$aFamily;
     130        $this->font_style=$aStyle;
     131        $this->font_size=$aSize;
     132    }
     133                       
    147134    // Center the text between $left and $right coordinates
    148135    function Center($aLeft,$aRight,$aYAbsPos=false) {
    149         $this->x = $aLeft + ($aRight-$aLeft )/2;
    150         $this->halign = "center";
    151         if( is_numeric($aYAbsPos) )
    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       
    155142    // Set text color
    156143    function SetColor($aColor) {
    157         $this->color = $aColor;
    158     }
    159 
     144        $this->color = $aColor;
     145    }
     146       
    160147    function SetAngle($aAngle) {
    161         $this->SetOrientation($aAngle);
    162     }
    163 
     148        $this->SetOrientation($aAngle);
     149    }
     150       
    164151    // Orientation of text. Note only TTF fonts can have an arbitrary angle
    165152    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       
    176162    // Total width of text
    177163    function GetWidth($aImg) {
    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 
     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       
    183169    // Hight of font
    184170    function GetFontHeight($aImg) {
    185         $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size);
    186         $h = $aImg->GetFontHeight();
    187         return $h;
     171        $aImg->SetFont($this->font_family,$this->font_style,$this->font_size);
     172        $h = $aImg->GetFontHeight();
     173        return $h;
    188174
    189175    }
    190176
    191177    function GetTextHeight($aImg) {
    192         $aImg->SetFont($this->font_family,$this->font_style,$this->raw_font_size);
    193         $h = $aImg->GetTextHeight($this->t,$this->dir);
    194         return $h;
     178        $aImg->SetFont($this->font_family,$this->font_style,$this->font_size); 
     179        $h = $aImg->GetTextHeight($this->t,$this->dir);
     180        return $h;
    195181    }
    196182
    197183    function GetHeight($aImg) {
    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;
     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;
    202188    }
    203189
     
    205191    // on the context.
    206192    function SetMargin($aMarg) {
    207         $this->margin = $aMarg;
     193        $this->margin = $aMarg;
    208194    }
    209195
    210196    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        }
    219206    }
    220207
    221208    function SetCSIMTarget($aURITarget,$aAlt='',$aWinTarget='') {
    222         $this->iCSIMtarget = $aURITarget;
    223         $this->iCSIMalt = $aAlt;
    224         $this->iCSIMWinTarget = $aWinTarget;
     209        $this->iCSIMtarget = $aURITarget;
     210        $this->iCSIMalt = $aAlt;
     211        $this->iCSIMWinTarget = $aWinTarget;
    225212    }
    226213
    227214    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 '';
    234219    }
    235220
     
    237222    function Stroke($aImg,$x=null,$y=null) {
    238223
    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
    323267    }
    324268} // Class
Note: See TracChangeset for help on using the changeset viewer.