diff options
Diffstat (limited to 'html/jpgraph/jpgraph_theme.inc.php')
-rw-r--r-- | html/jpgraph/jpgraph_theme.inc.php | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/html/jpgraph/jpgraph_theme.inc.php b/html/jpgraph/jpgraph_theme.inc.php new file mode 100644 index 0000000..0cc54c4 --- /dev/null +++ b/html/jpgraph/jpgraph_theme.inc.php @@ -0,0 +1,136 @@ +<?php +//======================================================================= +// File: JPGRAPH_THEME.INC.PHP +// Description: Class to define graph theme +// Created: 2010-09-29 +// Ver: $Id: jpgraph_theme.inc.php 83 2010-10-01 11:24:19Z atsushi $ +// +// Copyright (c) Asial Corporation. All rights reserved. +//======================================================================== + + +// include Theme classes +foreach (glob(dirname(__FILE__) . '/themes/*.php') as $theme_class_script) { + require_once($theme_class_script); +} + +//=================================================== +// CLASS +// Description: +//=================================================== +abstract class Theme { + protected $color_index; + + function __construct() { + $this->color_index = 0; + } + /** + * + */ + abstract function GetColorList(); + + /** + * + */ + abstract function ApplyPlot($plot); + + + /** + * + */ + function SetupPlot($plot) { + if (is_array($plot)) { + foreach ($plot as $obj) { + $this->ApplyPlot($obj); + } + } else { + $this->ApplyPlot($plot); + } + } + + /** + * + */ + function ApplyGraph($graph) { + + $this->graph = $graph; + $method_name = ''; + + if (get_class($graph) == 'Graph') { + $method_name = 'SetupGraph'; + } else { + $method_name = 'Setup' . get_class($graph); + } + + if (method_exists($this, $method_name)) { + $this->$method_name($graph); + } else { + JpGraphError::RaiseL(30001, $method_name, $method_name); //Theme::%s() is not defined. \nPlease make %s(\$graph) function in your theme classs. + } + } + + /** + * + */ + function PreStrokeApply($graph) { + } + + /** + * + */ + function GetThemeColors($num = 30) { + $result_list = array(); + + $old_index = $this->color_index; + $this->color_index = 0; + $count = 0; + + $i = 0; + while (true) { + for ($j = 0; $j < count($this->GetColorList()); $j++) { + if (++$count > $num) { + break 2; + } + $result_list[] = $this->GetNextColor(); + } + $i++; + } + + $this->color_index = $old_index; + + return $result_list; + } + + /** + * + */ + function GetNextColor() { + $color_list = $this->GetColorList(); + + $color = null; + if (isset($color_list[$this->color_index])) { + $color = $color_list[$this->color_index]; + } else { + $color_count = count($color_list); + if ($color_count <= $this->color_index) { + $color_tmp = $color_list[$this->color_index % $color_count]; + $brightness = 1.0 - intval($this->color_index / $color_count) * 0.2; + $rgb = new RGB(); + $color = $color_tmp . ':' . $brightness; + $color = $rgb->Color($color); + $alpha = array_pop($color); + $color = $rgb->tryHexConversion($color); + if ($alpha) { + $color .= '@' . $alpha; + } + } + } + + $this->color_index++; + + return $color; + } + +} // Class + +?> |