Source for file Shadow.class.php
Documentation is available at Shadow.class.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.  
 * @package linea21.externals  
require_once dirname(__FILE__ ). "/../Graph.class.php";  
define("SHADOW_LEFT_BOTTOM", 2);  
define("SHADOW_RIGHT_TOP", 3);  
define("SHADOW_RIGHT_BOTTOM", 4);  
     * Shadow on left and top sides  
     * Shadow on left and bottom sides  
     * Shadow on right and top sides  
     * Shadow on right and bottom sides  
     * @param int $position Shadow position  
     function awShadow($position) {  
     function hide($hide =  TRUE) {  
        $this->hide = (bool) $hide;  
     function show($show =  TRUE) {  
        $this->hide = (bool) !$show;  
     * @param bool $smooth Smooth the shadow (facultative argument)  
     function setSize($size, $smooth =  NULL) {  
        $this->size = (int) $size;  
        $this->position = (int) $position;  
        $this->smooth = (bool) $smooth;  
     * Get the space taken by the shadow  
     * @param $p1 Top-left point  
     * @param $p2 Right-bottom point  
     * @param int Drawing mode  
     function draw($driver, $p1, $p2, $mode) {  
        $color =  (is_a($this->color, 'awColor')) ?  $this->color :  new awColor(125, 125, 125);  
        switch($this->position) {  
                    $t2 =  $p2->move($this->size +  1, $this->size +  1);  
                } else { // PHP 4 compatibility  
                $width =  $t2->x -  $t1->x;  
                $height =  $t2->y -  $t1->y;  
                $driver->setAbsPosition($t1->x +  $driver->x, $t1->y +  $driver->y);  
                $driver->filledRectangle(  
                        new awPoint($width -  $this->size, $this->size),  
                        new awPoint($width -  1, $height -  1)  
                $driver->filledRectangle(  
                        new awPoint($this->size, $height -  $this->size),  
                        new awPoint($width -  $this->size -  1, $height -  1)  
                $this->smoothPast($driver, $color, $width, $height);  
                    $t1 =  $p1->move(-  $this->size, -  $this->size);  
                } else { // PHP 4 compatibility  
                $width =  $t2->x -  $t1->x;  
                $height =  $t2->y -  $t1->y;  
                $driver->setAbsPosition($t1->x +  $driver->x, $t1->y +  $driver->y);  
                $height =  max($height +  1, $this->size);  
                $driver->filledRectangle(  
                        new awPoint($this->size -  1, $height -  $this->size -  1)  
                $driver->filledRectangle(  
                        new awPoint($width -  $this->size -  1, $this->size -  1)  
                $this->smoothPast($driver, $color, $width, $height);  
                    $t1 =  $p1->move(0, -  $this->size);  
                    $t2 =  $p2->move($this->size +  1, 0);  
                } else { // PHP 4 compatibility  
                $width =  $t2->x -  $t1->x;  
                $height =  $t2->y -  $t1->y;  
                $driver->setAbsPosition($t1->x +  $driver->x, $t1->y +  $driver->y);  
                $height =  max($height +  1, $this->size);  
                $driver->filledRectangle(  
                        new awPoint($width -  $this->size, 0),  
                        new awPoint($width -  1, $height -  $this->size -  1)  
                $driver->filledRectangle(  
                        new awPoint($width -  $this->size -  1, $this->size -  1)  
                $this->smoothFuture($driver, $color, $width, $height);  
                    $t1 =  $p1->move(-  $this->size, 0);  
                    $t2 =  $p2->move(0, $this->size +  1);  
                } else { // PHP 4 compatibility  
                $width =  $t2->x -  $t1->x;  
                $height =  $t2->y -  $t1->y;  
                $driver->setAbsPosition($t1->x +  $driver->x, $t1->y +  $driver->y);  
                $driver->filledRectangle(  
                        new awPoint($this->size -  1, $height -  1)  
                $driver->filledRectangle(  
                        new awPoint($this->size, $height -  $this->size),  
                        new awPoint($width -  $this->size -  1, $height -  1)  
                $this->smoothFuture($driver, $color, $width, $height);  
     function smoothPast($driver, $color, $width, $height) {  
            for($i =  0; $i <  $this->size; $i++ ) {  
                for($j =  0; $j <=  $i; $j++ ) {  
                        new awPoint($i, $j +  $height -  $this->size)  
            for($i =  0; $i <  $this->size; $i++ ) {  
                for($j =  0; $j <=  $i; $j++ ) {  
                        new awPoint($width -  $this->size +  $j, $i)  
     function smoothFuture($driver, $color, $width, $height) {  
            for($i =  0; $i <  $this->size; $i++ ) {  
                for($j =  0; $j <=  $i; $j++ ) {  
                        new awPoint($i, $this->size -  $j -  1)  
            for($i =  0; $i <  $this->size; $i++ ) {  
                for($j =  0; $j <=  $i; $j++ ) {  
                        new awPoint($width -  $this->size +  $j, $height -  $i -  1)  
 
 
        
       |