summaryrefslogtreecommitdiff
path: root/lib/GD/Graph/area.pm
diff options
context:
space:
mode:
authorAndreas Brachold <vdr07@deltab.de>2007-08-13 18:41:27 +0000
committerAndreas Brachold <vdr07@deltab.de>2007-08-13 18:41:27 +0000
commitbcbf441e09fb502cf64924ff2530fa144bdf52c5 (patch)
treef377707a2dac078db8cd0c7d7abfe69ac1006d71 /lib/GD/Graph/area.pm
downloadxxv-bcbf441e09fb502cf64924ff2530fa144bdf52c5.tar.gz
xxv-bcbf441e09fb502cf64924ff2530fa144bdf52c5.tar.bz2
* Move files to trunk
Diffstat (limited to 'lib/GD/Graph/area.pm')
-rw-r--r--lib/GD/Graph/area.pm112
1 files changed, 112 insertions, 0 deletions
diff --git a/lib/GD/Graph/area.pm b/lib/GD/Graph/area.pm
new file mode 100644
index 0000000..a06f114
--- /dev/null
+++ b/lib/GD/Graph/area.pm
@@ -0,0 +1,112 @@
+#==========================================================================
+# Copyright (c) 1995-2000 Martien Verbruggen
+#--------------------------------------------------------------------------
+#
+# Name:
+# GD::Graph::area.pm
+#
+# $Id: area.pm,v 1.16 2003/02/10 23:33:40 mgjv Exp $
+#
+#==========================================================================
+
+package GD::Graph::area;
+
+($GD::Graph::area::VERSION) = '$Revision: 1.16 $' =~ /\s([\d.]+)/;
+
+use strict;
+
+use GD::Graph::axestype;
+
+@GD::Graph::area::ISA = qw( GD::Graph::axestype );
+
+# PRIVATE
+sub draw_data_set
+{
+ my $self = shift; # object reference
+ my $ds = shift; # number of the data set
+
+ my @values = $self->{_data}->y_values($ds) or
+ return $self->_set_error("Impossible illegal data set: $ds",
+ $self->{_data}->error);
+
+ # Select a data colour
+ my $dsci = $self->set_clr($self->pick_data_clr($ds));
+ my $brci = $self->set_clr($self->pick_border_clr($ds));
+
+ # Create a new polygon
+ my $poly = GD::Polygon->new();
+
+ my @bottom;
+
+ # Add the data points
+ for (my $i = 0; $i < @values; $i++)
+ {
+ my $value = $values[$i];
+ next unless defined $value;
+
+ my $bottom = $self->_get_bottom($ds, $i);
+ $value = $self->{_data}->get_y_cumulative($ds, $i)
+ if ($self->{overwrite} == 2);
+
+ my ($x, $y) = $self->val_to_pixel($i + 1, $value, $ds);
+ $poly->addPt($x, $y);
+ # Need to keep track of this stuff for hotspots, and because
+ # it's the only reliable way of closing the polygon, without
+ # making odd assumptions.
+ push @bottom, [$x, $bottom];
+
+ # Hotspot stuff
+ # XXX needs fixing. Not used at the moment.
+ next unless defined $self->{_hotspots}->[$ds]->[$i];
+ if ($i == 0)
+ {
+ $self->{_hotspots}->[$ds]->[$i] = ["poly",
+ $x, $y,
+ $x , $bottom,
+ $x - 1, $bottom,
+ $x - 1, $y,
+ $x, $y];
+ }
+ else
+ {
+ $self->{_hotspots}->[$ds]->[$i] = ["poly",
+ $poly->getPt($i),
+ @{$bottom[$i]},
+ @{$bottom[$i-1]},
+ $poly->getPt($i-1),
+ $poly->getPt($i)];
+ }
+ }
+
+ foreach my $bottom (reverse @bottom)
+ {
+ $poly->addPt($bottom->[0], $bottom->[1]);
+ }
+
+ # Draw a filled and a line polygon
+ $self->{graph}->filledPolygon($poly, $dsci)
+ if defined $dsci;
+ $self->{graph}->polygon($poly, $brci)
+ if defined $brci;
+
+ # Draw the accent lines
+ if (defined $brci &&
+ ($self->{right} - $self->{left})/@values > $self->{accent_treshold})
+ {
+ for (my $i = 1; $i < @values - 1; $i++)
+ {
+ my $value = $values[$i];
+ ## XXX Why don't I need this line?
+ ##next unless defined $value;
+
+ my ($x, $y) = $poly->getPt($i);
+ my $bottom = $bottom[$i]->[1];
+
+ $self->{graph}->dashedLine($x, $y, $x, $bottom, $brci);
+ }
+ }
+
+ return $ds
+}
+
+"Just another true value";