198 lines
3.7 KiB
PHP
198 lines
3.7 KiB
PHP
|
<?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";
|
||
|
|
||
|
/**
|
||
|
* Draw border
|
||
|
*
|
||
|
* @package Artichow
|
||
|
*/
|
||
|
class awBorder {
|
||
|
|
||
|
/**
|
||
|
* Border color
|
||
|
*
|
||
|
* @var Color
|
||
|
*/
|
||
|
protected $color;
|
||
|
|
||
|
/**
|
||
|
* Hide border ?
|
||
|
*
|
||
|
* @var bool
|
||
|
*/
|
||
|
protected $hide = FALSE;
|
||
|
|
||
|
/**
|
||
|
* Border line style
|
||
|
*
|
||
|
* @var int
|
||
|
*/
|
||
|
protected $style;
|
||
|
|
||
|
/**
|
||
|
* Build the border
|
||
|
*
|
||
|
* @param awColor $color Border color
|
||
|
* @param int $style Border style
|
||
|
*/
|
||
|
public function __construct($color = NULL, $style = awLine::SOLID) {
|
||
|
|
||
|
$this->setStyle($style);
|
||
|
|
||
|
if($color instanceof awColor) {
|
||
|
$this->setColor($color);
|
||
|
} else {
|
||
|
$this->setColor(new awBlack);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Change border color
|
||
|
* This method automatically shows the border if it is hidden
|
||
|
*
|
||
|
* @param awColor $color
|
||
|
*/
|
||
|
public function setColor(awColor $color) {
|
||
|
$this->color = $color;
|
||
|
$this->show();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Change border style
|
||
|
*
|
||
|
* @param int $style
|
||
|
*/
|
||
|
public function setStyle($style) {
|
||
|
$this->style = (int)$style;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Hide border ?
|
||
|
*
|
||
|
* @param bool $hide
|
||
|
*/
|
||
|
public function hide($hide = TRUE) {
|
||
|
$this->hide = (bool)$hide;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Show border ?
|
||
|
*
|
||
|
* @param bool $show
|
||
|
*/
|
||
|
public function show($show = TRUE) {
|
||
|
$this->hide = (bool)!$show;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Is the border visible ?
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function visible() {
|
||
|
return !$this->hide;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Draw border as a rectangle
|
||
|
*
|
||
|
* @param awDriver $driver
|
||
|
* @param awPoint $p1 Top-left corner
|
||
|
* @param awPoint $p2 Bottom-right corner
|
||
|
*/
|
||
|
public function rectangle(awDriver $driver, awPoint $p1, awPoint $p2) {
|
||
|
|
||
|
// Border is hidden
|
||
|
if($this->hide) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$line = new awLine;
|
||
|
$line->setStyle($this->style);
|
||
|
$line->setLocation($p1, $p2);
|
||
|
|
||
|
$driver->rectangle($this->color, $line);
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Draw border as an ellipse
|
||
|
*
|
||
|
* @param awDriver $driver
|
||
|
* @param awPoint $center Ellipse center
|
||
|
* @param int $width Ellipse width
|
||
|
* @param int $height Ellipse height
|
||
|
*/
|
||
|
public function ellipse(awDriver $driver, awPoint $center, $width, $height) {
|
||
|
|
||
|
// Border is hidden
|
||
|
if($this->hide) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
switch($this->style) {
|
||
|
|
||
|
case awLine::SOLID :
|
||
|
$driver->ellipse($this->color, $center, $width, $height);
|
||
|
break;
|
||
|
|
||
|
default :
|
||
|
awImage::drawError("Class Border: Dashed and dotted borders and not yet implemented on ellipses.");
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Draw border as a polygon
|
||
|
*
|
||
|
* @param awDriver $driver A Driver object
|
||
|
* @param awPolygon $polygon A Polygon object
|
||
|
*/
|
||
|
public function polygon(awDriver $driver, awPolygon $polygon) {
|
||
|
|
||
|
// Border is hidden
|
||
|
if($this->hide) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$polygon->setStyle($this->style);
|
||
|
$driver->polygon($this->color, $polygon);
|
||
|
|
||
|
// In case of Line::SOLID, Driver::polygon() uses imagepolygon()
|
||
|
// which automatically closes the shape. In any other case,
|
||
|
// we have to do it manually here.
|
||
|
if($this->style !== Line::SOLID) {
|
||
|
$this->closePolygon($driver, $polygon);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Draws the last line of a Polygon, between the first and last point
|
||
|
*
|
||
|
* @param awDriver $driver A Driver object
|
||
|
* @param awPolygon $polygon The polygon object to close
|
||
|
*/
|
||
|
private function closePolygon(awDriver $driver, awPolygon $polygon) {
|
||
|
$first = $polygon->get(0);
|
||
|
$last = $polygon->get($polygon->count() - 1);
|
||
|
|
||
|
$line = new awLine($first, $last, $this->style, $polygon->getThickness());
|
||
|
$driver->line($this->color, $line);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
registerClass('Border');
|
||
|
?>
|