package PDF::FromHTML::Template::Element::Line;
use strict;
BEGIN {
use vars qw(@ISA);
@ISA = qw(PDF::FromHTML::Template::Element);
use PDF::FromHTML::Template::Element;
}
sub render
{
my $self = shift;
my ($context) = @_;
return 0 unless $self->should_render($context);
return 1 if $context->{CALC_LAST_PAGE};
my $p = $context->{PDF};
$p->save_state;
$self->set_color($context, 'COLOR', 'both');
my $vals = $self->make_vals($context);
my $width = $context->get($self, 'WIDTH') || 1;
$p->linewidth($width);
$p->move($vals->{X1}, $vals->{Y1});
$p->line($vals->{X2}, $vals->{Y2});
$p->stroke;
$p->restore_state;
return 1;
}
sub make_vals
{
my $self = shift;
my ($context) = @_;
my ($x1, $x2, $y1, $y2) = map { $context->get($self, $_) } qw(X1 X2 Y1 Y2);
my %vals;
unless (defined $x1 && defined $x2)
{
#GGG Is the use of W a potential bug here?
my ($pw, $left, $right, $w) = map {
$context->get($self, $_)
} qw( PAGE_WIDTH LEFT_MARGIN RIGHT_MARGIN W );
$w = $pw - $right - $left unless defined $w;
if (defined $x1)
{
$x2 = $x1 + $w;
$x2 = $right if $x2 > $right;
}
elsif (defined $x2)
{
$x1 = $x2 - $w;
$x1 = $left if $x1 < $left;
}
else
{
$x1 = $left;
$x2 = $x1 + $w;
}
}
@vals{qw(X1 X2)} = ($x1, $x2);
unless (defined $y1 && defined $y2)
{
if (defined $y1)
{
$y2 = $y1;
}
elsif (defined $y2)
{
$y1 = $y2;
}
else
{
$y1 = $y2 = $context->get($self, 'Y');
}
}
@vals{qw(Y1 Y2)} = ($y1, $y2);
$self->{VALS} = \%vals;
return \%vals;
}
1;
__END__
=head1 NAME
PDF::FromHTML::Template::Element::Line
=head1 PURPOSE
To draw lines
=head1 NODE NAME
LINE
=head1 INHERITANCE
PDF::FromHTML::Template::Element
=head1 ATTRIBUTES
=over 4
=item * X1 / X2 / Y1 / Y2
The line is drawn from (X1,Y1) to (X2,Y2).
If neither X1 nor X2 are set, X1 is set to the lefthand margin and X2 is set
to X1 + W. If only one is set, the other is set to the first +/- W.
If either of the Y values is not set, it is set to the current Y value.
=item * W
This is the width of the line to be drawn. Used only in calculating X1/X2/Y1/Y2
and only if needed. (q.v. above) Defaults to the distance between the left and
right margins. (q.v. PAGEDEF for more information on these parameters.)
=item * WIDTH
This is the thickness of the line to be drawn. Defaults to 1 pixel.
=item * COLOR
This is the color to draw the line in. Defaults to black.
=back
=head1 CHILDREN
PDF::FromHTML::Template::Element::HorizontalRule
=head1 AFFECTS
Nothing
=head1 DEPENDENCIES
None
=head1 USAGE
This will draw a blue line 3 pixels thick from the spot 1" in from the left and
top to the spot 3" from the left and 2" from the top.
=head1 AUTHOR
Rob Kinyon (rkinyon@columbus.rr.com)
=head1 SEE ALSO
PAGEDEF, HR
=cut