File Coverage

blib/lib/GD/Graph/points.pm
Criterion Covered Total %
statement 4 6 66.6
branch n/a
condition n/a
subroutine 2 2 100.0
pod n/a
total 6 8 75.0


line stmt bran cond sub pod time code
1             #==========================================================================
2             # Copyright (c) 1995-1998 Martien Verbruggen
3             #--------------------------------------------------------------------------
4             #
5             # Name:
6             # GD::Graph::points.pm
7             #
8             # $Id: points.pm,v 1.13 2005/12/14 04:13:32 ben Exp $
9             #
10             #==========================================================================
11              
12             package GD::Graph::points;
13              
14             ($GD::Graph::points::VERSION) = '$Revision: 1.13 $' =~ /\s([\d.]+)/;
15              
16 1     1   5 use strict;
  1         2  
  1         33  
17            
18 1     1   59 use GD::Graph::axestype;
  0            
  0            
19             use GD::Graph::utils qw(:all);
20              
21             @GD::Graph::points::ISA = qw( GD::Graph::axestype );
22              
23             # PRIVATE
24             sub draw_data_set
25             {
26             my $self = shift;
27             my $ds = shift;
28              
29             my @values = $self->{_data}->y_values($ds) or
30             return $self->_set_error("Impossible illegal data set: $ds",
31             $self->{_data}->error);
32              
33             # Pick a colour
34             my $dsci = $self->set_clr($self->pick_data_clr($ds));
35             my $type = $self->pick_marker($ds);
36              
37             for (my $i = 0; $i < @values; $i++)
38             {
39             next unless defined $values[$i];
40             my ($xp, $yp);
41             if (defined($self->{x_min_value}) && defined($self->{x_max_value}))
42             {
43             ($xp, $yp) = $self->val_to_pixel(
44             $self->{_data}->get_x($i), $values[$i], $ds);
45             }
46             else
47             {
48             ($xp, $yp) = $self->val_to_pixel($i+1, $values[$i], $ds);
49             }
50             $self->marker($xp, $yp, $type, $dsci );
51             $self->{_hotspots}->[$ds]->[$i] =
52             ['rect', $self->marker_coordinates($xp, $yp)];
53             }
54              
55             return $ds;
56             }
57              
58             # Pick a marker type
59              
60             sub pick_marker # number
61             {
62             my $self = shift;
63             my $num = shift;
64              
65             ref $self->{markers} ?
66             $self->{markers}[ $num % (1 + $#{$self->{markers}}) - 1 ] :
67             ($num % 8) || 8;
68             }
69              
70             # Draw a marker
71              
72             sub marker_coordinates
73             {
74             my $self = shift;
75             my ($xp, $yp) = @_;
76             return (
77             $xp - $self->{marker_size},
78             $xp + $self->{marker_size},
79             $yp + $self->{marker_size},
80             $yp - $self->{marker_size},
81             );
82             }
83              
84             sub marker # $xp, $yp, $type, $colourindex
85             {
86             my $self = shift;
87             my ($xp, $yp, $mtype, $mclr) = @_;
88             return unless defined $mclr;
89              
90             my ($l, $r, $b, $t) = $self->marker_coordinates($xp, $yp);
91              
92             MARKER: {
93              
94             ($mtype == 1) && do
95             { # Square, filled
96             $self->{graph}->filledRectangle($l, $t, $r, $b, $mclr);
97             last MARKER;
98             };
99             ($mtype == 2) && do
100             { # Square, open
101             $self->{graph}->rectangle($l, $t, $r, $b, $mclr);
102             last MARKER;
103             };
104             ($mtype == 3) && do
105             { # Cross, horizontal
106             $self->{graph}->line($l, $yp, $r, $yp, $mclr);
107             $self->{graph}->line($xp, $t, $xp, $b, $mclr);
108             last MARKER;
109             };
110             ($mtype == 4) && do
111             { # Cross, diagonal
112             $self->{graph}->line($l, $b, $r, $t, $mclr);
113             $self->{graph}->line($l, $t, $r, $b, $mclr);
114             last MARKER;
115             };
116             ($mtype == 5) && do
117             { # Diamond, filled
118             $self->{graph}->line($l, $yp, $xp, $t, $mclr);
119             $self->{graph}->line($xp, $t, $r, $yp, $mclr);
120             $self->{graph}->line($r, $yp, $xp, $b, $mclr);
121             $self->{graph}->line($xp, $b, $l, $yp, $mclr);
122             $self->{graph}->fillToBorder($xp, $yp, $mclr, $mclr);
123             last MARKER;
124             };
125             ($mtype == 6) && do
126             { # Diamond, open
127             $self->{graph}->line($l, $yp, $xp, $t, $mclr);
128             $self->{graph}->line($xp, $t, $r, $yp, $mclr);
129             $self->{graph}->line($r, $yp, $xp, $b, $mclr);
130             $self->{graph}->line($xp, $b, $l, $yp, $mclr);
131             last MARKER;
132             };
133             ($mtype == 7) && do
134             { # Circle, filled
135             $self->{graph}->arc($xp, $yp, 2 * $self->{marker_size},
136             2 * $self->{marker_size}, 0, 360, $mclr);
137             $self->{graph}->fillToBorder($xp, $yp, $mclr, $mclr);
138             last MARKER;
139             };
140             ($mtype == 8) && do
141             { # Circle, open
142             $self->{graph}->arc($xp, $yp, 2 * $self->{marker_size},
143             2 * $self->{marker_size}, 0, 360, $mclr);
144             last MARKER;
145             };
146             ($mtype == 9) && do
147             { # Horizontal line
148             $self->{graph}->line($l, $yp, $r, $yp, $mclr);
149             last MARKER;
150             };
151             ($mtype == 10) && do
152             { # vertical line
153             $self->{graph}->line($xp, $t, $xp, $b, $mclr);
154             last MARKER;
155             };
156             }
157             }
158              
159             sub draw_legend_marker
160             {
161             my $self = shift;
162             my $n = shift;
163             my $x = shift;
164             my $y = shift;
165              
166             my $ci = $self->set_clr($self->pick_data_clr($n));
167              
168             my $old_ms = $self->{marker_size};
169             my $ms = _min($self->{legend_marker_height}, $self->{legend_marker_width});
170              
171             ($self->{marker_size} > $ms/2) and $self->{marker_size} = $ms/2;
172            
173             $x += int($self->{legend_marker_width}/2);
174             $y += int($self->{lg_el_height}/2);
175              
176             $n = $self->pick_marker($n);
177              
178             $self->marker($x, $y, $n, $ci);
179              
180             $self->{marker_size} = $old_ms;
181             }
182              
183             "Just another true value";