mirror of
https://github.com/Dolibarr/dolibarr.git
synced 2025-12-06 17:48:25 +01:00
335 lines
5.0 KiB
PHP
335 lines
5.0 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.
|
|
*
|
|
*/
|
|
|
|
/* <php4> */
|
|
|
|
define("MARK_CIRCLE", 1);
|
|
define("MARK_SQUARE", 2);
|
|
define("MARK_IMAGE", 3);
|
|
define("MARK_STAR", 4);
|
|
define("MARK_PAPERCLIP", 5);
|
|
define("MARK_BOOK", 6);
|
|
|
|
/* </php4> */
|
|
|
|
/**
|
|
* Draw marks
|
|
*
|
|
* @package Artichow
|
|
*/
|
|
class awMark {
|
|
|
|
/**
|
|
* Circle mark
|
|
*
|
|
* @var int
|
|
*/
|
|
|
|
|
|
/**
|
|
* Quare mark
|
|
*
|
|
* @var int
|
|
*/
|
|
|
|
|
|
/**
|
|
* Image mark
|
|
*
|
|
* @var int
|
|
*/
|
|
|
|
|
|
/**
|
|
* Star mark
|
|
*
|
|
* @var int
|
|
*/
|
|
|
|
|
|
/**
|
|
* Paperclip mark
|
|
*
|
|
* @var int
|
|
*/
|
|
|
|
|
|
/**
|
|
* Book mark
|
|
*
|
|
* @var int
|
|
*/
|
|
|
|
|
|
/**
|
|
* Must marks be hidden ?
|
|
*
|
|
* @var bool
|
|
*/
|
|
var $hide;
|
|
|
|
/**
|
|
* Mark type
|
|
*
|
|
* @var int
|
|
*/
|
|
var $type;
|
|
|
|
/**
|
|
* Mark size
|
|
*
|
|
* @var int
|
|
*/
|
|
var $size = 8;
|
|
|
|
/**
|
|
* Fill mark
|
|
*
|
|
* @var Color, Gradient
|
|
*/
|
|
var $fill;
|
|
|
|
/**
|
|
* Mark image
|
|
*
|
|
* @var Image
|
|
*/
|
|
var $image;
|
|
|
|
/**
|
|
* To draw marks
|
|
*
|
|
* @var Drawer
|
|
*/
|
|
var $drawer;
|
|
|
|
/**
|
|
* Move position from this vector
|
|
*
|
|
* @var Point
|
|
*/
|
|
var $move;
|
|
|
|
/**
|
|
* Marks border
|
|
*
|
|
* @var Border
|
|
*/
|
|
var $border;
|
|
|
|
/**
|
|
* Build the mark
|
|
*/
|
|
function awMark() {
|
|
|
|
$this->fill = new awColor(255, 0, 0, 0);
|
|
$this->border = new awBorder;
|
|
$this->border->hide();
|
|
|
|
$this->move = new awPoint(0, 0);
|
|
|
|
}
|
|
|
|
/**
|
|
* Change mark position
|
|
*
|
|
* @param int $x Add this interval to X coord
|
|
* @param int $y Add this interval to Y coord
|
|
*/
|
|
function move($x, $y) {
|
|
|
|
$this->move = $this->move->move($x, $y);
|
|
|
|
}
|
|
|
|
/**
|
|
* Hide marks ?
|
|
*
|
|
* @param bool $hide TRUE to hide marks, FALSE otherwise
|
|
*/
|
|
function hide($hide = TRUE) {
|
|
$this->hide = (bool)$hide;
|
|
}
|
|
|
|
/**
|
|
* Show marks ?
|
|
*
|
|
* @param bool $show
|
|
*/
|
|
function show($show = TRUE) {
|
|
$this->hide = (bool)!$show;
|
|
}
|
|
|
|
/**
|
|
* Change mark type
|
|
*
|
|
* @param int $size Size in pixels
|
|
*/
|
|
function setSize($size) {
|
|
$this->size = (int)$size;
|
|
}
|
|
|
|
/**
|
|
* Change mark type
|
|
*
|
|
* @param int $type New mark type
|
|
* @param int $size Mark size (can be NULL)
|
|
*/
|
|
function setType($type, $size = NULL) {
|
|
$this->type = (int)$type;
|
|
if($size !== NULL) {
|
|
$this->setSize($size);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Fill the mark with a color or a gradient
|
|
*
|
|
* @param mixed $fill A color or a gradient
|
|
*/
|
|
function setFill($fill) {
|
|
if(is_a($fill, 'awColor') or is_a($fill, 'awGradient')) {
|
|
$this->fill = $fill;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set an image
|
|
* Only for MARK_IMAGE type.
|
|
*
|
|
* @param Image An image
|
|
*/
|
|
function setImage(&$image) {
|
|
$this->image = $image;
|
|
}
|
|
|
|
/**
|
|
* Draw the mark
|
|
*
|
|
* @param $drawer
|
|
* @param $point Mark center
|
|
*/
|
|
function draw($drawer, $point) {
|
|
|
|
// Hide marks ?
|
|
if($this->hide) {
|
|
return;
|
|
}
|
|
|
|
// Check if we can print marks
|
|
if($this->type !== NULL) {
|
|
|
|
$this->drawer = $drawer;
|
|
$realPoint = $this->move->move($point->x, $point->y);
|
|
|
|
switch($this->type) {
|
|
|
|
case MARK_CIRCLE :
|
|
$this->drawCircle($realPoint);
|
|
break;
|
|
|
|
case MARK_SQUARE :
|
|
$this->drawSquare($realPoint);
|
|
break;
|
|
|
|
case MARK_IMAGE :
|
|
$this->drawImage($realPoint);
|
|
break;
|
|
|
|
case MARK_STAR :
|
|
$this->changeType('star');
|
|
$this->draw($drawer, $point);
|
|
break;
|
|
|
|
case MARK_PAPERCLIP :
|
|
$this->changeType('paperclip');
|
|
$this->draw($drawer, $point);
|
|
break;
|
|
|
|
case MARK_BOOK :
|
|
$this->changeType('book');
|
|
$this->draw($drawer, $point);
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function changeType($image) {
|
|
$this->setType(MARK_IMAGE);
|
|
$this->setImage(new awFileImage(ARTICHOW_IMAGE.DIRECTORY_SEPARATOR.$image.'.png'));
|
|
}
|
|
|
|
function drawCircle($point) {
|
|
|
|
$this->drawer->filledEllipse(
|
|
$this->fill,
|
|
$point,
|
|
$this->size, $this->size
|
|
);
|
|
|
|
$this->border->ellipse(
|
|
$this->drawer,
|
|
$point,
|
|
$this->size, $this->size
|
|
);
|
|
|
|
}
|
|
|
|
function drawSquare($point) {
|
|
|
|
list($x, $y) = $point->getLocation();
|
|
|
|
$x1 = (int)($x - $this->size / 2);
|
|
$x2 = $x1 + $this->size;
|
|
$y1 = (int)($y - $this->size / 2);
|
|
$y2 = $y1 + $this->size;
|
|
|
|
$this->border->rectangle($this->drawer, new awPoint($x1, $y1), new awPoint($x2, $y2));
|
|
|
|
$size = $this->border->visible() ? 1 : 0;
|
|
|
|
$this->drawer->filledRectangle(
|
|
$this->fill,
|
|
new awLine(
|
|
new awPoint($x1 + $size, $y1 + $size),
|
|
new awPoint($x2 - $size, $y2 - $size)
|
|
)
|
|
);
|
|
|
|
}
|
|
|
|
function drawImage($point) {
|
|
|
|
if(is_a($this->image, 'awImage')) {
|
|
|
|
$width = $this->image->width;
|
|
$height = $this->image->height;
|
|
|
|
list($x, $y) = $point->getLocation();
|
|
|
|
$x1 = (int)($x - $width / 2);
|
|
$x2 = $x1 + $width;
|
|
$y1 = (int)($y - $width / 2);
|
|
$y2 = $y1 + $height;
|
|
|
|
$this->border->rectangle($this->drawer, new awPoint($x1 - 1, $y1 - 1), new awPoint($x2 + 1, $y2 + 1));
|
|
|
|
$this->drawer->copyImage($this->image, new awPoint($x1, $y1), new awPoint($x2, $y2));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
registerClass('Mark');
|
|
?>
|