New file |
0,0 → 1,291 |
<?php |
/* |
* This work is hereby released into the Public Domain. |
* To view a copy of the public domain dedication, |
* visit http://creativecommons.org/licenses/publicdomain/ or send a letter to |
* Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. |
* |
*/ |
|
require_once dirname(__FILE__)."/../Graph.class.php"; |
|
/** |
* Grid |
* |
* @package Artichow |
*/ |
class awGrid { |
|
/** |
* Vertical lines of the grid |
* |
* @var array |
*/ |
private $xgrid = array(); |
|
/** |
* Horizontal lines of the grid |
* |
* @var array |
*/ |
private $ygrid = array(); |
|
/** |
* Is the component grid hidden ? |
* |
* @var bool |
*/ |
private $hide = FALSE; |
|
/** |
* Are horizontal lines hidden ? |
* |
* @var bool |
*/ |
private $hideHorizontal = FALSE; |
|
/** |
* Are vertical lines hidden ? |
* |
* @var bool |
*/ |
private $hideVertical = FALSE; |
|
/** |
* Grid color |
* |
* @var Color |
*/ |
private $color; |
|
/** |
* Grid space |
* |
* @var int |
*/ |
private $space; |
|
/** |
* Line type |
* |
* @var int |
*/ |
private $type = awLine::SOLID; |
|
/** |
* Grid interval |
* |
* @var int |
*/ |
private $interval = array(1, 1); |
|
/** |
* Grid background color |
* |
* @var Color |
*/ |
private $background; |
|
/** |
* Build the factory |
*/ |
public function __construct() { |
|
// Set a grid default color |
$this->color = new awColor(210, 210, 210); |
$this->background = new awColor(255, 255, 255, 100); |
|
} |
|
/** |
* Hide grid ? |
* |
* @param bool $hide |
*/ |
public function hide($hide = TRUE) { |
$this->hide = (bool)$hide; |
} |
|
/** |
* Hide horizontal lines ? |
* |
* @param bool $hideHorizontal |
*/ |
public function hideHorizontal($hide = TRUE) { |
$this->hideHorizontal = (bool)$hide; |
} |
|
/** |
* Hide vertical lines ? |
* |
* @param bool $hideVertical |
*/ |
public function hideVertical($hide = TRUE) { |
$this->hideVertical = (bool)$hide; |
} |
|
/** |
* Change grid color |
* |
* @param awColor $color |
*/ |
public function setColor(awColor $color) { |
$this->color = $color; |
} |
|
/** |
* Remove grid background |
*/ |
public function setNoBackground() { |
$this->background = NULL; |
} |
|
/** |
* Change grid background color |
* |
* @param awColor $color |
*/ |
public function setBackgroundColor(awColor $color) { |
$this->background = $color; |
} |
|
/** |
* Change line type |
* |
* @param int $type |
*/ |
public function setType($type) { |
$this->type = (int)$type; |
} |
|
/** |
* Change grid interval |
* |
* @param int $hInterval |
* @param int $vInterval |
*/ |
public function setInterval($hInterval, $vInterval) { |
$this->interval = array((int)$hInterval, (int)$vInterval); |
} |
|
/** |
* Set grid space |
* |
* @param int $left Left space in pixels |
* @param int $right Right space in pixels |
* @param int $top Top space in pixels |
* @param int $bottom Bottom space in pixels |
*/ |
public function setSpace($left, $right, $top, $bottom) { |
$this->space = array((int)$left, (int)$right, (int)$top, (int)$bottom); |
} |
|
/** |
* Change the current grid |
* |
* @param array $xgrid Vertical lines |
* @param array $ygrid Horizontal lines |
*/ |
public function setGrid($xgrid, $ygrid) { |
|
if(empty($this->xgrid)) { |
$this->xgrid = $xgrid; |
} |
if(empty($this->ygrid)) { |
$this->ygrid = $ygrid; |
} |
|
} |
|
/** |
* Draw grids |
* |
* @param awDriver $driver A driver object |
* @param int $x1 |
* @param int $y1 |
* @param int $x2 |
* @param int $y2 |
*/ |
public function draw(awDriver $driver, $x1, $y1, $x2, $y2) { |
|
if($this->background instanceof awColor) { |
|
// Draw background color |
$driver->filledRectangle( |
$this->background, |
awLine::build($x1, $y1, $x2, $y2) |
); |
|
} |
|
if($this->hide === FALSE) { |
|
$this->drawGrid( |
$driver, |
$this->color, |
$this->hideVertical ? array() : $this->xgrid, |
$this->hideHorizontal ? array() : $this->ygrid, |
$x1, $y1, $x2, $y2, |
$this->type, |
$this->space, |
$this->interval[0], |
$this->interval[1] |
); |
|
} |
|
} |
|
private function drawGrid( |
awDriver $driver, awColor $color, |
$nx, $ny, $x1, $y1, $x2, $y2, |
$type, $space, $hInterval, $vInterval |
) { |
|
list($left, $right, $top, $bottom) = $space; |
|
$width = $x2 - $x1 - $left - $right; |
$height = $y2 - $y1 - $top - $bottom; |
|
foreach($nx as $key => $n) { |
|
if(($key % $vInterval) === 0) { |
|
$pos = (int)round($x1 + $left + $n * $width); |
$driver->line( |
$color, |
new awLine( |
new awPoint($pos, $y1), |
new awPoint($pos, $y2), |
$type |
) |
); |
|
} |
|
} |
|
foreach($ny as $key => $n) { |
|
if(($key % $hInterval) === 0) { |
|
$pos = (int)round($y1 + $top + $n * $height); |
$driver->line( |
$color, |
new awLine( |
new awPoint($x1, $pos), |
new awPoint($x2, $pos), |
$type |
) |
); |
|
} |
|
} |
|
} |
|
} |
|
registerClass('Grid'); |
?> |