summaryrefslogtreecommitdiff
path: root/html/jpgraph/jpgraph_iconplot.php
diff options
context:
space:
mode:
Diffstat (limited to 'html/jpgraph/jpgraph_iconplot.php')
-rw-r--r--html/jpgraph/jpgraph_iconplot.php190
1 files changed, 190 insertions, 0 deletions
diff --git a/html/jpgraph/jpgraph_iconplot.php b/html/jpgraph/jpgraph_iconplot.php
new file mode 100644
index 0000000..584f801
--- /dev/null
+++ b/html/jpgraph/jpgraph_iconplot.php
@@ -0,0 +1,190 @@
+<?php
+//=======================================================================
+// File: JPGRAPH_ICONPLOT.PHP
+// Description: Extension module to add icons to plots
+// Created: 2004-02-18
+// Ver: $Id: jpgraph_iconplot.php 1404 2009-06-28 15:25:41Z ljp $
+//
+// Copyright (c) Asial Corporation. All rights reserved.
+//========================================================================
+
+
+//===================================================
+// CLASS IconPlot
+// Description: Make it possible to add a (small) image
+// to the graph
+//===================================================
+class IconPlot {
+ public $iX=0,$iY=0,$iScale=1.0,$iMix=100;
+ private $iHorAnchor='left',$iVertAnchor='top';
+ private $iFile='';
+ private $iAnchors = array('left','right','top','bottom','center');
+ private $iCountryFlag='',$iCountryStdSize=3;
+ private $iScalePosY=null,$iScalePosX=null;
+ private $iImgString='';
+
+
+ function __construct($aFile="",$aX=0,$aY=0,$aScale=1.0,$aMix=100) {
+ $this->iFile = $aFile;
+ $this->iX=$aX;
+ $this->iY=$aY;
+ $this->iScale= $aScale;
+ if( $aMix < 0 || $aMix > 100 ) {
+ JpGraphError::RaiseL(8001); //('Mix value for icon must be between 0 and 100.');
+ }
+ $this->iMix = $aMix ;
+ }
+
+ function SetCountryFlag($aFlag,$aX=0,$aY=0,$aScale=1.0,$aMix=100,$aStdSize=3) {
+ $this->iCountryFlag = $aFlag;
+ $this->iX=$aX;
+ $this->iY=$aY;
+ $this->iScale= $aScale;
+ if( $aMix < 0 || $aMix > 100 ) {
+ JpGraphError::RaiseL(8001);//'Mix value for icon must be between 0 and 100.');
+ }
+ $this->iMix = $aMix;
+ $this->iCountryStdSize = $aStdSize;
+ }
+
+ function SetPos($aX,$aY) {
+ $this->iX=$aX;
+ $this->iY=$aY;
+ }
+
+ function CreateFromString($aStr) {
+ $this->iImgString = $aStr;
+ }
+
+ function SetScalePos($aX,$aY) {
+ $this->iScalePosX = $aX;
+ $this->iScalePosY = $aY;
+ }
+
+ function SetScale($aScale) {
+ $this->iScale = $aScale;
+ }
+
+ function SetMix($aMix) {
+ if( $aMix < 0 || $aMix > 100 ) {
+ JpGraphError::RaiseL(8001);//('Mix value for icon must be between 0 and 100.');
+ }
+ $this->iMix = $aMix ;
+ }
+
+ function SetAnchor($aXAnchor='left',$aYAnchor='center') {
+ if( !in_array($aXAnchor,$this->iAnchors) ||
+ !in_array($aYAnchor,$this->iAnchors) ) {
+ JpGraphError::RaiseL(8002);//("Anchor position for icons must be one of 'top', 'bottom', 'left', 'right' or 'center'");
+ }
+ $this->iHorAnchor=$aXAnchor;
+ $this->iVertAnchor=$aYAnchor;
+ }
+
+ function PreStrokeAdjust($aGraph) {
+ // Nothing to do ...
+ }
+
+ function DoLegend($aGraph) {
+ // Nothing to do ...
+ }
+
+ function Max() {
+ return array(false,false);
+ }
+
+
+ // The next four function are framework function tht gets called
+ // from Gantt and is not menaiungfull in the context of Icons but
+ // they must be implemented to avoid errors.
+ function GetMaxDate() { return false; }
+ function GetMinDate() { return false; }
+ function GetLineNbr() { return 0; }
+ function GetAbsHeight() {return 0; }
+
+
+ function Min() {
+ return array(false,false);
+ }
+
+ function StrokeMargin(&$aImg) {
+ return true;
+ }
+
+ function Stroke($aImg,$axscale=null,$ayscale=null) {
+ $this->StrokeWithScale($aImg,$axscale,$ayscale);
+ }
+
+ function StrokeWithScale($aImg,$axscale,$ayscale) {
+ if( $this->iScalePosX === null || $this->iScalePosY === null ||
+ $axscale === null || $ayscale === null ) {
+ $this->_Stroke($aImg);
+ }
+ else {
+ $this->_Stroke($aImg,
+ round($axscale->Translate($this->iScalePosX)),
+ round($ayscale->Translate($this->iScalePosY)));
+ }
+ }
+
+ function GetWidthHeight() {
+ $dummy=0;
+ return $this->_Stroke($dummy,null,null,true);
+ }
+
+ function _Stroke($aImg,$x=null,$y=null,$aReturnWidthHeight=false) {
+ if( $this->iFile != '' && $this->iCountryFlag != '' ) {
+ JpGraphError::RaiseL(8003);//('It is not possible to specify both an image file and a country flag for the same icon.');
+ }
+ if( $this->iFile != '' ) {
+ $gdimg = Graph::LoadBkgImage('',$this->iFile);
+ }
+ elseif( $this->iImgString != '') {
+ $gdimg = Image::CreateFromString($this->iImgString);
+ }
+
+ else {
+ if( ! class_exists('FlagImages',false) ) {
+ JpGraphError::RaiseL(8004);//('In order to use Country flags as icons you must include the "jpgraph_flags.php" file.');
+ }
+ $fobj = new FlagImages($this->iCountryStdSize);
+ $dummy='';
+ $gdimg = $fobj->GetImgByName($this->iCountryFlag,$dummy);
+ }
+
+ $iconw = imagesx($gdimg);
+ $iconh = imagesy($gdimg);
+
+ if( $aReturnWidthHeight ) {
+ return array(round($iconw*$this->iScale),round($iconh*$this->iScale));
+ }
+
+ if( $x !== null && $y !== null ) {
+ $this->iX = $x; $this->iY = $y;
+ }
+ if( $this->iX >= 0 && $this->iX <= 1.0 ) {
+ $w = imagesx($aImg->img);
+ $this->iX = round($w*$this->iX);
+ }
+ if( $this->iY >= 0 && $this->iY <= 1.0 ) {
+ $h = imagesy($aImg->img);
+ $this->iY = round($h*$this->iY);
+ }
+
+ if( $this->iHorAnchor == 'center' )
+ $this->iX -= round($iconw*$this->iScale/2);
+ if( $this->iHorAnchor == 'right' )
+ $this->iX -= round($iconw*$this->iScale);
+ if( $this->iVertAnchor == 'center' )
+ $this->iY -= round($iconh*$this->iScale/2);
+ if( $this->iVertAnchor == 'bottom' )
+ $this->iY -= round($iconh*$this->iScale);
+
+ $aImg->CopyMerge($gdimg,$this->iX,$this->iY,0,0,
+ round($iconw*$this->iScale),round($iconh*$this->iScale),
+ $iconw,$iconh,
+ $this->iMix);
+ }
+}
+
+?>