package Pastel
::LinearGradient
;
@ISA = qw(Pastel::GradientI Pastel::Mixin::Mixin);
sub _id
{ return $id++ ; }
use constant USER_SPACE
=> "userSpaceOnUse";
use constant BOUNDING_BOX
=> "objectBoundingBox";
use constant PAD
=> "pad";
use constant REFLECT
=> "reflect";
use constant REPEAT
=> "repeat";
use constant RADIAL
=> "radial";
use constant LINEAR
=> "linear";
# Perl module for linear Gradientpaint
# Cared for by Malay<curiouser@ccmb.ap.nic.in>
# Copyright 2001, Malay Kumar Basu
# You may distribute this module under the same terms as perl itself
In SVG there are two different types of GradientPaint that you can use.
"Linear" and "Circular". Both of these are represented in Pastel by separate
modules. Pastel::LinearGradient represent a Gradient paint in liear mode. The
Gradient goes from one color to the next from one point to another on the
vector from the first point to the second.
=head3 Pastel::LinearGradient()
=head3 Pastel::LinearGradient(-color1=>$color1, -color2=>$color2)
=head3 Pastel::LinearGradient(-point1=>$point1, -color1=>$color1, -point2=>$point2, -color2=>$color2)
=head3 Pastel::LinearGradient(-point1=>$point1, -color1=>$color1, -point2=>$point2, -color2=>$color2, -method=>Pastel::LinearGradient::PAD/REFLECT/REPEAT, -units=>Pastel::LinearGradient::USER_SPACE/BOUNDING_BOX)
=head3 Pastel::LinearGradient(-point1=>$point1, -color1=>$color1, -point2=>$point2, -color2=>$color2, -method=>Pastel::LinearGradient::PAD/REFLECT/REPEAT)
bless $self, ref($class) || $class;
my($p1, $c1, $p2, $c2, $m, $u)=$self->_rearrange(["POINT1",
if ( defined($p1) ){ $self->{p1
} = $p1; }
if ( defined($p2) ){ $self->{p2
} = $p2; }
if ( defined($c1) ){ $self->{c1
} = $c1; }
if ( defined($c2) ){ $self->{c2
} = $c2; }
if ( defined($m) ) { $self->{method
} = $m; }
if (defined ($u) ) { $self->{units
} = $u; }
$self->{id
} = "LinearGradient". $self->_get_id();
if( defined($self->{c1
}) && defined($self->{c2
})){
my $stop1 = Pastel
::GradientStop
->new(0, $c1);
my $stop2 = Pastel
::GradientStop
->new(100, $c2);
return (defined($self->{p1
}))?
$self->{p1
}: undef;
return (defined($self->{p2
}))?
$self->{p2
}: undef;
return (defined($self->{method
}))?
$self->{method
}: undef;
return (defined($self->{units
}))?
$self->{units
}: undef;
my $s = '<linearGradient id="'.$self->get_id().'" ';
if ( defined( $self->{p1
} )){
$s .= 'x1="'.$self->get_point1()->get_x().'" ';
$s .= 'y1="'.$self->get_point1()->get_y().'" ';
if (defined($self->{p2
})){
$s.= 'x2="'.$self->get_point2()->get_x().'" ';
$s.= 'y2="'.$self->get_point2()->get_y().'" ';
if (defined($self->{method
})){
$s .= 'spreadMethod="'.$self->get_method().'" ';
if (defined($self->{units
})){
$s .= 'gradientUnits="'.$self->get_units().'" ';
if(@
{$self->{stops
}} > 0){
for( my $i = 0; $i < @
{$self->{stops
}}; $i++){
$s .= ${$self->{stops
}}[$i]->to_svg();
$s .= '</linearGradient>';
return '#'.$self->get_id();