function pDraw::drawGradientArea in Visitors 7
Same name and namespace in other branches
- 7.2 pChart/class/pDraw.class.php \pDraw::drawGradientArea()
5 calls to pDraw::drawGradientArea()
- pDraw::drawBarChart in pChart/
class/ pDraw.class.php - pDraw::drawDerivative in pChart/
class/ pDraw.class.php - pDraw::drawLabelBox in pChart/
class/ pDraw.class.php - pDraw::drawProgress in pChart/
class/ pDraw.class.php - pDraw::drawStackedBarChart in pChart/
class/ pDraw.class.php
File
- pChart/
class/ pDraw.class.php, line 1031
Class
Code
function drawGradientArea($X1, $Y1, $X2, $Y2, $Direction, $Format = "") {
$StartR = isset($Format["StartR"]) ? $Format["StartR"] : 90;
$StartG = isset($Format["StartG"]) ? $Format["StartG"] : 90;
$StartB = isset($Format["StartB"]) ? $Format["StartB"] : 90;
$EndR = isset($Format["EndR"]) ? $Format["EndR"] : 0;
$EndG = isset($Format["EndG"]) ? $Format["EndG"] : 0;
$EndB = isset($Format["EndB"]) ? $Format["EndB"] : 0;
$Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
$Levels = isset($Format["Levels"]) ? $Format["Levels"] : NULL;
$Shadow = $this->Shadow;
$this->Shadow = FALSE;
if ($StartR == $EndR && $StartG == $EndG && $StartB == $EndB) {
$this
->drawFilledRectangle($X1, $Y1, $X2, $Y2, array(
"R" => $StartR,
"G" => $StartG,
"B" => $StartB,
"Alpha" => $Alpha,
));
return 0;
}
if ($Levels != NULL) {
$EndR = $StartR + $Levels;
$EndG = $StartG + $Levels;
$EndB = $StartB + $Levels;
}
if ($X1 > $X2) {
list($X1, $X2) = array(
$X2,
$X1,
);
}
if ($Y1 > $Y2) {
list($Y1, $Y2) = array(
$Y2,
$Y1,
);
}
if ($Direction == DIRECTION_VERTICAL) {
$Width = abs($Y2 - $Y1);
}
if ($Direction == DIRECTION_HORIZONTAL) {
$Width = abs($X2 - $X1);
}
$Step = max(abs($EndR - $StartR), abs($EndG - $StartG), abs($EndB - $StartB));
$StepSize = $Width / $Step;
$RStep = ($EndR - $StartR) / $Step;
$GStep = ($EndG - $StartG) / $Step;
$BStep = ($EndB - $StartB) / $Step;
$R = $StartR;
$G = $StartG;
$B = $StartB;
switch ($Direction) {
case DIRECTION_VERTICAL:
$StartY = $Y1;
$EndY = floor($Y2) + 1;
$LastY2 = $StartY;
for ($i = 0; $i <= $Step; $i++) {
$Y2 = floor($StartY + $i * $StepSize);
if ($Y2 > $EndY) {
$Y2 = $EndY;
}
if ($Y1 != $Y2 && $Y1 < $Y2 || $Y2 == $EndY) {
$Color = array(
"R" => $R,
"G" => $G,
"B" => $B,
"Alpha" => $Alpha,
);
$this
->drawFilledRectangle($X1, $Y1, $X2, $Y2, $Color);
$LastY2 = max($LastY2, $Y2);
$Y1 = $Y2 + 1;
}
$R = $R + $RStep;
$G = $G + $GStep;
$B = $B + $BStep;
}
if ($LastY2 < $EndY && isset($Color)) {
for ($i = $LastY2 + 1; $i <= $EndY; $i++) {
$this
->drawLine($X1, $i, $X2, $i, $Color);
}
}
break;
case DIRECTION_HORIZONTAL:
$StartX = $X1;
$EndX = $X2;
for ($i = 0; $i <= $Step; $i++) {
$X2 = floor($StartX + $i * $StepSize);
if ($X2 > $EndX) {
$X2 = $EndX;
}
if ($X1 != $X2 && $X1 < $X2 || $X2 == $EndX) {
$Color = array(
"R" => $R,
"G" => $G,
"B" => $B,
"Alpha" => $Alpha,
);
$this
->drawFilledRectangle($X1, $Y1, $X2, $Y2, $Color);
$X1 = $X2 + 1;
}
$R = $R + $RStep;
$G = $G + $GStep;
$B = $B + $BStep;
}
if ($X2 < $EndX && isset($Color)) {
$this
->drawFilledRectangle($X2, $Y1, $EndX, $Y2, $Color);
}
break;
}
$this->Shadow = $Shadow;
}